/api/public/cloud-pc-status。
/api/cron/second-touch-monitor,节奏 0 0,8,16 * * *(UTC)= 北京 08:00 / 16:00 / 24:00。每次汇报前 8h 窗口。second_touch_state.last_touch_at)/ 今日·24h 计数 / 队列 pending·claimed / 窗口内 failed·skipped。只读,不改库、不发抖音。LARK_WEBHOOK_AKKE_SECOND_TOUCH_MONITOR,绕开应用 API 配额)发出。任一查询读失败 → 卡上声明「本轮未判全」,不冒充健康。wuying-agent-watchdog。
| 情况 | 级别 | 判定逻辑 |
|---|---|---|
| 号不可发(被禁/冷却) | 🔴 告警 | 账号 status ≠ active |
| 没开自驱 | 🟠 告警 | channel_pref ≠ cloud_pc(不会自动派二触) |
| 有料没发 · 停摆 | 🟠 告警 | 队列有 pending/claimed,但全局 last_touch_at > 3h 没动(仅活跃窗口) |
| 失败堆积 | 🟠 告警 | 窗口内 failed + skipped ≥ 5 条(误身份门 / no_works / 跳验证的 DB 投影) |
| 活跃时段 0 触达 | 🟠 告警 | 成功 = 0 且队列有候选在途 且号正常(仅活跃窗口) |
| 没料可发(池子空) | 不报 | 队列空(backlog=0)→ 成功 0 但不是故障,绿卡 |
| 到日限 / 节奏限速 | 不报 | 正常完成 / 正常限速,不是故障 |
| e2e 时效拉长 | 不报 | 只在卡上列数字,不当异常 |
wuying-agent-watchdog(每 5min)已经管「agent 崩死 / 卡 claimed」的实时告警,推云电脑监控群。本卡不重复造,只补它没覆盖、且值得进 8h 视野的健康面,所以异常最多延迟 8h——它是脉搏不是传呼。
mark_second_touch(touched) → 写 second_touch_state:
last_touch_at 推进、touch_count++、记 last_e2e_minutes(视频发布→触达的分钟数)。
second_touch_state 当成功口径:
它是自动队列回写和手动 mark-second-touch 收尾两条路径的唯一汇合点(都过同一个 RPC)。盯它 = 两条路都不漏。
| 问题 | 回答 |
|---|---|
| 能直接看到验证弹窗吗? | 不能 监控在服务端只读 DB,看不到无影屏;抖音跳验证不往库写「captcha」标记。 |
| 能间接发现吗? | 能 验证挡住发送 → 单子卡 claimed / 窗口内冒一批 failed·skipped → 停摆 / 失败堆积规则命中;agent 真崩 wuying-agent-watchdog 5min 内先报。 |
| 本卡能精确说是跳验证吗? | 不能精确分 只会报「停摆 / 失败堆积」,跳验证是其中一种可能,需人去无影确认。 |
SECOND_TOUCH_MONITOR_ACCOUNT_ID;要多号一起监控,把路由改成遍历 getCloudPcAccounts() 每号一张卡。
0 0,8,16 * * *
🔍 路由:src/app/api/cron/second-touch-monitor/route.ts
🃏 卡片:notifySecondTouchMonitor(larkAlert.ts)
📤 投递:云电脑潜在触达监控 webhook
📖 runbook:docs/runbooks/second-touch-monitor.md
| 操作 | 命令 |
|---|---|
| 手动触发看一张真卡 | curl -H "Authorization: Bearer $CRON_SECRET" https://akke.vercel.app/api/cron/second-touch-monitor |
| 本地只读 dry-run(不推 Lark) | pnpm tsx scripts/_dryrun-second-touch-monitor.ts |
| 改阈值 / 监控号 / 群 | Vercel env:SECOND_TOUCH_MONITOR_ACCOUNT_ID / _STALL_HOURS / _FAIL_THRESHOLD / SECOND_TOUCH_DAILY_CAP |