关于 outreach-sequence-builder
outreach-sequence-builder 是根据购买信号制定个性化 B2B 销售触达的技能,可规划多渠道节奏并撰写完整邮件、LinkedIn 和电话内容,也可通过 Composio 创建 Gmail 草稿。
主要功能
- 01识别七类购买信号
- 02规划 4–6 次多渠道触达
- 03撰写邮件、LinkedIn 和电话内容
- 04检查消息长度与占位符
- 05将异议回应安排到触达节点
- 06可选通过 Composio 创建 Gmail 草稿
适用场景
- 01跟进潜在客户的融资消息
- 02规划会议后的销售触达
- 03根据招聘动态联系目标客户
- 04准备个性化销售序列
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ varnan-tech/ opendirectory --skill outreach-sequence-builder安装后在 Claude Code 中输入/outreach-sequence-builder确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
.env.exampleREADME.mdevals/evals.jsonreferences/output-template.mdsequence-format.mdsignal-playbook.md详细介绍
外联序列构建器
捕捉购买信号。生成个性化的多渠道外联序列。输出可直接发送的电子邮件、LinkedIn 消息和电话话术。
重要规则: 每条消息都必须根据你加载的上下文完整填写。只允许使用 {{first_name}} 作为变量。不得出现 [Company Name] 这类方括号,也不得出现 [INSERT PAIN POINT] 这类占位符。如果缺少填写某项所需的信息,请先提问。绝不发送带有未填写占位符的消息。
第 1 步:检查设置
确认必需的环境变量:
echo "GEMINI_API_KEY: ${GEMINI_API_KEY:+set}"
echo "COMPOSIO_API_KEY: ${COMPOSIO_API_KEY:-not set, Gmail drafting will be skipped}"
如果缺少 GEMINI_API_KEY: 停止。告知用户:“GEMINI_API_KEY 是必需的。请前往 aistudio.google.com 获取,并将其添加到 .env 文件中。”
如果缺少 COMPOSIO_API_KEY: 继续。序列将以格式化文本的形式输出,供复制粘贴。跳过创建 Gmail 草稿。
第 2 步:加载上下文
检查是否存在 ICP 文件和客户文件:
ls docs/icp.md 2>/dev/null && echo "icp found" || echo "icp missing"
ls docs/accounts/ 2>/dev/null && echo "accounts found" || echo "accounts missing"
如果 docs/icp.md 存在: 阅读该文件。提取:
- 目标用户画像(职位、资历、部门)
- 公司概况(规模、行业、融资阶段)
- 核心痛点(使用买家本人的原话)
- 关键差异化优势(相较于其他方案,为什么选择你的产品)
如果 docs/accounts/{company}.md 存在: 阅读相关文件。提取:
- 公司名称、规模、近期情况
- 已知技术栈或痛点
- 现有关系或此前的联系情况
如果两者都不存在: 向用户询问以下 4 个问题。收到全部 4 个回答后再继续:
- 你的产品有什么用途?(一两句话)
- 你的目标客户是谁?(职位、公司规模、行业)
- 你解决的主要问题是什么?(从买家的角度出发,而不是你的角度)
- 你的关键差异化优势是什么?(相较于他们目前使用的替代方案,为什么选择你)
第 3 步:识别信号
判断适用以下 7 种信号类型中的哪一种。阅读 references/signal-playbook.md,了解每种信号类型对应的完整洞察、衔接、开场白和行动请求。
7 种信号类型:
| 信号 | 定义 |
|---|---|
| 融资后 | 公司在过去 30 天内完成了一轮融资 |
| 招聘信号 | 公司在你服务的职能领域发布了 5 个或更多职位 |
| 竞争对手替换 | 联系人正在使用竞争对手的产品,并表现出不满 |
| 产品发布 | 公司推出了新产品或重要功能 |
| 内容互动 | 联系人点赞、评论或分享了你的内容 |
| 活动跟进 | 你们在会议或网络研讨会中见过面,或参加了同一场活动 |
| 工作变动 | 联系人在过去 60 天内加入了新公司 |
如果用户在提示词中提供了信号: 确认信号类型,并提取具体细节(融资金额、职位名称、产品名称、活动名称等)。
如果信号不明确: 询问:“是什么促使你进行这次外联?(例如,对方刚完成一轮融资、正在招聘工程师、你们在活动上见过面)”
继续之前,说明检测到的信号类型和具体细节。
第 4 步:制定切入角度
根据第 2~3 步加载的信号类型和上下文,定义四个角度要素。阅读 references/signal-playbook.md,了解该信号类型对应的公式。
生成任何消息前,明确写出:
Signal: [specific signal + concrete detail]
Insight: [what this signal reveals about their situation]
Bridge: [how your product connects to what the signal reveals]
Opener: [one sentence referencing the specific signal detail]
Ask: [minimum viable CTA, under 10 words]
开场白必须点明具体触发事件。含糊的开场白不予接受。
好例子:“恭喜完成 1,800 万美元的 B 轮融资——快速扩张销售团队通常会造成入职培训方面的缺口。” 差例子:“我看到贵公司最近完成了融资。”
步骤 5:规划触达顺序
设计涵盖电子邮件、LinkedIn 和电话的 4-6 个触点。规则:
- 总时长:10-14 天
- 任意两次触达之间至少间隔 2 天
- 不得连续两次使用相同渠道
- 每次跟进都必须提供新的价值(新资源、新角度、新证据)。绝不能只是“跟进一下”。
- 最后一个触点是一条简短的结束联系消息
适用于大多数信号的默认节奏:
Day 1: Email (first touch, signal-led opener)
Day 3: LinkedIn (connection note or short DM)
Day 7: Email (new angle or case study)
Day 9: Phone (talk track + voicemail script)
Day 12: Email (different framing or objection addressed)
Day 14: Email (short breakup message)
根据不同信号类型调整:
- 融资后:加快节奏(第 1、2、4、7、10 天)。在公告发布后的 48 小时内采取行动。
- 活动后跟进:从 LinkedIn 开始,而不是电子邮件(优先选择更温和的渠道)
- 内容互动:先在 LinkedIn 上回复或评论,然后再发电子邮件
撰写消息前,说明每个触点计划安排的日期和渠道。
步骤 6:生成序列
完整阅读 references/sequence-format.md。阅读 references/output-template.md,并选择适用于此信号类型的模板。
将 Gemini 请求写入临时文件:
cat > /tmp/outreach-sequence-request.json << 'ENDJSON'
{
"system_instruction": {
"parts": [{
"text": "You are a B2B sales copywriter who writes cold outreach that gets replies. Rules: The first sentence of every message is about THEM, not your company. Reference the specific buying signal by name and detail in the opening message. Use contractions naturally. Short sentences. No corporate jargon. No banned words: synergy, leverage, touch base, circle back, ping, loop in, alignment, innovative, cutting-edge, best-in-class, world-class, game-changing, disruptive, bandwidth, deep dive, low-hanging fruit, move the needle. No pleasantries: no 'I hope this email finds you well', no 'Happy Monday', no 'Just wanted to'. Each follow-up adds new value — never 'just following up'. Hard limits: email body under 100 words, LinkedIn note under 300 characters, phone opener under 20 words. Only {{first_name}} is allowed as a variable — fill in all other details from the context provided. The breakup message is short (3-4 sentences), friendly, and leaves the door open."
}]
},
"contents": [{
"parts": [{
"text": "CONTEXT_AND_INSTRUCTIONS_HERE"
}]
}],
"generationConfig": {
"temperature": 0.7,
"maxOutputTokens": 4096
}
}
ENDJSON
curl -s -X POST \
"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d @/tmp/outreach-sequence-request.json \
| python3 -c "import sys,json; d=json.load(sys.stdin); print(d['candidates'][0]['content']['parts'][0]['text'])"
将 CONTEXT_AND_INSTRUCTIONS_HERE 替换为:
- 步骤 2 中的产品描述、目标人物画像、痛点和差异化优势
- 步骤 4 中的信号类型、具体细节和四个角度要素
- 步骤 5 中的渠道计划
- 要求为每个触点撰写消息,并附上主题行(电子邮件)、字符数(LinkedIn)和话术(电话)
每个电子邮件触点都必须提供两个主题行版本(A/B 测试)。
步骤 7:梳理异议
生成序列后,确定此信号类型最可能遇到的 2-4 个异议。在现有触点中自然地提前回应每个异议。不要另行添加处理异议的消息。将预先回应融入序列中。
阅读 references/sequence-format.md 中的异议处理手册。标明每个触点处理的异议。
需要预先回应的 4 个常见异议:
| 异议 | 预先回应方式 |
|---|---|
| “我们已经有解决方案了” | 认可他们目前使用的工具,将你的产品定位为补充方案或下一步选择 |
| “现在不是合适的时机” | 将此信号与当下为何是合适时机直接关联起来 |
| “太贵了” | 阐明投资回报率,并以他们关心的数字为参照 |
| “需要让更多人参与” | 提供便于分享的资源(单页介绍、录制的演示) |
呈现最终序列前,说明每个异议由哪个触点处理。
步骤 8:自检
逐项执行所有检查,并在呈现前修正违规项:
- 每条消息都以一句关于他们的内容开头
- 至少在第一个触点中明确提及具体信号细节
- 除
{{first_name}}外,不得有未填写的占位符 - 电子邮件正文少于 100 个单词(统计并注明每封的字数)
- LinkedIn 备注少于 300 个字符(统计并注明每条的字符数)
- 电话开场白少于 20 个单词
- 所有消息中都不得出现禁用词
- 任何跟进中都不得出现“只是跟进一下”
- 每次跟进都增加新的角度或价值
- 不得连续两次使用相同渠道
- 整个序列中至少预先回应 2 个异议
- 结束联系消息为 3-4 句话,语气友好,不施加愧疚感
呈现前修正所有违规项。
步骤 9:输出并保存
在代码块中呈现完整序列。
保存到文件:
mkdir -p docs/sequences
cat > docs/sequences/SIGNAL-TYPE.md << 'EOF'
SEQUENCE_CONTENT_HERE
EOF
echo "Sequence saved to docs/sequences/SIGNAL-TYPE.md"
**如果已设置 COMPOSIO_API_KEY:**询问:“要通过 Composio 在 Gmail 中起草电子邮件触点吗?”
确认后,为每个电子邮件触点:
# The agent calls the GMAIL_CREATE_EMAIL_DRAFT Composio action
# with subject = [subject line], body = [email body], recipient = [contact email if known]
起草完成后:“已在 Gmail 中创建电子邮件草稿。请检查‘草稿’文件夹。”
**LinkedIn 备注:**分别以独立的可复制粘贴代码块呈现,并为每个触点添加清晰标签。LinkedIn 不支持通过程序发送消息。
**电话脚本:**以带项目符号的格式化话术呈现,不要写成刻板的脚本。