外呼日报技能 · 流程

outbound-call-analysis v1.50 | 一条主链:清过期 → 取数 → 分析 → 出两版 → 发链接 → 写一列 → 两路推送

① 读配置 + 先清过期链接
读 Grist「我的MCP」跑监测批次.py只处理状态=持续监测 的行;每行给 MCP 凭证(可多段 json)、开场白秒数、webhook 地址、是否启用推送 webhook
清掉 30 天前的链接发布_Cloudflare.py --prune每次跑批必做:过期页从站点摘掉后重发一次才算真失效,项目空了就删项目;失败会明确喊出来
▼
② 取数 平台 MCP
计数探测call_records先看当日条数,不吃导出配额;为 0 走「今日无外呼任务」
配额优先一次导完导平台表.py≤1 万条 1 次搞定;超了按条数均分切时间、取最少段;导完拿行数与平台总量对账,被裁尾巴就告警
撞配额自动换凭证每把凭证每天 10 次;QuotaError/CredError 触发换下一把,全失败才退回已拿到的部分结果
▼
③ 分析 统计 → 结论草稿 → 人工复核
读表标准化读通话记录.py列别名、接通判定、失败归类、AI 代接、按轮次的听不清信号
聚合与出结论出分析.py表里有几天就出几套范围;按日聚合、配色阈值、下钻键
复核复核助手.py只读、不写文件;改完标 reviewed,页面「脚本草稿」标记才消失
▼
④ 出报告 同一天两份,口径同一套
内部完整版出报告.py号码/公司/转写全留、可导出、可下钻。不进公网链接,只走群文件与本机留存
对外脱敏版出报告.py --public号码遮中间(按长度分档)、姓名只留姓、公司留前两字;平台链接与录音清空;剥掉模板注释;导出按钮不生成+下载硬闸门
▼
⑤ 发布成链接 Cloudflare Pages 优先
一家一个项目,按日期攒文件oca-c-xxxx/2026-10-25.html所以每天都是新链接、不覆盖旧的;发完回读正式域名验 200(预览域名带 8 位哈希前缀,本机 TLS 会告警,不能当交付链接)
两道硬闸门只准发带脱敏标记的文件;页内若还有非 pages.dev 的域名直接拒发——防止哪天遮罩规则被改松就把没遮干净的页面发上公网
备选发布器--publisher / publisher外部程序契约:收「文件+公司+日期」,回 {"url":…} 或裸链接。Cloudflare 发不出才用它
▼
⑥ 回写 Grist 每天只新增一列
列名就是日期2026-10-25格内第一行「分析链接:…」,下面接本次结论;不再建附件列、不再传 xlsx/HTML
本机留档跑批目录存 通话记录/表格/两版报告/结论/跑批摘要,也是后续多日趋势的历史源
⑦ 推送 两条分岔,默认都不发
这家的群推企微.py需同时满足:开关=推送 webhook + 地址已填 + 该家走到「已回传」。发结论摘要+原始 HTML+本次表格;超 20MB 自动降级成「请到后台下载」而不是整单失败
技能自己--push-hook / QY_WEBHOOK只发本次总览:一家一行(状态/呼出接通/缺不缺数/可能问题/链接),不带文件
一律不发--no-push、--dry、开关没开、地址没填、没走到回传
另一条入口 人工即时分析
给一份表(可跨多天)→ 直接进 ③④ 照样读表里的 MCP 凭证与开场白秒数 不写表、不推送,只落单文件 HTML
质量闸(贯穿全程)
自检环境.py 跑批前查 Grist·名单·凭证 出报告.py 四道内建闸:语法·模板版本·下钻键·口径对账 页面 __verify() 逐范围实时重算比对 打包.py 凭据扫描·版本三处对齐·py_compile
点开的数字必须等于脚本算出来的数字——这条对账不过就不出报告。
本页不含任何业务数据;技能包只本人使用,其中两份凭据(Grist key、Cloudflare token)为有意随包分发,打包时会明确告警提示。