营销自动化:Mailchimp、HubSpot、ActiveCampaign 与 Brevo
将 CRM 联系人与你的 Mailchimp、HubSpot、ActiveCampaign 或 Brevo 列表/受众同步,并接收回传的订阅与退订事件(自带账号模式,账号归你所有)。
营销自动化集成使用你自己的 Mailchimp、HubSpot、ActiveCampaign 或 Brevo 账号(BYO 模式:自带账号)。CRM 联系人会被添加/更新到你的列表/受众中(按邮箱同步,幂等),而订阅/退订事件会回传到 CRM,更新该联系人的营销状态。我们这边没有任何费用、加价或中间环节:数据直接发往并来自你的账号。
该集成初始状态为未激活:在你填写凭据并激活之前不会发生任何事。所有密钥(API key、令牌、client secret)都会加密存储在 CRM 中,且永远不会再次显示。每个平台在“设置 → 集成”中都有各自的卡片;webhook URL 是唯一的(/api/inbound/marketing/…),CRM 通过该 URL 中的令牌来识别是哪个平台。
前置条件
- 拥有管理员权限的 Mailchimp、HubSpot 或 ActiveCampaign 账号,以便生成 API key/令牌并创建 webhook。
- Mailchimp:服务器前缀(例如 us21)、Audience ID 以及一个 API key(账号 → Extras → API keys)。
- HubSpot:一个私有应用(设置 → 集成 → Private Apps),需要具备 crm.objects.contacts.read/write 权限范围。ActiveCampaign:API URL 和 API key(设置 → Developer)。
- Brevo(原 Sendinblue):一个 API key(SMTP & API → API Keys),如果你希望将联系人添加到某个列表,还需要该列表的数字 ID(联系人 → 列表)。
- 在 Sellio 中,需要管理员权限才能保存凭据并在“设置 → 集成”中激活该集成。
同步内容
- 出站(CRM → 服务商):每个带有邮箱的联系人都会作为你列表/受众的一个成员/联系人被发送出去。该 upsert 操作按邮箱幂等,因此重新发送不会产生重复(Mailchimp 使用邮箱的 MD5 哈希;HubSpot 通过 idProperty=email 进行 upsert;ActiveCampaign 使用 /contact/sync;Brevo 使用带 updateEnabled 的 POST /v3/contacts)。名字、姓氏和电话号码会一并同步。在 Brevo 上,你还可以选择每个 Sellio 字段对应到哪个属性(字段映射)。
- 在 Brevo 中,你还可以把每个联系人发送到与其客户组对应的列表,而不是把所有人都发到同一个列表:先指明联系人的哪个字段保存客户组,然后每行写一条规则,格式为 组 = 列表。没有对应规则的组会进入默认列表,因此不会有人因为漏配置而收不到邮件。
- 入站(服务商 → CRM):当有人订阅或退订时,webhook 会通过邮箱匹配,更新 CRM 中对应联系人记录上的字段(marketing_status 和 email_opt_in)。如果该邮箱在 CRM 中不存在,事件会被忽略(不会创建任何内容)。
- 实时同步:一旦你在 CRM 中创建或编辑一个联系人,它会立即自动同步到所有已激活的营销连接器(Mailchimp、ActiveCampaign、HubSpot 和 Brevo),无需等待批量同步。该同步是尽力而为的,并且仅在至少有一个连接器处于激活状态时运行。
- 卡片上的“同步联系人”按钮会批量发送 CRM 联系人(尽力而为,单次最多 200 个),便于首次加载或重新处理你的联系人。
💡 该同步在两个方向上都是幂等的:重新发送同一个联系人只会更新已有的成员,重复处理同一个订阅/退订事件也会让联系人保持相同的最终状态。
Mailchimp
- 打开“设置 → 集成”,找到“营销(Mailchimp)”卡片。
- 填写服务器前缀(例如 us21,即你 API key 中破折号后的部分,以及后台地址中的对应部分)、Audience ID(受众 → 设置 → Audience ID)以及 API key(账号 → Extras → API keys)。点击“保存凭据”。
- 复制“Webhook URL”。
- 在 Mailchimp → 受众 → 设置 → Webhooks 中,创建一个指向该 URL 的 webhook,并勾选 subscribe 和 unsubscribe 事件。Mailchimp 不会对 webhook 进行签名:安全性依赖于不可预测的 URL 令牌,请将其作为机密信息处理。
- 返回 CRM 并点击“激活”。首次批量发送可使用“同步联系人”。
HubSpot
- 在 CRM 中,找到“营销(HubSpot)”卡片。
- 在“设置 → 集成 → Private Apps”中创建一个私有应用,并赋予 crm.objects.contacts.read 和 .write 权限范围;将 Access token 粘贴到“Private app token”字段。你也可以选填一个 HubSpot 应用的 Client secret 以校验 webhook 签名。点击“保存凭据”。
- 复制“Webhook URL”。
- 在 HubSpot 中配置一个工作流 webhook(或应用 webhook),向该 URL 发送 POST 请求(JSON),内容包含联系人邮箱和营销状态。如果你填写了 Client secret,HubSpot 会对每次调用进行签名(X-HubSpot-Signature);否则,安全性由 URL 令牌保障。
- 返回 CRM 并点击“激活”。
ActiveCampaign
- 在 CRM 中,找到“营销(ActiveCampaign)”卡片。
- 填写 API URL 和 API key(均在“设置 → Developer → API Access”中)。点击“保存凭据”。
- 复制“Webhook URL”。
- 在 ActiveCampaign → 设置 → Manage Webhooks 中,创建一个指向该 URL 的 webhook,并勾选 subscribe 和 unsubscribe 事件。ActiveCampaign 不会对 webhook 进行签名:安全性依赖于不可预测的 URL 令牌,请将其作为机密信息处理。
- 返回 CRM 并点击“激活”。
Brevo(原 Sendinblue)
- 在 CRM 中,找到“营销(Brevo)”卡片。
- 在 Brevo 中,前往“SMTP & API → API Keys”(或通过账号的齿轮图标 → SMTP & API)生成一个 API key。复制该密钥。
- 回到 Sellio,将密钥粘贴到“API key”字段。如果你希望将联系人添加到某个列表,请填写该列表的数字 ID(该数字显示在“联系人 → 列表”下方的列表 URL 中);留空则仅创建/更新联系人。
- 在“字段映射”下,将每个 Sellio 联系人字段关联到对应的 Brevo 属性(大写)。默认值为 FIRSTNAME、LASTNAME、SMS(电话)和 COMPANY(公司)。留空则使用默认值。请先在“联系人 → 设置 → Contact attributes”中创建自定义属性,否则 Brevo 会忽略不存在的属性。点击“保存凭据”。
- 复制“Webhook URL”。
- 在 Brevo → 设置 → Webhooks 中,创建一个指向该 URL 的 Marketing webhook,并勾选 unsubscribe 事件。Brevo 不会对 webhook 进行签名:安全性依赖于不可预测的 URL 令牌,请将其作为机密信息处理。
- 返回 CRM 并点击“激活”。首次批量发送可使用“同步联系人”。
请将 webhook URL 和凭据视为机密信息。在 Mailchimp/ActiveCampaign 不对调用进行签名的情况下,安全性依赖于不可预测的 URL 令牌(与网站表单采用相同的模式);在 HubSpot 上,填写 Client secret 即可要求签名校验。如果你在未填写必要凭据的情况下尝试激活,该集成会保持未激活状态,在一切配置就绪之前不会同步任何内容。
如何测试
- 出站:点击卡片上的“同步联系人”,然后在你服务商的列表/受众中检查带有邮箱的联系人是否已出现(且没有重复)。
- 入站:对一个已经是 CRM 联系人的测试邮箱执行订阅/退订操作,确认该联系人的 marketing_status 和 email_opt_in 字段已被更新。
- 重新发送同一个联系人和同一个事件,确认最终状态一致(幂等性)。
故障排查
- Mailchimp 401/服务器错误:服务器前缀(例如 us21)必须与你账号的一致;同时检查 Audience ID 和 API key。
- HubSpot 401:Private app token 有误或缺少 crm.objects.contacts.read/write 权限范围。请重新创建具有该权限范围的私有应用,并重新粘贴令牌。
- ActiveCampaign 401:检查 API URL 和 API key(设置 → Developer → API Access),两者须来自同一账号。
- Brevo 401/403:API key 有误或已被撤销。请在“SMTP & API → API Keys”中生成新的密钥并重新粘贴。如果某个属性未出现在 Brevo 联系人上,请先在“联系人 → 设置 → Contact attributes”中创建该属性(Brevo 会忽略不存在的属性)。如果联系人未加入列表,请检查数字列表 ID。
- 入站未更新联系人:如果事件邮箱在 CRM 中不存在,不会创建任何内容(设计如此)。请先注册该联系人。确认 webhook 指向的是“Webhook URL”,并且勾选了 subscribe/unsubscribe。
- HubSpot:签名无效:如果你填写了 Client secret,X-HubSpot-Signature 请求头必须与之匹配。否则,请移除该密钥,转而依赖 URL 令牌。