mcpField
S
sequence-load

sequence-load

github.com/scientiacapital营销与增长2835 次安装3 周前更新
代码仓库

关于 sequence-load

这是一个将 prospect-refresh 中的新潜在客户筛选并加入 Apollo 外联序列的销售运营技能,供 BDR 流程使用。它检查重复记录、电话、排除规则和抑制期,并生成 Apollo 与 HubSpot 同步结果报告。

主要功能

  1. 01读取并验证潜在客户资料
  2. 02检查 HubSpot 与 Apollo 重复
  3. 03执行排除规则和电话校验
  4. 04按垂直领域选择序列
  5. 05批量加入并确认注册
  6. 06创建 HubSpot 联系人并报告

适用场景

  1. 01处理 prospect-refresh 生成的新线索
  2. 02避免重复加入外联序列
  3. 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-12BDR_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 IDHubSpot ID状态
Jane Smith[email protected]+1-555-0123高等教育BDR_HigherEd_1apollo-123hs-456✓ 已录入
Bob Jones[email protected]null法院---✗ 缺少电话
Carol White[email protected]+1-555-0124企业视听BDR_CorporateAV_1apollo-789hs-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)

评论

支持 Markdown