跳至主要內容

如何將 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 Authentication Secret

重要:標籤名稱必須完全一致。任何差異都會導致整合無法正常運作。

步驟 3:部署 Apex 類別

  • 前往設定 > 開發人員主控台

  • 建立新的 Apex 類別。

  • 為類別命名:

WatiSalesforceWebhookSender
  • 貼上 Wati 提供的 Apex 程式碼。

  • 儲存並編譯該類別。

此類別會建立 Salesforce 動作:

通知 WATI 記錄變更

Salesforce 流程將使用此動作。

步驟 4:建立記錄觸發的流程

建立兩個獨立的流程:

  • 聯絡人流程

  • 潛在客戶流程

導覽至:設定 > 程序自動化 > 流程 > 新流程

使用以下設定來設定兩個流程:

設定

觸發類型

記錄觸發的流程

物件

聯絡人或潛在客戶

觸發事件

建立或更新

執行模式

非同步(儲存後)

動作類型

Apex

動作

通知 WATI 記錄變更

建立兩者之後啟用。

重要:務必使用非同步模式。同步執行可能導致 Salesforce 交易延遲和逾時錯誤。

步驟 5:使用自訂標籤設定端點和金鑰

使用 Wati 產生的 Webhook URL 和 Webhook Authentication Secret 建立 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 會在連線時儲存此 org 區段,並可能在將輸出 Webhook 負載傳送至 Wati 之前對其進行標準化。

例如,login.salesforce.com 和您的 My Domain (*.my.salesforce.com) 皆支援,只要組織 ID 相同即可。

或者,如果您提供的 15 或 18 位數 Salesforce 組織 ID 與已連線的組織相符,則可直接提供。

Wati 會在連線時儲存此 org 區段,並可能在將輸出 Webhook 負載傳送至 Wati 之前對其進行標準化。

設定完成後會發生什麼事?

設定完成後:

  • 在 Salesforce 中建立或更新聯絡人或潛在客戶。

  • Salesforce 觸發流程。

  • 流程呼叫 Apex 動作。

  • Apex 動作將更新傳送至 Wati。

  • Wati 會自動建立或更新聯絡人。

不需要排程作業或手動匯入。

聯絡人重複資料刪除

Wati 使用電話號碼識別現有聯絡人。

  • 如果已存在符合的電話號碼,則會更新聯絡人。

  • 如果不存在符合的電話號碼,則會建立新的聯絡人。

重要注意事項

Salesforce 連線狀態

綠色的已連線指示器僅確認 OAuth 驗證。

它不會驗證:

  • 遠端網站設定

  • Apex 類別部署

  • 自訂標籤

  • Salesforce 流程

設定完成後,請務必透過更新聯絡人或潛在客戶來測試整合。

支援的欄位

僅支援標準 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 流程未觸發

驗證:

• 流程是否已啟用

• 入口條件是否已滿足

• 流程是否設定為在非同步模式下執行

聯絡人未同步,但 Salesforce 顯示已連線

Salesforce 端設定不完整

驗證是否已完成所有 Salesforce 設定步驟,並且兩個流程都已啟用。如果先前同步正常運作但後來停止,請聯絡 Wati 支援。

先前運作正常,但同步停止運作

Salesforce OAuth 權杖過期或流程已被停用

驗證兩個流程是否已啟用。如果問題仍然存在,請中斷 Salesforce 連線並在 Wati 中重新連線。

正在建立重複的聯絡人

Salesforce 和 Wati 之間的電話號碼格式不同

確保電話號碼在 Salesforce 和 Wati 中使用一致的格式。

如何檢視 Salesforce 偵錯日誌

若要檢視 Salesforce 日誌:

  • 前往設定 > 環境 > 日誌 > 偵錯日誌

  • 為您的 Salesforce 使用者啟用日誌記錄。

  • 更新聯絡人或潛在客戶以產生日誌項目。

常見問題 (FAQ)

整合總覽

1. Salesforce 整合做了什麼?

Salesforce 整合自動將 Salesforce 聯絡人和潛在客戶與 Wati 同步。它支援即時同步、可設定的欄位選擇、自訂欄位對應,以及現有 Salesforce 記錄的一次性匯入。

2. 設定 Salesforce 整合前需要什麼?

在設定整合之前,您需要:

  • Wati 商業方案帳戶

  • 透過 OAuth 已連接到 Wati 的 Salesforce 帳戶

  • Salesforce 管理員存取權

  • Wati 產生的 Webhook URL 和 Webhook Authentication Secret

由於部分設定必須在 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 流程。

9. 是否支援從 Wati 同步到 Salesforce?

從 Wati 同步到 Salesforce 並非所有帳戶都適用。請聯絡您的帳戶經理以確認您的帳戶是否符合此功能的資格。

是否回答了您的問題?