Creator Outreach — 邮件建联
概述
邮件建联全流程能力:搜索达人后一键发送邮件,支持单发/批量发送、任务轮询、沟通历史查询、待办跟进、效果指标分析,由该平台统一代发无需用户配置。
脚本引用
| 脚本路径 | 状态 | 说明 |
|---|---|---|
../../scripts/outreach_send.mjs |
✅ 已实现 | 发送邮件(单发/批量) |
../../scripts/outreach_task.mjs |
✅ 已实现 | 查询发送任务状态与结果 |
../../scripts/outreach_contact.mjs |
✅ 已实现 | 查询联系人沟通历史 |
../../scripts/outreach_todo.mjs |
✅ 已实现 | 待办跟进(超时/未读) |
../../scripts/outreach_metrics.mjs |
🔮 待实现 | 效果指标(发送量/打开率/回复率) |
../../scripts/outreach_config.mjs |
🔮 待实现 | 渠道与模板配置查询 |
../../scripts/outreach_upload.mjs |
🔮 待实现 | 附件上传(max 10MB) |
🔮 标注的脚本尚未部署,调用将返回错误。待后端实现后可直接启用。
架构原则
Skill = 纯 HTTP 客户端,不做任何本地业务逻辑处理。
- 脚本只负责组装 JSON 参数并调用 OpenAPI 接口
- 所有业务逻辑(创建提报、查找会话、判断新建/回复)由 OpenAPI 内部完成
- Skill 不需要知道
submission_id、influencer_id等内部概念 - 搜索后发送时,将搜索结果中的
uid+platform传给 outreach_send,OpenAPI 内部自动从 Holo 查完整达人数据 - Navos profile 下,
outreach_send.mjs、outreach_task.mjs、outreach_contact.mjs、outreach_todo.mjs会尽量补充cv_outreach_url。输出时保留对话区摘要,并提供“在 CreatiVault 查看完整建联过程”入口;该链接会在 Navos 内置浏览器中无感登录 CV,并打开/asset/studio/influencer-submission?view=email原生建联工作台。common profile 下没有该链接时,不要声称可以打开 CV 建联页。
发送机制
邮件由该平台统一代发,用户无需提供任何发信配置。
- [禁止] 向用户索要 SMTP 配置、邮箱密码、授权码、发信服务器地址
- [禁止] 建议用户"用自己的邮箱手动发送"——该平台已具备发送能力
- [禁止] 在与用户的任何交流中透露底层邮件服务技术细节(如具体使用的邮件服务商、AWS、SES 等),也不要使用"CreatiVault"等用户可能不熟悉的专有名词——统一用"该平台"指代。用户问"邮件怎么发出去的"→ 回答:"由该平台统一代发,无需配置任何邮箱或 SMTP。"
channel参数对外统一用saas(该平台代发通道,默认值)。脚本内部会自动映射到后端识别的渠道;用户和 AI 都不应传递ses等内部技术参数。gmail/outlook为预留字段,后端未实现。
参数说明
outreach_send.mjs
to 和 recipients 互斥,传其一。
| 参数 | 类型 | 说明 |
|---|---|---|
to |
string | 收件人邮箱(单发) |
uid |
string | 达人平台 UID(单发必填,来自搜索结果的 uid 字段) |
nickname |
string | 达人昵称(可选,用于会话展示) |
platform |
string | 达人平台:tiktok/youtube/instagram |
recipients |
object[] | 批量发送:{email, uid, nickname, platform} 数组 |
subject |
string | 邮件主题 |
body_html |
string | HTML 正文(支持 {{creator_name}} 变量) |
body_text |
string | 纯文本正文 |
channel |
string | saas(默认,该平台代发通道)。脚本内部自动映射,无需手动指定 |
template_id |
integer | 模板 ID(覆盖 subject/body) |
send_mode |
string | immediate(默认)/ smart(时区优化) |
force_new |
boolean | 强制新建会话(默认 false) |
attachment_ids |
string[] | 附件 ID 列表 |
outreach_task.mjs
| 参数 | 类型 | 说明 |
|---|---|---|
task_id |
string | 必填。发送返回的任务 ID |
include_result |
boolean | 附带逐收件人结果(默认 false) |
result_filter |
string | 结果过滤:all/sent/failed |
poll |
boolean | 自动轮询至终态(默认 false) |
poll_interval |
integer | 轮询间隔秒数(默认 5) |
poll_max_attempts |
integer | 最大轮询次数(默认 60) |
outreach_contact.mjs
| 参数 | 类型 | 说明 |
|---|---|---|
email |
string | 必填。达人邮箱 |
include_history |
boolean | 包含消息历史(默认 true) |
include_summary |
boolean | 包含 AI 摘要(默认 true) |
outreach_todo.mjs
| 参数 | 类型 | 说明 |
|---|---|---|
overdue_hours |
integer | 超时阈值小时数(默认 24) |
include_unread |
boolean | 包含未读会话(默认 true) |
include_overdue |
boolean | 包含超时会话(默认 true) |
产品信息收集(建议提供,不强制)
起草邮件正文前,建议先了解用户的产品基本信息,这能让邮件内容更具体、更有针对性(避免出现"our cup / drinkware products"这种过于笼统的表述)。
但不强制要求用户提供全部字段——用户可以只给产品名称就发邮件,也可以补充更多细节。AI 应主动给出参考模板,用户按需提供即可。
产品信息参考模板
以下字段作为参考,用户按需提供(有则用,没有不追问):
| 字段 | 说明 | 示例 |
|---|---|---|
| 具体产品名称 | 产品/品牌的准确名称 | "SnowPeak 钛金属双层保温杯" |
| 产品卖点 | 区别于竞品的核心卖点(1-3 个) | "48h 保温、钛金属轻量、户外便携" |
| 价格区间 | 零售价区间(便于匹配达人调性) | "$30-50" |
| 是否 TikTok Shop 在售 | 是否有 TikTok 小店可挂车 | "是,TikTok Shop US 在售" |
| 是否可寄样 | 能否寄送样品给达人 | "可以寄样" |
| 佣金比例 | 联盟佣金比例 | "15%" |
| 是否需要挂车 | 是否要求达人挂购物车 | "需要挂车" |
| 内容要求 | 对达人内容形式的期望 | "开箱测评 + 使用场景展示,30s 以上" |
引导方式
- 用户首次提出建联需求时,简要提示上述参考模板(如"为提升邮件针对性,建议提供产品名称、卖点、是否寄样等信息,按需提供即可"),不要逐条追问
- 用户提供的部分信息,AI 结构化整理后复用,后续建联无需重复询问
- 若用户只给了产品名称就要发邮件,直接基于名称起草,不强求补充其他字段
- 若用户主动提供更多信息,及时更新到产品信息中
安全规则
邮件发送是高风险操作,每次发送前必须获得用户明确确认。
[禁止] 用户说"帮我发邮件"后直接执行发送脚本。
[必须] 在执行 outreach_send.mjs 之前,展示以下信息并等待用户确认:
- 产品信息摘要(如果用户提供了产品信息,展示供确认;未提供则跳过此项)
- 收件人列表(单笔展示邮箱;批量≤5 全展示,>5 展示前 5 + "...及其他 N 个")
- 邮件主题与正文预览(正文前 100 字符)
- 用户说"确认"/"发送"/"是"/"Y" → 执行发送
- 用户说"取消"/"不发"/"修改" → 不执行,询问修改意见
- 回复已有会话也需要确认
- 唯一例外:用户明确说"直接发送不用确认"时可跳过
输出格式
发送确认格式
📧 发送确认
📦 产品信息:
• 产品:{产品名称}
• 卖点:{核心卖点}
• 寄样:{是/否} | 挂车:{是/否} | 佣金:{比例}
👤 收件人:{email 或 N 个收件人列表}
📝 主题:{subject}
📨 正文预览:{前 100 字符...}
确认发送吗?(Y/N)
任务状态格式
📬 发送结果
• 任务ID:{task_id}
• 状态:{completed/partial/failed}
• 成功:{sent_count} 封
• 失败:{failed_count} 封
• 耗时:{duration}
• 消耗积分:{credits_consumed}
• 在 CreatiVault 查看完整建联过程:[在 CreatiVault 查看完整建联过程]({cv_outreach_url})
如果 cv_outreach_url 存在,必须把它作为单独入口展示;不要把它混同为达人主页链接,也不要替代对话区的轻量摘要。
积分说明
| 操作 | 积分消耗 |
|---|---|
| 发送邮件(每封) | 1 |
| 所有查询接口 | 0(免费) |
决策规则
- "发邮件"/"建联"/"reach out" →
outreach_send.mjs - 搜索结果列表 →
outreach_send.mjs+recipients - 发送后 →
outreach_task.mjs+poll:true确认投递 - "待办"/"follow-up" →
outreach_todo.mjs - "沟通历史"/"what did I discuss" →
outreach_contact.mjs - "效果"/"metrics" →
outreach_metrics.mjs(🔮 待实现) - "渠道"/"模板" →
outreach_config.mjs(🔮 待实现) - 模板变量:
{{creator_name}}、{{creator_email}}、{{platform}} - 搜索后发送时,必须传
uid+platform(OpenAPI 自动从 Holo 查完整达人数据)
Navos Output Link Rules
- If
cv_outreach_urlexists, never print the raw full URL in the final answer. Show it as[在 CreatiVault 查看完整建联过程]({cv_outreach_url}). - Keep the chat answer as a lightweight summary plus next steps; the CV outreach link must be a separate short entry.