📌 当前版本 v1.27.0|历史变更(40 条版本注记)已外置到同目录 CHANGELOG.md,本文件只写生效规则。改动时请同步 CHANGELOG.md。
媒介策略·串联版(flow-media-manager)
全链路投放工作流的第②环节【媒介经理】。上游是 ad-demand-helper-pro 的《需求立项单》(对话栏文字)+《投放可行性评估清单》(HTML 文件),下游是 ai投手(flow-ai-shooter) 与 素材助手(flow-material)。
输入(读上游)
读 ad-demand-helper-pro 的 2 份产出:
输入 1:需求立项单(从对话上下文读立项单完整文字,v1.27.0 起)
⭐ v1.27.0 数据源回切:ad-demand-helper-pro v2.32.0 起不再灌入金手指(需求单阶段零 MCP 调用),因此没有 session 可拉——立项单完整文字重新成为唯一权威源,从对话上下文逐字段读取。
⚠️ 不要再 GET /api/mcp/session/{sid} 取 demand.groups(v1.25.5~v1.26.x 的做法作废,那个 session 不存在了);也不要 Read 立项单文件(不存在,它只是对话栏文字)。
⭐ 这些字段值有两个用途:① 做策略;② 灌入时拼成 demand.groups 一并传给金手指——v1.27.0 起灌入合并为一次,demand 需求单字段与 Part 2/3/4 策略字段在同一次 open_config 里全量灌入(原"提需先灌一次、策略再灌一次"作废)。所以取值时必须完整记住每个字段。
按立项单分区逐字段取值(对话栏文字里的字段名 → 内部字段语义):
- 基础信息:
offerId(产品名称)/ demand_offer_intro(产品简介)/ requestTitle(标题行)
- 预算与测试目标:
demand_test_goal(测试目标)/ demand_kpi(考核指标,大白话)/ demand_budget_limit(总预算)/ demand_budget_cycle(投放周期)/ demand_launch_date(上线时间)
- 人群策略:
demand_audience_logic(客户类型/人群逻辑)/ demand_core_ta(核心人群)
- 素材与承接:
demand_has_material(现有素材)/ demand_carrier(转化载体,v2.22.0 起 og 载体槽位)/ demand_product_channel(商品渠道,v2.22.0 条件题)/ demand_dev_resource(开发资源)
- 其他:
demand_compliance(合规要求)/ demand_history(历史投放经验)/ demand_selling_points(核心卖点)
⚠️ 立项单里没出现的字段就是没问到(如预算来源、结束时间、落地页链接、渠道版位、人群数量):按缺失处理,不阻塞,该由策略环节测算填充的就自己算。
⚠️ KPI 是大白话(如"品牌声量优先;单客获客成本不超过 100 元"):AI 解析出策略方向(声量优先 → CPM/广覆盖)+ 成本上限(100 元 → oCPM 出价区间)。
输入 2:投放可行性评估清单 HTML 文件(3 段)
- 段 A 广告主类型:推导画像(如"中小广告主·新手·To C·虚拟商品服务")→ 影响策略激进程度
- 段 B 可行性评估:6 维度(预算充分性/素材准备/合规风险/落地页承接/测试周期/KPI可达性)的 ✅/⚠️/❌ 状态
- 段 C 优化建议:用户需要补什么
⭐ 策略针对性(v1.2 起):
- ⚠️ 项 → 段 A 字段里标注风险与建议(段C 已废,标注全部由段A 负责)
- ❌ 项 → 段 A 字段里标注"必须补齐才能投放"+ 具体补齐指引(融入字段值,不要单独开 alert 块)
- 如"素材都没准备 ❌" → 段 B 标注"需先补产品图/视频素材",具体指引融在段 B 的"成品规格"或"品牌资产透传"字段里
路径判定(参考可行性评估"历史经验")
- 从没投过 / 无在投账户 → 走「基建路径」,参考
ai-analysis-expert-newproject 五维基建
- 投过没达预期 / 不错想扩量 / 正在投想优化 → 走「诊断路径」,参考
ai-analysis-expert-diagnose
投放方式判定(试跑发现的关键约束)⭐
- 用户指定了版位(如"只投朋友圈+视频号""排除公众号"等强约束)→ 走标准投放(
tencentads-delivery-standard-create),可手动指定版位
- 用户未指定版位 / 接受智能择优 → 走智投 AIM+(
tencentads-delivery-smart-create),版位系统智能择优
⚠️ 原因:智投(AIM+)版位是系统智能择优,不可手动指定"只投某版位/排除某版位"。若立项单有版位强约束却走智投,建单后版位不可控。
此判定结果写入段A「投放方式」字段,ai投手据此选调哪个建单 skill。
转化归因前置条件(试跑发现的关键约束)⭐:
建单时 conversion_id 必须带链路信息,否则报 1801106。账户需先在腾讯广告后台配置转化归因链路。
若用户账户未配置,媒介经理应在段A末尾提醒,并给出以下指引(来源:WebSearch 联网查腾讯广告官方文档):
- 开通权限:联系行业运营,提供 UID/MDMID 申请开通「营销链路」权限
- 新建转化:投放管理平台 →【资产】→【数据营销】→【转化归因】→ 新建转化
- 小程序:填 AppID(gh_开头) → 选优化目标 → 选营销链路 → 勾选上报节点
- H5网页:填落地页URL → 获取JS密钥嵌入 → 选优化目标 → 选营销链路 → 勾选上报节点
- 联调激活:进入「转化联调」→ 上报行为数据 → 激活
- 建广告时选新的带链路的 conversion_id
品牌形象组件前置条件(试跑发现的关键约束)⭐:
建创意时 brand 组件是模板必填项(缺则报"模板必填组件缺失: brand"),需在腾讯广告后台预先配置新版品牌形象(旧版报1800355"must use new version brand",全场景强制新版)。
若用户账户未配置,媒介经理应在段A末尾提醒,并给出以下指引:
- 入口:投放管理平台 →【资产】→【创意资产管理】→【品牌形象】
- 新建新版品牌形象:
- 上传品牌 logo 图(512×512像素,新版统一标准)
- 填写 brand_name(2~12个字,如"某某优选")
- 保存后在创意中用 component_id 引用(数字类型,如
{"component_id": 1940737385209})
- ⚠️ 旧版品牌形象(200×200/80×80/300×300等规格)已不可用,全场景报1800355,必须新建新版
- 查账户已有品牌组件:
get-components.mjs '{"account_id":"<ID>","component_type":"BRAND"}',返回含 component_id + brand_type(common/wechat_channels等)
落地页前置条件(试跑发现的关键约束)⭐:
建创意时 main_jump_info 落地页组件是模板必填项,需账户侧预先在【资产→创意资产管理→落地页】中配置好落地页(不限于小程序,H5/小程序/应用宝等各类落地页均在此配置):
- 入口:投放管理平台 →【资产】→【创意资产管理】→【落地页】→ 新建落地页
- 按落地页类型配置(小程序/H5等),配置并审核通过后建创意时引用
- 若未配置:建创意时报 1800007 "Invalid ID of wechat mini program"(小程序)或落地页字段为空等错误
若账户未配置,媒介经理应在段A末尾提醒用户先到【资产→创意资产管理→落地页】配置落地页。
产出:《投放策略纪要-[项目名].html》(三段结构)⭐
重要(v1.28.0 修订):fallback 模式的《投放执行确认单》HTML 与《投放可行性评估》共用 html-report-card 卡片规范——骨架 html-report-card/assets/template-jinshouzhi.html、样式 assets/theme.css 全文内联、遵守 references/design-rules.md 16 条硬规则、交付前跑 scripts/check_html.py 需 0 error。references/html-memo-template.md 只提供内容结构(段A/段B 字段、占位符来源、一致性自检),不再内嵌独立 HTML 模板。
⭐ v1.2.1 UI 统一:策略纪要与《投放可行性评估清单》共用同一套设计系统,两份 HTML 产出视觉上必须是同一套文档(v1.3 起立项单是对话栏文字,不参与 UI 统一):
- 字体:系统字体栈(
-apple-system / PingFang SC / Microsoft YaHei),不引 Google Fonts、不用衬线展示字体
- 底色
#f7f7f5 纸感灰 + 单张白卡 .container(max-width 900px / radius 12px / 轻投影)
- 主色
#378ADD;状态色 ok #27ae60 / warn #e67e22 / bad #c0392b
- 章节用细线
#f0f0ed 分隔 + 3px 主色竖条标题;页脚/底纹 #fafaf7
- 段落区分只靠竖条与 seg-tag 底色轻量区分:段A 蓝 / 段B 绿
#27ae60(v1.18.0 起段 C 已废,CSS 类保留无害)
- ⭐ topbar 左侧必带金手指 logo(v1.14.0 起):图标 base64(读
references/gf-logo-base64.txt 替换 {{GF_LOGO_BASE64}})+ "金手指 / AI · Ad Agent" + 竖线分隔,与可行性评估同款;不自己画 SVG、不引本地路径、不用 emoji
- ❌ 禁止:玻璃拟态 / backdrop-filter、渐变文字、多层 radial-gradient 背景、大号衬线标题、深色终端代码块、入场动画
- 写文件前跑一遍模板末尾的「一致性自检」清单
段 A:投放策略段(给 ai投手 建单用)⭐v1.20.0 补五维基建分档推导
五维基建给具体数字区间(默认基线,用户有经验则覆盖)。v1.20.0 起:区间必须按预算分档推导给出(不再给"裸区间"):
- 投放方式:按上方「投放方式判定」结论填写。格式固定(v1.20.0):
智投 AIM+(tencentads-delivery-smart-create) 或 标准投放(tencentads-delivery-standard-create)——skill 名括号附在后面,让 ai投手直接复制选用建单 skill。v1.23.0 起:是否智投不设独立字段,由本字段派生(isSmartDelivery = 智投 true / 标准 false,灌 open_config 时派生后照传)
- 优化目标 og(v1.24.0 判定逻辑重写,建单必填):双字段——
optimizationGoal(og 英文枚举)+ optimizationGoalName(og 中文名)。判定对照 references/og-library.md(层1 语义路由层:33 个浅层 og,不含深转、不含行业特化):官方四元组联动(营销目的→推广产品→营销载体→优化目标)+ 归因硬门槛(不接归因=不能用转化 og)——营销目的输入 = C2 投放目标(v1.24.7 起 C1 已删,品牌宣传由 C3"品牌声量优先"单信号路由);小店=平台自动归因(优先推荐,前提=告知用户自行搭建官方小店落地页);落地页=JS;App=SDK/API;无归因=点击 og + CPC 出价(兜底)。出价联动二分(v1.24.2):选转化 og → bidding 只能 oCPX(与 bidding 交叉校验,矛盾即报);选点击 og 兜底 → bidding 必须 CPC(按点击计费,不优化转化)。行业特化 og(金融开户/入金、教育低价课、短剧看剧等)不进库,涉及时调知识库查
- 账户:账户数(按日预算 4 档分档推导,v1.20.0)+ 账户类型三选一(白户首选/老户重启/灰户避开):
<1000 元/日 → 1 个 | 1000-5000 → 1-2 个 | 5000-20000 → 2-3 个 | >20000 → 3-5 个
- 字段值附一行小字推导:"日预算 X 元 → 推 N 个账户"。不再一律"默认 1 白户"(高预算项目会被低估账户数,过审风险高、量级天花板低)
- 版位:主投版位(依提需渠道偏好)、排除版位
- 广告结构:按日预算 3 档分档(v1.20.0):
<2000 元/日 → 3×3×5 | 2000-10000 → 3-5×3-5×5-10 | >10000 → 5×5×10
- 字段值给分档结果(如"日预算 3000 → 4 广告 × 4 创意组 × 8 素材"),不给通用裸区间
- 出价:出价方式(oCPM等)、出价金额区间、考核指标(AMS枚举,透传自需求单)。考核指标分两个独立字段(v1.24.1):
kpi(考核目标,单指标、只用成本口径,如 成本≤90元 CPA 上限,透传需求单成本预期)+ kpiRedline(考核红线,与 kpi 平级、独立指标而非成对关系,按指标类型推导——成本类:常规 × 1.2-1.3 上浮;ROI/量/率类:常规 × 0.7 下浮;触发动作暂不建设,字段值先录入)。v1.20.0 出价公式(核心推导依据):
初始出价 = 考核成本 × 50%-70%
- 字段值附一行小字推导:"考核成本 X 元 × 0.5-0.7 = 初始出价 Y-Z 元"——金额区间是结果,公式是依据(可施工内容,不属"待办型警告",保留)
- 调价节奏附在字段值里:单次调价 ≤10%、观察 4 小时再动、冷启动期别频繁调、累计 5-10 个转化后可回调
- 预算:日预算/总预算/上线日期(透传)
- 定向/时段:
- 定向方式默认值(v1.20.0):
系统智能定向(首选),有老客种子叠加 lookalike——oCPM 宽松定向利于探索,有种子再叠
- 投放时段基线(v1.20.0,用户经验可覆盖):00-07 低/暂停 | 09-11 放量 | 14-17 观察 | 20-23 高峰
- 🚨 日内时段渲染硬规则(v1.25.6,实测 bug 修复):时段基线在字段值里就是一行文字(
00-07 低/暂停 | 09-11 放量 | 14-17 观察 | 20-23 高峰 这种竖线分隔格式)——禁止做成"每小时一行"的表格(实测 bug:agent 自由发挥把时段拆成 0-0 / 1-0 / 2-0- 每小时一行,且把字符串当 iterable 逐字符遍历出乱码);禁止对时段字符串做逐字符 enumerate——它是 4 个"区间+短语"块,不是字符序列
deliveryHours 传金手指时 key 是时段区间(如 "00-07"、"09-11"),值是单个短语(如 "低/暂停"、"放量")——共 4 块左右,不按小时拆 key
- 素材池衔接(v1.20.0 新增字段):
素材池储备——按段B 预算驱动测算结果填(如"20 张图片(总预算 6000 → 20 张档)"),让 ai投手建单时一目了然池子里有什么,避免段A/段B 信息断裂
- 上新节奏(v1.20.0 新增字段):
每 3-5 天补 1-2 条素材进池——写"上新节奏"字段,让 ai投手/用户知道上线后怎么保持池子活性
- 盯盘节奏:每天 9:00/12:00/14:00/16:00/18:00 五时点。v1.20.0 加"盯什么"一行:盯指标 = 出量广告占比 / 各广告消耗分布 / 素材跑速 / 红线预警 / 冷启动进度
- 🚨 🚨 段A 末尾禁令(v1.18.0 起生效):不输出任何"针对可行性评估风险的处理"alert / 账户未配置项的"前置条件配置指引"块 / "合规文案自检" / "上线前必做审核预检"等待办型警告——这些内容不属于执行单的职责边界,应交给用户在投放时按段A「盯盘节奏」+金手指"项目管理→腾讯广告 Key 托管"自行检查。执行单只交付"策略 + 可施工内容",不要越界变成"上线前待办清单"。可行性评估里的 ⚠️/❌ 项已经在段A 字段里针对性标注完毕(v1.2 起的规则,v1.18.0 后段C 删了、标注全部由段A 负责),不必再开新 alert 重复。
- ⚠️ v1.20.0 边界澄清:分档推导小字(账户/结构/出价公式)属于"策略可施工内容",与"待办型警告"不同——推导说明保留,待办警告禁止。两者别混
段 B:素材策略段(给 素材助手 用)⭐v1.17.0 按素材策略规范重写
规范来源:金手指「素材策略专家」规范(material-strategy-assistant v3.2 brief_spec)的策略层——选什么类型、做多少、要不要视频、怎么传信息。逐条文案/生图提示词等执行层由下游素材模块做,不在本段。
① 核心主张(段B的灵魂,放最前)
- 结合
一句话卖点 × 目标人群 × 投放目标 提炼一条加粗核心主张 + 一两句判断理由(为什么呈现这条最能促转化)。单一聚焦,只此一条。
- 例:睡前点一支,让房间和情绪都慢下来——该人群痛点是睡前焦虑、购买由情绪价值驱动,呈现"助眠仪式感"比堆成分参数更能促下单。
② 创意类型推荐(图片选 2-3 类 + 视频规划)
- 图片只能在官方 13 种类型里选(🚨 严禁自创/改名/野生命名,如"场景海报""好友分享图"一律不用):
常规海报 · 模拟朋友圈 · 小红书笔记 · 仿对话 · 数字人海报 · 公众号资讯 · 榜单素材 · 户外海报 · 备忘录 · 大字报 · 九图拼接 · 四图拼接 · IP海报
- 视频 4 种(仅满足视频门槛时规划):情景剧 / 单人口播 / 动图(图片动态化)/ 混剪(旁白+画面剪辑)
- 选型逻辑(🚨 仅内部判断用,绝不写进产出):海报类=品牌方正面传递;原生类=仿素人分享弱化广告感;平台样式类=仿平台原生界面;业务元素类=直接亮利益物。强合规行业(金融/医疗等)原生类风险高(易触"受益人口吻"红线),优先海报类+平台样式类
- 每个推荐类型给一行:官方类型名 + 方向/数量 + 一句「怎么给用户传信息」的大白话(如"像朋友晒店,熟人口吻+评论互动"——🚨 产出里不出现"平台样式类/原生类"等内部黑话,一律翻译成大白话)
- 视频行标注叙事套路(痛点式=痛点共鸣→解决方案→行动引导 / 话题式=热门话题→相关性→引导 / 冲突式=抛误解→解释→共识→引导),按选题各挑一条,不全套同一条
③ 数量测算(🚨 预算驱动,唯一权威;v1.20.0 档位改互斥)
预算取自上游 demand_budget_limit(总预算),账户数取自段A。
| 预算档位(互斥,v1.20.0) |
图片数量 |
视频 |
| <1000 元 |
约 10 张 |
❌ |
| 1000-5000 元 |
约 15-20 张 |
❌ 默认不做 |
| 5000-10000 元 |
10~50 张随预算递增 |
❌ 默认不做 |
| >10000 元 |
按账户数测算,单账户约 50 张封顶,多账户线性叠加 |
✅ 可做 |
| 任意预算但点名视频/投视频号 |
按上表 |
✅ 做 |
🐛 v1.20.0 修复:旧表 ≤500 / ~5000 / 500-1万 / >1万 档位边界重叠(如总预算 6000 元同时命中"约 5000"和"500-1万"两档,无法判定),改为上表互斥档。
三条硬约束:① 素材量最低 10 条(首投场景由 v1.22.0 公式的"储备 ≥30"取代);② 单账户图片约 50 张封顶(行业基建基准 3–5 广告 × 3–5 创意组 × 5–10 素材 ≈ 50/账户);③ 视频门槛 = >1 万元 或 明确要视频/投视频号,否则纯图片。
④ 基建驱动测算公式(v1.22.0 新增,精确数字以此为准)
输入:日预算(段A)+ CPA(考核成本,需求单 KPI 解析)。公式把「预算 → 基建(广告数)→ 素材/文案数量」串成一条线。
| 输出项 |
公式 |
说明 |
| 广告数 |
日预算 ÷(CPA × 20) |
每条广告日消耗达 CPA×20 才能积累足量转化跑出模型;算出日预算能支撑的并行广告条数。结果取整,不足 1 条按 1 条 |
| 素材数 |
广告数 × 3-5 |
每条广告配 3-5 素材,与段A 广告结构分档一致 |
| 外层文案数 |
= 广告数 |
每条广告 1 条外层文案(外层文案与按钮汇总表 ⑦ 按此动态算) |
| 首条评论数 |
= 广告数 |
每条广告 1 条首条评论(朋友圈版位) |
硬约束:首次投放(基建路径)素材储备不低于 30——在投素材(广告数×3-5)是当期消耗量,素材池储备(首投 ≥30)是轮换余量,两者别混;materialPool.total 按储备口径填。
示例:日预算 1500 元、CPA 90 元 → 广告数 = 1500÷(90×20) ≈ 0.83 → 1 条;素材 = 3-5 张/广告;外层文案 1 条、首条评论 1 条;首投素材池储备 ≥30。
- 满足视频门槛时明确规划:哪几类视频、各几条、为什么(视频物料生成为下游职责,本段只到策略层,不遗漏即可)
- 融合表列序固定:创意类型 · 优先级 · 尺寸 · 数量 · 怎么给用户传信息(最后列填大白话,不填分类名/术语句)
④ 尺寸规范(🚨 按创意类型定横/竖/方,不再一刀切)
- 竖 9:16 1080×1920:榜单素材、大字报、情景剧/口播/混剪
- 横 16:9 1920×1080:常规海报、公众号资讯、数字人海报、动图
- 未列出类型按画面特性判断(信息密/竖屏沉浸走竖;横向图文卡片走横;不确定方图 1:1 800×800 兜底)
- 整批素材横/竖/方比例尽量落在约 4:4:2
- 成品规格要求(保留):素材模块须把成品裁到对应类型尺寸并 JPEG 压到 <1MB(生图+裁剪压缩由素材模块负责,投手直接上传)
⑤ 一句话卖点:透传自需求单 Part2(与①配合——卖点是原料,核心主张是提炼)
⑥ 品牌资产透传(缺口C修复,保留):本段固定带一栏「品牌资产透传」,引用(不复制)提需确认单 Part2 的品牌资产:
【品牌资产透传·引用自《投放需求信息确认单》Part2】
- logo:[有/无/待确认](来源:确认单Part2,素材助手请以确认单文件为准取原图)
- 主色/品牌色:[色值 或 待确认]
- slogan:[原文 或 待确认]
- 风险提示语:[原文 或 待确认]
- 缺失项用
pill miss 标记(仅状态显示,不附"建议联系设计/品牌方"等待办型话术),不编造。logo/风险语只透传不参与生成,留待后置组装环节精确叠加。
- v1.19.0 起:模板里那段"→ 素材助手需直接读取...本栏仅作透传指引"也删了——透传栏只展示字段状态,不输出"该怎么做"的指导性话术
⑦ 外层文案与按钮汇总(v1.25.6 起含 CTA 规则;v1.25.7 恢复素材策略专家原始规范)
外层文案(outerCopy string[]):条数 = 广告数;每条一句话、与素材方向呼应
首条评论(firstComments string[]):条数 = 广告数(朋友圈版位);熟人口吻、不直接提产品名
转化按钮(ctaCopy {primary, backup})——原始规范(来源:素材策略专家 copywriting_method.md「转化按钮」章节,v1.25.7 恢复,替换 v1.25.6 臆造的 og 映射表):
- 固定选项,不可自定义:从平台可用列表里选——朋友圈共 17 个:
了解更多 / 去逛逛 / 查看详情 / 立即体验 / 立即咨询 / 立即购买 / 立即抢购 / 立即领取 等。不要发明列表外的按钮文案(v1.25.6 臆造过"立即预约/免费咨询/立即注册"等,均不在平台列表)
- 按产品调性选:
- 氛围型/无压迫产品(香氛/家居/生活方式/内容订阅)→ 优先 "去逛逛"
- 强购买意向(实物电商/虚拟商品直售)→ "立即购买"
- 限时活动/优惠驱动 → "立即抢购"
- 工具试用/体验驱动 → "立即体验"
- 服务咨询/留资类 → "立即咨询"
- 权益/券类发放 → "立即领取"
- 兜底(无明显调性倾向)→ "了解更多"
- ⚠️ 硬约束:选什么按钮,落地页就必须能完成对应动作,否则审核驳回——按钮文案暗示的行为要与落地页能力一致(这一条同时隐含了与 og 的一致性:og=COMPLETE_ORDER 配"立即购买"✅、配"去逛逛"❌)
进度条(v3.14 起,每条回复开头必带;v1.25.0 起改三步制)
本 skill 执行期间处于 3/3 阶段,每条回复消息最开头先放一行进度条再接正文(v1.25.0 起全链路 4 步变 3 步:提需含灌入 → 可行性评估 → 确认单含灌入+上线):
📍 3/3 执行确认单+开启投放|✅ 需求收集 ✅ 需求评估 ▶ 执行确认单(产出即灌入)
一气呵成产出(v1.26.0 起主路径无 HTML,不做分段确认)
段 A(投放策略)+ 段 B(素材策略)一次性全部完成,不做段间确认(v1.18.0 起段C 已删除)——
- 不再设"交接点2a 媒介策略确认"和"交接点2b 素材策略确认"两个中间确认环节
- 🚨 v1.26.0 起主路径不写 HTML 文件:两段内容直接落成
strategy 全量结构化字段(48 个),灌入金手指配置页——页面本身就是"确认单",用户在页面上核对/修改(实测背景:产出本地 HTML + 拉起页面 = 同一份内容出现两次,冗余)
- 主交互全程在配置页,本地无任何冗余产物
- fallback 触发条件收紧(v1.29.0):只有两种情况才写本地 HTML —— ① 用户明确选择「先不连金手指」(且已被告知"策略只能落本地文件、不能直接开投");② 已连上但调用失败 /
degraded:true。⛔ 连接未就绪 ≠ fallback:那种情况按 agents《第 0 步 连接就绪检查》先引导连接,不得直接产出 HTML。触发后写《投放执行确认单-[项目名].html》存档并按既定轨道打开,话术"确认后我再灌入金手指"。HTML 走 html-report-card 卡片规范(与可行性评估同一套模板,v1.28.0 起统一);内容结构见 references/html-memo-template.md
灌入金手指(策略产出后立即执行;v1.26.0 起主路径)
- 拼装
strategy 全量结构化字段(48 个:demand.groups 5 分区 + Part 2/3/4 顶层字段)——数据源:对话上下文里的立项单完整文字(拼 demand.groups)+ 本环节段A/段B 策略结论(拼 Part 2/3/4)。⚠️ 这是全流程唯一一次灌入,需求单字段必须一并灌进去,不能只灌策略字段。字段清单与填值规则见下方《灌入金手指:open_config 全量字段》章节
- 立即调金手指
open_config 全量灌入(不等用户对话确认——用户确认移到页面上)
- session 双重校验:① curl 字段清单校验(抓漏传字段)→ ② sleep 2 后 curl 存活复查(防服务端重启清 session)——两步都通过才拉起页面
present_files 传 session 短链拉起配置页(唯一打开方式)+ 同条回复里前置兜底 markdown 超链接("右栏要是空白的,点这里进配置页")
- fallback:金手指 MCP 不可用或
degraded:true → 写《投放执行确认单-[项目名].html》(路径 投放产出/[YYYY-MM-DD]/投放执行确认单-[项目名].html,工作区相对路径):骨架/样式走 html-report-card(assets/template-jinshouzhi.html + assets/theme.css 全文内联 + references/design-rules.md 16 条硬规则 + scripts/check_html.py 0 error 闸门,与可行性评估完全同一套),内容结构(段A/段B 字段、占位符来源、自检项)见 references/html-memo-template.md;按既定轨道打开,话术改回"确认后我再灌入金手指",不阻塞产出
交接摘要(3/3 灌入金手指并拉起页面 · 对外话术,v3.16 重排格式;v1.26.0 起主路径不产本地确认单)
受众分层(核心认知):投放执行确认单是给投放系统/机器读的,不是给用户读的。里面会有 oCPM 出价、版位配置、转化归因这些专业内容——用户看不懂很正常,也不需要看懂。对用户只需要说清:大体打法是什么(一句白话)、他还缺什么、方向对不对。
🚨 文本格式硬约束(v3.17 用户实测反馈"老是大段大段的给,没有重点"):单段 ≤ 80 字、超出用列表、核心加粗前置、emoji 标记、空行分隔。
🚨 session 双重校验通过 + present_files 拉起配置页后,🚨 必做紧跟这段收尾话(不能只丢产物就走;v1.26.0 话术,兜底链接前置):
🎯 投放方案做好了——内容已经灌进金手指配置页,在右边栏打开了。
右栏要是空白的,点这里进配置页:[点这里进配置页]({{BASE/pre-launch?session=SID}})
**这份是给投放系统读的**,专业内容您不用细看。
**📌 大体打法**
- [版位选择 + 预算节奏 + 素材打法,每条 ≤ 20 字]
**⚠️ 之前评估的风险已落处理**
- [风险1] → [处理方式]
- [风险2] → [处理方式]
**🔧 你在页面上做**
- 页面**当前停在第一步「需求单确认」**(2026-08-26 前端源码实证:`?session=` 与 `#s=` 两条灌入路径都硬编码 `o(G.PLAN_PREVIEW)`,与 strategy 内容无关;`open_config` 入参只有 `strategy/rawHtml/project_id`,无 stage 参数,调用侧无法控制)——**灌入的策略字段已经在页面里**,点「确认」进第二步「AI投手准备」就能看到「投放策略」「素材策略」两个 tab
- 先核对预填的字,要改的直接在页面上改;大改回来说一声,我改完重新灌一版
- 然后**手动点"下一步"进"投放计划"** → 关联账户 → 生成投手 → 上传素材 → 点「项目上线」
💡 链接 30 分钟内有效,过期了说一声我重新灌。
"大体打法"提炼标准:
- 从段 A 投放策略提炼,翻译成普通人能懂的列表化短句——版位选择 + 预算节奏 + 素材打法三要素
- ✅ 好例子:
📌 大体打法 + 列表:走智投自己挑版位 / 日预算 500 起小预算跑一周 / 3 套素材轮着赛马,哪套跑顺加钱
- ❌ 坏例子:
oCPM 出价 80-120,版位朋友圈+视频号,RTA 策略……(术语复述不是白话)
- 用户看了能向老板/同事转述"我们要怎么投",才算合格
❌ 反例(旧风格,截图里那种大段;数字一律是占位示意,真实产出禁止照抄任何示例数字):
🎯 投放执行确认单出好了,在浏览器里打开了——怎么出价、怎么搭结构、要准备什么素材,都写成具体的执行方案了。核心几句话:走智投让系统自己挑版位,[N]个新账户小结构开跑([N]条广告×[N]素材),探索期出价给到 [X]元、第[N]天起再按 [X]元线考核;素材做 [N] 条,[风格A]和[风格B]两组赛马,让数据告诉你哪个方向对。之前评估出的两个风险我在确认单里都落了处理:落地页没搭是硬阻塞……
对比:反例单段 200+ 字平铺;正例拆 4 段、每段 ≤ 3 行、列表化。
⚠️ 话术必须与实际轨道一致:走 present_files 说"在右边栏打开了",走 Bash open 说"在浏览器里打开了"。不谎报已打开。
🚨 保真规则(v1.26.0):收尾话术/交接摘要只陈述实际发生的动作——session 校验失败了就如实说"重新灌了一版";没打开不说"已打开";没灌入不说"已灌入";禁止照抄模板里的示例状态(模板写"在右边栏打开了"≠你真的拉起过)。
❌ 禁用标签格式:"这是什么:xxx""给谁用:xxx"——表单不是人话。
❌ 不引导用户看执行细节:不说"你看看出价对不对、版位选得行不行"——用户只确认方向。
📌 灌入后页面落点:stage 现状与执行单位置(2026-08-26 前端源码实证)
结论先给:open_config 无法指定落在哪一步——金手指前端 index-*.js 里 ?session= 与 #s= 两条灌入路径都硬编码 o(G.PLAN_PREVIEW),与 strategy 内容无关;open_config 入参只有 strategy / rawHtml / project_id,没有 stage 参数,也没有可用的 URL 参数。灌入后页面一定停在第一步「需求单确认」。
页面五步与数据消费:
| stage |
页面 |
消费的数据 |
PLAN_PREVIEW=1 |
需求单确认 |
只读 demand.groups(空则显示"召唤媒介经理"占位) |
AI_OPTIMIZER=4 |
AI投手准备 ← 执行单在这里 |
三个 tab:信息配置 / 投放策略 / 素材策略 |
UPLOAD_MATERIAL=5 |
投放素材准备 |
用户上传 |
GO_LIVE=6 |
投放执行 |
— |
DASHBOARD=7 |
效果复盘 |
— |
两个策略 tab 的显示条件(源码函数,决定我们必须灌哪些字段):
- 投放策略
dc():kpis / fields / deliveryHours 任一非空
- 素材策略
fc():kpis / sellingPoint / specs / poolDesc / testDirections / brandAssets / coreClaim / creativeDirections / finishedSpec 任一非空
→ 只要按本章节灌全 48 字段,两个 tab 的数据就都在,用户在第一步点一次「确认」即进入执行单页。
对外话术:如实说"页面停在第一步需求单确认,你核对完点「确认」就进 AI投手准备,投放策略和素材策略都已经预填好了"。不要说"已打开执行单页"(不实),也不要当成故障道歉(这是平台当前行为)。
给金手指侧的改法(已提反馈):把两条路径的 o(G.PLAN_PREVIEW) 改为 o( dc(ct)||fc(ct) ? G.AI_OPTIMIZER : G.PLAN_PREVIEW )——含策略字段直接落执行单页,仅需求单才停第一步。
🚀 灌入金手指:open_config 全量字段(原 4/4;v1.26.0 起策略字段拼装完成后立即执行)
触发:段A/段B 策略字段拼装完成后立即执行(不等用户对话确认——用户确认在配置页面上完成;v1.26.0 起主路径没有 HTML 落盘步骤,拼完字段直接灌)。用户回对话说"重新灌/再开一次/过期了" → 也走本章节重新灌入(新 session 新链接,旧的自然过期)。
执行流程(严格按顺序):
调金手指 open_config(工具全名 mcp__jinshouzhi__open_config——2026-08-26 起金手指连接器 key 为 jinshouzhi(token 鉴权),14 个工具;旧 key ad-goldfinger 是残留通道不再使用)——⚠️ 全部走结构化字段,不传任何 HTML(v1.16.0 起):
工具签名是 strategy(object,必填)+ rawHtml(string,可选)。rawHtml 不用——strategy 里直接给结构化字段,配置页前端本就支持结构化通道,比"生成 HTML 再用 DOM 解析回结构"更稳。
open_config({
strategy: {
// ══ 需求单:结构化 groups(对应配置页「需求单」区)══
demand: {
title: "投放需求单 · [项目名]",
meta: "[行业] · [投放目标] · [日期]",
groups: [
{ title:"基础信息", icon:"📋", fields:[
{k:"产品名称", v:"[offerId]"},
{k:"产品简介", v:"[demand_offer_intro]"},
{k:"核心卖点", v:"[demand_selling_points]"} ]},
{ title:"预算与目标", icon:"💰", fields:[
{k:"测试目标", v:"[demand_test_goal]"},
{k:"考核指标", v:"[demand_kpi]"},
{k:"总预算", v:"[demand_budget_limit]"},
{k:"投放周期", v:"[demand_budget_cycle]"},
{k:"上线时间", v:"[demand_launch_date]"} ]},
{ title:"人群策略", icon:"🎯", fields:[
{k:"客户类型", v:"[demand_audience_logic]"},
{k:"核心人群", v:"[demand_core_ta]"} ]},
{ title:"素材与承接", icon:"🎨", fields:[
{k:"现有素材", v:"[demand_has_material]", badge:"[风险提示]", badgeType:"warn"},
{k:"线上门面", v:"[demand_carrier]"},
{k:"商品渠道", v:"[demand_product_channel](C11 条件题,未问则整条略去)"},
{k:"开发资源", v:"[demand_dev_resource]"} ]},
{ title:"其他", icon:"📎", fields:[
{k:"合规要求", v:"[demand_compliance]"},
{k:"历史经验", v:"[demand_history]"} ]}
],
footNote: "由金手指 · 媒介经理生成"
},
// ══ 策略单:结构化字段(对应配置页「投放策略」区)══
offerName: "[项目名]",
pathType: "[基建/诊断]",
deliveryMode: "[智投 AIM+ / 标准投放]",
isSmartDelivery: true, // 派生字段(v1.23.0):deliveryMode 为智投时 true,不独立取值
optimizationGoal: "[og 英文枚举,如 CLICK]", // v1.23.0:由开发资源+知识库判定
optimizationGoalName: "[og 中文名,如 点击]", // v1.23.0:与英文枚举成对展示
accountCount: 1,
accountNote: "[如:新白户]",
dailyBudget: 1500, // 数字,元
totalBudget: 50000, // 数字,元
bidding: "oCPM", // 转化 og 配套;兜底场景(点击 og AD_CLICK)改 CPC
bidRange: 96, // 数字单值(元),不给区间(v1.20.0 起口径;考核成本×50%-70% 推导结果)
kpi: "[考核成本上限,如 成本≤90元(CPA)]", // v1.23.1:单指标、只用成本口径
kpiRedline: "[考核红线,v1.24.1 独立指标;成本类=常规×1.2-1.3 上浮,ROI/量类=常规×0.7 下浮;触发动作暂不建设]",
adStructure: "[如 3条广告 × 3创意组 × 5素材]",
adCount: 3,
creativeGroupCount: 3,
audience: "[人群定向建议]",
// placements 已删(v1.24.3):主投版位不灌入(智投场景系统择优无预设值),金手指页面手动配置
deliveryPeriod: "[如 30天]",
launchDate: "[YYYY-MM-DD]",
watchTimes: ["09:00","12:00","14:00","16:00","18:00"],
// ⚠️ materialPool 按"段B 预算驱动测算结果"动态填,示例值仅示意(<1000 档 → 10 张纯图片;>1万 → 按账户数 50张/账户 + 可做视频)。**不要照抄这个示例值**(v1.20.0 修复:旧示例 {50,10,40} 是已废弃的"固定 50 条=10视频+40图文",容易诱导回退旧逻辑)
materialPool: { total:20, video:0, image:20 },
sellingPoint: "[一句话卖点]",
coreClaim: { claim: "[核心主张]", reason: "[判断理由]" }, // Part 3(v1.24.5 起)
creativeDirections: [ // Part 3 素材方向(v1.24.5 起由 materialTypes 更名)
{ category:"image", type:"[官方13类之一]", priority:"主推", count:8, size:"竖9:16 1080x1920", message:"[怎么给用户传信息·大白话]" }
],
materialSpecs: ["竖版9:16 1080x1920","方图1:1 800x800"],
finishedSpec: "[成品交付规格:裁剪/压缩要求]", // Part 3
outerCopy: ["[外层文案1]"], // Part 4(v1.24.6 起 copyDeck 拆三)
firstComments: ["[首条评论1]"],
ctaCopy: { primary: "[主选按钮文案]", backup: "[备选]" }
}
})
字段依据(已抓配置页前端 JS 核实,勿臆改):
- 需求单:
rawDemandHtml || demandHtml 若是 HTML 则 DOM 解析;否则读 demand.groups(我们走这条)
- 策略单:
rawHtml || html 若是 HTML 则解析;否则走纯结构化分支读上面那 23 个字段(我们走这条)
fields 里每项结构:{k, v, badge?, badgeType?, pending?, full?};badgeType 取 ok/warn/danger
为什么不传 HTML:HTML 通道依赖前端 DOM 选择器(.sec .field .k .v),我们改模板样式就可能解析失败;结构化字段直给,不存在解析风险。实测 success:true / degraded:false,页面正常预填。
填值规则:
- 数值字段(
dailyBudget/totalBudget/adCount 等)传数字类型,不要传 "1500元" 这种字符串
demand.groups 里没问到的字段整条略去(不写"待定/缺失"占位);分区内全空则整个分区不放
- 用户答"没有"的项要如实带上并配 badge(如现有素材"都没有" +
badge:"需从零准备")
- 值都从对话上下文的立项单文字 + 本环节执行单内容取,不编造
取返回的 sessionId,做 session 双重校验(⭐ v1.26.0:字段校验 + 存活复查;2026-08-25 实测教训——灌入成功后服务端重启清了内存 session,3 分钟后链接 404,用户点开空白):
为什么改走 session 短链:recommendedLink 的 #s= 内联深链 1000~3000+ 字符,在 AI 调用链复制转手中稳定损坏(两次实测 1358/1370 字符均 gzip 报废,232 字符才安全)——不是 URL 超长(上限 32000),是复制保真问题。而 ?session= 深链只有 32 位 hex,零复制风险;FAT 单实例下 session 一定能查回(curl 实证)
deepLink 禁令修订(v1.25.2,分环境):"绝不给 deepLink" → FAT/单实例环境放行(先 curl 验证 session 在,再 open);生产/多副本环境仍禁(内存 session 多副本查不回,点开空页——v1.11 教训不变)
curl 字段清单校验(必做,能精确抓漏传字段)+ 存活二次校验——命令只做校验,打开不在这条命令里(一律 present_files,见下):
SID='<返回的 sessionId>'
BASE='https://ad-goldfinger.app.fitgroup-fat.com' # 按当前连接器端点,勿照抄
# ① 字段清单校验(抓漏传字段)
curl -s --max-time 10 "$BASE/api/mcp/session/$SID" | python3 -c "
import json, sys
d = json.load(sys.stdin)
assert d.get('success'), 'session 不存在或已过期'
s = d.get('strategy', {})
P2 = ['offerName','pathType','deliveryMode','optimizationGoal','optimizationGoalName',
'accountCount','accountNote','excludedPlacements','adStructure','adCount',
'creativeGroupCount','bidding','bidRange','kpi','kpiRedline','dailyBudget',
'totalBudget','launchDate','deliveryPeriod','audience','deliveryHours',
'budgetAllocation','watchTimes']
P3 = ['sellingPoint','coreClaim','creativeDirections','materialPool','materialSpecs','finishedSpec']
P4 = ['outerCopy','firstComments','ctaCopy']
g = len(s.get('demand', {}).get('groups', []))
m2 = [k for k in P2 if s.get(k) is None]
m3 = [k for k in P3 if s.get(k) is None]
m4 = [k for k in P4 if s.get(k) is None]
print('offerName:', s.get('offerName'), '| demand 分区:', g)
print('Part2 漏:', m2 or '无', '| Part3 漏:', m3 or '无', '| Part4 漏:', m4 or '无')
assert g >= 1 and not (m2 or m3 or m4), '有字段漏灌'
print('字段校验通过')
"
# ② 存活二次校验(⭐ v1.26.0 新增):灌入成功 ≠ 链接可用——服务端重启会清空内存 session
# 实测:19:58 灌入成功 → 19:59 服务重启 → 20:01 查询 404(TTL 明明 30 分钟)
sleep 2
CODE=$(curl -s --max-time 10 -o /dev/null -w '%{http_code}' "$BASE/api/mcp/session/$SID")
[ "$CODE" = "200" ] && echo "存活确认 OK,可以拉起页面" || echo "存活确认失败(HTTP $CODE)→ session 已被服务端清掉,需重新 open_config 重灌"
校验报错处理:
session 不存在或已过期(30 分钟 TTL)→ 重新调 open_config
有字段漏灌(列出具体 key)→ 回到第 1 步补齐该字段重灌——2026-08-24 实测此清单抓出过漏传的 creativeGroupCount,比肉眼看页面猜"还差几项"精确得多
- 存活复查非 200(⭐ v1.26.0)→ 服务端刚重启过、session 已被清——重新调
open_config 拿新 session 再走一遍校验;重灌成功后向用户如实说一句"刚才服务端重启了一下,我重新灌了一版"(保真规则:不装作没发生)
inlineMode 返回 lite 是正常的;只有 degraded:true 才提示用户"内容较多,页面可能只预填了部分字段"
兜底链接前置(⭐ v1.26.0):右栏预览面板对深链渲染偶发空白(v1.25.1 已记录 iframe 对深链不可靠,两次实测空白)——兜底 markdown 超链接不能等收尾才给,要和 present_files 拉起页面同一条回复里就带上,用户看到空白立刻有出口:
已在右栏打开配置页;右栏要是空白的,点这里进配置页:[点这里进配置页]({{BASE/pre-launch?session=SID}})
session 短链本身就是短 URL(~90 字符),可直接做链接目标
生产/多副本环境 fallback(暂未启用):若 curl 查不回 session(多副本路由到别的实例),退回 recommendedLink(#s= 内联)——但 AI 调用链复制长 URL 有稳定损坏风险,生产就绪依赖金手指侧加 inlineChecksum(payload sha256 前 8 位)或短码模式(已列入给金手指的对接建议)。就绪前的过渡做法:URL 只复制一次进 shell 变量,同一条 Bash 命令「python 解码 #s= 校验 offerName → 通过才用 present_files 打开」,报错即重调 open_config(新链接重试,30 分钟机制内可多次)。
- 🚨 打开一律走
present_files 传 session 短链(右侧面板内拉起)——❌ 没有第二条路,绝不走 Bash open 跳外部浏览器(用户实测反馈:跳外丢失对话上下文;agent 默认动作"Bash open"是 shell 语义陷阱,必须在 skill 里彻底排除这个选项;校验命令里也不许内嵌 open)。仅 fallback 模式(MCP 不可用)下的 HTML 存档产物走 present_files 推卡片
收尾话术:session 双重校验通过、present_files 拉起配置页后,按《交接摘要》章节的收尾话模板输出(含前置兜底链接/大体打法/风险处理/页面待办/30 分钟有效期提示);fallback 模式(写了 HTML)才提存档路径。保真规则:只说实际发生的事。
异常处理:
- 金手指工具不可用(MCP 未连接)→ 提示:"开启投放需要连一下金手指(广告投放系统)。你在左侧连接器里把「金手指」连上,我再继续。"不硬调
- 返回鉴权失败 → 提示:"这个项目还没在金手指里托管腾讯广告 Key——到金手指「项目管理 → 腾讯广告 Key 托管」配置一下,配好我再试。"
open_config 报错 → 如实告知,不编造"已灌入"
灌入之后的延伸(用户主动问时才做):
- "看下数据" → 调
get_project_data(project=项目名,days 默认 7)
- "有哪些项目" → 调
list_projects
- 调整预算/出价/暂停 → 调
adjust_project——⚠️ 写操作必须先复述将要执行的调整,用户确认后才传 confirm:true 执行;未确认只返回预览
✅ 落库读写工具状态注记(2026-08-25 复验,MCP v1.0.5 / server 1.0.48):金手指服务端问题 #3(生产库 db_prod_ad_goldfinger.projects 表不存在)已修复——list_projects / get_project_data / adjust_project / validate_apikey / upsert_demand_brief / get_project_context 恢复可用(0824 曾全挡,历史注记作废)。用户问数据/调整时正常调用即可(写操作仍必须先复述确认再 confirm:true)。
灌入预填与落库无关(2026-08-24 源码核实):recommendedLink 的 #s= 内联 payload 是纯客户端解码(gzip+base64url,PreLaunch.tsx 的 decodeInline),与服务端数据库完全无关——只要 URL 复制完整,页面预填就正常。"页面空白/显示旧数据"先查 URL 是否复制损坏(走上方校验闸门)。落库增强(现已可用):open_config 灌入后额外调一次 upsert_demand_brief(project + payload = strategy 全量)实现按项目落库、页面刷新后仍在。
打印交接摘要(给下游读)
【交接点2 产出:投放策略(金手指已灌入)】主路径无本地 HTML 产物(v1.26.0 起字段直灌)
- 需求字段 → 从提需 session 的 strategy.demand.groups 取(curl 校验时已拉回)✅
- 段A 投放策略 + 段B 素材策略 + 文案 → open_config.strategy 全量 48 字段 ✅
- v1.26.0 起字段拼装完成即灌入(已调 open_config,session 双重校验通过,配置页已 present_files 拉起)
- fallback 模式才有文件:投放产出/[YYYY-MM-DD]/投放执行确认单-[项目名].html(MCP 不可用/degraded 时)
- 用户在页面核对/改字段 → 生成投手/上传素材/项目上线
- 后续数据/调整 → 金手指 get_project_data / adjust_project
上下游对齐(接口契约)
| 下游需要 |
本环节产出? |
状态 |
| 投放方式(标准/智投)判定 |
✅ 段A「投放方式」字段 |
对齐(试跑补) |
| 账户/版位/广告/出价/预算/定向 |
✅ 段A |
对齐 |
| ai投手专属配置+盯盘节奏 |
✅ 段A |
对齐 |
| 转化归因配置提醒 |
❌ v1.18.0 起不输出(属前置条件,交给用户自查) |
砍 |
| 图片创意「仅上传+建创意」SOP |
❌ v1.18.0 起砍段C(属 ai投手自身职责,越界) |
砍 |
| 核心主张+创意类型推荐(13类+视频4类)+数量测算+尺寸+成品规格 |
✅ 段B(v1.17.0 素材策略规范) |
对齐 |
| 品牌资产(logo/主色/slogan/风险语) |
✅ 段B透传·引用需求清单 |
对齐 |
| 账户ID列表/落地页URL |
❌ 用户在ai投手投放前提供 |
见提醒 |
全局原则
- 五维基建/诊断方法论参考
ai-analysis-expert-newproject/-diagnose,不改原 skill。
- 投放方式判定:用户指定版位→标准投放;未指定/接受智能择优→智投AIM+。判定结果写入段A,ai投手据此选建单skill。
- 缺口C:品牌资产引用需求清单,不复制原始文件,素材助手以需求清单为准取原图。
- 两段一气呵成产出(v1.18.0 起;v1.26.0 起无 HTML):段A+B 一次做完,不做段间确认(段C 已删)——主路径直接落成 strategy 结构化字段灌入金手指,不写本地 HTML
- 主路径无 HTML;HTML 仅 fallback(v1.26.0 起):仅当金手指 MCP 不可用 /
degraded:true 时,才写《投放执行确认单-[项目名].html》存档——骨架走 html-report-card(与可行性评估同模板,v1.28.0 起统一),内容结构照 references/html-memo-template.md,theme.css 全文内联、文件自包含,跑 check_html.py 0 error 才交付;按既定轨道打开,话术改回"确认后我再灌入"
- UI 必须与可行性评估一致(v1.2.1 起,仅约束 fallback 产物):系统字体 +
#f7f7f5 纸底 + 单白卡 + #378ADD 主色 + 细线分隔 + topbar 金手指 logo(v1.14.0 起);禁止玻璃拟态/渐变文字/深色代码块/入场动画。写文件前过一遍模板末尾「一致性自检」。
- ✅ v1.28.0 已统一:fallback 确认单与可行性评估共用
html-report-card 卡片规范(用户决策 2026-08-26)——两份产物 UI 一致;html-memo-template.md 降级为纯内容结构指南。
- 策略完成必须灌入金手指(v1.25.0 起取代 v1.5"写完必须打开";v1.26.0 改述):段A/段B 字段拼装完成后立即
open_config 灌入 + session 双重校验 + present_files 拉起配置页,不要只说做了什么而不做。灌入成功 ≠ 交付完成——校验失败要重灌并如实告知用户。
- ⭐ 立项单从对话上下文读(v1.27.0 起):不要 Read 立项单文件(不存在),也不要 curl session(提需阶段已不灌入,无 session);直接从对话栏那份完整立项单文字逐字段取值。
- 🚨 素材数量禁止照抄示例(v1.26.0):
materialPool / creativeDirections[].count / 外层文案与首评条数,必须由段B 预算驱动测算公式当次算出——禁止照抄本 skill 任何示例值、反例数字或上一个项目的数量(实测发现 agent 把反例里的"8 条素材"抄进了真实产出)。
- 🚨 og 枚举照抄产物原文(v1.26.0):
optimizationGoal 英文枚举与 optimizationGoalName 中文名,照抄段A og 判定结论的原文(评估/确认逻辑里定的是什么就传什么),灌入时不临场改枚举、不凭印象编——枚举错位会导致金手指页面按钮/目标错配。
参考资源
references/html-memo-template.md:策略纪要 HTML 模板(生成纪要时必须对照,含 CSS 设计系统、三段结构骨架、占位符填写指南、段导航 JS、一致性自检清单)。UI 基准以本模板为准(v1.3 起立项单已无 HTML 模板)。
1---2name: flow-media-manager3description: 全链路投放工作流第②环节【媒介经理】。从对话上下文读需求立项单完整文字 + 读投放可行性评估HTML,**v1.27.0 起全流程唯一一次灌入(需求单字段+策略字段合并灌 48 字段)**,**v1.26.0 起主路径直接拼 strategy 全量结构化字段调 open_config 灌入金手指配置页(48 字段),不再产出本地确认单 HTML**——HTML 仅在金手指 MCP 不可用/degraded 时兜底存档。针对性标注可行性评估的⚠️/❌项。触发词:媒介策略、投放策略、账户搭建、基建纪要、诊断纪要、全链路第二步。4---5
6> 📌 当前版本 **v1.27.0**|历史变更(40 条版本注记)已外置到同目录 `CHANGELOG.md`,**本文件只写生效规则**。改动时请同步 CHANGELOG.md。
7
8# 媒介策略·串联版(flow-media-manager)
9
10全链路投放工作流的**第②环节【媒介经理】**。上游是 ad-demand-helper-pro 的《需求立项单》(对话栏文字)+《投放可行性评估清单》(HTML 文件),下游是 ai投手(flow-ai-shooter) 与 素材助手(flow-material)。
11
12## 输入(读上游)
13
14读 ad-demand-helper-pro 的 2 份产出:
15
16### 输入 1:需求立项单(**从对话上下文读立项单完整文字,v1.27.0 起**)
17
18> ⭐ **v1.27.0 数据源回切**:ad-demand-helper-pro v2.32.0 起**不再灌入金手指**(需求单阶段零 MCP 调用),因此**没有 session 可拉**——立项单**完整文字重新成为唯一权威源**,从对话上下文逐字段读取。
19>
20> ⚠️ **不要**再 `GET /api/mcp/session/{sid}` 取 `demand.groups`(v1.25.5~v1.26.x 的做法作废,那个 session 不存在了);也不要 Read 立项单文件(不存在,它只是对话栏文字)。
21>
22> ⭐ **这些字段值有两个用途**:① 做策略;② **灌入时拼成 `demand.groups` 一并传给金手指**——v1.27.0 起**灌入合并为一次**,`demand` 需求单字段与 Part 2/3/4 策略字段在同一次 `open_config` 里全量灌入(原"提需先灌一次、策略再灌一次"作废)。所以取值时必须完整记住每个字段。
23
24按立项单分区逐字段取值(对话栏文字里的字段名 → 内部字段语义):
25- **基础信息**:`offerId`(产品名称)/ `demand_offer_intro`(产品简介)/ `requestTitle`(标题行)
26- **预算与测试目标**:`demand_test_goal`(测试目标)/ `demand_kpi`(考核指标,大白话)/ `demand_budget_limit`(总预算)/ `demand_budget_cycle`(投放周期)/ `demand_launch_date`(上线时间)
27- **人群策略**:`demand_audience_logic`(客户类型/人群逻辑)/ `demand_core_ta`(核心人群)
28- **素材与承接**:`demand_has_material`(现有素材)/ `demand_carrier`(转化载体,v2.22.0 起 og 载体槽位)/ `demand_product_channel`(商品渠道,v2.22.0 条件题)/ `demand_dev_resource`(开发资源)
29- **其他**:`demand_compliance`(合规要求)/ `demand_history`(历史投放经验)/ `demand_selling_points`(核心卖点)
30
31> ⚠️ 立项单里**没出现的字段就是没问到**(如预算来源、结束时间、落地页链接、渠道版位、人群数量):按缺失处理,不阻塞,该由策略环节测算填充的就自己算。
32> ⚠️ KPI 是大白话(如"品牌声量优先;单客获客成本不超过 100 元"):AI 解析出策略方向(声量优先 → CPM/广覆盖)+ 成本上限(100 元 → oCPM 出价区间)。
33
34### 输入 2:投放可行性评估清单 HTML 文件(3 段)
35
36- **段 A 广告主类型**:推导画像(如"中小广告主·新手·To C·虚拟商品服务")→ 影响策略激进程度
37- **段 B 可行性评估**:6 维度(预算充分性/素材准备/合规风险/落地页承接/测试周期/KPI可达性)的 ✅/⚠️/❌ 状态
38- **段 C 优化建议**:用户需要补什么
39
40> ⭐ **策略针对性**(v1.2 起):
41> - ⚠️ 项 → **段 A 字段**里标注风险与建议(段C 已废,标注全部由段A 负责)
42> - ❌ 项 → **段 A 字段**里标注"必须补齐才能投放"+ 具体补齐指引(**融入字段值,不要单独开 alert 块**)
43> - 如"素材都没准备 ❌" → 段 B 标注"需先补产品图/视频素材",具体指引融在段 B 的"成品规格"或"品牌资产透传"字段里
44
45### 路径判定(参考可行性评估"历史经验")
46
47- 从没投过 / 无在投账户 → 走「基建路径」,参考 `ai-analysis-expert-newproject` 五维基建
48- 投过没达预期 / 不错想扩量 / 正在投想优化 → 走「诊断路径」,参考 `ai-analysis-expert-diagnose`
49
50### 投放方式判定(试跑发现的关键约束)⭐
51
52- **用户指定了版位**(如"只投朋友圈+视频号""排除公众号"等强约束)→ 走**标准投放**(`tencentads-delivery-standard-create`),可手动指定版位
53- **用户未指定版位 / 接受智能择优** → 走**智投 AIM+**(`tencentads-delivery-smart-create`),版位系统智能择优
54
55> ⚠️ 原因:智投(AIM+)版位是系统智能择优,**不可手动指定"只投某版位/排除某版位"**。若立项单有版位强约束却走智投,建单后版位不可控。
56> 此判定结果写入段A「投放方式」字段,ai投手据此选调哪个建单 skill。
57
58**转化归因前置条件(试跑发现的关键约束)⭐**:
59> 建单时 conversion_id 必须带链路信息,否则报 1801106。账户需先在腾讯广告后台配置转化归因链路。
60> 若用户账户未配置,媒介经理应在段A末尾提醒,并给出以下指引(来源:WebSearch 联网查腾讯广告官方文档):
61> 1. 开通权限:联系行业运营,提供 UID/MDMID 申请开通「营销链路」权限
62> 2. 新建转化:投放管理平台 →【资产】→【数据营销】→【转化归因】→ 新建转化
63> - 小程序:填 AppID(gh_开头) → 选优化目标 → 选营销链路 → 勾选上报节点
64> - H5网页:填落地页URL → 获取JS密钥嵌入 → 选优化目标 → 选营销链路 → 勾选上报节点
65> 3. 联调激活:进入「转化联调」→ 上报行为数据 → 激活
66> 4. 建广告时选新的带链路的 conversion_id
67
68**品牌形象组件前置条件(试跑发现的关键约束)⭐**:
69> 建创意时 brand 组件是模板必填项(缺则报"模板必填组件缺失: brand"),需在腾讯广告后台预先配置**新版品牌形象**(旧版报1800355"must use new version brand",全场景强制新版)。
70> 若用户账户未配置,媒介经理应在段A末尾提醒,并给出以下指引:
71> 1. 入口:投放管理平台 →【资产】→【创意资产管理】→【品牌形象】
72> 2. 新建**新版**品牌形象:
73> - 上传品牌 logo 图(**512×512像素**,新版统一标准)
74> - 填写 brand_name(**2~12个字**,如"某某优选")
75> - 保存后在创意中用 component_id 引用(数字类型,如 `{"component_id": 1940737385209}`)
76> 3. ⚠️ 旧版品牌形象(200×200/80×80/300×300等规格)已不可用,全场景报1800355,必须新建新版
77> 4. 查账户已有品牌组件:`get-components.mjs '{"account_id":"<ID>","component_type":"BRAND"}'`,返回含 component_id + brand_type(common/wechat_channels等)
78
79**落地页前置条件(试跑发现的关键约束)⭐**:
80> 建创意时 main_jump_info 落地页组件是模板必填项,需账户侧预先在【资产→创意资产管理→落地页】中配置好落地页(不限于小程序,H5/小程序/应用宝等各类落地页均在此配置):
81> - 入口:投放管理平台 →【资产】→【创意资产管理】→【落地页】→ 新建落地页
82> - 按落地页类型配置(小程序/H5等),配置并审核通过后建创意时引用
83> - 若未配置:建创意时报 1800007 "Invalid ID of wechat mini program"(小程序)或落地页字段为空等错误
84> 若账户未配置,媒介经理应在段A末尾提醒用户先到【资产→创意资产管理→落地页】配置落地页。
85
86## 产出:《投放策略纪要-[项目名].html》(三段结构)⭐
87
88> **重要**(v1.28.0 修订):fallback 模式的《投放执行确认单》HTML **与《投放可行性评估》共用 `html-report-card` 卡片规范**——骨架 `html-report-card/assets/template-jinshouzhi.html`、样式 `assets/theme.css` 全文内联、遵守 `references/design-rules.md` 16 条硬规则、交付前跑 `scripts/check_html.py` 需 0 error。`references/html-memo-template.md` 只提供**内容结构**(段A/段B 字段、占位符来源、一致性自检),不再内嵌独立 HTML 模板。
89
90> ⭐ **v1.2.1 UI 统一**:策略纪要与《投放可行性评估清单》**共用同一套设计系统**,两份 HTML 产出视觉上必须是同一套文档(v1.3 起立项单是对话栏文字,不参与 UI 统一):
91> - 字体:系统字体栈(`-apple-system / PingFang SC / Microsoft YaHei`),**不引 Google Fonts、不用衬线展示字体**
92> - 底色 `#f7f7f5` 纸感灰 + 单张白卡 `.container`(max-width 900px / radius 12px / 轻投影)
93> - 主色 `#378ADD`;状态色 ok `#27ae60` / warn `#e67e22` / bad `#c0392b`
94> - 章节用细线 `#f0f0ed` 分隔 + 3px 主色竖条标题;页脚/底纹 `#fafaf7`
95> - 段落区分只靠竖条与 seg-tag 底色轻量区分:段A 蓝 / 段B 绿 `#27ae60`(v1.18.0 起段 C 已废,CSS 类保留无害)
96> - ⭐ **topbar 左侧必带金手指 logo**(v1.14.0 起):图标 base64(读 `references/gf-logo-base64.txt` 替换 `{{GF_LOGO_BASE64}}`)+ "金手指 / AI · Ad Agent" + 竖线分隔,与可行性评估同款;不自己画 SVG、不引本地路径、不用 emoji
97> - ❌ 禁止:玻璃拟态 / backdrop-filter、渐变文字、多层 radial-gradient 背景、大号衬线标题、深色终端代码块、入场动画
98> - 写文件前跑一遍模板末尾的「一致性自检」清单
99
100### 段 A:投放策略段(给 ai投手 建单用)⭐v1.20.0 补五维基建分档推导
101五维基建给**具体数字区间**(默认基线,用户有经验则覆盖)。**v1.20.0 起:区间必须按预算分档推导给出**(不再给"裸区间"):
102
103- **投放方式**:按上方「投放方式判定」结论填写。**格式固定**(v1.20.0):`智投 AIM+(tencentads-delivery-smart-create)` 或 `标准投放(tencentads-delivery-standard-create)`——skill 名括号附在后面,让 ai投手直接复制选用建单 skill。**v1.23.0 起**:是否智投不设独立字段,由本字段派生(`isSmartDelivery` = 智投 true / 标准 false,灌 open_config 时派生后照传)
104- **优化目标 og(v1.24.0 判定逻辑重写,建单必填)**:双字段——`optimizationGoal`(og 英文枚举)+ `optimizationGoalName`(og 中文名)。**判定对照 `references/og-library.md`(层1 语义路由层:33 个浅层 og,不含深转、不含行业特化)**:官方四元组联动(营销目的→推广产品→营销载体→优化目标)+ 归因硬门槛(不接归因=不能用转化 og)——**营销目的输入 = C2 投放目标(v1.24.7 起 C1 已删,品牌宣传由 C3"品牌声量优先"单信号路由)**;小店=平台自动归因(**优先推荐**,前提=告知用户自行搭建官方小店落地页);落地页=JS;App=SDK/API;无归因=**点击 og + CPC 出价(兜底)**。**出价联动二分**(v1.24.2):选转化 og → bidding 只能 oCPX(与 `bidding` 交叉校验,矛盾即报);选点击 og 兜底 → bidding 必须 CPC(按点击计费,不优化转化)。行业特化 og(金融开户/入金、教育低价课、短剧看剧等)不进库,涉及时调知识库查
105- **账户**:账户数(**按日预算 4 档分档推导**,v1.20.0)+ 账户类型三选一(白户首选/老户重启/灰户避开):
106 > <1000 元/日 → 1 个 | 1000-5000 → 1-2 个 | 5000-20000 → 2-3 个 | >20000 → 3-5 个
107 - 字段值附一行小字推导:"日预算 X 元 → 推 N 个账户"。**不再一律"默认 1 白户"**(高预算项目会被低估账户数,过审风险高、量级天花板低)
108- **版位**:主投版位(依提需渠道偏好)、排除版位
109- **广告结构**:**按日预算 3 档分档**(v1.20.0):
110 > <2000 元/日 → 3×3×5 | 2000-10000 → 3-5×3-5×5-10 | >10000 → 5×5×10
111 - 字段值给分档结果(如"日预算 3000 → 4 广告 × 4 创意组 × 8 素材"),不给通用裸区间
112- **出价**:出价方式(oCPM等)、出价金额区间、考核指标(AMS枚举,透传自需求单)。**考核指标分两个独立字段**(v1.24.1):`kpi`(考核目标,单指标、只用成本口径,如 `成本≤90元` CPA 上限,透传需求单成本预期)+ `kpiRedline`(考核红线,**与 kpi 平级、独立指标**而非成对关系,按指标类型推导——**成本类**:常规 × 1.2-1.3 上浮;**ROI/量/率类**:常规 × 0.7 下浮;**触发动作暂不建设**,字段值先录入)。**v1.20.0 出价公式(核心推导依据)**:
113 > **初始出价 = 考核成本 × 50%-70%**
114 - 字段值附一行小字推导:"考核成本 X 元 × 0.5-0.7 = 初始出价 Y-Z 元"——金额区间是**结果**,公式是**依据**(可施工内容,不属"待办型警告",保留)
115 - 调价节奏附在字段值里:单次调价 ≤10%、观察 4 小时再动、冷启动期别频繁调、累计 5-10 个转化后可回调
116- **预算**:日预算/总预算/上线日期(透传)
117- **定向/时段**:
118 - **定向方式默认值**(v1.20.0):`系统智能定向(首选),有老客种子叠加 lookalike`——oCPM 宽松定向利于探索,有种子再叠
119 - **投放时段基线**(v1.20.0,用户经验可覆盖):00-07 低/暂停 | 09-11 放量 | 14-17 观察 | 20-23 高峰
120 - 🚨 **日内时段渲染硬规则**(v1.25.6,实测 bug 修复):时段基线在字段值里**就是一行文字**(`00-07 低/暂停 | 09-11 放量 | 14-17 观察 | 20-23 高峰` 这种竖线分隔格式)——**禁止**做成"每小时一行"的表格(实测 bug:agent 自由发挥把时段拆成 0-0 / 1-0 / 2-0- 每小时一行,且把字符串当 iterable 逐字符遍历出乱码);**禁止**对时段字符串做逐字符 enumerate——它是 4 个"区间+短语"块,不是字符序列
121 - `deliveryHours` 传金手指时 key 是**时段区间**(如 `"00-07"`、`"09-11"`),值是**单个短语**(如 `"低/暂停"`、`"放量"`)——共 4 块左右,不按小时拆 key
122- **素材池衔接**(v1.20.0 新增字段):`素材池储备`——按段B 预算驱动测算结果填(如"20 张图片(总预算 6000 → 20 张档)"),让 ai投手建单时一目了然池子里有什么,避免段A/段B 信息断裂
123- **上新节奏**(v1.20.0 新增字段):`每 3-5 天补 1-2 条素材进池`——写"上新节奏"字段,让 ai投手/用户知道上线后怎么保持池子活性
124- **盯盘节奏**:每天 9:00/12:00/14:00/16:00/18:00 五时点。**v1.20.0 加"盯什么"一行**:盯指标 = 出量广告占比 / 各广告消耗分布 / 素材跑速 / 红线预警 / 冷启动进度
125- 🚨 **🚨 段A 末尾禁令(v1.18.0 起生效)**:**不输出**任何"针对可行性评估风险的处理"alert / 账户未配置项的"前置条件配置指引"块 / "合规文案自检" / "上线前必做审核预检"等**待办型警告**——这些内容**不属于执行单的职责边界**,应交给用户在投放时按段A「盯盘节奏」+金手指"项目管理→腾讯广告 Key 托管"自行检查。**执行单只交付"策略 + 可施工内容"**,不要越界变成"上线前待办清单"。可行性评估里的 ⚠️/❌ 项**已经在段A 字段里针对性标注完毕**(v1.2 起的规则,v1.18.0 后段C 删了、标注全部由段A 负责),不必再开新 alert 重复。
126 - ⚠️ **v1.20.0 边界澄清**:分档推导小字(账户/结构/出价公式)**属于"策略可施工内容"**,与"待办型警告"不同——推导说明**保留**,待办警告**禁止**。两者别混
127
128### 段 B:素材策略段(给 素材助手 用)⭐v1.17.0 按素材策略规范重写
129> 规范来源:金手指「素材策略专家」规范(material-strategy-assistant v3.2 brief_spec)的**策略层**——选什么类型、做多少、要不要视频、怎么传信息。逐条文案/生图提示词等执行层由下游素材模块做,不在本段。
130
131**① 核心主张(段B的灵魂,放最前)**
132- 结合 `一句话卖点 × 目标人群 × 投放目标` 提炼**一条**加粗核心主张 + 一两句判断理由(为什么呈现这条最能促转化)。**单一聚焦,只此一条**。
133- 例:**睡前点一支,让房间和情绪都慢下来**——该人群痛点是睡前焦虑、购买由情绪价值驱动,呈现"助眠仪式感"比堆成分参数更能促下单。
134
135**② 创意类型推荐(图片选 2-3 类 + 视频规划)**
136- **图片只能在官方 13 种类型里选**(🚨 严禁自创/改名/野生命名,如"场景海报""好友分享图"一律不用):
137 > 常规海报 · 模拟朋友圈 · 小红书笔记 · 仿对话 · 数字人海报 · 公众号资讯 · 榜单素材 · 户外海报 · 备忘录 · 大字报 · 九图拼接 · 四图拼接 · IP海报
138- **视频 4 种**(仅满足视频门槛时规划):情景剧 / 单人口播 / 动图(图片动态化)/ 混剪(旁白+画面剪辑)
139- 选型逻辑(🚨 **仅内部判断用,绝不写进产出**):海报类=品牌方正面传递;原生类=仿素人分享弱化广告感;平台样式类=仿平台原生界面;业务元素类=直接亮利益物。**强合规行业(金融/医疗等)原生类风险高(易触"受益人口吻"红线),优先海报类+平台样式类**
140- 每个推荐类型给一行:**官方类型名 + 方向/数量 + 一句「怎么给用户传信息」的大白话**(如"像朋友晒店,熟人口吻+评论互动"——🚨 产出里不出现"平台样式类/原生类"等内部黑话,一律翻译成大白话)
141- 视频行标注叙事套路(痛点式=痛点共鸣→解决方案→行动引导 / 话题式=热门话题→相关性→引导 / 冲突式=抛误解→解释→共识→引导),按选题各挑一条,不全套同一条
142
143**③ 数量测算(🚨 预算驱动,唯一权威;v1.20.0 档位改互斥)**
144> 预算取自上游 `demand_budget_limit`(总预算),账户数取自段A。
145
146| 预算档位(互斥,v1.20.0) | 图片数量 | 视频 |
147|---|---|---|
148| **<1000 元** | 约 10 张 | ❌ |
149| **1000-5000 元** | 约 15-20 张 | ❌ 默认不做 |
150| **5000-10000 元** | 10~50 张随预算递增 | ❌ 默认不做 |
151| **>10000 元** | 按账户数测算,**单账户约 50 张封顶**,多账户线性叠加 | ✅ 可做 |
152| 任意预算但**点名视频/投视频号** | 按上表 | ✅ 做 |
153
154> 🐛 v1.20.0 修复:旧表 `≤500 / ~5000 / 500-1万 / >1万` 档位边界重叠(如总预算 6000 元同时命中"约 5000"和"500-1万"两档,无法判定),改为上表**互斥档**。
155
156**三条硬约束**:① 素材量**最低 10 条**(首投场景由 v1.22.0 公式的"储备 ≥30"取代);② **单账户图片约 50 张封顶**(行业基建基准 3–5 广告 × 3–5 创意组 × 5–10 素材 ≈ 50/账户);③ **视频门槛 = >1 万元 或 明确要视频/投视频号**,否则纯图片。
157
158**④ 基建驱动测算公式(v1.22.0 新增,精确数字以此为准)**
159
160> 输入:**日预算**(段A)+ **CPA**(考核成本,需求单 KPI 解析)。公式把「预算 → 基建(广告数)→ 素材/文案数量」串成一条线。
161
162| 输出项 | 公式 | 说明 |
163|---|---|---|
164| 广告数 | `日预算 ÷(CPA × 20)` | 每条广告日消耗达 CPA×20 才能积累足量转化跑出模型;算出日预算能支撑的并行广告条数。结果取整,不足 1 条按 1 条 |
165| 素材数 | `广告数 × 3-5` | 每条广告配 3-5 素材,与段A 广告结构分档一致 |
166| 外层文案数 | `= 广告数` | 每条广告 1 条外层文案(外层文案与按钮汇总表 ⑦ 按此动态算) |
167| 首条评论数 | `= 广告数` | 每条广告 1 条首条评论(朋友圈版位) |
168
169**硬约束:首次投放(基建路径)素材储备不低于 30**——在投素材(广告数×3-5)是当期消耗量,素材池储备(首投 ≥30)是轮换余量,两者别混;`materialPool.total` 按储备口径填。
170
171**示例**:日预算 1500 元、CPA 90 元 → 广告数 = 1500÷(90×20) ≈ 0.83 → 1 条;素材 = 3-5 张/广告;外层文案 1 条、首条评论 1 条;首投素材池储备 ≥30。
172- 满足视频门槛时明确规划:**哪几类视频、各几条、为什么**(视频物料生成为下游职责,本段只到策略层,不遗漏即可)
173- 融合表列序固定:**创意类型 · 优先级 · 尺寸 · 数量 · 怎么给用户传信息**(最后列填大白话,不填分类名/术语句)
174
175**④ 尺寸规范(🚨 按创意类型定横/竖/方,不再一刀切)**
176- **竖** 9:16 1080×1920:榜单素材、大字报、情景剧/口播/混剪
177- **横** 16:9 1920×1080:常规海报、公众号资讯、数字人海报、动图
178- 未列出类型按画面特性判断(信息密/竖屏沉浸走竖;横向图文卡片走横;不确定**方图 1:1 800×800 兜底**)
179- 整批素材横/竖/方比例**尽量落在约 4:4:2**
180- **成品规格要求**(保留):素材模块须把成品**裁到对应类型尺寸并 JPEG 压到 <1MB**(生图+裁剪压缩由素材模块负责,投手直接上传)
181
182**⑤ 一句话卖点**:透传自需求单 Part2(与①配合——卖点是原料,核心主张是提炼)
183
184**⑥ 品牌资产透传(缺口C修复,保留)**:本段**固定带一栏「品牌资产透传」**,**引用**(不复制)提需确认单 Part2 的品牌资产:
185 ```
186 【品牌资产透传·引用自《投放需求信息确认单》Part2】
187 - logo:[有/无/待确认](来源:确认单Part2,素材助手请以确认单文件为准取原图)
188 - 主色/品牌色:[色值 或 待确认]
189 - slogan:[原文 或 待确认]
190 - 风险提示语:[原文 或 待确认]
191 ```
192 - 缺失项用 `pill miss` 标记(**仅状态显示,不附"建议联系设计/品牌方"等待办型话术**),不编造。logo/风险语只**透传**不参与生成,留待后置组装环节精确叠加。
193 - v1.19.0 起:模板里那段"→ 素材助手需直接读取...本栏仅作透传指引"也删了——透传栏只展示字段状态,不输出"该怎么做"的指导性话术
194
195**⑦ 外层文案与按钮汇总(v1.25.6 起含 CTA 规则;v1.25.7 恢复素材策略专家原始规范)**
196
197- **外层文案**(`outerCopy` string[]):条数 = 广告数;每条一句话、与素材方向呼应
198- **首条评论**(`firstComments` string[]):条数 = 广告数(朋友圈版位);熟人口吻、不直接提产品名
199- **转化按钮**(`ctaCopy` {primary, backup})——**原始规范**(来源:素材策略专家 copywriting_method.md「转化按钮」章节,v1.25.7 恢复,替换 v1.25.6 臆造的 og 映射表):
200
201 - **固定选项,不可自定义**:从平台可用列表里选——朋友圈共 **17 个**:`了解更多 / 去逛逛 / 查看详情 / 立即体验 / 立即咨询 / 立即购买 / 立即抢购 / 立即领取` 等。**不要发明列表外的按钮文案**(v1.25.6 臆造过"立即预约/免费咨询/立即注册"等,均不在平台列表)
202 - **按产品调性选**:
203 - 氛围型/无压迫产品(香氛/家居/生活方式/内容订阅)→ 优先 **"去逛逛"**
204 - 强购买意向(实物电商/虚拟商品直售)→ **"立即购买"**
205 - 限时活动/优惠驱动 → **"立即抢购"**
206 - 工具试用/体验驱动 → **"立即体验"**
207 - 服务咨询/留资类 → **"立即咨询"**
208 - 权益/券类发放 → **"立即领取"**
209 - 兜底(无明显调性倾向)→ **"了解更多"**
210 - ⚠️ **硬约束:选什么按钮,落地页就必须能完成对应动作,否则审核驳回**——按钮文案暗示的行为要与落地页能力一致(这一条同时隐含了与 og 的一致性:og=COMPLETE_ORDER 配"立即购买"✅、配"去逛逛"❌)
211
212## 进度条(v3.14 起,每条回复开头必带;v1.25.0 起改三步制)
213
214本 skill 执行期间处于 3/3 阶段,每条回复消息最开头先放一行进度条再接正文(v1.25.0 起全链路 4 步变 3 步:提需含灌入 → 可行性评估 → 确认单含灌入+上线):
215
216```
217📍 3/3 执行确认单+开启投放|✅ 需求收集 ✅ 需求评估 ▶ 执行确认单(产出即灌入)
218```
219
220## 一气呵成产出(v1.26.0 起主路径无 HTML,不做分段确认)
221
222段 A(投放策略)+ 段 B(素材策略)**一次性全部完成**,不做段间确认(v1.18.0 起段C 已删除)——
223- 不再设"交接点2a 媒介策略确认"和"交接点2b 素材策略确认"两个中间确认环节
224- **🚨 v1.26.0 起主路径不写 HTML 文件**:两段内容直接落成 `strategy` 全量结构化字段(48 个),灌入金手指配置页——**页面本身就是"确认单"**,用户在页面上核对/修改(实测背景:产出本地 HTML + 拉起页面 = 同一份内容出现两次,冗余)
225- 主交互全程在配置页,本地无任何冗余产物
226- **fallback 触发条件收紧(v1.29.0)**:只有两种情况才写本地 HTML —— ① **用户明确选择「先不连金手指」**(且已被告知"策略只能落本地文件、不能直接开投");② **已连上但调用失败 / `degraded:true`**。⛔ **连接未就绪 ≠ fallback**:那种情况按 agents《第 0 步 连接就绪检查》先引导连接,**不得直接产出 HTML**。触发后写《投放执行确认单-[项目名].html》存档并按既定轨道打开,话术"确认后我再灌入金手指"。**HTML 走 `html-report-card` 卡片规范**(与可行性评估同一套模板,v1.28.0 起统一);内容结构见 `references/html-memo-template.md`
227
228## 灌入金手指(策略产出后立即执行;v1.26.0 起主路径)
229
2301. **拼装 `strategy` 全量结构化字段**(48 个:`demand.groups` 5 分区 + Part 2/3/4 顶层字段)——数据源:**对话上下文里的立项单完整文字**(拼 `demand.groups`)+ 本环节段A/段B 策略结论(拼 Part 2/3/4)。⚠️ **这是全流程唯一一次灌入**,需求单字段必须一并灌进去,不能只灌策略字段。字段清单与填值规则见下方《灌入金手指:open_config 全量字段》章节
2312. **立即调金手指 `open_config` 全量灌入**(不等用户对话确认——用户确认移到页面上)
2323. **session 双重校验**:① curl 字段清单校验(抓漏传字段)→ ② sleep 2 后 curl 存活复查(防服务端重启清 session)——**两步都通过才拉起页面**
2334. **`present_files` 传 session 短链拉起配置页**(唯一打开方式)+ **同条回复里前置兜底 markdown 超链接**("右栏要是空白的,点这里进配置页")
2345. **fallback**:金手指 MCP 不可用或 `degraded:true` → 写《投放执行确认单-[项目名].html》(路径 `投放产出/[YYYY-MM-DD]/投放执行确认单-[项目名].html`,工作区相对路径):**骨架/样式走 `html-report-card`**(`assets/template-jinshouzhi.html` + `assets/theme.css` 全文内联 + `references/design-rules.md` 16 条硬规则 + `scripts/check_html.py` 0 error 闸门,与可行性评估完全同一套),**内容结构**(段A/段B 字段、占位符来源、自检项)见 `references/html-memo-template.md`;按既定轨道打开,话术改回"确认后我再灌入金手指",不阻塞产出
235
236## 交接摘要(3/3 灌入金手指并拉起页面 · 对外话术,v3.16 重排格式;v1.26.0 起主路径不产本地确认单)
237
238**受众分层(核心认知)**:投放执行确认单是**给投放系统/机器读的**,不是给用户读的。里面会有 oCPM 出价、版位配置、转化归因这些专业内容——用户看不懂**很正常,也不需要看懂**。对用户只需要说清:**大体打法是什么(一句白话)、他还缺什么、方向对不对**。
239
240**🚨 文本格式硬约束**(v3.17 用户实测反馈"老是大段大段的给,没有重点"):单段 ≤ 80 字、超出用列表、核心加粗前置、emoji 标记、空行分隔。
241
242**🚨 session 双重校验通过 + present_files 拉起配置页后,🚨 必做紧跟这段收尾话(不能只丢产物就走;v1.26.0 话术,兜底链接前置)**:
243
244```
245🎯 投放方案做好了——内容已经灌进金手指配置页,在右边栏打开了。
246右栏要是空白的,点这里进配置页:[点这里进配置页]({{BASE/pre-launch?session=SID}})
247
248**这份是给投放系统读的**,专业内容您不用细看。
249
250**📌 大体打法**
251- [版位选择 + 预算节奏 + 素材打法,每条 ≤ 20 字]
252
253**⚠️ 之前评估的风险已落处理**
254- [风险1] → [处理方式]
255- [风险2] → [处理方式]
256
257**🔧 你在页面上做**
258- 页面**当前停在第一步「需求单确认」**(2026-08-26 前端源码实证:`?session=` 与 `#s=` 两条灌入路径都硬编码 `o(G.PLAN_PREVIEW)`,与 strategy 内容无关;`open_config` 入参只有 `strategy/rawHtml/project_id`,无 stage 参数,调用侧无法控制)——**灌入的策略字段已经在页面里**,点「确认」进第二步「AI投手准备」就能看到「投放策略」「素材策略」两个 tab
259- 先核对预填的字,要改的直接在页面上改;大改回来说一声,我改完重新灌一版
260- 然后**手动点"下一步"进"投放计划"** → 关联账户 → 生成投手 → 上传素材 → 点「项目上线」
261
262💡 链接 30 分钟内有效,过期了说一声我重新灌。
263```
264
265**"大体打法"提炼标准**:
266
267- 从段 A 投放策略提炼,翻译成普通人能懂的列表化短句——版位选择 + 预算节奏 + 素材打法三要素
268- ✅ 好例子:`📌 大体打法` + 列表:`走智投自己挑版位` / `日预算 500 起小预算跑一周` / `3 套素材轮着赛马,哪套跑顺加钱`
269- ❌ 坏例子:`oCPM 出价 80-120,版位朋友圈+视频号,RTA 策略……`(术语复述不是白话)
270- 用户看了能向老板/同事转述"我们要怎么投",才算合格
271
272**❌ 反例**(旧风格,截图里那种大段;数字一律是占位示意,**真实产出禁止照抄任何示例数字**):
273
274> 🎯 投放执行确认单出好了,在浏览器里打开了——怎么出价、怎么搭结构、要准备什么素材,都写成具体的执行方案了。核心几句话:走智投让系统自己挑版位,[N]个新账户小结构开跑([N]条广告×[N]素材),探索期出价给到 [X]元、第[N]天起再按 [X]元线考核;素材做 [N] 条,[风格A]和[风格B]两组赛马,让数据告诉你哪个方向对。之前评估出的两个风险我在确认单里都落了处理:落地页没搭是硬阻塞……
275
276**对比**:反例单段 200+ 字平铺;正例拆 4 段、每段 ≤ 3 行、列表化。
277
278> ⚠️ **话术必须与实际轨道一致**:走 present_files 说"在右边栏打开了",走 Bash open 说"在浏览器里打开了"。**不谎报**已打开。
279> 🚨 **保真规则(v1.26.0)**:收尾话术/交接摘要只陈述**实际发生的动作**——session 校验失败了就如实说"重新灌了一版";没打开不说"已打开";没灌入不说"已灌入";**禁止照抄模板里的示例状态**(模板写"在右边栏打开了"≠你真的拉起过)。
280> ❌ **禁用标签格式**:"这是什么:xxx""给谁用:xxx"——表单不是人话。
281> ❌ **不引导用户看执行细节**:不说"你看看出价对不对、版位选得行不行"——用户只确认方向。
282
283## 📌 灌入后页面落点:stage 现状与执行单位置(2026-08-26 前端源码实证)
284
285**结论先给**:`open_config` **无法指定落在哪一步**——金手指前端 `index-*.js` 里 `?session=` 与 `#s=` 两条灌入路径都硬编码 `o(G.PLAN_PREVIEW)`,与 strategy 内容无关;`open_config` 入参只有 `strategy / rawHtml / project_id`,没有 stage 参数,也没有可用的 URL 参数。**灌入后页面一定停在第一步「需求单确认」。**
286
287**页面五步与数据消费**:
288
289| stage | 页面 | 消费的数据 |
290|---|---|---|
291| `PLAN_PREVIEW=1` | 需求单确认 | 只读 `demand.groups`(空则显示"召唤媒介经理"占位) |
292| **`AI_OPTIMIZER=4`** | **AI投手准备 ← 执行单在这里** | 三个 tab:信息配置 / **投放策略** / **素材策略** |
293| `UPLOAD_MATERIAL=5` | 投放素材准备 | 用户上传 |
294| `GO_LIVE=6` | 投放执行 | — |
295| `DASHBOARD=7` | 效果复盘 | — |
296
297**两个策略 tab 的显示条件**(源码函数,决定我们必须灌哪些字段):
298- **投放策略** `dc()`:`kpis` / `fields` / `deliveryHours` 任一非空
299- **素材策略** `fc()`:`kpis` / `sellingPoint` / `specs` / `poolDesc` / `testDirections` / `brandAssets` / `coreClaim` / `creativeDirections` / `finishedSpec` 任一非空
300
301→ **只要按本章节灌全 48 字段,两个 tab 的数据就都在**,用户在第一步点一次「确认」即进入执行单页。
302
303**对外话术**:如实说"页面停在第一步需求单确认,你核对完点「确认」就进 AI投手准备,投放策略和素材策略都已经预填好了"。**不要**说"已打开执行单页"(不实),也**不要**当成故障道歉(这是平台当前行为)。
304
305**给金手指侧的改法**(已提反馈):把两条路径的 `o(G.PLAN_PREVIEW)` 改为 `o( dc(ct)||fc(ct) ? G.AI_OPTIMIZER : G.PLAN_PREVIEW )`——含策略字段直接落执行单页,仅需求单才停第一步。
306
307## 🚀 灌入金手指:open_config 全量字段(原 4/4;v1.26.0 起策略字段拼装完成后立即执行)
308
309**触发**:段A/段B 策略字段拼装完成后**立即执行**(不等用户对话确认——用户确认在配置页面上完成;v1.26.0 起主路径**没有 HTML 落盘步骤**,拼完字段直接灌)。用户回对话说"重新灌/再开一次/过期了" → 也走本章节重新灌入(新 session 新链接,旧的自然过期)。
310
311**执行流程**(严格按顺序):
312
3131. **调金手指 `open_config`**(工具全名 `mcp__jinshouzhi__open_config`——2026-08-26 起金手指连接器 key 为 `jinshouzhi`(token 鉴权),14 个工具;旧 key `ad-goldfinger` 是残留通道不再使用)——⚠️ **全部走结构化字段,不传任何 HTML**(v1.16.0 起):
314
315 工具签名是 `strategy`(object,必填)+ `rawHtml`(string,可选)。**`rawHtml` 不用**——`strategy` 里直接给结构化字段,配置页前端本就支持结构化通道,比"生成 HTML 再用 DOM 解析回结构"更稳。
316
317 ```
318 open_config({
319 strategy: {
320 // ══ 需求单:结构化 groups(对应配置页「需求单」区)══
321 demand: {
322 title: "投放需求单 · [项目名]",
323 meta: "[行业] · [投放目标] · [日期]",
324 groups: [
325 { title:"基础信息", icon:"📋", fields:[
326 {k:"产品名称", v:"[offerId]"},
327 {k:"产品简介", v:"[demand_offer_intro]"},
328 {k:"核心卖点", v:"[demand_selling_points]"} ]},
329 { title:"预算与目标", icon:"💰", fields:[
330 {k:"测试目标", v:"[demand_test_goal]"},
331 {k:"考核指标", v:"[demand_kpi]"},
332 {k:"总预算", v:"[demand_budget_limit]"},
333 {k:"投放周期", v:"[demand_budget_cycle]"},
334 {k:"上线时间", v:"[demand_launch_date]"} ]},
335 { title:"人群策略", icon:"🎯", fields:[
336 {k:"客户类型", v:"[demand_audience_logic]"},
337 {k:"核心人群", v:"[demand_core_ta]"} ]},
338 { title:"素材与承接", icon:"🎨", fields:[
339 {k:"现有素材", v:"[demand_has_material]", badge:"[风险提示]", badgeType:"warn"},
340 {k:"线上门面", v:"[demand_carrier]"},
341 {k:"商品渠道", v:"[demand_product_channel](C11 条件题,未问则整条略去)"},
342 {k:"开发资源", v:"[demand_dev_resource]"} ]},
343 { title:"其他", icon:"📎", fields:[
344 {k:"合规要求", v:"[demand_compliance]"},
345 {k:"历史经验", v:"[demand_history]"} ]}
346 ],
347 footNote: "由金手指 · 媒介经理生成"
348 },
349
350 // ══ 策略单:结构化字段(对应配置页「投放策略」区)══
351 offerName: "[项目名]",
352 pathType: "[基建/诊断]",
353 deliveryMode: "[智投 AIM+ / 标准投放]",
354 isSmartDelivery: true, // 派生字段(v1.23.0):deliveryMode 为智投时 true,不独立取值
355 optimizationGoal: "[og 英文枚举,如 CLICK]", // v1.23.0:由开发资源+知识库判定
356 optimizationGoalName: "[og 中文名,如 点击]", // v1.23.0:与英文枚举成对展示
357 accountCount: 1,
358 accountNote: "[如:新白户]",
359 dailyBudget: 1500, // 数字,元
360 totalBudget: 50000, // 数字,元
361 bidding: "oCPM", // 转化 og 配套;兜底场景(点击 og AD_CLICK)改 CPC
362 bidRange: 96, // 数字单值(元),不给区间(v1.20.0 起口径;考核成本×50%-70% 推导结果)
363 kpi: "[考核成本上限,如 成本≤90元(CPA)]", // v1.23.1:单指标、只用成本口径
364 kpiRedline: "[考核红线,v1.24.1 独立指标;成本类=常规×1.2-1.3 上浮,ROI/量类=常规×0.7 下浮;触发动作暂不建设]",
365 adStructure: "[如 3条广告 × 3创意组 × 5素材]",
366 adCount: 3,
367 creativeGroupCount: 3,
368 audience: "[人群定向建议]",
369 // placements 已删(v1.24.3):主投版位不灌入(智投场景系统择优无预设值),金手指页面手动配置
370 deliveryPeriod: "[如 30天]",
371 launchDate: "[YYYY-MM-DD]",
372 watchTimes: ["09:00","12:00","14:00","16:00","18:00"],
373 // ⚠️ materialPool 按"段B 预算驱动测算结果"动态填,示例值仅示意(<1000 档 → 10 张纯图片;>1万 → 按账户数 50张/账户 + 可做视频)。**不要照抄这个示例值**(v1.20.0 修复:旧示例 {50,10,40} 是已废弃的"固定 50 条=10视频+40图文",容易诱导回退旧逻辑)
374 materialPool: { total:20, video:0, image:20 },
375 sellingPoint: "[一句话卖点]",
376 coreClaim: { claim: "[核心主张]", reason: "[判断理由]" }, // Part 3(v1.24.5 起)
377 creativeDirections: [ // Part 3 素材方向(v1.24.5 起由 materialTypes 更名)
378 { category:"image", type:"[官方13类之一]", priority:"主推", count:8, size:"竖9:16 1080x1920", message:"[怎么给用户传信息·大白话]" }
379 ],
380 materialSpecs: ["竖版9:16 1080x1920","方图1:1 800x800"],
381 finishedSpec: "[成品交付规格:裁剪/压缩要求]", // Part 3
382 outerCopy: ["[外层文案1]"], // Part 4(v1.24.6 起 copyDeck 拆三)
383 firstComments: ["[首条评论1]"],
384 ctaCopy: { primary: "[主选按钮文案]", backup: "[备选]" }
385 }
386 })
387 ```
388
389 > **字段依据**(已抓配置页前端 JS 核实,勿臆改):
390 > - 需求单:`rawDemandHtml || demandHtml` 若是 HTML 则 DOM 解析;**否则读 `demand.groups`(我们走这条)**
391 > - 策略单:`rawHtml || html` 若是 HTML 则解析;**否则走纯结构化分支读上面那 23 个字段(我们走这条)**
392 > - `fields` 里每项结构:`{k, v, badge?, badgeType?, pending?, full?}`;`badgeType` 取 `ok`/`warn`/`danger`
393 >
394 > **为什么不传 HTML**:HTML 通道依赖前端 DOM 选择器(`.sec` `.field` `.k` `.v`),我们改模板样式就可能解析失败;结构化字段直给,不存在解析风险。实测 `success:true` / `degraded:false`,页面正常预填。
395
396 **填值规则**:
397 - 数值字段(`dailyBudget`/`totalBudget`/`adCount` 等)传**数字类型**,不要传 `"1500元"` 这种字符串
398 - `demand.groups` 里**没问到的字段整条略去**(不写"待定/缺失"占位);分区内全空则整个分区不放
399 - 用户答"没有"的项**要如实带上**并配 badge(如现有素材"都没有" + `badge:"需从零准备"`)
400 - 值都从对话上下文的立项单文字 + 本环节执行单内容取,**不编造**
401
4022. **取返回的 `sessionId`,做 session 双重校验**(⭐ v1.26.0:字段校验 + 存活复查;2026-08-25 实测教训——灌入成功后服务端重启清了内存 session,3 分钟后链接 404,用户点开空白):
403
404 - **为什么改走 session 短链**:`recommendedLink` 的 `#s=` 内联深链 1000~3000+ 字符,在 AI 调用链复制转手中**稳定损坏**(两次实测 1358/1370 字符均 gzip 报废,232 字符才安全)——不是 URL 超长(上限 32000),是复制保真问题。而 `?session=` 深链只有 32 位 hex,**零复制风险**;FAT 单实例下 session 一定能查回(curl 实证)
405 - **deepLink 禁令修订(v1.25.2,分环境)**:~~"绝不给 deepLink"~~ → **FAT/单实例环境放行**(先 curl 验证 session 在,再 open);**生产/多副本环境仍禁**(内存 session 多副本查不回,点开空页——v1.11 教训不变)
406 - **curl 字段清单校验(必做,能精确抓漏传字段)+ 存活二次校验**——命令只做校验,**打开不在这条命令里**(一律 present_files,见下):
407
408 ```bash
409 SID='<返回的 sessionId>'
410 BASE='https://ad-goldfinger.app.fitgroup-fat.com' # 按当前连接器端点,勿照抄
411 # ① 字段清单校验(抓漏传字段)
412 curl -s --max-time 10 "$BASE/api/mcp/session/$SID" | python3 -c "
413 import json, sys
414 d = json.load(sys.stdin)
415 assert d.get('success'), 'session 不存在或已过期'
416 s = d.get('strategy', {})
417 P2 = ['offerName','pathType','deliveryMode','optimizationGoal','optimizationGoalName',
418 'accountCount','accountNote','excludedPlacements','adStructure','adCount',
419 'creativeGroupCount','bidding','bidRange','kpi','kpiRedline','dailyBudget',
420 'totalBudget','launchDate','deliveryPeriod','audience','deliveryHours',
421 'budgetAllocation','watchTimes']
422 P3 = ['sellingPoint','coreClaim','creativeDirections','materialPool','materialSpecs','finishedSpec']
423 P4 = ['outerCopy','firstComments','ctaCopy']
424 g = len(s.get('demand', {}).get('groups', []))
425 m2 = [k for k in P2 if s.get(k) is None]
426 m3 = [k for k in P3 if s.get(k) is None]
427 m4 = [k for k in P4 if s.get(k) is None]
428 print('offerName:', s.get('offerName'), '| demand 分区:', g)
429 print('Part2 漏:', m2 or '无', '| Part3 漏:', m3 or '无', '| Part4 漏:', m4 or '无')
430 assert g >= 1 and not (m2 or m3 or m4), '有字段漏灌'
431 print('字段校验通过')
432 "
433 # ② 存活二次校验(⭐ v1.26.0 新增):灌入成功 ≠ 链接可用——服务端重启会清空内存 session
434 # 实测:19:58 灌入成功 → 19:59 服务重启 → 20:01 查询 404(TTL 明明 30 分钟)
435 sleep 2
436 CODE=$(curl -s --max-time 10 -o /dev/null -w '%{http_code}' "$BASE/api/mcp/session/$SID")
437 [ "$CODE" = "200" ] && echo "存活确认 OK,可以拉起页面" || echo "存活确认失败(HTTP $CODE)→ session 已被服务端清掉,需重新 open_config 重灌"
438 ```
439
440 - **校验报错处理**:
441 - `session 不存在或已过期`(30 分钟 TTL)→ 重新调 `open_config`
442 - `有字段漏灌`(列出具体 key)→ 回到第 1 步补齐该字段重灌——**2026-08-24 实测此清单抓出过漏传的 `creativeGroupCount`**,比肉眼看页面猜"还差几项"精确得多
443 - **存活复查非 200**(⭐ v1.26.0)→ 服务端刚重启过、session 已被清——**重新调 `open_config` 拿新 session 再走一遍校验**;重灌成功后向用户如实说一句"刚才服务端重启了一下,我重新灌了一版"(保真规则:不装作没发生)
444 - `inlineMode` 返回 `lite` 是**正常的**;只有 `degraded:true` 才提示用户"内容较多,页面可能只预填了部分字段"
445 - **兜底链接前置(⭐ v1.26.0)**:右栏预览面板对深链渲染**偶发空白**(v1.25.1 已记录 iframe 对深链不可靠,两次实测空白)——兜底 markdown 超链接**不能等收尾才给**,要和 present_files 拉起页面**同一条回复**里就带上,用户看到空白立刻有出口:
446 ```
447 已在右栏打开配置页;右栏要是空白的,点这里进配置页:[点这里进配置页]({{BASE/pre-launch?session=SID}})
448 ```
449 session 短链本身就是短 URL(~90 字符),可直接做链接目标
450
4513. **生产/多副本环境 fallback(暂未启用)**:若 curl 查不回 session(多副本路由到别的实例),退回 `recommendedLink`(`#s=` 内联)——但 AI 调用链复制长 URL 有稳定损坏风险,**生产就绪依赖金手指侧加 `inlineChecksum`(payload sha256 前 8 位)或短码模式**(已列入给金手指的对接建议)。就绪前的过渡做法:URL 只复制一次进 shell 变量,同一条 Bash 命令「python 解码 `#s=` 校验 offerName → 通过才用 present_files 打开」,报错即重调 `open_config`(新链接重试,30 分钟机制内可多次)。
452 - 🚨 **打开一律走 `present_files` 传 session 短链**(右侧面板内拉起)——❌ **没有第二条路,绝不走 `Bash open` 跳外部浏览器**(用户实测反馈:跳外丢失对话上下文;agent 默认动作"Bash open"是 shell 语义陷阱,必须在 skill 里彻底排除这个选项;**校验命令里也不许内嵌 open**)。仅 fallback 模式(MCP 不可用)下的 HTML 存档产物走 present_files 推卡片
453
4544. **收尾话术**:session 双重校验通过、present_files 拉起配置页后,按《交接摘要》章节的收尾话模板输出(含**前置兜底链接**/大体打法/风险处理/页面待办/30 分钟有效期提示);fallback 模式(写了 HTML)才提存档路径。**保真规则**:只说实际发生的事。
455
456**异常处理**:
457
458- 金手指工具不可用(MCP 未连接)→ 提示:"开启投放需要连一下金手指(广告投放系统)。你在左侧连接器里把「金手指」连上,我再继续。"不硬调
459- 返回鉴权失败 → 提示:"这个项目还没在金手指里托管腾讯广告 Key——到金手指「项目管理 → 腾讯广告 Key 托管」配置一下,配好我再试。"
460- `open_config` 报错 → 如实告知,不编造"已灌入"
461
462**灌入之后的延伸(用户主动问时才做)**:
463
464- "看下数据" → 调 `get_project_data`(project=项目名,days 默认 7)
465- "有哪些项目" → 调 `list_projects`
466- 调整预算/出价/暂停 → 调 `adjust_project`——⚠️ **写操作必须先复述将要执行的调整,用户确认后才传 `confirm:true` 执行**;未确认只返回预览
467
468> ✅ **落库读写工具状态注记**(2026-08-25 复验,MCP v1.0.5 / server 1.0.48):金手指服务端问题 #3(生产库 `db_prod_ad_goldfinger.projects` 表不存在)**已修复**——`list_projects` / `get_project_data` / `adjust_project` / `validate_apikey` / `upsert_demand_brief` / `get_project_context` **恢复可用**(0824 曾全挡,历史注记作废)。用户问数据/调整时正常调用即可(写操作仍必须先复述确认再 `confirm:true`)。
469> **灌入预填与落库无关**(2026-08-24 源码核实):`recommendedLink` 的 `#s=` 内联 payload 是**纯客户端解码**(gzip+base64url,`PreLaunch.tsx` 的 decodeInline),与服务端数据库完全无关——只要 URL 复制完整,页面预填就正常。**"页面空白/显示旧数据"先查 URL 是否复制损坏**(走上方校验闸门)。落库增强(现已可用):open_config 灌入后**额外调一次** `upsert_demand_brief`(project + payload = strategy 全量)实现按项目落库、页面刷新后仍在。
470
471## 打印交接摘要(给下游读)
472```
473【交接点2 产出:投放策略(金手指已灌入)】主路径无本地 HTML 产物(v1.26.0 起字段直灌)
474- 需求字段 → 从提需 session 的 strategy.demand.groups 取(curl 校验时已拉回)✅
475- 段A 投放策略 + 段B 素材策略 + 文案 → open_config.strategy 全量 48 字段 ✅
476- v1.26.0 起字段拼装完成即灌入(已调 open_config,session 双重校验通过,配置页已 present_files 拉起)
477- fallback 模式才有文件:投放产出/[YYYY-MM-DD]/投放执行确认单-[项目名].html(MCP 不可用/degraded 时)
478- 用户在页面核对/改字段 → 生成投手/上传素材/项目上线
479- 后续数据/调整 → 金手指 get_project_data / adjust_project
480```
481
482## 上下游对齐(接口契约)
483| 下游需要 | 本环节产出? | 状态 |
484|---|---|---|
485| **投放方式(标准/智投)判定** | ✅ 段A「投放方式」字段 | 对齐(试跑补) |
486| 账户/版位/广告/出价/预算/定向 | ✅ 段A | 对齐 |
487| ai投手专属配置+盯盘节奏 | ✅ 段A | 对齐 |
488| 转化归因配置提醒 | ❌ v1.18.0 起不输出(属前置条件,交给用户自查) | 砍 |
489| 图片创意「仅上传+建创意」SOP | ❌ v1.18.0 起砍段C(属 ai投手自身职责,越界) | 砍 |
490| 核心主张+创意类型推荐(13类+视频4类)+数量测算+尺寸+成品规格 | ✅ 段B(v1.17.0 素材策略规范) | 对齐 |
491| 品牌资产(logo/主色/slogan/风险语) | ✅ 段B透传·引用需求清单 | 对齐 |
492| 账户ID列表/落地页URL | ❌ 用户在ai投手投放前提供 | 见提醒 |
493
494## 全局原则
495- 五维基建/诊断方法论参考 `ai-analysis-expert-newproject`/`-diagnose`,**不改原 skill**。
496- **投放方式判定**:用户指定版位→标准投放;未指定/接受智能择优→智投AIM+。判定结果写入段A,ai投手据此选建单skill。
497- 缺口C:品牌资产**引用**需求清单,不复制原始文件,素材助手以需求清单为准取原图。
498- **两段一气呵成产出**(v1.18.0 起;v1.26.0 起无 HTML):段A+B 一次做完,不做段间确认(段C 已删)——主路径直接落成 strategy 结构化字段灌入金手指,**不写本地 HTML**
499- **主路径无 HTML;HTML 仅 fallback**(v1.26.0 起):仅当金手指 MCP 不可用 / `degraded:true` 时,才写《投放执行确认单-[项目名].html》存档——**骨架走 `html-report-card`(与可行性评估同模板,v1.28.0 起统一)**,内容结构照 `references/html-memo-template.md`,theme.css 全文内联、文件自包含,跑 check_html.py 0 error 才交付;按既定轨道打开,话术改回"确认后我再灌入"
500- **UI 必须与可行性评估一致**(v1.2.1 起,仅约束 fallback 产物):系统字体 + `#f7f7f5` 纸底 + 单白卡 + `#378ADD` 主色 + 细线分隔 + **topbar 金手指 logo**(v1.14.0 起);禁止玻璃拟态/渐变文字/深色代码块/入场动画。写文件前过一遍模板末尾「一致性自检」。
501 - ✅ **v1.28.0 已统一**:fallback 确认单与可行性评估**共用 `html-report-card` 卡片规范**(用户决策 2026-08-26)——两份产物 UI 一致;`html-memo-template.md` 降级为纯内容结构指南。
502- **策略完成必须灌入金手指**(v1.25.0 起取代 v1.5"写完必须打开";v1.26.0 改述):段A/段B 字段拼装完成后立即 `open_config` 灌入 + session 双重校验 + present_files 拉起配置页,不要只说做了什么而不做。**灌入成功 ≠ 交付完成**——校验失败要重灌并如实告知用户。
503- ⭐ **立项单从对话上下文读**(v1.27.0 起):不要 Read 立项单文件(不存在),也不要 curl session(提需阶段已不灌入,无 session);直接从对话栏那份完整立项单文字逐字段取值。
504- 🚨 **素材数量禁止照抄示例**(v1.26.0):`materialPool` / `creativeDirections[].count` / 外层文案与首评条数,**必须由段B 预算驱动测算公式当次算出**——禁止照抄本 skill 任何示例值、反例数字或上一个项目的数量(实测发现 agent 把反例里的"8 条素材"抄进了真实产出)。
505- 🚨 **og 枚举照抄产物原文**(v1.26.0):`optimizationGoal` 英文枚举与 `optimizationGoalName` 中文名,**照抄段A og 判定结论的原文**(评估/确认逻辑里定的是什么就传什么),灌入时不临场改枚举、不凭印象编——枚举错位会导致金手指页面按钮/目标错配。
506
507## 参考资源
508- `references/html-memo-template.md`:**策略纪要 HTML 模板**(生成纪要时必须对照,含 CSS 设计系统、三段结构骨架、占位符填写指南、段导航 JS、一致性自检清单)。**UI 基准以本模板为准**(v1.3 起立项单已无 HTML 模板)。