~/blog/wordpress-line-chatbot-development-guide.md
API 串接與系統整合 · 2025 / 10 / 15

LINE 官方帳號還在手動回? WordPress LINE Chatbot 開發實戰,從 Webhook 到 WooCommerce 全自動!

Eric — 浪花科技創辦人 / AI 架構師
Eric
浪花科技創辦人 · AI 架構師
LINE 官方帳號還在手動回? WordPress LINE Chatbot 開發實戰,從 Webhook 到 WooCommerce 全自動!
目錄 table-of-contents.md

半夜三點,客戶在 LINE 官方帳號丟來一句「請問還有貨嗎」,難道真的要從床上跳起來回?更別說每次有新訂單、新留言,還得手動複製貼上、傳訊通知自己或團隊,光想就心累。這篇實戰帶你從 Webhook 接上 WordPress,一路串到 WooCommerce,讓 LINE Chatbot 全自動上工。

別鬧了,我們是活在 21 世紀的開發者,這種事情當然要交給自動化!今天,我就要帶你手把手,從零開始在你的 WordPress 網站上,打造一個真正屬於你自己的 LINE Messaging API Chatbot。這不是那種只會關鍵字回覆的陽春機器人,而是一個能深度整合你網站功能的智慧小幫手。準備好了嗎?泡杯咖啡,跟著我一起來趟程式碼的奇幻之旅吧!

為什麼你的 WordPress 網站需要一個「會思考」的 LINE Chatbot?

你可能會想:「市面上一堆 Chatbot 服務,為什麼我還要自己寫?」問得好。那些服務雖然方便,但往往彈性不足,而且通常需要額外付費。當你想要的功能是「當 WooCommerce 有一筆『已完成』的訂單時,自動傳送一則附有客戶姓名和訂單編號的訊息到我私人的 LINE」時,你會發現多數的套裝服務都做不到,或者需要串接到天荒地老。

自己開發就不一樣了,整個 WordPress 的核心功能、資料庫、外掛生態系,都是你的武器庫。你可以做到:

  • 24/7 全天候自動客服: 設定常見問題回覆,讓 Chatbot 處理掉 80% 的重複性問題。
  • 即時事件通知: 網站有新留言、新訂單、使用者註冊,第一時間透過 LINE 通知你或指定的管理員。
  • 個人化行銷推播: 根據使用者在網站上的行為(例如:瀏覽過某個商品),透過 LINE 推送相關的優惠訊息。
  • 內容訂閱與派送: 使用者只要輸入「訂閱最新文章」,你的 Chatbot 就能在發佈新文章時自動通知他們。

總之,可能性無窮無盡。一旦你打通了 WordPress 和 LINE 之間的任督二脈,你的網站就不再只是一個被動的內容展示平台,而是一個能與使用者即時互動的動態服務中心。

戰前準備:建置 LINE Chatbot 的必備軍火庫

在我們開始寫 Code 之前,有些前置作業是免不了的。就像蓋房子要先打好地基一樣,這些準備工作能確保後續開發順利,少踩一點坑。工程師的日常,就是花 80% 的時間在準備和除錯,剩下 20% 才是真正享受寫程式的快感。

1. 你的 WordPress 環境

這部分很基本,但非常重要。你的網站必須具備:

  • 有效的 SSL 憑證 (HTTPS): 這是絕對必要的條件。LINE 的 Webhook 只接受 HTTPS 協定的 URL,這是為了確保通訊過程中的資料安全。如果你的網站還在用 HTTP,趕快去處理一下吧,這對 SEO 和使用者信任度也很重要。
  • 管理員權限: 你需要能夠安裝外掛、編輯程式碼的權限。

2. LINE Developers 帳號與 Messaging API Channel

接下來,我們要到 LINE 的開發者後台去申請我們的「機器人執照」。

  • 步驟一: 前往 LINE Developers Console,用你的 LINE 帳號登入。
  • 步驟二: 建立一個新的「Provider」。你可以把它想像成是你公司或品牌的開發者身份。
  • 步驟三: 在你的 Provider 之下,選擇「Create a new channel」,然後選擇「Messaging API」。
  • 步驟四: 填寫你的 Channel 基本資料,像是名稱、描述、頭像等等。
  • 步驟五: 建立完成後,進入你的 Channel 設定頁面。有兩個東西是我們的命脈,一定要先找個安全的地方記下來:
    • Channel secret: 用來驗證從 LINE 伺服器發過來的請求是不是合法的。
    • Channel access token: 我們要回覆訊息給使用者時,需要用到的「通行證」。通常會是一個很長的字串,點擊「Issue」按鈕來產生。

囉嗦一下:這兩組金鑰絕對不要外洩,也千萬不要直接寫死在你的 GitHub public repository 裡,不然你的機器人很快就會被別人接管,開始傳送一些奇怪的訊息了。

動手實作!從零打造你的 WordPress LINE Chatbot 外掛

好了,萬事俱備,只欠東風(Code)!我們將會建立一個非常簡單的 WordPress 外掛來處理所有跟 LINE 的互動。

步驟一:建立外掛基本架構

首先,在你的 WordPress 網站的 /wp-content/plugins/ 資料夾下,建立一個新的資料夾,例如 my-line-chatbot。然後在裡面建立一個 PHP 檔案,例如 my-line-chatbot.php。打開這個檔案,貼上外掛的標頭資訊:

<?php
/**
 * Plugin Name: My Awesome LINE Chatbot
 * Description: A custom LINE Chatbot integration for WordPress.
 * Version: 1.0
 * Author: Eric @ Roamer Tech
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly
}

// 我們的主要邏輯會寫在這裡

這段程式碼讓 WordPress 知道這是一個外掛。去後台啟用它吧!雖然它現在什麼事都還不會做。

步驟二:設定 Webhook,讓 LINE 知道該找誰

Webhook 是什麼?簡單說,就是一個 URL。當你的 LINE 官方帳號收到訊息時,LINE 的伺服器就會朝這個 URL 發送一個 HTTP POST 請求,把訊息內容、使用者資訊等等都打包好送過來。我們要做的,就是建立一個專門接收這個請求的「窗口」。

在 WordPress 中,最優雅的作法就是註冊一個自訂的 REST API 端點。把下面的程式碼加到你的外掛檔案裡:

add_action( 'rest_api_init', function () {
    register_rest_route( 'my-line-chatbot/v1', '/webhook', [
        'methods'  => 'POST',
        'callback' => 'handle_line_webhook',
    ] );
} );

這段碼的意思是:「嘿 WordPress,幫我開一個網址 https://yourdomain.com/wp-json/my-line-chatbot/v1/webhook,當有 POST 請求進來時,就去執行一個叫做 `handle_line_webhook` 的函式。」

現在,把這個完整的 URL 貼到你 LINE Developers 後台的「Messaging API」設定頁面下的「Webhook URL」欄位,並啟用「Use webhook」。

步驟三:接收並驗證 LINE 傳來的訊息

任何人都可以向我們的 Webhook URL 發送請求,所以我們必須驗證請求是否真的來自 LINE。這就要用到前面記下來的 `Channel Secret` 了。LINE 會在 HTTP 標頭中夾帶一個名為 `X-Line-Signature` 的簽章,我們需要用 `Channel Secret` 產生同樣的簽章來比對。

function handle_line_webhook( WP_REST_Request $request ) {
    // 請將 'YOUR_CHANNEL_SECRET' 換成你自己的 Channel Secret
    $channel_secret = 'YOUR_CHANNEL_SECRET';

    // 從 Request header 取得簽章
    $signature = $request->get_header( 'x_line_signature' );

    // 取得 Request body
    $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 );
    $generated_signature = base64_encode( $hash );

    // 驗證簽章是否相符
    if ( $signature !== $generated_signature ) {
        error_log('LINE Webhook: Signature validation failed!');
        return new WP_Error( 'invalid_signature', 'Invalid signature', [ 'status' => 403 ] );
    }

    // 簽章驗證成功,處理事件
    $events = json_decode( $body, true );

    if ( ! empty( $events['events'] ) ) {
        foreach ( $events['events'] as $event ) {
            // 在這裡處理不同類型的事件 (例如: 收到訊息、被加好友)
            // 我們先專注在訊息事件
            if ( $event['type'] === 'message' && $event['message']['type'] === 'text' ) {
                reply_to_line_message( $event );
            }
        }
    }

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

這段程式碼有點硬,但它做的事情很單純:拿到請求 -> 拿到簽章 -> 自己算一次簽章 -> 比對一下。如果不一樣,就代表是偽造的請求,直接把它踢出去。這一步是資安的基礎,絕對不能省!

步驟四:解析訊息並做出回應 (Echo Bot)

驗證成功後,我們就可以安心地處理訊息了。作為入門,我們先來做一個最簡單的「Echo Bot」,也就是你傳什麼訊息給它,它就回覆一模一樣的訊息。

我們需要建立 `reply_to_line_message` 這個函式:

function reply_to_line_message( $event ) {
    // 請將 'YOUR_CHANNEL_ACCESS_TOKEN' 換成你自己的 Channel Access Token
    $access_token = 'YOUR_CHANNEL_ACCESS_TOKEN';
    $reply_token = $event['replyToken'];
    $user_message = $event['message']['text'];

    $reply_data = [
        'replyToken' => $reply_token,
        'messages'   => [
            [
                'type' => 'text',
                'text' => '你剛剛說了:' . $user_message,
            ],
        ],
    ];

    $url = 'https://api.line.me/v2/bot/message/reply';
    $headers = [
        'Content-Type'  => 'application/json',
        'Authorization' => 'Bearer ' . $access_token,
    ];

    $args = [
        'body'    => json_encode( $reply_data ),
        'headers' => $headers,
        'timeout' => 60,
    ];

    // 使用 WordPress 的 HTTP API 來發送請求
    $response = wp_remote_post( $url, $args );

    // 記錄 Log,方便除錯
    if ( is_wp_error( $response ) ) {
        error_log( 'LINE Reply Error: ' . $response->get_error_message() );
    }
}

這段程式碼做了幾件事:

  1. 從事件中取得 `replyToken`(回覆這次對話的鑰匙)和使用者傳來的訊息。
  2. 準備好要回傳的資料格式(一個簡單的文字訊息)。
  3. 設定好請求的標頭,特別是 `Authorization`,要把我們的 `Channel Access Token` 放進去。
  4. 使用 WordPress 內建的 `wp_remote_post` 函式,把我們的回覆訊息發送給 LINE 的 Reply API。

把這幾段程式碼組合起來,存檔。現在,打開你的 LINE,找到你的官方帳號,傳個訊息試試看!如果一切順利,你應該會收到機器人回傳「你剛剛說了:[你的訊息]」的訊息。恭喜你,你的第一個 WordPress LINE Chatbot 誕生了!

進階應用:讓你的 Chatbot 更上一層樓

只會學人說話的 Echo Bot 當然不夠看。既然我們身處 WordPress 的主場,就要善用它的強大功能。

串接 WooCommerce:自動發送訂單通知

想像一下,客戶下單完成後,你的 LINE 馬上跳出通知,是不是很酷?我們可以透過 WooCommerce 的 Hook 來達成。

// 概念程式碼,實際應用需處理如何取得使用者 LINE ID add_action( 'woocommerce_thankyou', 'send_line_order_notification', 10, 1 ); function send_line_order_notification( $order_id ) { if ( ! $order_id ) return; $order = wc_get_order( $order_id ); $message = sprintf("新訂單通知!\n訂單編號:%s\n總金額:%s\n客戶:%s", $order->get_order_number(), $order->get_total(), $order->get_billing_first_name() ); // 這裡需要一個函式,將訊息推送到指定的 LINE User ID // push_line_message('YOUR_ADMIN_LINE_USER_ID', $message); }

這段程式碼會在訂單完成頁面觸發,抓取訂單資訊後,就可以呼叫 LINE Push API 把訊息傳送給指定的管理員。這比 Email 通知快多了!

關鍵字觸發:查詢最新文章

我們也可以讓 Chatbot 變得更聰明。修改一下 `handle_line_webhook` 函式裡的事件處理迴圈,加入關鍵字判斷:

// 於 handle_line_webhook 函式中 $user_message = $event['message']['text']; if ( trim($user_message) === '最新文章' ) { reply_with_latest_posts( $event['replyToken'] ); } else { // 原本的 Echo Bot 邏輯 reply_to_line_message( $event ); }

然後我們來實作 `reply_with_latest_posts` 函式,利用 `WP_Query` 抓取文章:

// 概念程式碼 function reply_with_latest_posts( $reply_token ) { $args = [ 'post_type' => 'post', 'posts_per_page' => 3, 'post_status' => 'publish', ]; $query = new WP_Query( $args ); $reply_text = "為您找到最新的 3 篇文章:\n"; if ( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); $reply_text .= get_the_title() . "\n" . get_permalink() . "\n\n"; } } wp_reset_postdata(); // 接下來就是打包成 LINE Message 格式,用 reply API 回傳... }

這樣一來,當使用者傳送「最新文章」時,機器人就會自動去資料庫撈資料,並回傳最新的文章列表,瞬間變成一個內容派送小助手!

工程師的囉嗦時間:部署與維護的注意事項

程式碼能動只是第一步,要讓它穩定可靠地運行,還有一些事情你必須注意:

  • 日誌 (Logging) 是你的好朋友: 在處理 Webhook 的過程中,善用 error_log() 函式。把收到的請求內容、驗證過程、發送的回覆都記錄下來。當機器人行為不正常時,這些日誌就是你唯一的破案線索。
  • 金鑰管理: 再囉嗦一次,不要把 Channel Secret 和 Access Token 直接寫在程式碼裡。比較好的做法是把它們定義在 wp-config.php 檔案中,例如 define('LINE_CHANNEL_SECRET', 'your_secret');,然後在程式碼中用 LINE_CHANNEL_SECRET 來取用。這樣程式碼本身就不會包含敏感資訊。
  • 非同步處理: 如果你的 Chatbot 需要做一些比較耗時的操作(例如:串接外部 API、複雜的資料庫查詢),最好不要直接在 Webhook 的處理流程中執行。因為 LINE 的 Webhook 有超時限制,太久沒回應會失敗。進階作法是將耗時任務丟到 WordPress 的 Cron Job 或 Action Scheduler 中背景執行,Webhook 只需要快速回應一個「處理中」的訊息即可。

打造一個強大的 Chatbot 是一條持續優化的路。從一個簡單的 Echo Bot 開始,逐步為它添加新功能,你會發現它能為你的網站和業務帶來巨大的價值。自動化不僅解放了你的雙手,更讓你的服務體驗提升到一個新的層次。

希望這篇從零到一的實戰教學對你有幫助。如果你在開發過程中遇到任何問題,或是想實現更複雜的客製化 LINE Chatbot 功能,別客氣,浪花科技的團隊隨時準備好為你提供專業的技術支援。

延伸閱讀

對打造更強大的 WordPress 自動化流程有興趣嗎?或是有更複雜的 API 串接需求?歡迎點擊這裡,填寫表單與我們的技術專家聊聊!讓我們一起把你的絕佳點子變成現實。

// FAQ

常見問題

開發 LINE Chatbot 的 Webhook 為什麼一定要用 HTTPS?
因為 LINE 的 Webhook 只接受 HTTPS 協定的 URL,這是為了確保通訊過程中的資料安全。網站必須具備有效的 SSL 憑證,仍在使用 HTTP 的網站需先處理憑證問題才能串接。
申請 LINE Messaging API 後要記下哪些重要金鑰?
建立 Messaging API Channel 後,要記下兩組金鑰:Channel secret 用來驗證從 LINE 伺服器發來的請求是否合法;Channel access token 則是回覆訊息給使用者時所需的通行證。這兩組金鑰絕不可外洩,也不要寫死在公開的程式碼倉庫中。
在 WordPress 中如何建立接收 LINE 訊息的 Webhook 窗口?
最優雅的做法是註冊一個自訂的 REST API 端點,透過 rest_api_init 用 register_rest_route 註冊一個接受 POST 的路由(例如 /wp-json/my-line-chatbot/v1/webhook),再把該完整 URL 填入 LINE Developers 後台的 Webhook URL 欄位並啟用 Use webhook。
如何驗證 Webhook 請求確實來自 LINE?
LINE 會在 HTTP 標頭夾帶名為 X-Line-Signature 的簽章。系統端要以 Channel Secret 用 HMAC-SHA256 對 request body 計算雜湊、再做 base64 編碼產生簽章,與標頭中的簽章比對;不相符就擋下請求(回傳 403),避免任何人偽造請求攻擊。
~/roamer-tech/newsletter // FREE
// newsletter

訂閱免費電子報

把 AI 自動化、企業系統設計與 WordPress / Laravel 開發的真實案例和可直接照做的技巧,整理成電子報寄給你。只寄精選內容、不灌垃圾信,一鍵就能退訂。

$
// final.exec()

準備好讓你的網站開始為你工作了嗎?