跳至主要內容

如何將 Salesforce 整合至 Wati 並自動同步聯絡人 (Contacts) 與潛在客戶 (Leads)

摘要

在多個平台之間管理聯絡人可能會非常耗時。透過 Salesforce 整合,Wati 可自動保持您的聯絡人和潛在客戶 (Leads) 處於最新狀態,無需手動匯入。

本指南將引導您完成 Salesforce 與 Wati 之間的即時同步設定、匯入現有記錄以及配置欄位映射,確保您的團隊隨時都能存取最新的客戶資訊。

說明

Salesforce 整合的主要功能

Salesforce 整合包含以下功能:

  • 從 Salesforce 到 Wati 的即時聯絡人同步

  • 可針對聯絡人和潛在客戶進行配置的欄位選擇

  • Salesforce 與 Wati 之間的自訂欄位映射

  • 現有 Salesforce 聯絡人和潛在客戶的一次性匯入

此整合使用 Salesforce 事件,在建立或更新聯絡人或潛在客戶時,自動更新 Wati 中的聯絡人資訊,無需手動匯入。

雙向同步 (Two-Way Sync) 的運作方式

雙向同步支援雙向資訊同步,但每個方向皆獨立運作並使用不同的機制:

Salesforce → Wati
當記錄建立或更新時,Salesforce 會將聯絡人和潛在客戶記錄的變更傳送到 Wati。此方向是在 Salesforce 端使用記錄觸發流程 (record-triggered Flows)、Apex 動作類別以及 Wati 的 webhook 進行配置。本文中的設定步驟涵蓋了此方向的設定。

Wati → Salesforce
當 Wati 中的聯絡人更新時,變更會透過基於 webhook 的同步即時推送到 Salesforce,而非使用排程批次或輪詢程序。此方向是雙向同步功能的一部分,不依賴本文所述的 Salesforce 端流程配置。

重要提示:本文中的 Salesforce 配置步驟(遠端網站、Apex 類別、記錄觸發流程)專門用於設定 Salesforce → Wati 的同步。雙向同步支援 Wati → Salesforce 的同步,但其詳細設定步驟未包含在下方的 Salesforce 端配置章節中。

Wati → Salesforce 同步行為

新聯絡人:當 Wati 中建立新聯絡人並同步至 Salesforce 時,它會被建立為 Salesforce 聯絡人 (Contact),而不是潛在客戶 (Lead)。

觸發條件:Wati → Salesforce 的同步方向為即時且基於 webhook。Wati 中的變更會立即推送至 Salesforce,沒有排程批次或輪詢間隔。

欄位映射:欄位映射可供配置。Salesforce 欄位可對應至相應的 Wati 聯絡人欄位,並根據您的需求進行調整。支援標準 Salesforce 欄位及自訂欄位(結尾為 __c)。

商業方案要求:Wati → Salesforce 同步適用於 Wati 商業方案 (Business Plan)。包含此方向在內的雙向同步功能,需訂閱商業方案。

開始之前

請確保您具備以下條件:

  • 擁有 Wati 商業方案帳戶

  • 擁有已透過 OAuth 連接至 Wati 的 Salesforce 帳戶

  • 具備 Salesforce 管理員存取權限

  • 具備由 Wati 產生的 Webhook URLWebhook 驗證密鑰 (Authentication Secret)

注意:Salesforce 端配置需要管理員存取權限。標準 Salesforce 使用者無法完成此設定。

整合運作方式

設定程序包含兩個部分:

  • 在 Wati 中配置 Salesforce 同步設定

  • 配置 Salesforce 以發送更新至 Wati

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

第 1 步:開啟 Salesforce 整合

  • 在 Wati 中,前往 Connectors > Integrations > Salesforce

  • 確認驗證 (Authentication) 步驟顯示綠色勾號。

  • 確認您的 Salesforce 組織網址已顯示。

  • 複製以下數值:

    • Webhook URL

    • Webhook 驗證密鑰

在 Salesforce 配置期間將需要這些數值。

第 2 步:選擇要同步的欄位

選擇應同步至 Wati 的 Salesforce 欄位。

預設聯絡人欄位

  • 商務電話 (Business Phone)

  • 聯絡人 ID (Contact ID)*

  • 電子郵件 (Email)

  • 名字 (First Name)

  • 姓氏 (Last Name)

  • 擁有者 ID (Owner ID)

預設潛在客戶欄位

  • 電子郵件 (Email)

  • 名字 (First Name)

  • 姓氏 (Last Name)

  • 潛在客戶 ID (Lead ID)*

  • 擁有者 ID (Owner ID)

  • 電話 (Phone)

  • 狀態 (Status)

注意:* 為強制欄位,無法移除。

若要同步其他欄位:

  • 點擊欄位選擇器。

  • 選擇其他標準 Salesforce 欄位。

第 3 步:將 Salesforce 欄位對應至 Wati 欄位

所選的 Salesforce 欄位預設會自動對應至相應的 Wati 聯絡人欄位。

請檢查映射,僅在您希望 Salesforce 欄位同步至不同 Wati 聯絡人欄位時才進行變更。

在繼續之前,請仔細檢查所有映射。

第 4 步:啟用自動同步

啟用自動資料同步 (Automatic data sync) (雙向同步/Two-way Sync) 開關。

啟用自動資料同步 (雙向同步) 後,變更會在 SalesforceWati 之間進行雙向同步。這有助於保持兩個平台的客戶資料保持最新狀態,無需手動更新。

第 5 步:匯入現有 Salesforce 記錄

執行一次性匯入程序,將您現有的 Salesforce 聯絡人和潛在客戶帶入 Wati。

此匯入只需在初始設定期間執行一次。

第 2 部分:配置 Salesforce

進行以下步驟需要 Salesforce 管理員存取權限。

第 1 步:建立遠端網站 (Remote Site)

  • 前往 Setup > Security > Remote Site Settings

  • 選擇 New Remote Site

  • 以網域格式輸入遠端網站 URL:

https://<hostname>
  • 選擇 Active

  • 點擊 Save

重要提示:請勿在遠端網站 URL 中包含 /api/v1/salesforce/processWebhook。添加路徑將導致整合失敗。

第 2 步:建立自訂標籤 (Custom Labels)

前往:Setup > Custom Code > Custom Labels

建立如下所示的標籤:

標籤名稱 (Label Name)

數值 (Value)

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 步:建立記錄觸發流程 (Record-Triggered Flows)

建立兩個獨立的流程:

  • 聯絡人流程 (Contact Flow)

  • 潛在客戶流程 (Lead Flow)

導覽至:Setup > Process Automation > Flows > New Flow

使用以下設定配置兩個流程:

設定

數值

觸發類型 (Trigger Type)

記錄觸發流程 (Record-Triggered Flow)

物件 (Object)

Contact 或 Lead

觸發事件 (Trigger Event)

Created or Updated

執行模式 (Run Mode)

非同步 (Asynchronously) (儲存後)

動作類型 (Action Type)

Apex

動作 (Action)

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.getOrgDomainUrl() 建立,後接 /id/、您的 Salesforce 組織 ID 以及您的使用者 ID。

Wati 使用此身分網址中的 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 商業 (Business) 方案,作為雙向同步功能的一部分。

疑難排解

如果 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 顯示為 Connected

Salesforce 端配置不完整

驗證是否已完成所有 Salesforce 設定步驟,且兩個流程皆為啟用狀態。若先前同步正常但已中斷,請聯繫 Wati 支援團隊。

先前運作正常但同步中斷

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

驗證兩個流程皆為啟用狀態。如果問題持續存在,請在 Wati 中斷開並重新連接 Salesforce。

建立了重複的聯絡人

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

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

如何檢視 Salesforce 偵錯日誌

檢視 Salesforce 日誌:

  • 前往 Setup > Environments > Logs > Debug Logs

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

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

常見問題解答 (FAQs)

整合概述

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 中取得。

是否回答了您的問題?