摘要
在多個平台之間管理聯絡人可能會非常耗時。透過 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 URL 和 Webhook 驗證密鑰 (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) 開關。
啟用自動資料同步 (雙向同步) 後,變更會在 Salesforce 和 Wati 之間進行雙向同步。這有助於保持兩個平台的客戶資料保持最新狀態,無需手動更新。
第 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_Endpoint 和 System.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 是否僅包含 |
未產生偵錯日誌 | 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 中取得。












