关于 setup-outreach-campaign
用于在 Smartlead 中设置外联邮件活动,涵盖导入潜在客户、分配邮箱、编写邮件序列、安排发送及选择是否启动。流程会收集活动信息,并在保存邮件序列前征求确认。
主要功能
- 01创建 Smartlead 活动
- 02导入并验证潜在客户名单
- 03筛选并分配邮箱
- 04编写 2–3 封邮件序列
- 05配置发送时间表
- 06启动活动或保留草稿
适用场景
- 01将 CSV 名单转为邮件活动
- 02准备定时发送的冷邮件序列
- 03为活动分配可用邮箱
MCP 相关
此技能通过 Smartlead API 创建和配置活动;输入未说明其提供 MCP 接口。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ nikiandr/ goose-skills --skill setup-outreach-campaign安装后在 Claude Code 中输入/setup-outreach-campaign确认已加载。
附带文件skill.meta.json
详细介绍
setup-outreach-campaign
在 Smartlead 中设置完整的外发邮件营销活动:创建营销活动、添加潜在客户、编写 2-3 封邮件序列、配置发送计划并分配邮箱。
输入
| 输入 | 必填 | 默认值 | 描述 |
|---|---|---|---|
| campaign_name | 是 | -- | 营销活动的名称(例如,“Truewind - 会计事务所 - Feb 2026”) |
| campaign_goal | 是 | -- | 营销活动要达成的目标(预约演示、推动注册等) |
| lead_list | 是 | -- | CSV 文件路径,或上游技能提供的人员列表 JSON |
| value_proposition | 是 | -- | 邮件要解决的核心痛点或要传达的益处 |
| cta | 是 | -- | 行动号召(例如,“预约 15 分钟演示”“回复以了解更多”) |
| tone | 否 | semi-formal | 邮件语气:casual、semi-formal、formal |
| personalization_angle | 否 | -- | 个性化切入点(参加活动、招聘信息、新闻提及) |
| timezone | 否 | America/New_York | 发送计划所用的时区 |
| send_days | 否 | [1,2,3,4,5] | 发送邮件的星期(0=周日,6=周六) |
| start_hour | 否 | 08:00 | 发送时间窗口的开始时间 |
| end_hour | 否 | 18:00 | 发送时间窗口的结束时间 |
| max_leads_per_day | 否 | 20 | 每天联系的新潜在客户上限 |
| min_time_btw_emails | 否 | 10 | 同一邮箱发送邮件的最小间隔(分钟) |
| num_mailboxes | 否 | 5 | 分配的邮箱数量 |
| mailbox_selection | 否 | auto | "auto"(选择空闲邮箱)或 "manual"(向用户显示列表) |
设置
需要拥有可使用 API 的 Smartlead 账户。
export SMARTLEAD_API_KEY=your_api_key_here
所有 API 调用均发送至 https://server.smartlead.ai/api/v1,并附加 ?api_key=$SMARTLEAD_API_KEY。
速率限制:每 2 秒 10 个请求。
流程
步骤 1:收集营销活动信息
向用户询问以下问题。以对话的方式分组提问,不要一次性全部抛出。
营销活动信息:
- “这个营销活动叫什么名字?”(例如,“Truewind - 会计事务所 - Feb 2026”)
- “目标是什么?”(例如,预约演示、推动试用注册、会后跟进)
受众和潜在客户:
- “目标受众是谁?”(ICP:职位、公司类型、规模、行业)
- “你将如何提供潜在客户名单?”——选项:CSV 文件、之前某项技能的输出(company-contact-finder、luma-event-attendees),或“我需要先寻找潜在客户”(转至 company-contact-finder)
信息传达:
- “核心价值主张或痛点是什么?”
- “行动号召是什么?”(例如,“预约 15 分钟演示”)
- “希望采用哪种语气——casual、semi-formal 还是 formal?”
- “有个性化切入点吗?”(例如,提及对方的招聘信息、参加的活动或行业新闻)
计划安排:
- “应该在星期几发送邮件?”(默认:周一至周五)
- “发送时间和时区是什么?”(默认:美国东部时间上午 8 点至下午 6 点)
- “每天联系的新潜在客户上限是多少?”(默认:20)
- “营销活动应何时开始?”(默认:明天)
邮箱:
- “要分配多少个邮箱?”(默认:5)
- “自动选择空闲邮箱,还是显示列表供我选择?”
收集完答案后,先向用户展示摘要并确认,然后再继续。
步骤 2:创建营销活动
POST https://server.smartlead.ai/api/v1/campaigns/create?api_key=$SMARTLEAD_API_KEY
Body:
{
"name": "<campaign_name>",
"client_id": null
}
响应:
{
"ok": true,
"id": 3023,
"name": "Test email campaign",
"created_at": "2022-11-07T16:23:24.025929+00:00"
}
从 id 中获取 campaign_id。后续所有调用都使用此 ID。
步骤 3:查找并分配邮箱
此步骤用于确定哪些邮箱可用,并将其分配给营销活动。
3a:获取所有电子邮件账户
GET https://server.smartlead.ai/api/v1/email-accounts/?api_key=$SMARTLEAD_API_KEY&offset=0&limit=100
返回包含 id、from_email、from_name、daily_sent_count、warmup_details、is_smtp_success 和 is_imap_success 的所有电子邮件账户列表。
3b:识别当前正在使用的邮箱
获取所有营销活动:
GET https://server.smartlead.ai/api/v1/campaigns?api_key=$SMARTLEAD_API_KEY
对于每个 status = "ACTIVE" 或 "STARTED" 的营销活动,获取其电子邮件账户:
GET https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/email-accounts?api_key=$SMARTLEAD_API_KEY
汇总当前分配给活跃营销活动的所有 email_account_id 值。
3c:筛选免费邮箱
符合以下条件的邮箱属于“免费”邮箱:
- 其
id不在 3b 中的活跃营销活动集合内 is_smtp_success= true 且is_imap_success= true(账号可正常使用)
按 daily_sent_count 升序排列免费邮箱(优先选择最空闲、使用最少的邮箱)。
3d:选择并分配
如果 mailbox_selection = "auto":选择前 N 个免费邮箱。
如果 mailbox_selection = "manual":以表格形式显示所有账号(姓名、邮箱、daily_sent_count、状态),并让用户选择。
如果可用的免费邮箱少于 N 个,请告知用户:“仅找到 X 个免费邮箱。要使用这 X 个,还是选择一些当前正在使用的邮箱?”
分配所选邮箱:
POST https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/email-accounts?api_key=$SMARTLEAD_API_KEY
Body:
{
"email_account_ids": [101, 204, 305, 412, 518]
}
步骤 4:导入潜在客户
4a:解析潜在客户列表
**从 CSV 导入:**读取文件,将列映射到 Smartlead 字段。列名匹配方式灵活:
email(必填)——也匹配Email、email_addressfirst_name——也匹配firstname、first、First Namelast_name——也匹配lastname、last、Last Namecompany_name——也匹配company、organization、Company- 任何额外列都会成为
custom_fields
**从上游技能(person-list JSON)导入:**映射字段:
first_name <- name.split()[0]
last_name <- name.split()[1:]
email <- email
company_name <- company
custom_fields <- { "title": title, "linkedin_url": linkedin_url }
4b:验证并去重
- 移除不含有效邮箱的行
- 按邮箱去重(保留首次出现的记录)
- 报告:总行数、有效行数、无效行数、移除的重复项数量
4c:分批上传
Smartlead 每次调用最多接受 100 个潜在客户。将列表分块,并对每个批次进行调用:
POST https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/leads?api_key=$SMARTLEAD_API_KEY
Body:
{
"lead_list": [
{
"first_name": "Jane",
"last_name": "Smith",
"email": "[email protected]",
"company_name": "Acme Corp",
"custom_fields": {"title": "CFO"}
}
],
"settings": {
"ignore_global_block_list": false,
"ignore_unsubscribe_list": false,
"ignore_duplicate_leads_in_other_campaign": false
}
}
响应:
{
"ok": true,
"upload_count": 95,
"total_leads": 100,
"already_added_to_campaign": 2,
"duplicate_count": 1,
"invalid_email_count": 2,
"unsubscribed_leads": 0
}
向用户报告所有批次的总计。
步骤 5:撰写邮件序列
根据用户在步骤 1 中提供的信息,编写一个包含 2-3 封邮件的序列。默认结构:
邮件 1 — 冷启动介绍(第 0 天)
- 主题:简短,能引发好奇,或与对方的痛点相关
- 正文:3-5 句话。理解对方的处境,指出问题,简要介绍解决方案,并给出明确的行动号召
- 使用
{{first_name}}和任何自定义字段进行个性化
邮件 2 — 跟进(第 3 天)
- 主题:换个角度(指标、案例研究、具体成果)
- 正文:2-4 句话。提供价值,重申行动号召
- 将主题留空,可作为同一邮件线程中的回复发送
邮件 3 — 最后跟进(第 8 天)
- 主题:简短直接(“还相关吗?”、“最后确认一下”)
- 正文:2-3 句话。体谅对方繁忙,保持沟通渠道畅通,以温和的方式提出行动号召
将完整序列整理成格式化表格,呈现给用户。等待用户批准或提出修改意见。
用户批准后,保存:
POST https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/sequences?api_key=$SMARTLEAD_API_KEY
Body:
{
"sequences": [
{
"seq_number": 1,
"seq_delay_details": { "delay_in_days": 0 },
"seq_variants": [
{
"subject": "Subject line here",
"email_body": "<p>Email body as HTML</p>",
"variant_label": "A"
}
]
},
{
"seq_number": 2,
"seq_delay_details": { "delay_in_days": 3 },
"seq_variants": [
{
"subject": "",
"email_body": "<p>Follow-up body</p>",
"variant_label": "A"
}
]
},
{
"seq_number": 3,
"seq_delay_details": { "delay_in_days": 5 },
"seq_variants": [
{
"subject": "",
"email_body": "<p>Breakup body</p>",
"variant_label": "A"
}
]
}
]
}
注意:邮件 2 及之后的邮件将 subject 留空,可作为同一邮件线程中的回复发送。
步骤 6:设置发送计划
POST https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/schedule?api_key=$SMARTLEAD_API_KEY
Body:
{
"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,
"schedule_start_time": "2026-02-25T00:00:00.000Z"
}
days_of_the_week:0=星期日,1=星期一,……,6=星期六。
步骤 7:确认并选择性启动
呈现完整摘要:
Campaign: "Truewind - Accounting Firms - Feb 2026"
Campaign ID: 12345
Leads added: 87 (3 rejected as duplicates)
Email sequence: 3 emails (Day 0, Day 3, Day 8)
Schedule: Mon-Fri, 8am-6pm ET, starting Feb 25
Mailboxes: [email protected], [email protected] (+3 more)
Status: DRAFTED
询问:“要现在启动营销活动,还是将其保留为草稿?”
如果启动:
POST https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/status?api_key=$SMARTLEAD_API_KEY
Body:
{ "status": "START" }
如果保留为草稿:跳过此步骤。用户稍后可以从 Smartlead UI 启动。
可选:更新营销活动设置
如果用户想配置跟踪或停止条件,请使用:
POST https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/settings?api_key=$SMARTLEAD_API_KEY
Body:
{
"track_settings": ["DONT_TRACK_EMAIL_OPEN"],
"stop_lead_settings": "REPLY_TO_AN_EMAIL",
"send_as_plain_text": false,
"follow_up_percentage": 100,
"enable_ai_esp_matching": true
}
允许的 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
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) |
示例提示词
- “为 Truewind 设置一场面向会计师事务所的 Smartlead 营销活动”
- “创建一场外联营销活动——我有一份潜在客户 CSV 文件”
- “面向中型市场公司的 CFO 发起冷邮件营销活动”
- “在 Smartlead 中设置一个包含 3 封邮件的序列,并分配 5 个空闲邮箱”
元数据
metadata:
requires:
env: ["SMARTLEAD_API_KEY"]
cost: "Free (Smartlead API included with plan that has API access)"