跳转到主要内容

如何将 Salesforce 集成到 Wati 并自动同步联系人和潜在客户 (Leads)

摘要

跨多个平台管理联系人可能非常耗时。通过 Salesforce 集成,Wati 可以自动使您的联系人和潜在客户保持最新状态,而无需手动导入。

本指南将引导您完成 Salesforce 与 Wati 之间的实时同步设置、导入现有记录以及配置字段映射,从而确保您的团队始终能够访问最新的客户信息。

操作说明

Salesforce 集成的关键功能

Salesforce 集成包括以下功能:

  • 从 Salesforce 到 Wati 的实时联系人同步

  • 针对联系人和潜在客户的可配置字段选择

  • Salesforce 与 Wati 之间的自定义字段映射

  • 现有 Salesforce 联系人和潜在客户的一次性导入

该集成使用 Salesforce 事件,在创建或更新联系人或潜在客户时自动更新 Wati 中的联系人,无需手动导入。

双向同步的工作原理

双向同步支持两个方向的同步,但每个方向独立运行并使用不同的机制:

Salesforce → Wati
当记录被创建或更新时,Salesforce 会将联系人和潜在客户记录的更改发送至 Wati。此方向是在 Salesforce 端使用记录触发的流 (Flows)、Apex 操作类和 Wati 的 Webhook 进行配置的。本文中的设置步骤涵盖了此方向。

Wati → Salesforce
当 Wati 中的联系人被更新时,更改会通过基于 Webhook 的同步实时推送到 Salesforce,而不是通过定时批量处理或轮询过程。此方向是双向同步功能的一部分,不依赖于本文所述的 Salesforce 端流配置。

重要提示:本文中的 Salesforce 配置步骤(远程站点、Apex 类、记录触发流)专门用于设置“Salesforce → Wati”同步。Wati → Salesforce 同步是双向同步的一部分,但下方的 Salesforce 端配置章节未涵盖其详细设置步骤。

Wati → Salesforce 同步行为

新联系人:当在 Wati 中创建新联系人并同步到 Salesforce 时,它会被创建为 Salesforce 联系人,而非潜在客户。

触发器:Wati → Salesforce 方向是实时的且基于 Webhook。Wati 中的更改会立即推送到 Salesforce,没有预定的批处理或轮询间隔。

字段映射:字段映射是可配置的。您可以将 Salesforce 字段映射到相应的 Wati 联系人字段,并根据您的需求进行调整。同时支持标准 Salesforce 字段和自定义字段(以 __c 结尾)。

商业计划要求:Wati → Salesforce 同步适用于 Wati 商业计划。包括此方向在内的双向同步需要订购商业计划。

准备工作

请确保您拥有:

  • 一个处于 商业计划 的 Wati 账户

  • 一个已经通过 OAuth 连接到 Wati 的 Salesforce 账户

  • Salesforce 管理员访问权限

  • 由 Wati 生成的 Webhook URLWebhook 身份验证密钥

注意:Salesforce 端配置需要 管理员 访问权限。标准 Salesforce 用户无法完成此设置。

集成工作原理

设置过程分为两个部分:

  • 在 Wati 中配置 Salesforce 同步设置

  • 配置 Salesforce 以向 Wati 发送更新

第 1 部分:在 Wati 中配置同步设置

第 1 步:打开 Salesforce 集成

  • 在 Wati 中,转到 Connectors > Integrations > Salesforce

  • 确认 Authentication(身份验证)步骤显示绿色勾选标记。

  • 验证您的 Salesforce 组织 URL 是否已显示。

  • 复制以下值:

    • Webhook URL

    • Webhook Authentication Secret(Webhook 身份验证密钥)

这些值在 Salesforce 配置过程中将会用到。

第 2 步:选择要同步的字段

选择需要同步到 Wati 的 Salesforce 字段。

默认联系人字段

  • Business Phone(工作电话)

  • Contact ID*(联系人 ID)

  • Email(电子邮件)

  • First Name(名字)

  • Last Name(姓氏)

  • Owner ID(所有者 ID)

默认潜在客户字段

  • Email(电子邮件)

  • First Name(名字)

  • Last Name(姓氏)

  • Lead ID*(潜在客户 ID)

  • Owner ID(所有者 ID)

  • Phone(电话)

  • Status(状态)

注意:* 必填字段无法移除。

若要同步其他字段:

  • 点击字段选择器。

  • 选择其他标准 Salesforce 字段。

第 3 步:将 Salesforce 字段映射到 Wati 字段

所选的 Salesforce 字段默认会自动映射到相应的 Wati 联系人字段。

请审查映射,仅当您希望将 Salesforce 字段同步到不同的 Wati 联系人字段时才进行更改。

在继续之前,请仔细审查所有映射。

第 4 步:启用自动同步

启用 Automatic data sync (Two-way Sync)(自动数据同步/双向同步)开关。

当启用 Automatic data sync (Two-way Sync) 时,更改将在 SalesforceWati 之间双向同步。这有助于在两个平台之间保持客户数据最新,无需手动更新。

第 5 步:导入现有 Salesforce 记录

运行一次性导入流程,将现有的 Salesforce 联系人和潜在客户导入 Wati。

此导入仅需在初始设置期间执行一次。

第 2 部分:配置 Salesforce

执行以下步骤需要 Salesforce 管理员访问权限。

第 1 步:创建远程站点

  • 转到 Setup > Security > Remote Site Settings(设置 > 安全 > 远程站点设置)。

  • 选择 New Remote Site(新建远程站点)。

  • 输入仅包含域名格式的远程站点 URL:

https://<hostname>
  • 选择 Active(激活)。

  • 点击 Save(保存)。

重要提示:不要在远程站点 URL 中包含 /api/v1/salesforce/processWebhook。添加路径将导致集成失败。

第 2 步:创建自定义标签

转到:Setup > Custom Code > Custom Labels(设置 > 自定义代码 > 自定义标签)

按如下所示完全准确地创建标签:

标签名称

WATI_Webhook_Endpoint

来自 Wati 的完整 Webhook URL

WATI_Webhook_Secret

来自 Wati 的 Webhook 身份验证密钥

重要提示:标签名称必须完全匹配。任何细微偏差都会导致集成无法正常工作。

第 3 步:部署 Apex 类

  • 转到 Setup > Developer Console(设置 > 开发人员控制台)。

  • 创建一个新的 Apex 类。

  • 将该类命名为:

WatiSalesforceWebhookSender
  • 粘贴 Wati 提供的 Apex 代码。

  • 保存并编译该类。

此类会创建以下 Salesforce 操作:

Notify WATI of Record Changes

此操作将由 Salesforce 流使用。

第 4 步:创建记录触发流

创建两个独立的流:

  • 联系人流 (Contact Flow)

  • 潜在客户流 (Lead Flow)

导航至:Setup > Process Automation > Flows > New Flow(设置 > 流程自动化 > 流 > 新建流)

使用以下设置配置两个流:

设置

触发类型

记录触发流

对象

Contact(联系人)或 Lead(潜在客户)

触发事件

创建或更新

运行模式

异步(保存后)

操作类型

Apex

操作

Notify WATI of Record Changes

创建后激活两个流。

重要提示:请务必使用 异步模式。同步执行可能会导致 Salesforce 事务延迟和超时错误。

第 5 步:了解 Apex 类如何使用自定义标签

Apex 类使用 System.Label.WATI_Webhook_EndpointSystem.Label.WATI_Webhook_Secret 自动引用您的自定义标签 — 无需手动编辑。

请按原样复制整个类。不要修改类的结构 — 仅需更新第 2 步中配置的自定义标签,以匹配您的 Wati 凭据。

public class WatiSalesforceWebhookSender {

private static String getEndpoint() {
return System.Label.WATI_Webhook_Endpoint;
}

private static String getWebhookSecret() {
return System.Label.WATI_Webhook_Secret;
}

private static final String PHONE_FIELD_DEFAULT = 'Phone';

@InvocableMethod(
label = 'Notify WATI of Record Changes',
description = 'POST Contact/Lead changes to WATI'
)
public static void sendRecords(List<Id> recordIds) {

if (recordIds == null || recordIds.isEmpty()) {
return;
}

String objectType = recordIds[0].getSObjectType().getDescribe().getName();
String baseUrl = Url.getOrgDomainUrl().toExternalForm();
String orgId = UserInfo.getOrganizationId();
String userId = UserInfo.getUserId();
String fullIdentityId = baseUrl + '/id/' + orgId + '/' + userId;

List<Map<String, Object>> events = new List<Map<String, Object>>();

for (Id rid : new Set<Id>(recordIds)) {

if (rid == null) {
continue;
}

events.add(new Map<String, Object>{
'salesForceOrgId' => fullIdentityId,
'recordId' => String.valueOf(rid),
'objectType' => objectType,
'eventType' => 'update',
'phoneField' => PHONE_FIELD_DEFAULT
});
}

if (!events.isEmpty()) {
makeCallout(JSON.serialize(events));
}
}

@future(callout = true)
private static void makeCallout(String jsonBody) {

HttpRequest req = new HttpRequest();

req.setEndpoint(getEndpoint());
req.setMethod('POST');
req.setHeader('Content-Type', 'application/json;charset=UTF-8');
req.setHeader('X-Wati-Salesforce-Webhook-Key', getWebhookSecret());
req.setBody(jsonBody);

try {
HttpResponse res = new Http().send(req);
System.debug(LoggingLevel.INFO, 'WATI status: ' + res.getStatusCode());
} catch (Exception e) {
System.debug(LoggingLevel.ERROR, 'WATI error: ' + e.getMessage());
}
}
}

salesForceOrgId 必须包含您的 Salesforce 身份 URL。这通常使用 Url.getOrgDomainUrl(),后接 /id/、您的 Salesforce 组织 ID 和用户 ID 来构造。

Wati 使用此身份 URL 中的 Salesforce 组织 ID 来识别您连接的 Salesforce 组织。主机名无需与 OAuth 身份验证期间使用的主机名相匹配。例如,只要组织 ID 相同,login.salesforce.com 和您的自定义域 (*.my.salesforce.com) 均受支持。

或者,如果它与已连接的组织匹配,您也可以直接提供 15 位或 18 位 Salesforce 组织 ID。

Wati 集成服务会在连接时存储此组织段,并可能在出站 Webhook 有效负载到达 Wati 之前对其进行标准化。

设置后会发生什么?

设置完成后:

  • 在 Salesforce 中创建或更新联系人或潜在客户。

  • Salesforce 触发流。

  • 该流调用 Apex 操作。

  • Apex 操作将更新发送到 Wati。

  • Wati 自动创建或更新联系人。

无需定时作业或手动导入。

当与 Wati 关联的 Salesforce 潜在客户被转换时会发生什么?

当 Salesforce 潜在客户被转换并创建新的联系人记录时,该集成会自动更新从旧潜在客户到新联系人的映射 — 无需手动重新关联。

Wati 使用电话号码来识别记录。当潜在客户被转换时,现有的 Wati 联系人会被保留并与生成的 Salesforce 联系人关联。转换不会导致创建重复的 Wati 联系人。

联系人去重

Wati 使用电话号码来识别现有联系人。

  • 如果已存在匹配的电话号码,则更新该联系人。

  • 如果不存在匹配的电话号码,则创建一个新联系人。

重要说明

Salesforce 连接状态

绿色的 Connected(已连接)指示器仅确认 OAuth 身份验证。

它不验证:

  • 远程站点配置

  • Apex 类部署

  • 自定义标签

  • Salesforce 流

设置完成后,请务必通过更新联系人或潜在客户来测试集成。

支持的字段

  • 支持标准 Salesforce 字段。

  • 支持以 __c 结尾的自定义 Salesforce 字段。

记录删除

在 Salesforce 中删除联系人或潜在客户不会删除 Wati 中的相应联系人。

Salesforce 关系会被移除,但 Wati 联系人将保留。

电话号码格式

在 Salesforce 记录中请使用一致的电话号码格式。

格式不一致可能会导致在 Wati 中创建重复联系人,而不是更新现有记录。

Wati 到 Salesforce 的同步

作为双向同步功能的一部分,Wati → Salesforce 同步适用于 Wati 商业计划。

故障排除

如果 Salesforce 联系人或潜在客户未能正确同步,请查看以下症状以确定可能的原因及推荐的解决方法。

症状

可能原因

解决方法

Apex 日志中出现 HTTP 401 错误

Webhook 身份验证密钥错误

从 Wati 复制最新的身份验证密钥,并更新 WATI_Webhook_Secret 自定义标签。

Apex 日志中出现 HTTP 404 错误

Webhook URL 错误

从 Wati 复制最新的 Webhook URL,并更新 WATI_Webhook_Endpoint 自定义标签。

Apex 日志中出现未经授权的端点或标注异常

远程站点缺失或配置错误

验证远程站点 URL 仅包含 https://<hostname>,且不包含任何 URL 路径。

未生成调试日志

Salesforce 流未触发

验证:

• 流是否已激活

• 是否满足进入条件

• 流是否配置为以 异步 模式运行

联系人未同步,但 Salesforce 显示已连接

Salesforce 端配置不完整

验证所有 Salesforce 设置步骤均已完成,且两个流均已激活。如果之前同步正常但现在已停止,请联系 Wati 支持部门。

之前正常但现在停止同步

Salesforce OAuth 令牌过期或流被停用

验证两个流均已激活。如果问题仍然存在,请在 Wati 中断开并重新连接 Salesforce。

正在创建重复的联系人

Salesforce 和 Wati 之间的电话号码格式不同

确保 Salesforce 和 Wati 之间的电话号码格式一致。

如何查看 Salesforce 调试日志

要查看 Salesforce 日志:

  • 转到 Setup > Environments > Logs > Debug Logs(设置 > 环境 > 日志 > 调试日志)。

  • 为您的 Salesforce 用户启用日志记录。

  • 更新联系人或潜在客户以生成日志条目。

常见问题解答 (FAQ)

集成概览

1. Wati Salesforce 集成支持什么?

Wati Salesforce 集成支持 Salesforce 与 Wati 之间的实时同步、可配置的字段选择、自定义字段映射,以及现有 Salesforce 联系人和潜在客户的一次性导入。双向同步支持两个方向的同步:Salesforce → Wati 和 Wati → Salesforce。

2. Salesforce 与 Wati 之间的双向同步如何工作?

Salesforce → Wati 同步在创建或更新记录时将联系人和潜在客户的更改发送至 Wati。它使用 Salesforce 记录触发流、Apex 操作和 Wati Webhook。

Wati → Salesforce 同步使用基于 Webhook 的同步实时将 Wati 联系人更新发送到 Salesforce。它不依赖于 Salesforce 端的流配置。

3. 所有 Wati 计划都提供双向同步吗?

不。Wati → Salesforce 同步和完整的双向同步功能需要 Wati 商业计划

4. 当 Wati 将联系人同步到 Salesforce 时,它是被创建为潜在客户还是联系人?

它被创建为 Salesforce 联系人,而不是潜在客户。

5. Wati → Salesforce 同步是实时的吗?

是的。Wati → Salesforce 方向是基于 Webhook 的,在 Wati 中更新联系人时实时触发。它不依赖于定时批处理或轮询过程。

6. 如果与 Wati 关联的 Salesforce 潜在客户被转换,我需要手动重新关联吗?

不需要。Wati 通过电话号码匹配记录,并在潜在客户转换时自动更新与生成的 Salesforce 联系人的映射。现有的 Wati 联系人会被保留,且不会创建重复项。

7. 我该如何排查 Salesforce 联系人或潜在客户不同步的问题?

首先,请验证 Salesforce Connected 指示器不应被视为整个集成已正确配置的证据。它仅确认 OAuth 身份验证。请验证远程站点、自定义标签、Apex 类和两个 Salesforce 流是否已正确配置并处于活动状态。

常见错误包括:

  • HTTP 401:使用最新的 Wati 身份验证密钥更新 WATI_Webhook_Secret 自定义标签。

  • HTTP 404:使用最新的 Wati Webhook URL 更新 WATI_Webhook_Endpoint 自定义标签。

  • 未经授权的端点或标注异常:验证远程站点仅包含 https://<hostname>,且不包含任何 URL 路径。

  • 无调试日志:验证流是否已激活、满足进入条件,且以异步模式运行。

  • 重复联系人:在 Salesforce 和 Wati 中使用一致的电话号码格式。

Salesforce 调试日志可在 Setup > Environments > Logs > Debug Logs 下找到。

这是否解答了您的问题?