TL;DR
- 你这套自动化是 3 个岗位分工,不冲突:
1. 02-hourly-ads(Google Ads Script)= 每小时快照 + 小时飞书
2. 01-minutes-ads(Apps Script)= 每分钟盯 02 的新快照变化 + 分钟飞书
3. 03-daily-ads(Google Ads Script)= 每天全量诊断 + 日报飞书
- 这不是“实时点击流”,是“快照差分告警”。
- 不需要 Ads API key,但必须有脚本授权 + 飞书 webhook + 表格写权限。
- 你现在卡住的点本质是“入口混淆 + 粘贴混乱”:不是逻辑问题。
已绑定三张表(固定)
- 01-minutes-ads: https://docs.google.com/spreadsheets/d/1IRVoni0t8VQc2u9G35ajuC28vRyCBiJ3wYULpnipDwI/edit
- 02-hourly-ads: https://docs.google.com/spreadsheets/d/1ak5fsF8J4kZYh_IQdTrMI0Goeus9ToV6j9kd8xJ_suI/edit
- 03-daily-ads: https://docs.google.com/spreadsheets/d/1-e-xppqbrDcuInoMHcUzsCOiJJdwaUq8jnAGUP2Hnd0/edit
平台关系(按你截图理解)
- ads.google.com 的 Scripts 页面:管理 02/03(Google Ads Scripts),负责小时/每天调度。
- script.google.com 的 Apps Script 页面:管理 01(每分钟触发器)。
- 结论:是两个入口,不要混用。02/03 在 Ads 后台看;01 在 Apps Script 看。
- 如果你在 Ads 脚本列表里也建了 01-minutes-ads:建议 Disable,避免后续混淆和重复运行。
- 你在 Ads 后台如果切到 `Script history` 标签,会看不到 Frequency 列;必须切回 `Scripts` 标签。
按你截图设置 Frequency(重点)
- 先确认你当前在 `Scripts` 标签,不是 `Script history`。
- 你截图里 Frequency 列已经在表格中间,显示为 "-",旁边有一个小铅笔。
- 这个铅笔才是“设置调度”入口,不是右侧 Options 菜单。
- 正确操作:
1. 在 02-hourly-ads 这一行,点 Frequency 列里的铅笔(或点 "-")。
2. 选择 Hourly,保存。
3. 在 03-daily-ads 这一行,点 Frequency 列里的铅笔(或点 "-")。
4. 选择 Daily,时间设 03:20(本地时区),保存。
- 你截图 [Image #2] 打开的 Options 里只有 Run/Edit/Duplicate/Disable,这里不设置 Frequency。
SOP(严格顺序,按这个做)
1. 先准备飞书机器人 webhook(可选 token),记录两项:
- RAC_FEISHU_WEBHOOK_URL
- RAC_FEISHU_TOKEN(可选)
- 可用统一初始化脚本:set-feishu-token.txt
- 说明:要在 01/02/03 三个脚本项目里各跑一次 setupFeishuSecrets()(每个项目的 Script Properties 独立)
2. 部署 02(Google Ads Scripts)
- 新建脚本,粘贴:02_hourly-lite_google-ads-script.txt
- 粘贴校验:第一行必须是 `const CONFIG = {`,不能是 `function main() {const CONFIG = {`
- 首次手动运行 main() 完成授权
- 飞书密钥写入(二选一):
- 方式 A:Project Settings -> Script properties 手动填 RAC_FEISHU_WEBHOOK_URL / RAC_FEISHU_TOKEN
- 方式 B:从 set-feishu-token.txt 复制 setupFeishuSecrets() 并运行一次
- 安排计划:Hourly(建议每小时第 5 分钟跑)
3. 部署 03(Google Ads Scripts)
- 新建脚本,粘贴:03_daily-full_google-ads-script.txt
- 粘贴校验:第一行必须是 `const CONFIG = {`,不能是 `function main() {const CONFIG = {`
- 首次手动运行 main() 完成授权
- 飞书密钥写入(二选一):
- 方式 A:Project Settings -> Script properties 手动填 RAC_FEISHU_WEBHOOK_URL / RAC_FEISHU_TOKEN
- 方式 B:从 set-feishu-token.txt 复制 setupFeishuSecrets() 并运行一次
- 安排计划:Daily(建议 03:20,本地时区)
4. 部署 01(Google Apps Script)
- 新建项目,粘贴:01_every-minute-feishu-monitor_apps-script.txt
- 粘贴校验:第一行必须是 `const MINUTE_MONITOR_CONFIG = {`
- 不要把 01/02/03 三份代码粘到同一个脚本项目里
- 飞书密钥写入(二选一):
- 方式 A:Project Settings -> Script properties 手动填 RAC_FEISHU_WEBHOOK_URL / RAC_FEISHU_TOKEN
- 方式 B:从 set-feishu-token.txt 复制 setupFeishuSecrets() 并运行一次
- 手动先跑:initializeMinuteMonitorBaseline()
- 手动再跑:installMinuteTrigger()(每分钟触发)
5. 可选部署 04(Google Apps Script)
- 仅当你需要“自动导出 xlsx/csv 到 Drive”才部署
- 粘贴:04_sheets-auto-export_apps-script.txt
- 配置:SPREADSHEET_URL、DRIVE_FOLDER_ID(可选)
- 手动跑:installHourlyExportTrigger()
Checking List(上线检查清单)
1. 02 手动跑后,02-hourly-ads 里有这些关键页:
- 90_LITE_SUMMARY
- L20_keyword_country_today
- 00_STATUS_LITE
2. 01 baseline 后,01-minutes-ads 里有并持续更新:
- 99_MM_CLICK_STATE
3. 飞书是否都能收到:
- 分钟变化通知(来自 01)
- 小时汇总(来自 02)
- 日汇总(来自 03)
4. Ads 执行历史是否健康:
- 02 通常 3-8 分钟完成
- 03 不超时(30 分钟内)
- “Finished with no changes” 可接受(表示没有广告实体改动,不代表没跑)
5. 如果用了 04:
- Drive 里是否按小时生成 xlsx/csv 文件
Cheatsheet(速记)
- 这套方案的本质:
- 02 生产数据快照
- 01 读快照做“变化告警”
- 03 做日级全量体检
- 为什么有“分钟/小时/日”三层通知还不冲突:
- 分钟层看“有无变化”
- 小时层看“当前汇总”
- 日层看“全量诊断”
- 飞书密钥快速配置:
- 用 set-feishu-token.txt 最省事
- 但要在 01/02/03 三个项目里分别执行,不能只跑一次
- 不建议把 webhook/token 明文写进业务脚本(可临时调试,长期应放 Script Properties)
- 额度卡(大白话):
- 01 用 Apps Script 的额度卡
- 02/03 用 Google Ads Scripts 的额度卡
- 两张卡分开算,不是三者简单相加
- Apps Script 关键配额(官方常见值,可能变更):
- Triggers total runtime:90 min/day(个人)或 6 hr/day(Workspace)
- URL Fetch calls:20,000/day(个人)或 100,000/day(Workspace)
- Script runtime:6 min/execution
- Google Ads Scripts:
- 单次执行上限通常 30 分钟
- 快速估算 01 会不会超额:
- 每分钟一次 = 1440 次/天
- 个人号要稳:平均每次 < 3.75 秒
- Workspace 要稳:平均每次 < 15 秒
- 如果 01 经常超额:
- 把 everyMinutes(1) 改成 everyMinutes(5)
- 或减少消息频率(提高 HEARTBEAT_EVERY_MINUTES)
5分钟故障排查速查表(先看这个)
1. 现象:没有分钟飞书
- 先查:Apps Script 执行历史里 minuteHeartbeat 是否在跑
- 再查:Script properties 是否有 webhook
- 再查:02 表里 90_LITE_SUMMARY/L20 是否有更新
- 处理:重跑 initializeMinuteMonitorBaseline(),再 installMinuteTrigger()
2. 现象:只有分钟消息,没有小时/日消息
- 先查:Google Ads Scripts 的 02/03 是否有 schedule
- 先查:你是否点了 Frequency 列铅笔,而不是 Options 菜单
- 再查:02/03 各自 Script properties 是否填了 webhook
- 处理:手动跑 main() 看报错,修后再开自动
3. 现象:消息重复/刷屏
- 先查:是否装了重复触发器
- 处理:先 clearMinuteTriggers() 再 installMinuteTrigger()
- 处理:提高 HEARTBEAT_EVERY_MINUTES(如 30 -> 60)
4. 现象:03 跑很慢或超时
- 先查:执行日志卡在什么 tab
- 处理:将 03 改成每天 1 次并放在凌晨
- 处理:必要时拆分 full 脚本(分两份日跑)
5. 现象:01 报 summary missing 或读不到数据
- 原因:01 读的是 02-hourly-ads,不是 01-minutes-ads
- 处理:确认 01 文件里的 SOURCE_SPREADSHEET_URL 指向 02-hourly-ads
6. 现象:飞书 webhook 明明配置了但没消息
- 先查:webhook 是否被机器人安全策略拦截
- 先查:是否需要 token 且 token 填错
- 处理:用最小测试函数 sendFeishuText('ping') 验证
- 处理:用 set-feishu-token.txt 里的 checkFeishuSecrets() 检查当前项目是否真的写入了属性
7. 现象:配额超限
- Apps Script 常见报错:Service invoked too many times / Exceeded maximum execution time
- 处理:把分钟改 5 分钟;减少 UrlFetch;降低不必要导出频率
8. 现象:执行显示 Finished with no changes,但 02-hourly-ads 表还是空白
- 先查:02 脚本里的 SPREADSHEET_URL 是否就是 1ak5fsF8J4kZYh_IQdTrMI0Goeus9ToV6j9kd8xJ_suI
- 先查:代码是否被错误包裹(例如开头 `function main() {const CONFIG = {`)
- 先查:是否把 ANSI 控制字符/乱码复制进代码(常见于从彩色终端复制)
- 处理:从本地 txt 原文件重新全量覆盖粘贴一次,再运行 main()
9. 现象:Error: script has no \"main\" function
- 原因:你在 Google Ads 脚本(02/03)里贴了 01 的代码,或 main 被删了
- 规则:Ads 脚本项目必须有 `function main() { ... }` 作为入口
- 处理:
1. 02-hourly-ads 重新粘贴 02_hourly-lite_google-ads-script.txt(此文件自带 main)
2. 03-daily-ads 重新粘贴 03_daily-full_google-ads-script.txt(此文件自带 main)
3. 01_every-minute-feishu-monitor_apps-script.txt 只放在 script.google.com(它不需要 main)
04 / 05 文件用途与保留建议
- 04_sheets-auto-export_apps-script.txt 是“导出器”
- 作用:把表格按小时导出到 Drive(xlsx/csv)并可发飞书导出链接
- 适用:你需要备份、审计、给他人看静态文件时
- 不适用:你只关心飞书提醒,不关心文件归档
- 结论:可选保留,默认不必上线
- 05_classic-patterns-and-pitfalls.txt 是“经验手册”
- 作用:记录调度策略、超时防护、常见误区
- 不参与执行,不影响性能
- 结论:建议保留(运维手册价值高)
CHECKING LIST(每日巡检,2分钟)
1. 看 02 最近一小时是否 FINISHED
2. 看 03 最近一天是否 FINISHED
3. 看 01 最近 30 分钟是否有心跳或变化消息
4. 看飞书机器人是否有报错或沉默
5. 看三张表是否仍可写入(无权限报错)
备注
- 这套系统是“自动化快照监控”,不是原始点击实时流。
- Google Ads 数据有延迟,分钟告警是“尽快接近实时”,不是“每次点击立即推送”。
官方文档(联网核验)
- Google Ads 脚本调度(Frequency 列 hover 后点铅笔):https://support.google.com/google-ads/answer/188712?hl=en
- Apps Script 触发器 everyMinutes(n):https://developers.google.com/apps-script/reference/script/clock-trigger-builder
- Apps Script 配额(runtime / UrlFetch / triggers):https://developers.google.com/apps-script/guides/services/quotas
- Google Ads Scripts 限制(执行时长等):https://developers.google.com/google-ads/scripts/docs/limits
- Script Properties 使用说明:https://developers.google.com/apps-script/guides/properties
本文档为站内渲染。原始文件本地路径:saas/source/ads/广告-ads-data-script-00_setup-checklist-74ba11.txt(仅本地保留,不入库不部署)