跳至主要內容

如何將 Salesforce 與 Wati 集成,並自動同步聯絡人和潛在客戶

摘要

在多个平台之間管理聯絡人相當耗時。透過 Salesforce 整合功能,Wati 會自動讓您的聯絡人與潛在客戶保持最新狀態,無需手動匯入。

本指南將引導您設定 Salesforce 與 Wati 之間的即時同步、匯入現有記錄,以及設定欄位對應,讓您的團隊隨時取得最新的客戶資訊。

操作說明

Salesforce 整合有什麼新功能?

Salesforce 整合現已包含以下幾項改善:

  • 即時聯絡人同步:從 Salesforce 同步至 Wati

  • 可設定的欄位選擇:針對聯絡人與潛在客戶

  • 自訂欄位對應:在 Salesforce 與 Wati 之間

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

先前使用者必須手動選取從 Salesforce 匯入才能同步資料。新的整合則使用 Salesforce 事件,在聯絡人或潛在客戶建立或更新時,自動更新 Wati 中的聯絡人。

開始之前

請確認您具備以下條件:

  • 一個商業版的 Wati 帳戶

  • 已透過 OAuth 連線至 Wati 的 Salesforce 帳戶

  • Salesforce 管理員權限

  • Wati 產生的 Webhook URLWebhook 驗證密鑰

注意:Salesforce 端的設定需要管理員權限。一般 Salesforce 使用者無法完成此設定。

整合運作方式

設定流程包含兩個部分:

  1. 在 Wati 中設定 Salesforce 同步設定

  2. 設定 Salesforce 將更新傳送至 Wati

第一部分:在 Wati 中設定同步

步驟 1:開啟 Salesforce 整合

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

  • 確認驗證步驟顯示綠色勾選標記。

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

  • 複製以下數值:

    • 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)

注意:* 標示的必填欄位無法移除。

若要同步其他欄位:

  1. 按一下欄位選擇器。

  2. 選擇其他標準 Salesforce 欄位。

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

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

請檢閱對應設定,只有當您希望某個 Salesforce 欄位與不同的 Wati 聯絡人欄位同步時,才需進行修改。

進行下一步前,請仔細檢閱所有對應設定。

步驟 4:啟用自動同步

開啟自動資料同步 (雙向同步) 開關。

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

步驟 5:匯入現有 Salesforce 記錄

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

此匯入僅需在初始設定時執行一次。

第二部分:設定 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 Flow。

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

建立兩個獨立的流程:

  • 聯絡人流程 (Contact Flow)

  • 潛在客戶流程 (Lead Flow)

前往:Setup > Process Automation > Flows > New Flow

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

設定

觸發類型

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

物件

聯絡人 (Contact) 或潛在客戶 (Lead)

觸發事件

建立或更新 (Created or Updated)

執行模式

非同步 (儲存後) (Asynchronously (after save))

動作類型

Apex

動作

Notify WATI of Record Changes

建立後請啟用兩個流程。

重要:務必使用非同步模式。同步執行可能導致 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 整合服務會在連線時儲存此組織區段,並可能在傳送至 Wati 之前正規化出站的 Webhook 承載。

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

設定完成後:

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

  • Salesforce 觸發流程。

  • 流程呼叫 Apex 動作。

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

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

無需排程作業或手動匯入。

聯絡人重複排除

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

  • 若已有相符的電話號碼,則更新該聯絡人。

  • 若無相符的電話號碼,則建立新聯絡人。

重要說明

Salesforce 連線狀態

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

它不驗證以下項目:

  • 遠端站台設定

  • Apex 類別部署

  • 自訂標籤

  • Salesforce Flow

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

支援的欄位

  • 支援標準 Salesforce 欄位。

  • 支援結尾為 __c 的自訂 Salesforce 欄位。

記錄刪除

在 Salesforce 中刪除聯絡人或潛在客戶,並不會刪除 Wati 中對應的聯絡人。

Salesforce 關聯會被移除,但 Wati 中的聯絡人仍會保留。

電話號碼格式

請在 Salesforce 記錄中使用一致的電話號碼格式。

格式不一致可能會在 Wati 中產生重複的聯絡人,而非更新現有記錄。

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 Flow 未觸發

確認:

• Flow 已啟用

• 符合進入條件

• Flow 設定為非同步模式執行

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

Salesforce 端的設定未完成

確認所有 Salesforce 設定步驟皆已完成,且兩個 Flow 皆為啟用狀態。若同步先前可正常運作但已停止,請聯絡 Wati 支援。

同步原本正常,但後來停止運作

Salesforce OAuth 權杖已過期,或 Flow 被停用

確認兩個 Flow 皆為啟用狀態。若問題持續存在,請在 Wati 中中斷並重新連線 Salesforce。

持續建立重複的聯絡人

電話號碼格式在 Salesforce 與 Wati 之間不一致

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

如何檢視 Salesforce 偵錯日誌

若要檢視 Salesforce 日誌:

  • 前往 Setup > Environments > Logs > Debug Logs

  • 啟用您 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 使用電話號碼來識別現有聯絡人。若已有相符的電話號碼,則更新現有聯絡人。若未找到相符的電話號碼,則建立新聯絡人。

6. 支援自訂 Salesforce 欄位嗎?

支援。此整合支援標準 Salesforce 欄位,以及結尾為 _c 的自訂 Salesforce 欄位。

限制

7. 若在 Salesforce 中刪除聯絡人或潛在客戶,會發生什麼事?

在 Salesforce 中刪除聯絡人或潛在客戶,並不會刪除 Wati 中對應的聯絡人。Salesforce 關聯會被移除,但 Wati 中的聯絡人仍會保留。

8. Salesforce 的「已連線」狀態是否代表整合已完全設定完成?

不是。已連線狀態僅表示 Salesforce OAuth 驗證成功。它不驗證 Salesforce 端的設定,包括遠端站台、Apex 類別、自訂標籤或 Salesforce Flow。

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

有,所有 Wati 商業版方案的客戶均可使用此功能。

是否回答了您的問題?