跳转到主要内容

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

摘要

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

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

说明

Salesforce 集成的新增功能?

Salesforce 集成现已包含多项改进:

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

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

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

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

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

开始之前

请确保您拥有:

  • Wati 账户,已订阅商务版套餐

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

  • Salesforce 管理员权限

  • Wati 生成的Webhook URLWebhook Authentication Secret

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

集成工作原理

设置过程包含两个部分:

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

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

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

步骤 1:打开 Salesforce 集成

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

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

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

  • 复制以下值:

    • Webhook URL

    • Webhook Authentication Secret

这些值将在 Salesforce 配置期间需要。

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

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

默认联系人字段

  • 业务电话

  • 联系人 ID*

  • 电子邮件

  • 名字

  • 姓氏

  • 所有者 ID

默认潜在客户字段

  • 电子邮件

  • 名字

  • 姓氏

  • 潜在客户 ID*

  • 所有者 ID

  • 电话

  • 状态

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

要同步其他字段:

  1. 点击字段选择器。

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

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

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

请根据需要审阅映射,只有当您希望某个 Salesforce 字段与不同的 Wati 联系人字段同步时才进行更改。

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

步骤 4:启用自动同步

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

这将激活 Salesforce 联系人或潜在客户创建或更新时的实时同步到 Wati。

步骤 5:导入现有 Salesforce 记录

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

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

第二部分:配置 Salesforce

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

步骤 1:创建远程站点

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

  • 选择新建远程站点

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

https://<hostname>
  • 选择激活

  • 点击保存

重要:请勿在远程站点 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 Flow 使用。

步骤 4:创建记录触发的 Flow

创建两个独立的 Flow:

  • 联系人 Flow

  • 潜在客户 Flow

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

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

设置

触发器类型

记录触发的 Flow

对象

联系人或潜在客户

触发事件

创建或更新

运行模式

异步(保存后)

操作类型

Apex

操作

通知 WATI 记录更改

创建后激活两个 Flow。

重要:始终使用异步模式。同步执行可能导致 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 身份验证期间使用的那个匹配。例如,login.salesforce.com 和您的 My Domain (*.my.salesforce.com) 都受支持,只要组织 ID 相同。

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

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

设置完成后会发生什么?

设置完成后:

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

  • Salesforce 触发 Flow。

  • Flow 调用 Apex 操作。

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

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

无需计划任务或手动导入。

联系人去重

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

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

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

重要说明

Salesforce 连接状态

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

它不验证:

  • 远程站点配置

  • Apex 类部署

  • 自定义标签

  • Salesforce Flow

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

支持的字段

仅支持标准的 Salesforce 字段。

__c 结尾的自定义 Salesforce 字段目前无法同步。

记录删除

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

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

电话号码格式

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

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

Wati 到 Salesforce 的同步

将 Wati 中的联系人更新并推回 Salesforce 的功能不适用于所有账户。

请联系您的客户经理以确认资格。

故障排除

如果 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 Flow 未触发

验证:

• Flow 已激活

• 入口条件满足

• Flow 配置为在异步模式下运行

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

Salesforce 端配置不完整

验证是否已完成所有 Salesforce 设置步骤,并且两个 Flow 都已激活。如果同步之前正常工作但已停止,请联系 Wati 支持。

同步之前工作但现在停止工作

Salesforce OAuth 令牌已过期或 Flow 被停用

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

正在创建重复联系人

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

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

如何查看 Salesforce 调试日志

要查看 Salesforce 日志:

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

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

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

常见问题解答 (FAQs)

集成概述

1. Salesforce 集成有什么作用?

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

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

在设置集成之前,您需要:

  • Wati 商务版套餐账户

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

  • Salesforce 管理员权限

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

由于部分配置必须在 Salesforce 中完成,因此需要 Salesforce 管理员权限。

3. Salesforce 集成是否自动同步联系人更新?

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

同步和数据映射

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

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

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

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

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

否。该集成目前仅支持标准的 Salesforce 字段。以 __c 结尾的自定义 Salesforce 字段无法同步。

限制

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

在 Salesforce 中删除联系人或潜在客户不会删除 Wati 中相应的联系人。Salesforce 关系将被移除,但 Wati 联系人将保留。

8. Salesforce 已连接状态是否确认集成已完全配置?

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

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

从 Wati 同步到 Salesforce 的功能不适用于所有账户。请联系您的客户经理以确认您的账户是否有资格使用此功能。

这是否解答了您的问题?