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
- 前往 LINE Developers Console,用你的 LINE 帳號登入。
- 建立一個新的「Provider」(供應商),可以把它想成是你公司或品牌的名稱。
- 在 Provider 底下,選擇「Create a new channel」,然後選擇「Messaging API」。
- 填寫所有必要的資訊,像是 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 強大潛力的窗口。從這裡出發,你可以打造出各式各樣獨一無二的自動化應用。身為工程師,最快樂的事莫過於此——用程式碼解決實際問題,讓世界運轉得更有效率一點點。
相關推薦閱讀
- 你的 WordPress 正在大開後門嗎?資深工程師的 Webhook 設計與安全驗證終極指南
- WordPress 只能寫文章?錯!資深工程師手把手教你用 REST API 自訂端點,打造無頭應用超能力!
- 告別手動複製貼上!WooCommerce Webhook 終極指南:打造零失誤、全自動的訂單處理流程
如果你在建置過程中遇到任何棘手的問題,或者有更複雜的商業邏輯、系統串接需求,例如需要整合 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 是否有複製錯誤,或是不小心包含了空格。






