LINE Chatbot 建置實戰:讓 WordPress 傳送 Flex Message 互動訊息,別再只會回純文字!

2026/01/29 | API 串接與自動化, WP 開發技巧

告別純文字!WordPress 打造企業級 LINE 互動卡片

現代 LINE Chatbot 已經不能只會回覆純文字了!為了實現高轉換率與卓越使用者體驗,資深工程師 Eric 帶您深入 WordPress 核心,手刻 LINE Messaging API 串接。本文詳細教學如何建立安全的 Webhook 接收端(強制簽章驗證是資安底線!),並透過 Flex Message 結構化 JSON,丟出精美且具導購功能的互動卡片。別讓您的系統還停留在撥接時代!立即掌握硬核串接技巧,將 LINE 官方帳號升級為數位轉型的強大引擎。若企業需要更客製化、高併發的整合方案,歡迎隨時聯繫浪花科技,啟動您專屬的企業自動化帝國!

需要專業協助?

聯絡浪花專案團隊 →

LINE Chatbot 建置實戰:讓 WordPress 傳送 Flex Message 互動訊息,別再只會回純文字!

嗨,我是 Eric,浪花科技的資深工程師。最近我在幫幾位傳產客戶做數位轉型,發現大家對「LINE Messaging API Chatbot 建置」的需求已經從單純的「自動回覆」進化了。以前客戶覺得只要輸入「營業時間」機器人會回一段純文字就很厲害,但現在?如果你不能丟出一張漂亮的卡片(Flex Message),讓使用者點選按鈕直接導購或查詢訂單,他們可是會覺得你的系統還停留在撥接時代的。

雖然市面上有很多 No-Code 工具,但身為工程師,我們都知道:要把資料留在自己家(WordPress 資料庫),並且實現高度客製化的邏輯(例如檢查 WooCommerce 訂單狀態),手刻 API 串接才是王道。

今天這篇文章,我不談基礎的開通帳號(那太簡單了),我們要來點硬核的:如何在 WordPress 中接收 Webhook,驗證簽章(這很重要,別裸奔!),並回傳一份漂亮的 Flex Message。

為什麼你需要 Flex Message?而不只是文字回覆

在進行 LINE Messaging API Chatbot 建置時,最常被忽略的就是「使用者體驗」。純文字的互動是線性的,容易讓使用者失去耐心。Flex Message 允許我們使用 JSON 格式定義複雜的排版,包含圖片、按鈕、不同大小的文字,甚至可以做到類似 App 的介面體驗。

這對於 WordPress 電商網站來說至關重要,你可以直接在對話框裡顯示「推薦商品卡片」,使用者點擊「購買」就直接帶入結帳連結,轉換率絕對比丟一串藍色網址高得多。

第一步:建立安全的 Webhook 接收端

很多新手在寫 LINE Bot 時,最常犯的錯誤就是忽略資安驗證(Signature Validation)。如果你的 Webhook URL 被惡意人士知道,他們可以偽造請求,讓你的機器人亂說話,甚至塞爆你的伺服器。

在 WordPress 中,我習慣使用 REST API Endpoint 來作為 Webhook 入口。以下是支援經典編輯器的程式碼範例,請放在你的佈景主題 `functions.php` 或自製外掛中:


add_action('rest_api_init', function () {
    register_rest_route('eric/v1', '/line-webhook', array(
        'methods' => 'POST',
        'callback' => 'handle_line_webhook',
        'permission_callback' => '__return_true', // 我們會在 callback 中手動驗證簽章
    ));
});

function handle_line_webhook($request) {
    $channel_secret = '你的_CHANNEL_SECRET'; // 請改用環境變數或選項存儲,不要寫死在 Code 裡
    $http_request_body = $request->get_body();
    $hash = hash_hmac('sha256', $http_request_body, $channel_secret, true);
    $signature = base64_encode($hash);
    $header_signature = $request->get_header('x-line-signature');

    // 驗證簽章:這是資安的底線,拜託別拿掉
    if ($signature !== $header_signature) {
        return new WP_Error('invalid_signature', 'Invalid Signature', array('status' => 403));
    }

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

    foreach ($events as $event) {
        if ($event['type'] === 'message' && $event['message']['type'] === 'text') {
            $reply_token = $event['replyToken'];
            $user_message = $event['message']['text'];
            
            // 這裡可以加入你的商業邏輯,例如查詢 WooCommerce 訂單
            reply_flex_message($reply_token, $user_message);
        }
    }

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

第二步:建構 Flex Message 函式

接下來是重頭戲。我們要用 WordPress 內建的 `wp_remote_post` 來發送請求給 LINE Platform。為了讓程式碼乾淨點(別寫成義大利麵 Code),我把發送功能封裝成一個函式。

這裡要注意的是 JSON 的結構。Flex Message 的 JSON 有點像俄羅斯套娃,一層包一層,剛開始寫很容易括號對不上。我建議先用 LINE Flex Simulator 設計好外觀,再複製 JSON 過來。


function reply_flex_message($reply_token, $user_message) {
    $access_token = '你的_CHANNEL_ACCESS_TOKEN';
    
    // 這是一個簡單的 Flex Message 範例結構
    $flex_payload = array(
        'type' => 'bubble',
        'hero' => array(
            'type' => 'image',
            'url' => 'https://你的網站/wp-content/uploads/welcome-banner.jpg',
            'size' => 'full',
            'aspectRatio' => '20:13',
            'aspectMode' => 'cover',
        ),
        'body' => array(
            'type' => 'box',
            'layout' => 'vertical',
            'contents' => array(
                array(
                    'type' => 'text',
                    'text' => '你好!我是 Eric',
                    'weight' => 'bold',
                    'size' => 'xl'
                ),
                array(
                    'type' => 'text',
                    'text' => '你剛剛說了:' . $user_message,
                    'margin' => 'md',
                    'color' => '#666666'
                )
            )
        ),
        'footer' => array(
            'type' => 'box',
            'layout' => 'vertical',
            'spacing' => 'sm',
            'contents' => array(
                array(
                    'type' => 'button',
                    'style' => 'primary',
                    'height' => 'sm',
                    'action' => array(
                        'type' => 'uri',
                        'label' => '聯絡浪花科技',
                        'uri' => 'https://roamer-tech.com/contact/'
                    )
                )
            )
        )
    );

    $data = array(
        'replyToken' => $reply_token,
        'messages' => array(
            array(
                'type' => 'flex',
                'altText' => '這是一則互動訊息,請在手機上查看', // 當使用者的裝置不支援 Flex 時顯示的文字
                'contents' => $flex_payload
            )
        )
    );

    $response = wp_remote_post('https://api.line.me/v2/bot/message/reply', array(
        'headers' => array(
            'Content-Type' => 'application/json',
            'Authorization' => 'Bearer ' . $access_token,
        ),
        'body' => json_encode($data),
    ));

    if (is_wp_error($response)) {
        error_log('LINE API Error: ' . $response->get_error_message());
    }
}

工程師的小囉嗦:關於 Rate Limit 與除錯

在實作 LINE Messaging API Chatbot 建置時,有兩個坑我一定要提醒你:

  • Log 是你的好朋友:LINE 的 Webhook 是「射後不理」的。如果你的程式碼出錯(例如 PHP Fatal Error),LINE 伺服器只會收到 500 錯誤,然後它就不會理你了。務必開啟 WordPress 的 `WP_DEBUG_LOG`,把錯誤寫進 `debug.log`,不然你會除錯除到懷疑人生。
  • Reply Token 只能用一次:這是新手最常崩潰的地方。`replyToken` 的時效很短(大約 30 秒),而且一旦你回覆了一次(呼叫了 API),那個 Token 就失效了。如果你想連續傳送多則訊息,請在同一個 API Request 的 `messages` 陣列中放入多個物件(最多 5 個),而不是呼叫 5 次 API。

從自動化到個人化

今天的教學只是「LINE Messaging API Chatbot 建置」的冰山一角。當你掌握了 Webhook 與 Flex Message,你就可以結合 WordPress 的 User ID,做到「帳號綁定」。想像一下,客戶在 LINE 裡點一下「我的訂單」,機器人就能去 WooCommerce 資料庫撈出他最近的包裹狀態並回傳一張精美的卡片,這才是真正的數位轉型。

延伸閱讀

如果你對 LINE 整合與 API 自動化有興趣,這幾篇我之前寫的文章一定要看看:

若你在建置 LINE Chatbot 或串接 WordPress 資料庫的過程中遇到瓶頸,或者你的企業需要更客製化、高併發的系統架構規劃,歡迎隨時找我們聊聊。我們擅長處理那些「套件做不到」的技術難題。

準備好升級你的企業 LINE 官方帳號了嗎?

立即填寫表單聯繫浪花科技

常見問題 (FAQ)

Q1: 為什麼我的 LINE Bot 已讀不回,Webhook 顯示 200 OK?

這通常是因為邏輯判斷錯誤。雖然伺服器成功接收請求並回傳 200 給 LINE,但你的程式碼可能因為 `if` 條件不符(例如訊息類型不是 text)而沒有觸發 `reply_message` 函式。請檢查 `debug.log` 確認程式是否進入了發送邏輯。

Q2: Flex Message 的 JSON 格式一直報錯怎麼辦?

JSON 格式非常嚴格,多一個逗號或少一個括號都會失敗。強烈建議使用 LINE 官方的 Flex Message Simulator 進行設計,確樣式無誤後再複製 JSON 代碼,並使用 `json_decode` 測試是否為有效格式。

Q3: 免費版的 LINE Messaging API 有什麼限制?

目前 LINE 官方帳號的輕用量方案(免費)每月有 500 則的主動推播額度(Push Message)。但好消息是,我們今天教學使用的「回覆訊息(Reply Message)」是完全免費且無上限的!只要是使用者先敲機器人,機器人的回應都不計入費率。

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