关于 cold-email-outreach
cold-email-outreach 是一项营销技能,可将线索名单整理为经审核的邮件序列和外联活动。它根据所选平台调整流程:通过 Smartlead MCP 工具自动配置,或为其他工具生成可导入的 CSV。
主要功能
- 01导入并验证线索数据
- 02按邮箱去重线索
- 03撰写多轮邮件序列
- 04生成平台专用 CSV
- 05配置并启动 Smartlead 活动
适用场景
- 01根据线索名单创建外联活动
- 02准备个性化跟进邮件序列
- 03将线索导入邮件外联平台
MCP 相关
使用 Smartlead 的 MCP 工具创建活动、添加序列和线索、分配邮箱、配置发送设置,并在获得明确批准后启动。其他平台通过 CSV 导出。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ gooseworks-ai/ goose-skills --skill cold-email-outreach安装后在 Claude Code 中输入/cold-email-outreach确认已加载。
附带文件skill.meta.json
详细介绍
冷邮件外联
外呼流程的最后一环。从用户存放潜在客户的任意位置获取线索,构建邮件序列,将营销活动载入用户选择的外联工具并启动。
不绑定工具: 先询问用户使用哪个外联平台。如果用户已配置 Smartlead MCP 工具,则默认使用 Smartlead。对于其他工具或手动工作流,则导出为 CSV。
适用场景
在以下情况下使用此技能:
- 用户说“启动营销活动”“发送外联邮件”“给这些潜在客户发邮件”或“设置冷邮件”
- 用户有一份潜在客户名单,并想开展外呼邮件营销活动
- 用户想在 Smartlead 或其他外联工具中创建并配置营销活动
支持的外联工具
此技能不会假设用户使用特定工具,而是先询问,再据此调整。
| 工具 | 集成方式 | 工作方式 |
|---|---|---|
| Smartlead(默认) | MCP 工具(mcp__smartlead__*) | 全自动:创建营销活动、添加序列、导入潜在客户、分配邮箱、配置日程并启动 |
| Instantly | CSV 导入 | 生成符合 Instantly 导入格式的 CSV,由用户手动上传 |
| Lemlist | CSV 导入 | 生成包含 Lemlist 兼容列的 CSV |
| Apollo | CSV 导入 | 生成符合 Apollo 序列导入格式的 CSV |
| 手动 / 其他 | CSV + 说明 | 将潜在客户和邮件导出为通用 CSV,并提供设置说明 |
工具选择逻辑:
- 在阶段 0 询问用户:“你使用哪个外联工具?”
- 如果是 Smartlead → 使用 MCP 工具实现全自动化
- 如果是 Instantly / Lemlist / Apollo → 生成对应工具专用的导入 CSV
- 如果是 其他或未知工具 → 生成通用 CSV(每次触达包含
email、first_name、last_name、company、title、subject、body),并询问用户该工具的导入要求
前置条件
环境变量
Smartlead(全自动化)需要:
SMARTLEAD_API_KEY=your_api_key_here
所有 Smartlead API 调用均发送至 https://server.smartlead.ai/api/v1,并附加 ?api_key=$SMARTLEAD_API_KEY。速率限制:每 2 秒最多 10 个请求。
基于 CSV 的工具: 无需环境变量。
阶段 0:信息收集
一次性提出所有问题,并按类别整理。跳过用户已回答的问题。
营销活动目标
- 目标是什么?(预约会议、促成演示请求、获取回复、培育潜在客户)
- 外联角度或切入点是什么?(招聘信号、竞品替换、事件相关、痛点相关、冷名单)
- 这次营销活动应命名为什么?
外联工具
- 你使用哪个外联工具?(Smartlead / Instantly / Lemlist / Apollo / 其他 / 只要给我 CSV)
潜在客户来源
- 潜在客户在哪里?接受以下任意来源:
- CSV 文件 — 读取文件,并将列映射到必填字段
- 粘贴的名单 — 直接粘贴姓名、邮箱和公司
- CRM 导出文件 — Salesforce、HubSpot 或其他 CRM 数据
- 数据库查询 — 如果用户有数据库,帮助他们查询
- 上游输出 — 本次对话中先前任务的数据
- 有哪些排除项?(特定公司、近期联系过的潜在客户、特定职称)
- 营销活动规模上限是多少?(默认:200)
每位潜在客户的最低要求: 邮箱地址。建议提供:first_name、last_name、company、title。
序列设计
- 触达几次?(默认:3 次)
- 每次触达间隔多久?(默认:第 1 天 / 第 5 天 / 第 12 天)
- 个性化级别?(级别 1:仅合并字段 / 级别 2:针对细分人群 / 级别 3:为每位潜在客户单独定制)
发送配置(导出 CSV 时跳过)
- 使用哪些邮箱账号发送?(列出账号,或回答“使用所有可用账号”)
- 发送时间安排?(默认:按收件人时区,周一至周五上午 8 点至下午 5 点)
- 每个账号的每日发送上限?(默认:每天 30 封)
- 是否跟踪打开和点击?(默认:跟踪打开,不跟踪点击)
阶段 1:潜在客户导入
解析潜在客户
接受用户提供的任意来源的潜在客户:
- **CSV 文件:**读取文件并灵活匹配列:
email(必填)——也可匹配Email、email_addressfirst_name——也可匹配firstname、first、First Namelast_name——也可匹配lastname、last、Last Namecompany_name——也可匹配company、organization、Company- 其他列均作为自定义字段
- **粘贴的数据:**解析用户提供的任意格式,提取电子邮件、姓名和公司。
- **CRM/数据库:**协助用户查询或导出数据,然后解析结果。
验证并去重
- 移除没有有效电子邮件地址的行
- 按电子邮件地址去重(保留首次出现的记录)
- 报告:总行数、有效记录数、无效记录数、移除的重复记录数
展示并确认
展示一张示例表格(10-15 条潜在客户记录),包含:
- 姓名、职位、公司、电子邮件
告知用户:符合条件的潜在客户总数,以及无效或已移除的记录数。
询问用户是否确认或需要调整,然后再继续。
第 2 阶段:序列设计
编写文案前,先以表格形式展示序列计划:
| 触达 | 天数 | 电子邮件类型 | 框架 | CTA |
|---|---|---|---|---|
| 1 | 1 | 冷启动介绍 | Signal-Proof-Ask | 15 分钟通话 |
| 2 | 5 | 新角度/内容素材 | PAS | 提供资源 |
| 3 | 12 | 社会认同 | BAB | 有兴趣聊聊吗? |
在第 3 阶段生成文案之前,先征求用户对结构的批准。
第 3 阶段:生成电子邮件
按照以下指南直接撰写电子邮件文案。
电子邮件结构公式
每封冷启动邮件都遵循以下框架:
Hook (1 sentence) → Evidence (1-2 sentences) → Offer (1 sentence)
字数目标:
- 冷启动介绍(触达 1):50-90 个词
- 后续跟进(触达 2-3):30-50 个词
- 结束邮件(最后一次触达):20-40 个词
按个性化级别划分
**第 1 级(通用):**每次触达生成一个模板,并使用合并字段({first_name}、{company}、{title})。所有潜在客户使用相同模板。
**第 2 级(细分):**每个细分群体的每次触达生成一个模板。根据角色、行业或信号类型定义细分群体。在不同细分群体间替换痛点和证明材料。
**第 3 级(深度个性化):**为每位潜在客户的每次触达生成独一无二的电子邮件。最多处理 50 位潜在客户——超过此数量时,建议使用第 2 级。
硬性规则
- **不要使用填充式开场白。**绝不要说“I hope this finds you well”
- **后续邮件不要说“just checking in”。**每次触达都要提供一个新的回复理由
- **每封邮件不超过 150 个词。**大多数邮件应为 80-120 个词。
- **每封邮件只有一个 CTA。**始终选择低门槛的行动号召。
- **第一句话不要推销。**先谈对方,而不是自己。
- **主题行少于 50 个字符。**不要使用大写、感叹号或表情符号。
- **结尾只署名。**不要写“Best regards.”
审阅流程
- 先为 3-5 位潜在客户生成示例邮件
- 提交用户审阅
- 持续迭代,直至获得批准(最多 3 轮)
- 获批后生成其余邮件
第 4 阶段:活动设置
如果使用 Smartlead(MCP 自动化)
通过 MCP 工具实现全自动化。按以下顺序执行:
步骤 1:查找并分配邮箱
mcp__smartlead__get_email_accounts
返回所有电子邮件账户及其 id、from_email、from_name、daily_sent_count、is_smtp_success、is_imap_success。
查找空闲邮箱(尚未分配给活跃营销活动):
- 获取所有营销活动:
mcp__smartlead__get_campaigns - 对于状态为
ACTIVE或STARTED的每个营销活动,获取其电子邮件账户:mcp__smartlead__get_campaign_email_accounts - 汇总当前分配给活跃营销活动的所有
email_account_id值 - 如果邮箱的
id不在活跃集合中,且is_smtp_success= true、is_imap_success= true,则该邮箱为“空闲” - 按
daily_sent_count升序排列空闲邮箱(优先选择使用最少的邮箱) - 选择所需数量的空闲邮箱
如果空闲邮箱数量少于所需数量,请告知用户并询问如何继续。
向用户展示可用/已选账户以供确认。
步骤 2:创建营销活动
mcp__smartlead__create_campaign
name: {campaign_name}
保存返回的 campaign_id。
步骤 3:添加序列步骤
mcp__smartlead__save_campaign_sequences
campaign_id: {campaign_id}
sequences: [
{ seq_number: 1, subject: "...", email_body: "...", seq_delay_details: { delay_in_days: 0 } },
{ seq_number: 2, subject: "...", email_body: "...", seq_delay_details: { delay_in_days: 4 } },
{ seq_number: 3, subject: "...", email_body: "...", seq_delay_details: { delay_in_days: 7 } }
]
合并变量映射: 将 {first_name} 转换为 {{first_name}},将 {company} 转换为 {{company}}(Smartlead 使用双大括号语法)。
注意: 第 2 封及后续邮件的 subject 留空时,会作为同一会话中的回复发送。
步骤 4:导入潜在客户(每批 100 条)
mcp__smartlead__add_leads_to_campaign
campaign_id: {campaign_id}
lead_list: [{ email: "...", first_name: "...", last_name: "...", company_name: "...", ... }]
Smartlead 每次调用最多接受 100 条潜在客户记录。将列表拆分为多个批次,并对每批分别调用。额外的列会成为 custom_fields。
步骤 5:分配发送账户
mcp__smartlead__add_email_accounts_to_campaign
campaign_id: {campaign_id}
email_account_ids: [...]
步骤 6:设置发送计划
mcp__smartlead__update_campaign_schedule
campaign_id: {campaign_id}
schedule: {
timezone: "America/New_York",
days_of_the_week: [1, 2, 3, 4, 5],
start_hour: "08:00",
end_hour: "18:00",
min_time_btw_emails: 10,
max_new_leads_per_day: 20
}
days_of_the_week:0=星期日,1=星期一,…,6=星期六。
步骤 7:配置设置
mcp__smartlead__update_campaign_settings
campaign_id: {campaign_id}
settings: {
track_settings: [],
stop_lead_settings: "REPLY_TO_AN_EMAIL",
send_as_plain_text: false,
follow_up_percentage: 100
}
允许的 track_settings:DONT_TRACK_EMAIL_OPEN、DONT_TRACK_LINK_CLICK、DONT_TRACK_REPLY_TO_AN_EMAIL
允许的 stop_lead_settings:REPLY_TO_AN_EMAIL、CLICK_ON_A_LINK、OPEN_AN_EMAIL
如果使用基于 CSV 的工具(Instantly、Lemlist、Apollo 或其他工具)
步骤 1:生成 CSV
列取决于个性化级别:
级别 1(所有人使用相同模板):
- CSV 列:
email、first_name、last_name、company、title、custom_field_1(信号/切入点) - 另附一个文件,其中包含序列模板(带合并字段的主题和正文)
级别 2/3(按细分群体或潜在客户分别撰写邮件):
- CSV 列:
email、first_name、last_name、company、title、touch_1_subject、touch_1_body、touch_2_subject、touch_2_body、touch_3_subject、touch_3_body
步骤 2:保存文件
保存到当前工作目录:
{campaign-name}-{YYYY-MM-DD}.csv
步骤 3:提供特定工具的导入说明
Instantly:
- 上传 CSV → Sequences → Create new sequence
- 映射列:Email → email、First Name → first_name 等
- 将序列模板粘贴到各步骤
- 设置步骤之间的延迟
Lemlist:
- People → Import → Upload CSV
- 将自定义变量映射到列
- 创建营销活动 → 添加邮件步骤 → 插入变量
Apollo:
- Sequences → Create Sequence → 添加邮件步骤
- Contacts → Import → Upload CSV
- 将导入的联系人添加到序列
其他/手动:
- 提供 CSV 路径并说明列结构
- 询问用户的工具需要什么格式,并在需要时进行调整
第 5 阶段:审核并启动
展示营销活动摘要:
Campaign: {name}
Leads: {count}
Sequence: {touches} touches over {days} days
Sending: {accounts} accounts × {daily_limit}/day = {daily_volume} emails/day
Estimated completion: {date}
Tool: {smartlead/instantly/etc.}
必须获得明确批准
未经用户明确确认,切勿激活营销活动。 展示摘要,然后询问:“准备好启动了吗?输入‘yes’以激活。”
- Smartlead:
mcp__smartlead__update_campaign_status→ 将状态设为START - CSV 工具: 告知用户文件已准备好导入,并提供文件路径
Smartlead API 参考
所有端点均使用基础 URL https://server.smartlead.ai/api/v1,并通过 ?api_key= 查询参数传递 API 密钥。
| 端点 | 方法 | 用途 |
|---|---|---|
/campaigns/create | POST | 创建新营销活动 |
/campaigns | GET | 列出所有营销活动 |
/campaigns/{id} | GET | 按 ID 获取营销活动 |
/campaigns/{id}/schedule | POST | 设置营销活动日程 |
/campaigns/{id}/settings | POST | 更新跟踪/停止设置 |
/campaigns/{id}/sequences | POST | 保存邮件序列 |
/campaigns/{id}/leads | POST | 添加潜在客户(每次调用最多 100 个) |
/campaigns/{id}/email-accounts | GET | 列出营销活动中的邮箱 |
/campaigns/{id}/email-accounts | POST | 为营销活动分配邮箱 |
/campaigns/{id}/status | POST | 更改营销活动状态(START/PAUSED/STOPPED) |
/campaigns/{id}/analytics | GET | 营销活动顶层分析数据 |
/email-accounts/ | GET | 列出所有邮箱账户(offset/limit) |
费用
| 组成部分 | 费用 |
|---|---|
| Smartlead 营销活动设置 | 免费(Smartlead 套餐包含 API) |
| CSV 导出 | 免费 |
| 邮件文案生成 | 免费(大模型推理) |
错误处理
| 错误 | 解决方法 |
|---|---|
未设置 SMARTLEAD_API_KEY | 请用户将其添加到 .env 或导出该变量 |
| Smartlead 速率限制(429) | 等待 2 秒后重试 |
| 潜在客户上传失败 | 检查邮件格式,然后重试该批次 |
| 没有可用邮箱 | 显示所有账户,并询问用户要使用哪个 |
| 创建营销活动失败 | 检查 API 密钥是否有效 |