業務救星!LINE OA 深度整合實戰:如何將粉絲對話紀錄自動同步至 CRM 客戶資料卡

2026/01/22 | API 串接與自動化, CRM 應用, WP 開發技巧

業務救星:終結 LINE 與 CRM 的資料孤島

您是否厭倦了業務人員手動複製 LINE 對話到 CRM 的低效作業?這篇深度整合實戰教學,揭示了如何利用 WordPress 作為中介層(Middleware),安全地透過 Webhook 攔截 LINE 訊息,並即時同步至您的 HubSpot 或 Salesforce 客戶資料卡。這不僅能確保客戶旅程的完整性、解決業務交接的痛點,更為未來的 AI 分析奠定了黃金數據基礎。停止讓寶貴的銷售對話流失!立即啟動您的全通路戰略,讓數據自動流動起來,現在就聯繫我們,打造您的專屬數位大腦!

需要專業協助?

聯絡浪花專案團隊 →

業務救星!LINE OA 深度整合實戰:如何將粉絲對話紀錄自動同步至 CRM 客戶資料卡

嗨,我是 Eric。作為一名在浪花科技打滾多年的資深工程師,我聽過無數業務主管的咆哮:「為什麼客戶在 LINE 上說要下單,CRM 裡卻一點紀錄都沒有?」

這真的是個痛點。業務人員每天拿著手機狂回訊息,手指都要抽筋了,你還要他回到辦公室,把剛剛跟客戶「博感情」的幾百句對話,手動複製貼上到 CRM 系統?別鬧了,這不科學,更沒人性。結果就是資料斷層,客戶換個業務對接,因為不知道之前的對話脈絡,直接被打回原形。

今天這篇文章,就是要來解決這個「資料孤島」的問題。我們要進行一場 LINE OA 深度整合實戰:如何將粉絲對話紀錄自動同步至 CRM 客戶資料卡。不論你用的是 HubSpot、Salesforce,還是自建的 CRM,底層邏輯都是通的。我們會用到 WordPress 當作 Middleware(中介軟體),透過 Webhook 攔截 LINE 的訊息,再打 API 進 CRM。準備好了嗎?打開你的 IDE,我們要開始了。

為什麼你需要「對話同步」而不是單純的「發送訊息」?

很多工程師剛接觸 LINE Messaging API,只會寫 Push Message(主動推播)或 Reply Message(被動回覆)。但對於企業來說,「紀錄(Logging)」 的價值往往大於「發送」。

  • 全通路視角(Omnichannel): 客服在看 CRM 時,能同時看到該客戶的 Email 往來紀錄與 LINE 閒聊紀錄。
  • 責任歸屬與交接: 業務離職,手機帶走,但 LINE OA 的對話紀錄已經同步在公司 CRM,客戶資產不流失。
  • AI 分析的基石: 未來若想導入 LLM 分析客戶情緒或購買意圖,這些同步下來的結構化文字就是黃金數據。

技術架構圖:WordPress 如何扮演黏著劑?

我們不直接寫死在 CRM 裡(很多 SaaS CRM 也不支援直接接收 LINE Webhook),而是利用 WordPress 強大的擴充性作為轉運站。

  1. User 傳送訊息: 客戶在 LINE OA 輸入文字。
  2. LINE Platform: LINE 伺服器將訊息打包成 JSON,透過 Webhook 丟給你的 WordPress 網站。
  3. WordPress (Middleware): 驗證簽章 (Signature),解析 JSON,提取 User ID 與 Text。
  4. CRM API: WordPress 呼叫 CRM API,根據 Line User ID 找到對應 Contact,將訊息寫入 Note 或 Activity Timeline。

實戰步驟一:設定 LINE Developers Console

首先,你得先有一個 LINE Official Account,並登入 LINE Developers Console

在你的 Channel 設定中,重點抓兩個東西:

  • Channel Access Token (Long-lived): 用來回話或抓取用戶 Profile。
  • Channel Secret: 這很重要,Eric 強調過一百次,資安就是靠這個。我們需要用它來驗證 Webhook 來源真的是 LINE,而不是哪個無聊駭客偽造的請求。

接著,在 Webhook settings 中,填入你 WordPress 的接收網址,例如:https://your-site.com/wp-json/roamer/v1/line-webhook,並記得開啟「Use webhook」。

實戰步驟二:WordPress 接收端程式碼開發

這裡我們使用 WordPress 的 REST API 來建立接收端點。這段程式碼可以放在主題的 functions.php 或是你自己寫的小外掛裡。

稍微囉嗦一下,驗證簽章(Verification Signature)絕對不能省。我看過太多新手為了省事跳過這步,結果介面被塞滿垃圾廣告機器人的請求。


add_action('rest_api_init', function () {
    register_rest_route('roamer/v1', '/line-webhook', array(
        'methods' => 'POST',
        'callback' => 'handle_line_webhook',
        'permission_callback' => '__return_true', // 權限驗證由簽章處理
    ));
});

function handle_line_webhook($request) {
    $channel_secret = '你的_CHANNEL_SECRET'; // 建議存在 wp-config.php 或 options 表中
    $http_header = $request->get_headers();
    $signature = isset($http_header['x_line_signature'][0]) ? $http_header['x_line_signature'][0] : '';
    
    $body = $request->get_body();

    // 1. 資安驗證:確認請求來自 LINE
    if (base64_encode(hash_hmac('sha256', $body, $channel_secret, true)) !== $signature) {
        return new WP_Error('invalid_signature', 'Invalid Signature', array('status' => 403));
    }

    $events = json_decode($body, true)['events'];

    foreach ($events as $event) {
        // 我們只處理文字訊息
        if ($event['type'] === 'message' && $event['message']['type'] === 'text') {
            $line_user_id = $event['source']['userId'];
            $message_text = $event['message']['text'];
            $timestamp = $event['timestamp'];
            
            // 這裡呼叫同步函式
            sync_to_crm($line_user_id, $message_text, $timestamp);
        }
    }

    return new WP_REST_Response('OK', 200);
}

實戰步驟三:同步至 CRM (以 HubSpot / 通用 API 為例)

這一步是「LINE OA 深度整合實戰」的核心。每個 CRM 的 API 不同,但邏輯是一樣的:「先查詢 (Lookup),後寫入 (Log)」

因為 LINE 傳過來的是 U12345678... 這種亂碼般的 User ID,CRM 裡存的可能是 Email 或電話。所以你需要一個「對照表」。通常我會在 CRM 的聯絡人欄位中,多開一個自訂欄位叫 line_user_id


function sync_to_crm($line_user_id, $text, $timestamp) {
    // 1. 查詢 CRM 中是否有這個 LINE User ID
    // 假設我們封裝好了一個 CRM 類別
    $crm_contact = RoamerCRM::find_contact_by_property('line_user_id', $line_user_id);

    if (!$crm_contact) {
        // 情況 A:找不到人。可能需要先呼叫 LINE Profile API 拿到暱稱,建立新潛在客戶
        $profile = get_line_user_profile($line_user_id);
        $crm_contact_id = RoamerCRM::create_contact([
            'lastname' => $profile['displayName'],
            'line_user_id' => $line_user_id,
            'lifecyclestage' => 'lead'
        ]);
    } else {
        $crm_contact_id = $crm_contact['id'];
    }

    // 2. 將對話紀錄寫入 CRM 的 Note 或 Activity
    // 將 Unix timestamp 轉為可讀時間
    $date = date('Y-m-d H:i:s', $timestamp / 1000);
    
    $note_content = "[LINE 對話紀錄] {$date} \n客戶說:{$text}";
    
    RoamerCRM::add_note_to_contact($crm_contact_id, $note_content);
}

// 輔助函式:取得 LINE 使用者暱稱
function get_line_user_profile($user_id) {
    $access_token = '你的_CHANNEL_ACCESS_TOKEN';
    $url = "https://api.line.me/v2/bot/profile/{$user_id}";
    
    $response = wp_remote_get($url, [
        'headers' => [
            'Authorization' => 'Bearer ' . $access_token
        ]
    ]);
    
    if (is_wp_error($response)) return ['displayName' => 'Unknown Line User'];
    
    return json_decode(wp_remote_retrieve_body($response), true);
}

Eric 的工程師碎碎念:關於 API Rate Limit

要注意喔,雖然同步很爽,但不要把你的 CRM API 打爆了。如果你的 LINE OA 正在辦抽獎活動,一秒鐘進來幾千則訊息,直接同步絕對會觸發 CRM 的 Rate Limit (頻率限制),導致被鎖 IP。

這時候,請務必引入 Queue (佇列) 機制。不管是使用 Laravel 的 Queue 還是 WordPress 的 Action Scheduler,先把訊息存起來,再慢慢「餵」給 CRM,這才是成熟工程師的作法。

深度整合的進階應用:雙向綁定

除了把對話存進去,更進階的玩法是「身份識別綁定」。你可以在 Rich Menu (圖文選單) 做一個「會員綁定」按鈕,引導使用者登入 WordPress 網站。一旦登入成功,就把他的 WordPress User ID、Email 和 LINE User ID 綁在一起。

這樣一來,不管他在官網下單,還是在 LINE 上罵人,你都能在 CRM 裡看到完整的 Customer Journey(客戶旅程)。這才叫真正的「全通路」。

總結:資料有流動,才有價值

透過這次的「LINE OA 深度整合實戰」,我們不僅僅是寫了幾行程式碼,而是幫企業打通了任督二脈。將粉絲對話紀錄自動同步至 CRM 客戶資料卡,能讓業務團隊省下大量行政時間,專注在「成交」上。

記住,技術只是手段,解決商業問題才是工程師的價值所在。如果你覺得這些 API 串接太過複雜,或者擔心資安與效能問題,不想自己踩雷,歡迎隨時找我們聊聊。

推薦閱讀

不想讓寶貴的客戶對話流失在 LINE 裡?想要打造自動化的 CRM 數據庫?

立即聯繫浪花科技,讓我們幫你打造最強數位大腦

常見問題 (FAQ)

Q1: 同步 LINE 對話紀錄會不會讓 CRM 空間爆掉?

這是一個很好的問題。如果是一般文字對話,佔用空間極小,通常不用擔心。但如果是圖片、影片等多媒體檔案,建議不要直接存入 CRM,而是將檔案上傳至 AWS S3 或 WordPress 媒體庫,然後只在 CRM 紀錄「檔案連結 (URL)」,這樣既能保留紀錄又能節省昂貴的 CRM 儲存空間。

Q2: 如果客戶還沒在 CRM 建立資料,LINE 訊息會怎麼處理?

在我們的程式邏輯中,這屬於「Unknown Contact」。通常有兩種策略:一是自動根據 LINE 暱稱建立一個新的 Lead(潛在客戶);二是將訊息暫存於一個「未歸戶」的暫存區,等待後續透過綁定流程(Binding)將 LINE User ID 與正式客戶資料合併。我們比較推薦第二種做法,避免 CRM 充斥著只有暱稱的無效名單。

Q3: 這種 Webhook 同步會有延遲嗎?

正常情況下,Webhook 是即時觸發的,延遲通常在 1-3 秒內。但如果遇到「雙11」或大型活動推播後的瞬間高流量,為了保護 CRM API 不被鎖,我們會使用佇列(Queue)機制來調節發送頻率,這時可能會有幾秒到幾分鐘的輕微延遲,這是為了系統穩定性所做的必要妥協。

 
立即諮詢,索取免費1年網站保固