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

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

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

嗨,我是浪花科技的 Eric。身為一個整天跟程式碼為伍的工程師,我最受不了的就是重複性的手動工作。想像一下,每次有新訂單、新留言,你都要手動複製貼上,傳訊息通知自己或團隊…光想就覺得心累。更別提客戶半夜三點傳訊息來,難道你也要從床上跳起來回覆嗎?

別鬧了,我們是活在 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)

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

因為 Webhook 傳輸的資料可能包含使用者個資等敏感內容,LINE 官方為了確保通訊過程的安全性,強制規定 Webhook URL 必須是 HTTPS 協定。這可以防止資料在傳輸過程中被竊聽或竄改,是基本的資安要求。

Q2: 我完全不會寫程式,有辦法在 WordPress 上建立 LINE Chatbot 嗎?

可以的。市面上有許多 WordPress 外掛可以幫助你串接 LINE Messaging API,它們提供了圖形化介面來設定關鍵字回覆等基本功能。然而,若要實現與網站功能(如 WooCommerce 訂單、會員系統)的深度整合,或是客製化複雜的互動邏輯,通常還是需要透過程式碼來達成。本篇文章就是專為希望擁有最大彈性的開發者所寫。

Q3: 我的 Channel Secret 和 Channel Access Token 在哪裡可以找到?

請登入您的 LINE Developers Console,選擇您建立的 Provider,然後點進您的 Messaging API Channel。在「Channel basic settings」分頁中,您會找到「Channel secret」。在「Messaging API」分頁中,您則可以找到並發行(Issue)您的「Channel access token」。

Q4: 我都照著文章做了,但我的 Webhook 好像沒有反應,該怎麼除錯?

Webhook 除錯有幾個常見方向:
1. 檢查 Webhook URL: 確認您在 LINE 後台填寫的 URL 是否正確,且網站的 SSL 憑證有效。
2. 查看伺服器錯誤日誌: 檢查 PHP error log,看看在執行 Webhook 程式碼時是否有任何錯誤訊息。
3. 使用 `error_log()`: 在您的 `handle_line_webhook` 函式中,加入 `error_log(file_get_contents(‘php://input’));` 來記錄收到的原始請求,確認是否有收到來自 LINE 的資料。
4. 驗證簽章邏輯: 確保您的 Channel Secret 是正確的,並且簽章驗證的程式碼邏輯無誤。這是最常出錯的地方之一。
5. 本機測試工具: 如果您在本機開發,可以使用 ngrok 這類工具將您的本機環境暴露到公網,以便接收 LINE 的 Webhook 請求進行測試。

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