終結客戶身分分裂:API 整合實戰解密
您的 CRM 仍有「臉盲症」嗎?資深工程師揭露如何運用 API 與 WordPress 建立「身分中台」,透過手機驗證,將 Facebook PSID 和 LINE UserId 進行精準綁定。這是實現全通路(Omni-channel)客服與行銷的唯一解方。別再浪費預算!立即行動,讓您的系統擁有全知視角,告別破碎資料,實現更智慧的客戶體驗!
打破平台圍牆:如何透過 API 將 Facebook Messenger 與 LINE OA 用戶身分統一
嗨,我是 Eric,浪花科技的資深工程師。如果你的行銷團隊最近常在你耳邊碎念:「為什麼客戶在 Messenger 問過的訂單,到了 LINE 官方帳號(OA)又要再問一次?」或者「能不能讓 Chatbot 知道這個人昨天才在臉書罵過我們,今天在 LINE 上說話要客氣一點?」,那麼這篇文章就是寫給你看的。
現在是 2026 年,如果你的 CRM 還是「精神分裂」狀態——把同一個客戶在 FB 當成 David,在 LINE 當成陳先生——那你不僅是在浪費廣告預算,更是在考驗客戶的耐心。AI Agent 再聰明,如果餵給它的資料是破碎的,它也只能給出破碎的答案。
今天不談虛無縹緲的概念,我們直接切入工程師視角:如何透過 API 和後端架構,打破 Meta 與 LY Corp 的高牆,實現「Identity Resolution(身分決議)」。
為什麼你的 CRM 總是「臉盲」?
技術上來說,這是一個「識別碼孤島」的問題。Facebook 給你的是 PSID(Page Scoped ID),LINE 給你的是 UserId(U 開頭的 33 位字串)。這兩者之間沒有任何數學關聯,唯一的共同點是——背後都是同一個活生生的人。
要解決這個問題,我們不能依賴平台互通(因為他們是競爭對手,別指望他們會握手言和),我們需要建立自己的「身分中台(Identity Hub)」。這個中台通常建立在 WordPress 或獨立的 Laravel 系統上,作為所有對話渠道的匯流點。
技術核心:Account Linking 的底層邏輯
要將兩個平行的 ID 綁定,我們需要一個「橋樑」。這個橋樑通常是使用者的唯一識別資訊,例如:手機號碼(最準確)或 Email。
流程通常是這樣的:
- 觸發綁定: 當使用者在 LINE 或 Messenger 第一次互動時,機器人發送一個帶有「唯一 Token」的登入連結(Login URL)。
- 身分驗證: 使用者點擊連結,進入 WordPress 的 Webview 頁面,輸入手機號碼進行 OTP 驗證,或是直接登入會員。
- API 映射: 驗證成功後,後端透過 API 抓取當下的 Social ID(LINE userId 或 FB PSID),並將其寫入資料庫的關聯表中。
資料庫設計思維 (Schema Design)
別傻傻地把 social ID 直接塞在 wp_users 表的 meta 裡,那樣查詢效能會很差。在 2026 年的開發標準,我們建議建立一個獨立的關聯表:
CREATE TABLE `wp_roamer_social_identities` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) UNSIGNED NOT NULL, -- 對應 WordPress User ID
`provider` varchar(50) NOT NULL, -- 'line' 或 'facebook'
`social_id` varchar(191) NOT NULL, -- PSID 或 LINE UserId
`metadata` json DEFAULT NULL, -- 存取大頭貼、暱稱等快取資料
`linked_at` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `provider_social_id` (`provider`, `social_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
實戰演練:WordPress API 串接流程
接下來是重頭戲。我們需要在 WordPress 端開一支 REST API,專門處理來自前端 Webview 的綁定請求。這裡我寫一段簡化的 PHP 範例,這段程式碼可以直接放在你的外掛或 functions.php 中(但拜託,正式專案請寫成獨立 Class)。
這支 API 的作用是:接收前端傳來的 social_id、provider 和經過驗證的 phone,然後將它們「結婚」。
add_action('rest_api_init', function () {
register_rest_route('roamer/v1', '/link-identity', [
'methods' => 'POST',
'callback' => 'roamer_handle_identity_linking',
'permission_callback' => function () {
// 2026年了,請務必加上 Nonce 或 Bearer Token 驗證,這裡為了演示暫時回傳 true
return true;
}
]);
});
function roamer_handle_identity_linking($request) {
global $wpdb;
$params = $request->get_json_params();
$phone = sanitize_text_field($params['phone']);
$social_id = sanitize_text_field($params['social_id']);
$provider = sanitize_text_field($params['provider']); // 'line' or 'facebook'
// 1. 根據手機號碼找 WordPress User
// 這裡假設你已經有用手機號碼當 key 的機制,或是透過 meta 查詢
$users = get_users([
'meta_key' => 'billing_phone',
'meta_value' => $phone,
'number' => 1
]);
if (empty($users)) {
return new WP_Error('no_user', '找不到此手機號碼對應的會員', ['status' => 404]);
}
$wp_user_id = $users[0]->ID;
$table_name = $wpdb->prefix . 'roamer_social_identities';
// 2. 檢查是否已經綁定過
$existing = $wpdb->get_var($wpdb->prepare(
"SELECT id FROM $table_name WHERE provider = %s AND social_id = %s",
$provider, $social_id
));
if ($existing) {
// 更新綁定 (如果需要重綁)
$wpdb->update(
$table_name,
['user_id' => $wp_user_id, 'linked_at' => current_time('mysql')],
['id' => $existing],
['%d', '%s'],
['%d']
);
} else {
// 新增綁定
$wpdb->insert(
$table_name,
[
'user_id' => $wp_user_id,
'provider' => $provider,
'social_id' => $social_id
],
['%d', '%s', '%s']
);
}
return rest_ensure_response([
'success' => true,
'message' => '身分綁定成功,現在您可以跨平台識別此用戶了',
'wp_user_id' => $wp_user_id
]);
}
關鍵技巧:LIFF 與 Messenger Extensions
為了讓體驗絲滑,不要讓使用者跳出 APP 開瀏覽器。這會導致登入狀態遺失。
- LINE 端: 使用 LIFF (LINE Front-end Framework)。這樣可以直接在對話視窗內開啟半屏網頁,並且透過
liff.getProfile()直接拿到userId,使用者甚至不需要手動輸入,只需要點擊「確認綁定」。 - Messenger 端: 使用 Messenger Extensions SDK。雖然 Meta 對此限制較多,但透過 Whitelisted Domains 設定,一樣可以達到在 Webview 中獲取 PSID 的效果。
2026 年的挑戰:隱私權與跨平台追蹤
我知道有些行銷人員會想:「能不能用 Cookie 或 IP 來猜?」Eric 必須嚴肅地告訴你:別想了。
在 2026 年,瀏覽器的隱私沙盒(Privacy Sandbox)已經全面封殺第三方 Cookie,加上 iOS 和 Android 的隱私權限控管,依靠「猜測」的準確率低到會讓你懷疑人生。「主動授權綁定」(Explicit Linking)是唯一可行且合規的道路。透過提供優惠券、會員點數或專屬服務,誘導使用者完成一次性的綁定動作,獲得的 First-party Data 才是你的資產。
當你完成了這一步,你的 WordPress + CRM 就不再是單純的 CMS,而是一個擁有「全知視角」的客戶數據平台(CDP)。當客戶在 LINE 上抱怨時,你的客服可以在後台看到他三分鐘前在 FB 點過哪個廣告,這才是數位轉型的真正價值。
推薦閱讀
想更深入了解如何將這些數據應用在業務增長上嗎?請參考以下我們整理的技術實戰文章:
- 別再用「貴賓」稱呼每個人!WordPress + CRM 終極聯動,打造看人下菜碟的『智慧文案』系統
- 你的 WordPress 還是單體巨獸?打造 Headless 商務架構:WordPress + CRM 的數據驅動終極型態
- LINE Chatbot 不求人!資深工程師手把手,用 WordPress 打造你的 24H 自動回覆大師
常見問題 (FAQ)
Q1: 綁定後,如果使用者封鎖了 LINE 官方帳號,我們還能在 FB 聯繫到他嗎?
可以。只要你的資料庫中已經建立了關聯(Link),即使他在 LINE 上封鎖了你,你在後台依然知道他的 FB 身分(PSID)。你可以透過 FB Messenger API(在合規前提下)或付費的 Sponsored Message 嘗試重新接觸,或是透過 Email 行銷作為替代方案。
Q2: 這種 API 串接會很貴嗎?需要付費給 LINE 或 Facebook 嗎?
API 串接本身的開發成本是一次性的。Facebook 的 Graph API 基本使用是免費的;LINE 的 Messaging API 則有免費額度(通常是 200 則/月),超過後需依照發送量付費(輕用量或中用量方案)。但「身分綁定」這個動作本身(透過 Webhook 接收訊息或 LIFF 互動)通常不計入付費訊息則數,主要成本在於開發與伺服器維護。
Q3: 如果使用者更換了手機號碼,綁定會失效嗎?
這取決於你的綁定邏輯。如果你的系統僅依賴手機號碼作為 Primary Key,那麼更換手機號碼確實會造成問題。Eric 建議在系統設計時,應以內部的 `user_id` 為核心,手機號碼只是驗證手段之一。系統應提供「更新手機號碼」的功能,讓使用者在登入狀態下自行更新,這樣關聯表中的 Social ID 連結就不會斷裂。






