跳转到主要内容

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

摘要

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

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

操作说明

Salesforce 集成有哪些新功能?

Salesforce 集成现在包含以下改进:

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

  • 可配置的联系人和潜在客户(Leads)字段选择

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

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

以前,用户必须手动选择从 Salesforce 导入来同步数据。新的集成利用 Salesforce 事件,在创建或更新联系人或潜在客户(Leads)时,自动更新 Wati 中的联系人。

准备工作

请确保您具备以下条件:

  • 一个已订阅商业版的 Wati 账户

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

  • Salesforce 管理员访问权限

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

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

集成如何工作

设置过程包含两个部分:

  1. 在 Wati 中配置 Salesforce 同步设置

  2. 配置 Salesforce 以向 Wati 发送更新

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

步骤 1:打开 Salesforce 集成

  • 在 Wati 中,转到 连接器 > 集成 > Salesforce

  • 确认身份验证步骤显示绿色对勾。

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

  • 复制以下值:

    • Webhook URL

    • Webhook 身份验证密钥

在配置 Salesforce 时会需要这些值。

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

选择应同步到 Wati 的 Salesforce 字段。

默认联系人字段

  • 公司电话

  • 联系人 ID*

  • 邮箱

  • 所有者 ID

默认潜在客户(Lead)字段

  • 邮箱

  • 潜在客户 ID*

  • 所有者 ID

  • 电话

  • 状态

注意:标有 * 的为必填字段,无法移除。

要同步其他字段:

  1. 点击字段选择器。

  2. 选择其他标准 Salesforce 字段。

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

默认情况下,选定的 Salesforce 字段会自动映射到相应的 Wati 联系人字段。

请查看这些映射,仅当您希望某个 Salesforce 字段与不同的 Wati 联系人字段同步时才进行修改。

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

步骤 4:启用自动同步

启用自动数据同步(双向同步)开关。

自动数据同步(双向同步)启用后,更改会在 SalesforceWati 之间双向同步。这有助于保持两个平台上的客户数据为最新,无需手动更新。

步骤 5:导入现有 Salesforce 记录

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

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

第二部分:配置 Salesforce

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

步骤 1:创建远程站点

  • 转到 设置 > 安全 > 远程站点设置

  • 选择新建远程站点

  • 仅使用域名格式输入远程站点 URL:

https://<主机名>
  • 选择启用

  • 点击保存

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

步骤 2:创建自定义标签

转到:设置 > 自定义代码 > 自定义标签

严格按照如下所示创建标签:

标签名称

WATI_Webhook_Endpoint

来自 Wati 的完整 Webhook URL

WATI_Webhook_Secret

来自 Wati 的 Webhook 身份验证密钥

重要:标签名称必须完全匹配。任何差异都将导致集成无法工作。

步骤 3:部署 Apex 类

  • 转到 设置 > 开发者控制台

  • 创建一个新的 Apex 类。

  • 将类命名为:

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

  • 保存并编译该类。

此类将创建 Salesforce 操作:

通知 WATI 记录更改

此操作将用于 Salesforce 流程。

步骤 4:创建记录触发式流程

创建两个独立的流程:

  • 联系人流程

  • 潜在客户(Lead)流程

导航至:设置 > 流程自动化 > 流程 > 新建流程

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

设置

触发器类型

记录触发式流程

对象

联系人或潜在客户(Lead)

触发事件

已创建或已更新

运行模式

异步(保存后)

操作类型

Apex

操作

通知 WATI 记录更改

创建后激活两个流程。

重要:始终使用异步模式。同步执行可能导致 Salesforce 事务延迟和超时错误。

步骤 5:使用自定义标签配置端点和密钥

使用 Wati 生成的 Webhook URL 和 Webhook 身份验证密钥创建 WATI_Webhook_EndpointWATI_Webhook_Secret 自定义标签。

在您的 Apex 类中,使用 System.Label.WATI_Webhook_EndpointSystem.Label.WATI_Webhook_Secret 引用这些值。

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 Domain(*.my.salesforce.com)都受支持。

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

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

设置完成后会发生什么?

设置完成后:

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

  • Salesforce 触发流程。

  • 流程调用 Apex 操作。

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

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

无需计划的作业或手动导入。

联系人去重

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

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

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

重要说明

Salesforce 连接状态

绿色的已连接指示符仅确认 OAuth 身份验证成功。

它不验证:

  • 远程站点配置

  • Apex 类部署

  • 自定义标签

  • Salesforce 流程

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

支持的字段

  • 支持标准 Salesforce 字段。

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

记录删除

在 Salesforce 中删除联系人或潜在客户(Lead)不会删除 Wati 中对应的联系人。

Salesforce 关系被移除,但 Wati 联系人仍然保留。

电话号码格式

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

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

Wati 到 Salesforce 的同步

是的,所有 Wati 商业版计划的客户均可使用此功能。

故障排除

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

症状

可能的原因

解决方法

Apex 日志中出现 HTTP 401 错误

Webhook 身份验证密钥不正确

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

Apex 日志中出现 HTTP 404 错误

Webhook URL 不正确

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

Apex 日志中出现未授权端点或调用异常

远程站点缺失或配置错误

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

未生成调试日志

Salesforce 流程未触发

验证:

• 流程是否已激活

• 是否满足进入条件

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

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

Salesforce 端配置不完整

验证所有 Salesforce 设置步骤是否已完成,并且两个流程均处于激活状态。如果同步以前有效但现在已停止,请联系 Wati 支持。

同步在正常工作后停止

Salesforce OAuth 令牌过期或流程被停用

验证两个流程是否均处于激活状态。如果问题仍然存在,请在 Wati 中断开并重新连接 Salesforce。

正在创建重复联系人

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

确保在 Salesforce 和 Wati 中使用一致的电话号码格式。

如何查看 Salesforce 调试日志

查看 Salesforce 日志:

  • 转到 设置 > 环境 > 日志 > 调试日志

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

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

常见问题解答

集成概述

1. Salesforce 集成的作用是什么?

Salesforce 集成会自动将 Salesforce 联系人和潜在客户(Leads)与 Wati 同步。它支持实时同步、可配置的字段选择、自定义字段映射以及一次性导入现有 Salesforce 记录。

2. 设置 Salesforce 集成前需要准备什么?

设置集成之前,您需要:

  • 一个 Wati 商业版计划账户

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

  • Salesforce 管理员访问权限

  • Wati 生成的 Webhook URL 和 Webhook 身份验证密钥

需要 Salesforce 管理员访问权限,因为部分配置必须在 Salesforce 中完成。

3. Salesforce 集成会自动同步联系人更新吗?

是的。设置完成并启用自动同步后,Salesforce 会在创建或更新记录时自动将联系人和潜在客户(Lead)更新发送到 Wati。持续同步不再需要手动导入。

同步与数据映射

4. Salesforce 字段如何映射到 Wati 字段?

默认情况下,选定的 Salesforce 字段会自动映射到相应的 Wati 联系人字段。如果您希望某个 Salesforce 字段与不同的 Wati 联系人字段同步,可以查看并修改映射。

5. Wati 如何在同步过程中防止重复联系人?

Wati 使用电话号码来识别现有联系人。如果存在匹配的电话号码,则更新现有联系人。如果未找到匹配的电话号码,Wati 会创建一个新联系人。

6. 是否支持自定义 Salesforce 字段?

是的。该集成支持以 _c 结尾的标准 Salesforce 字段和自定义 Salesforce 字段。

限制

7. 如果我在 Salesforce 中删除联系人或潜在客户(Lead),会发生什么?

在 Salesforce 中删除联系人或潜在客户(Lead)不会删除 Wati 中对应的联系人。Salesforce 关系被移除,但 Wati 联系人仍然保留。

8. Salesforce 的“已连接”状态是否表示集成已完全配置?

否。已连接状态仅确认 Salesforce OAuth 身份验证成功。它不验证 Salesforce 端的配置,包括远程站点、Apex 类、自定义标签或 Salesforce 流程。

9. 是否支持从 Wati 同步回 Salesforce?

是的,所有 Wati 商业版计划的客户均可使用此功能。

这是否解答了您的问题?