2026 全通路攻略:用 API 讓 FB Messenger 與 LINE OA「認親」的架構設計實戰
☰ 目錄 table-of-contents.md
全通路(Omnichannel)的核心從來不是多開幾個客服頻道,而是身分解析——讓系統知道在 Messenger 問過訂單的那個人,跟 LINE 官方帳號(OA)裡的這個帳號其實是同一位客戶。做不到這件事,客戶就得在每個平台重講一次需求,Chatbot 也永遠不知道對方昨天才在臉書抱怨過、今天說話該客氣一點。這篇就來實作讓兩大平台「認親」的 API 架構設計。
現在是 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 點過哪個廣告,這才是數位轉型的真正價值。
推薦閱讀
想更深入了解如何將這些數據應用在業務增長上嗎?請參考以下我們整理的技術實戰文章:
常見問題
為什麼同一個客戶在 Facebook Messenger 和 LINE 官方帳號會被當成不同人?
如何把 LINE 與 Facebook Messenger 的用戶身分綁定在一起?
為什麼不建議用 Cookie 或 IP 來識別跨平台用戶?
在資料庫中該如何存放社群平台的身分對應資料?
怎麼讓綁定流程在 App 內順暢完成,不讓使用者跳出去?
訂閱免費電子報
把 AI 自動化、企業系統設計與 WordPress / Laravel 開發的真實案例和可直接照做的技巧,整理成電子報寄給你。只寄精選內容、不灌垃圾信,一鍵就能退訂。