关于 sequence-load
这是一个将 prospect-refresh 中的新潜在客户筛选并加入 Apollo 外联序列的销售运营技能,供 BDR 流程使用。它检查重复记录、电话、排除规则和抑制期,并生成 Apollo 与 HubSpot 同步结果报告。
主要功能
- 01读取并验证潜在客户资料
- 02检查 HubSpot 与 Apollo 重复
- 03执行排除规则和电话校验
- 04按垂直领域选择序列
- 05批量加入并确认注册
- 06创建 HubSpot 联系人并报告
适用场景
- 01处理 prospect-refresh 生成的新线索
- 02避免重复加入外联序列
- 03将新 Apollo 联系人同步到 HubSpot
MCP 相关
该技能调用 HubSpot 和 Apollo 的 MCP 工具,查询及管理联系人、搜索序列并批量加入联系人。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ scientiacapital/ skills --skill sequence-load安装后在 Claude Code 中输入/sequence-load确认已加载。
附带文件config.json
详细介绍
序列加载技能
自动将 prospect-refresh 中新增的潜在客户加载到 Apollo 外联序列中。验证黄金规则、确认存在电话号码、检查是否重复加入序列,并执行批量添加到序列。输出加入序列报告,其中包含每位潜在客户的序列分配和用于 HubSpot 同步的联系人 ID。<quick_start>
触发条件: 美国东部时间周一上午 7:15(在上午 6:30 运行的 prospect-refresh 之后)
手动触发:“将潜在客户加载到序列中”或“加入新线索”
**依赖项:**需要 Apollo 积分、prospect-refresh 输出,以及 HubSpot 门户 21530819
**输出:**每位潜在客户的加入确认、序列分配,以及用于创建 HubSpot 联系人的联系人 ID
</quick_start>
<success_criteria>
- 读取 prospect-refresh 输出(来自 Gmail 草稿和 HTML 报告的 30 位新增潜在客户)
- 查询 HubSpot,确认潜在客户尚未加入任何序列
- 验证电话号码存在(来自 prospect-enrich 或 Apollo)
- 应用黄金规则(跳过客户、渠道、设备所有者,绝不纳入 ATL)
- 按 ICP 垂直领域查找目标 Apollo 序列
- 获取电子邮件账户 ID([email protected] 或主要账户)
- 批量将潜在客户添加到序列中(每次请求最多 100 位)
- 确认已加入序列(检查 Apollo 联系人的 sequence_id)
- 如果 HubSpot 联系人不存在,则创建联系人(获取联系人 ID 以同步到 HubSpot)
- 报告:加入总数、各序列明细,以及任何失败情况 </success_criteria>
阶段 1:读取 Prospect Refresh 输出
输入来源: prospect-refresh HTML 报告和 Gmail 草稿
从 HTML 报告中提取:
- 潜在客户姓名、电子邮件、职位、公司、垂直领域、ATL/BTL 层级
- Apollo person_id、organization_id、电话号码
- 公司营收、员工人数、融资情况
验证:
- 电子邮件格式有效
- 电话号码存在(来自信息补充)
- 垂直领域属于以下之一:高等教育、法院、政府、企业 AV、医疗保健、HoW、K-12
**输出:**包含 30 位潜在客户的结构化列表(如果应用了筛选,则可能更少)
阶段 2:与 HubSpot 和 Apollo 去重
步骤 A:检查 HubSpot 中是否存在联系人
MCP 工具: search_crm_objects(HubSpot)
objectType: "contacts"
filterGroups: [{
filters: [
{ propertyName: "email", operator: "EQ", value: prospect.email }
]
}]
properties: ["email", "phone", "hs_lead_status"]
决策逻辑:
- 如果联系人存在且状态不是“Sequenced”或“Active Sequence” → 复用联系人(获取联系人 ID)
- 如果联系人存在且已加入序列 → 跳过(避免重复加入)
- 如果联系人不存在 → 继续进入阶段 3(创建新联系人)
步骤 B:检查 Apollo 中是否存在重复加入序列的情况
MCP 工具: apollo_contacts_search
q_keywords: prospect.email
per_page: 10
决策逻辑:
- 如果 Apollo 联系人存在且已加入序列 → 跳过
- 如果 Apollo 联系人存在但未加入序列 → 继续(重新加入)
- 如果 Apollo 联系人不存在 → 继续进入阶段 3(创建新联系人)
**去重输出:**唯一潜在客户列表(去重后通常为输入数量的 60–70%)
阶段 3:验证黄金规则及电话号码
黄金规则(硬性排除项):
以下情况跳过:
- 电子邮件域名与已知客户域名匹配(交叉检查 crm_customers)
- 联系人在 HubSpot 中标记为“Channel Partner”
- 联系人在 HubSpot 中标记为“Device Owner”
- 公司带有“Product Page Engagers”标签
- 职位属于 NEVER ATL 列表:仓库经理、网络经理、系统管理员、AV 技术员、平面设计讲师、项目管理员、网页设计师、课堂支持人员、实验室协调员、维修人员、楼宇工程师、多媒体服务经理、视频制作专员、流媒体团队
电话号码验证:
- 电话号码不得为空(来自 Apollo 信息补充或 prospect-enrich)
- 格式:+1-XXX-XXX-XXXX(美国)或 +1-XXX-XXX-XXXX(加拿大)
- 如果缺少电话号码 → 记录为“Phone Missing”,但不要加入序列(Apollo 合规要求必须提供电话号码)
**输出:**已验证的潜在客户列表(完成电话号码验证后通常为输入数量的 80–90%)
### 阶段 S — 抑制关卡
在将联系人加入序列之前,排除受抑制的联系人:
- 排除,如果已设置
bdr_suppression_until,且bdr_suppression_until> TODAY - 纳入,如果未设置
bdr_suppression_until(从未受抑制) - 纳入,如果
bdr_suppression_until< TODAY(冷却期已结束)
HubSpot 筛选条件:propertyName: "bdr_suppression_until", operator: "NOT_HAS_PROPERTY" 或 operator: "LT", value: TODAY_ISO
参考:lead-suppression-spec(bdr_suppressed、bdr_suppression_reason、bdr_suppression_until)
阶段 4:将潜在客户映射到目标序列
MCP 工具: apollo_emailer_campaigns_search
按垂直领域 + 模板搜索序列:
| 垂直领域 | 序列名称模式 | 目标序列 ID |
|---|---|---|
| 高等教育 | BDR_HigherEd_OutboundX | [按名称搜索] |
| 法院 | BDR_Courts_OutboundX | [按名称搜索] |
| 政府 | BDR_Government_OutboundX | [按名称搜索] |
| 企业视听 | BDR_CorporateAV_OutboundX | [按名称搜索] |
| 医疗保健 | BDR_Healthcare_OutboundX | [按名称搜索] |
| 宗教场所 | BDR_HoW_OutboundX | [按名称搜索] |
| K-12 | BDR_K12_OutboundX | [按名称搜索] |
查询逻辑:
per_page: 100
# Search returns: id, name, status, num_contacts, num_enrolled
序列选择规则:
- 将 prospect.vertical 映射到 sequence_name_pattern
- 选择当前加入人数最少的序列(负载均衡)
- 回退方案:如果未找到垂直领域专属序列,则使用默认序列 "BDR_Outbound_General"
输出: 潜在客户 + sequence_id 映射
阶段 5:创建 Apollo 联系人(如为新联系人)
MCP 工具: apollo_contacts_search
对于新潜在客户(在阶段 2 中未找到):
per_page: 10
q_keywords: prospect.email
如果未找到,则通过以下工具创建联系人:
MCP 工具: apollo_contacts_create
email: prospect.email
first_name: prospect.first_name
last_name: prospect.last_name
title: prospect.title
organization_name: prospect.company
phone: prospect.phone (if available)
label_names: [prospect.vertical, "BDR_Prospect", "2026_Q1"]
输出: 新 Apollo 联系人 ID(apollo_contact_id)
阶段 6:获取邮箱账户 ID
MCP 工具: apollo_email_accounts_index
查询所有已关联的邮箱账户:
# Returns: [{ id, email, status, daily_send_limit, ... }]
选择逻辑:
- 查找包含 "epiphan" 或 "tkipper" 的邮箱
- 如果有多个邮箱账户,则使用主邮箱账户
- 如果未找到 → 错误(没有邮箱账户,无法继续)
输出: email_account_id(例如:"6633baaece5fbd01c791d7ca")
阶段 7:批量添加到序列
MCP 工具: apollo_emailer_campaigns_add_contact_ids
对于每个序列(按 sequence_id 对潜在客户分组):
id: sequence_id (from Stage 4 mapping)
emailer_campaign_id: sequence_id (same as id)
send_email_from_email_account_id: email_account_id (from Stage 6)
contact_ids: [contact_id_1, contact_id_2, ..., contact_id_N] (max 100 per batch)
sequence_active_in_other_campaigns: true (allow multi-sequence enrollment)
sequence_unverified_email: false (require verified emails)
status: "active" (start sequence immediately)
批处理逻辑:
- 按目标序列对潜在客户分组
- 每次 API 调用最多发送 100 个联系人
- 遇到速率限制时重试
预期成功率: 95%+(大多数失败由邮箱验证导致)
阶段 8:确认加入序列
MCP 工具: apollo_contacts_search
对于每个已加入序列的联系人,验证其加入状态:
q_keywords: contact.email
per_page: 1
检查响应:
- contact.sequences(应包含阶段 7 中的 sequence_id)
- contact.last_sequence_enrollment_date(应为 "today")
- contact.status(应为 "active")
记录加入情况:
✓ [email protected] → BDR_HigherEd_Outbound (sequence_id: abc123)
✗ [email protected] → Phone validation failed
✗ [email protected] → Already enrolled in BDR_Corporate_AV
阶段 9:创建 HubSpot 联系人(同步)
为新创建的 Apollo 联系人创建对应的 HubSpot 联系人:
MCP 工具: manage_crm_objects(HubSpot createRequest)
objectType: "contacts"
properties: {
firstname: prospect.first_name,
lastname: prospect.last_name,
email: prospect.email,
phone: prospect.phone,
jobtitle: prospect.title,
company: prospect.company_name,
lifecyclestage: "subscriber",
hs_lead_status: "open",
custom_apollo_contact_id: apollo_contact_id,
custom_apollo_sequence: sequence_name,
custom_atl_btl_tier: prospect.atl_btl_tier,
custom_prospect_vertical: prospect.vertical,
custom_prospect_icp_score: prospect.icp_score
}
associations: [
{
targetObjectId: company_id, # Find or create company in HubSpot
targetObjectType: "companies"
}
]
公司关联逻辑:
- 按域名在 HubSpot 中搜索公司
- 如果找到:使用现有记录中的 company_id
- 如果未找到:通过 manage_crm_objects 创建公司
输出: 已创建的联系人 ID(用于关联 Gmail 草稿)
阶段 10:输出录入报告
格式: Markdown 表格 + 汇总统计
录入表格:
| 潜在客户 | 电子邮件 | 电话 | 垂直领域 | 序列 | Apollo ID | HubSpot ID | 状态 |
|---|---|---|---|---|---|---|---|
| Jane Smith | [email protected] | +1-555-0123 | 高等教育 | BDR_HigherEd_1 | apollo-123 | hs-456 | ✓ 已录入 |
| Bob Jones | [email protected] | null | 法院 | - | - | - | ✗ 缺少电话 |
| Carol White | [email protected] | +1-555-0124 | 企业视听 | BDR_CorporateAV_1 | apollo-789 | hs-012 | ✓ 已录入 |
汇总统计:
- 已处理的潜在客户总数:X
- 已成功录入:Y(占 X 的 Y%)
- 电话验证失败:Z
- 重复/已录入:W
- 已同步到 HubSpot:Y(新联系人)
- 按序列细分:
- BDR_HigherEd_1:已录入 5 人
- BDR_Courts_1:已录入 4 人
- BDR_CorporateAV_1:已录入 5 人
- 等
后续步骤: 潜在客户现已录入 Apollo 序列。Gmail 草稿(来自 prospect-refresh)已准备就绪,可供人工审核并通过从草稿发送的工作流发送。
输出结果 Sidecar
最后一步,将结果写入 ~/.claude/skill-analytics/last-outcome-sequence-load.json:
{"ts":"[UTC ISO8601]","skill":"sequence-load","version":"1.0.0","variant":"default",
"status":"[success|partial|error]","runtime_ms":[estimated ms from start],
"metrics":{"contacts_loaded":[n],"sequences_updated":[n],"duplicates_skipped":[n],"phone_validation_failures":[n]},
"error":null,"session_id":"[YYYY-MM-DD]"}
如果某些阶段失败但已生成结果,请使用状态 "partial"。只有在未生成任何输出时,才使用 "error"。
技能元数据
版本: 1.0 上次更新: 2026-03-19 作者: Tim Kipper 状态: 生产环境 集成: Apollo + HubSpot(portal 21530819) 层级: P1(核心 BDR 自动化) 触发条件: 定时(周一上午 7:15)+ 手动(“Load sequences”) 依赖项: prospect-refresh(上午 6:30)→ sequence-load(上午 7:15)→ morning-brief(上午 7:30)