LINE Chatbot 不求人!資深工程師手把手,用 WordPress 打造你的 24H 自動回覆大師

2025/09/15 | API 串接與自動化

LINE Chatbot 不求人!資深工程師手把手,用 WordPress 打造你的 24H 自動回覆大師

嗨,我是浪花科技的資深工程師 Eric。在數位時代,即時通訊軟體已經是客戶溝通的主要戰場,特別是在台灣,LINE 的普及率高得嚇人。很多企業都創立了 LINE 官方帳號,但很快就發現一個殘酷的現實:客服人力有限,回覆永遠慢半拍,或是只能用罐頭訊息應付,使用者體驗差到不行。

身為一個看到重複性工作就渾身不對勁的工程師,我總在想:為什麼不讓我們的網站自己來處理這些事呢?特別是如果你已經有一個功能強大的 WordPress 網站,它不僅僅是個內容發布系統,它完全有潛力成為你整個自動化工作流的中樞神經。今天,我就要帶大家捲起袖子,一步步實戰,教你如何利用 WordPress 的彈性,進行一場完整的 LINE Messaging API Chatbot 建置,讓你的網站學會 24 小時不打烊地跟使用者「聊天」。

為什麼要用 WordPress 打造 LINE Chatbot?別再只把它當部落格了!

我知道,很多人聽到 WordPress,直覺反應就是「喔,那個做部落格的」。這真是天大的誤會!現代的 WordPress 是一個成熟的應用程式框架 (Application Framework)。它擁有強大的使用者管理、豐富的資料庫操作函式庫 (WPDB),以及最重要的——可以無限擴充的 REST API。這代表什麼?

  • 數據整合的絕佳平台: 你的使用者資料、商品庫存 (WooCommerce)、文章內容、活動資訊,全部都在 WordPress 裡。Chatbot 可以直接讀取這些資料,提供個人化、即時的資訊,而不是一個與網站完全脫節的孤島。
  • 完全的控制權與彈性: 使用第三方 Chatbot 平台雖然方便,但總有功能限制,或是費用高昂。自己用 WordPress 開發,你想怎麼玩就怎麼玩,從簡單的關鍵字回覆,到串接金流、ERP,甚至是 AI 模型,天空才是你的極限。
  • 成本效益: 除了你的開發時間,幾乎沒有額外成本。你不需要再多付一筆 SaaS 服務的月費,所有的運算都在你自己的主機上完成。對於我們這種精打細算的工程師來說,這點實在太香了。

簡單來說,把 LINE Chatbot 的大腦直接建構在 WordPress 裡,就像是為你的網站裝上了一對耳朵和一張嘴,讓它能直接與外界溝通,執行更複雜的自動化任務。

戰前準備:打造 LINE Chatbot 的基礎建設

在我們開始寫 Code 之前,有幾樣東西得先準備好,這就像蓋房子前要先打好地基一樣,一步都不能少。囉嗦是囉嗦了點,但相信我,先把環境搞定,可以省下你後面無數個抓蟲的夜晚。

第一步:你的 WordPress 網站 (而且必須是 HTTPS)

這點是硬性要求,沒得商量。LINE 的 Webhook 機制為了安全,只會將資料傳送到 `https://` 開頭的安全網址。如果你的網站還在用 `http://`,趕快去裝個 SSL 憑證吧。現在有很多免費的選擇,像是 Let’s Encrypt,我們的部落格裡也有完整的 Certbot 自動化教學,別再拖了!

第二步:註冊一個 LINE Developers 帳號並建立 Provider 與 Channel

  1. 前往 LINE Developers Console,用你的 LINE 帳號登入。
  2. 建立一個新的「Provider」(供應商),可以把它想成是你公司或品牌的名稱。
  3. 在 Provider 底下,選擇「Create a new channel」,然後選擇「Messaging API」。
  4. 填寫所有必要的資訊,像是 Channel icon、Channel name 等。完成後,你就擁有一個專屬的 LINE Bot 頻道了!

第三步:取得兩把關鍵鑰匙

進入你剛剛建立的 Channel 後台,找到「Messaging API」這個頁籤。這裡有兩個非常重要的東西,請務必把它們複製下來保管好,絕對不要外洩:

  • Channel access token (long-lived): 這就像是你的機器人要去 LINE API 辦事時的「通行證」。當我們要從 WordPress 主動發送訊息給使用者時,就需要這組 Token 來驗明正身。
  • Channel secret: 這則是用來驗證「是不是真的 LINE 官方把訊息傳給你」的一把「密鑰」。LINE 傳送 Webhook 到你的 WordPress 時,會用這個 Channel Secret 產生一個簽章,我們收到後要用同樣的方式計算一次,比對看看是否相符,以防有人偽造請求。

好了,基礎建設完成。現在,讓我們開始動手,為 WordPress 注入靈魂!

核心實戰:用 WordPress REST API 接收與回應 LINE 訊息

整個 Chatbot 的運作核心就是「Webhook」。簡單說,當使用者傳訊息給你的 LINE Bot 時,LINE 的伺服器會立刻向你指定的「Webhook URL」發送一個 HTTP POST 請求,裡面包含了使用者的訊息內容、是誰傳的、什麼時候傳的…等所有資訊。我們的工作,就是在 WordPress 裡建立一個能夠接收這個請求的端點 (Endpoint),並根據收到的內容做出回應。

最好的方法就是利用 WordPress 內建的 REST API 機制來註冊一個自訂的路由。把下面的程式碼,放到你子佈景主題的 `functions.php` 檔案裡。千萬記得,是「子佈景主題」!直接改動原始主題,一更新就什麼都沒了,這可是工程師的大忌啊!

第一步:註冊 Webhook 接收端點

我們需要告訴 WordPress:「嘿,幫我開一個網址,例如 `https://yourdomain.com/wp-json/line-bot/v1/webhook`,只要有 POST 請求送到這裡,就交給 `handle_line_webhook` 這個函式處理。」


<?php
add_action('rest_api_init', function () {
    register_rest_route('line-bot/v1', '/webhook', [
        'methods' => 'POST',
        'callback' => 'handle_line_webhook',
        'permission_callback' => '__return_true' // 暫時開放權限,之後會加上驗證
    ]);
});
?>

第二步:編寫 Webhook 核心處理函式

這就是我們 Chatbot 的大腦了。這個函式會負責幾件大事:驗證請求的合法性、解析收到的訊息、決定要回覆什麼,然後呼叫另一個函式把回覆訊息送出去。


<?php
function handle_line_webhook(WP_REST_Request $request) {
    // -----------------------------------------------------
    // 囉嗦一下:定義你的 Channel Secret 和 Access Token
    // 最好是使用 wp-config.php 的常數來定義,不要直接寫在程式碼裡
    // define('LINE_CHANNEL_SECRET', '你的 Channel Secret');
    // define('LINE_CHANNEL_ACCESS_TOKEN', '你的 Channel Access Token');
    // -----------------------------------------------------
    $channel_secret = defined('LINE_CHANNEL_SECRET') ? LINE_CHANNEL_SECRET : '';
    
    // 1. 驗證簽章,這是最重要的安全防線!
    $signature = $request->get_header('x-line-signature');
    $body = $request->get_body();

    if (empty($signature)) {
        return new WP_Error('bad_request', 'Signature not set.', ['status' => 400]);
    }

    $hash = hash_hmac('sha256', $body, $channel_secret, true);
    $expected_signature = base64_encode($hash);

    if ($signature !== $expected_signature) {
        // 簽章不符,代表這可能是偽造的請求,直接擋掉!
        error_log('LINE Webhook: Invalid signature.');
        return new WP_Error('invalid_signature', 'Invalid signature.', ['status' => 403]);
    }

    // 2. 解析 LINE 送來的資料
    $events = $request->get_json_params()['events'];

    if (empty($events)) {
        return new WP_REST_Response('OK', 200);
    }

    // 3. 處理每個事件
    foreach ($events as $event) {
        // 我們只處理訊息事件,其他像加入好友、封鎖等事件先忽略
        if ($event['type'] == 'message') {
            $reply_token = $event['replyToken'];
            $message_type = $event['message']['type'];

            // 根據不同訊息類型做不同處理
            switch ($message_type) {
                case 'text':
                    $user_text = $event['message']['text'];
                    // 簡單的 echo bot 邏輯:使用者說什麼,我們就回什麼
                    $reply_text = '你說了:' . $user_text;
                    reply_to_line($reply_token, [['type' => 'text', 'text' => $reply_text]]);
                    break;
                case 'sticker':
                    // 如果收到貼圖,就回覆一個感謝訊息
                    $reply_text = '謝謝你的貼圖!';
                    reply_to_line($reply_token, [['type' => 'text', 'text' => $reply_text]]);
                    break;
                // 你可以在這裡擴充,處理圖片、影片等其他類型的訊息
                default:
                    // 不支援的訊息類型
                    error_log('LINE Webhook: Unhandled message type: ' . $message_type);
                    break;
            }
        }
    }

    // 4. 回應一個 HTTP 200 OK 給 LINE 伺服器,告訴它我們收到了
    return new WP_REST_Response('OK', 200);
}
?>

第三步:建立回覆訊息的函式

上面的函式呼叫了 `reply_to_line()`,現在我們來實作它。這個函式專門負責打包我們要回覆的訊息,並透過 `wp_remote_post` 把它們發送到 LINE 的 Reply Message API。


<?php
function reply_to_line($reply_token, $messages) {
    $channel_access_token = defined('LINE_CHANNEL_ACCESS_TOKEN') ? LINE_CHANNEL_ACCESS_TOKEN : '';
    $url = 'https://api.line.me/v2/bot/message/reply';

    $headers = [
        'Content-Type'  => 'application/json',
        'Authorization' => 'Bearer ' . $channel_access_token,
    ];

    $body = [
        'replyToken' => $reply_token,
        'messages'   => $messages,
    ];

    $response = wp_remote_post($url, [
        'headers' => $headers,
        'body'    => json_encode($body),
    ]);

    // 偵錯用:檢查 API 回應是否有誤
    if (is_wp_error($response)) {
        error_log('LINE Reply API Error: ' . $response->get_error_message());
    } else {
        $response_code = wp_remote_retrieve_response_code($response);
        if ($response_code != 200) {
            error_log('LINE Reply API HTTP Error: ' . $response_code . ' - ' . wp_remote_retrieve_body($response));
        }
    }
}
?>

把以上三段程式碼都加到你子佈景主題的 `functions.php` 後,回到你的 LINE Developers Console,在「Messaging API」頁籤下找到「Webhook settings」,把你的 Webhook URL (`https://yourdomain.com/wp-json/line-bot/v1/webhook`) 填進去,並啟用「Use webhook」。

現在,拿出你的手機,對你的 LINE 官方帳號發送一則訊息試試看!如果一切順利,你應該會收到機器人幾乎是秒回的覆誦訊息。恭喜你,你的 WordPress 已經成功化身為一個 LINE Chatbot 了!

下一步?解放 WordPress 的無限潛能

一個只會覆誦的機器人當然不夠看。但現在你已經打通了任督二脈,接下來的可能性是無限的:

  • 關鍵字觸發文章查詢: 收到特定關鍵字時,使用 `WP_Query` 查詢相關文章,並將文章標題、連結以文字或卡片格式回覆。
  • WooCommerce 訂單狀態查詢: 讓使用者輸入訂單編號,你的 Chatbot 就能從資料庫撈出訂單狀態並回覆。
  • 內容訂閱服務: 建立一個功能,讓使用者輸入「訂閱」,你就將他的 LINE User ID 存到 `usermeta` 或自訂資料表。每當有新文章發布時,就透過 Push API 主動推播通知給所有訂閱者。
  • 串接 OpenAI API: 接收到使用者問題後,將問題傳遞給 OpenAI API,再將 AI 生成的回答回覆給使用者,打造一個真正會思考的智慧客服。我們之前也寫過相關文章,原理是相通的!

這才是 LINE Messaging API Chatbot 建置 的真正魅力所在——將 LINE 的即時通訊能力與 WordPress 強大的內容管理和擴充性完美結合。你的網站不再是一個被動的資訊展示平台,而是一個能與使用者深度互動、提供即時服務的動態應用程式。

今天的教學只是一個起點,一個讓你窺見 WordPress 強大潛力的窗口。從這裡出發,你可以打造出各式各樣獨一無二的自動化應用。身為工程師,最快樂的事莫過於此——用程式碼解決實際問題,讓世界運轉得更有效率一點點。

相關推薦閱讀

如果你在建置過程中遇到任何棘手的問題,或者有更複雜的商業邏輯、系統串接需求,例如需要整合 ERP、CRM 或是打造更複雜的互動流程,這通常需要更深入的架構設計與開發。歡迎與浪花科技的團隊聯繫,我們很樂意提供專業的技術諮詢與開發服務,協助你打造真正能解決商業痛點的自動化解決方案。

常見問題 (FAQ)

Q1: 為什麼我的網站一定要有 SSL (HTTPS) 才能用 LINE Webhook?

這是 LINE 官方的安全性規定。Webhook 傳輸的資料可能包含敏感的使用者資訊,為了確保資料在傳輸過程中不被竊聽或竄改,LINE 強制要求 Webhook URL 必須是加密的 HTTPS 連線。這也是現代網站開發的基本安全標準。

Q2: 「Channel Secret」和「Channel Access Token」到底有什麼不同?

你可以這樣理解:「Channel Secret」是『對內』的鑰匙,用來驗證從 LINE 伺服器『傳進來』的請求是不是合法的,確保不是駭客偽造的請求。「Channel Access Token」則是『對外』的通行證,當你的 WordPress 網站要主動『傳出去』訊息給 LINE API 時(例如回覆訊息、主動推播),需要用這組 Token 來證明自己的身份。

Q3: 我的 LINE Bot 都沒有反應,該怎麼除錯?

除錯三步驟:第一,請再三確認你在 LINE Developers Console 填寫的 Webhook URL 是否正確,並且已經啟用了 Webhook。第二,暫時在 WordPress 的 `wp-config.php` 檔案中開啟除錯模式(`define(‘WP_DEBUG’, true);` 和 `define(‘WP_DEBUG_LOG’, true);`),然後再次測試,接著到 `wp-content` 資料夾下查看 `debug.log` 檔案,看看是否有任何 PHP 錯誤訊息。第三,檢查你的 Channel Secret 和 Access Token 是否有複製錯誤,或是不小心包含了空格。

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