~/blog/wordpress-ai-chatbot-crm-order-tracking-tutorial.md
AI 自動化與智慧應用 · 2026 / 01 / 06

客服不再崩潰!用 OpenAI Function Calling 打造能『查訂單』的 WordPress 智慧 Chatbot 實戰

Eric — 浪花科技創辦人 / AI 架構師
Eric
浪花科技創辦人 · AI 架構師
客服不再崩潰!用 OpenAI Function Calling 打造能『查訂單』的 WordPress 智慧 Chatbot 實戰
目錄 table-of-contents.md

「請問我的貨到了嗎?」這一句話,能塞爆任何規模的客服信箱,再完整的「我的帳戶」頁面和出貨通知信都擋不住。傳統 chatbot 幫不上忙,是因為它只會聊天、不會查資料;而 OpenAI 的 Function Calling 正好補上這塊——讓模型自己決定何時呼叫你的訂單 API。這篇就在 WordPress 上實作一個真的能查訂單的智慧客服。

這不是使用者的錯,人性就是懶得登入查網站,他們想要的是「問了就有答案」。

過去,我們可能會設定一些關鍵字自動回覆(Keyword-based chatbot),但那種體驗通常很災難。客人問「貨哪時候到?」,機器人回「請輸入訂單編號」,客人輸入後,機器人可能還看不懂。但現在,時代不同了。我們可以利用 OpenAI 的 Function Calling (函數呼叫) 技術,結合 WordPress REST API 與你的 CRM 系統,打造 24H 業務助理:用 AI 讓 Chatbot 查詢 CRM 訂單狀態。這不再是生硬的腳本,而是真正能「理解意圖」並「執行查詢」的智慧大腦。

今天這篇文章,不講空泛的概念,我們來談談技術實作的架構與核心程式碼。

為什麼傳統 Chatbot 查不到訂單?

傳統的 Chatbot 大多是「封閉式」的。它們的邏輯是:

  • 如果使用者輸入 A,則回覆 B。
  • 如果使用者輸入「查詢訂單」,則丟出查詢連結。

這最大的問題在於「資料孤島」。Chatbot 不知道你的 WooCommerce 裡有什麼資料,也不知道 HubSpot 或 Salesforce 裡的 CRM 狀態。它只是一個會說話的佈告欄。

而導入 LLM (大型語言模型) 加上 Function Calling 後,AI 變成了「中控官」。它能聽懂自然語言(例如:「幫我查一下昨天買的那雙鞋子出貨沒?」),然後判斷:「喔!這個用戶想查訂單,我需要去呼叫『查詢訂單 API』,但我缺訂單編號或 Email,所以我先問他要這些資訊。」

這就是本質的區別:從「關鍵字匹配」進化到「意圖識別與工具使用」

技術架構:如何讓 AI 伸手進 CRM 撈資料?

要實現這個功能,我們不需要把整個 CRM 資料庫餵給 AI(千萬別這麼做,這是資安自殺行為)。我們採用的是 RAG (Retrieval-Augmented Generation) 的變體思路,具體流程如下:

  1. 前端對話介面:使用者在 WordPress 網站上的 Chat Widget 提問。
  2. 中介層 (Middleware):將對話傳送給 OpenAI Assistants API。
  3. 意圖識別:OpenAI 判斷需要執行 get_order_status 這個 Function。
  4. 執行查詢:WordPress (作為後端) 接收到 AI 的指令,透過 PHP 執行 SQL 或打 API 去查詢 CRM/WooCommerce。
  5. 回傳結果:WordPress 將「訂單 #999 狀態:已出貨,物流單號:TW123」回傳給 OpenAI。
  6. 生成回應:OpenAI 將生硬的數據轉化為親切的口語:「Eric 您好,您購買的鞋子已經出貨囉!物流單號是 TW123,預計明天送達。」

核心實作:定義 Function 與 WordPress 處理邏輯

作為工程師,我們最關心的就是 Code 怎麼寫。這裡我示範如何在 WordPress 環境下,定義一個讓 AI 呼叫的「工具」,以及後端該如何回應。

1. 定義 OpenAI 的 Tools (Function Definition)

在發送請求給 OpenAI API 時,我們需要在 JSON body 中告訴它:「嘿,我這裡有個工具可以用喔。」


{
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "get_order_status",
        "description": "根據訂單編號或 Email 查詢訂單目前的物流狀態與詳細資訊",
        "parameters": {
          "type": "object",
          "properties": {
            "order_id": {
              "type": "string",
              "description": "使用者的訂單編號,例如:WC-12345"
            },
            "email": {
              "type": "string",
              "description": "下單時使用的電子郵件信箱,用於驗證身份"
            }
          },
          "required": ["order_id"]
        }
      }
    }
  ]
}

2. WordPress 後端處理 (PHP)

當 OpenAI 回傳 requires_action 狀態時,代表它想呼叫我們上面定義的 get_order_status。這時,我們需要在 WordPress 寫一個處理函數。

這裡我用一個簡化的 PHP 範例,示範如何從 WooCommerce 撈資料:


function handle_ai_function_call($function_name, $arguments) {
    $args = json_decode($arguments, true);

    if ($function_name === 'get_order_status') {
        $order_id = isset($args['order_id']) ? sanitize_text_field($args['order_id']) : 0;
        // 在實際應用中,務必加上 Email 驗證邏輯以確保資安
        // $email = sanitize_email($args['email']); 

        // 檢查是不是 WooCommerce 訂單
        $order = wc_get_order($order_id);

        if (!$order) {
            return json_encode(['status' => 'error', 'message' => '找不到此訂單編號']);
        }

        // 獲取訂單狀態與物流資訊 (假設有用外掛紀錄物流單號)
        $status = $order->get_status_label();
        $tracking_number = $order->get_meta('_shipping_tracking_number', true) ?: '尚無物流單號';
        $items = [];
        foreach ($order->get_items() as $item) {
            $items[] = $item->get_name();
        }

        return json_encode([
            'status' => 'success',
            'order_status' => $status,
            'tracking_number' => $tracking_number,
            'products' => implode(', ', $items),
            'updated_at' => $order->get_date_modified()->date('Y-m-d H:i')
        ], JSON_UNESCAPED_UNICODE);
    }

    return json_encode(['status' => 'error', 'message' => '未知的函數']);
}

這段程式碼的關鍵在於:它不是直接吐 HTML 給使用者看,而是吐 JSON 數據 給 AI 看。AI 看到 JSON 後,會幫你「翻譯」成人話。

資安關鍵:別讓 API 變成個資外洩的破口

這是我在輔導企業導入 AI 時最常碎念的一點。絕對不能只靠「訂單編號」就吐出所有資料!

如果我隨便猜一個號碼 #10001,Chatbot 就告訴我這是「王小明買的 iPhone 15,地址在台北市...」,那你的網站大概離被告不遠了。

在實作 打造 24H 業務助理:用 AI 讓 Chatbot 查詢 CRM 訂單狀態 的過程中,務必加入以下安全機制:

  • 雙重驗證 (2FA) 邏輯:除了訂單編號,一定要要求使用者提供 Email 或手機號碼末四碼,並在程式端比對兩者是否吻合。
  • Rate Limiting (頻率限制):限制同一個 IP 或 Session 在短時間內的查詢次數,防止暴力猜測訂單號。
  • 敏感資料遮罩:回傳給 AI 的資料中,地址、電話等個資應進行遮罩處理 (Masking),只讓 AI 知道「已出貨至 台北市信義區」,而不是完整地址。

結論:從「被動查詢」到「主動服務」

導入這套架構後,你會發現客服 Loading 會顯著下降。更棒的是,因為我們已經打通了 WordPress 與 CRM 的 API,未來甚至可以做更進階的應用。例如,當 AI 發現訂單狀態是「配送失敗」時,可以主動在對話中詢問使用者:「我看物流顯示配送失敗,您要不要更改配送時間?」

這才是一個 2025 年合格的現代化網站該有的樣子。不再是冷冰冰的表單,而是能解決問題的智慧助理。

延伸閱讀

如果你對 AI 與 WordPress 的整合有興趣,或是想深入了解 API 串接的細節,這裡有幾篇我之前寫的技術筆記,強烈建議你搭配服用:

覺得 AI 串接太複雜,不知道從何下手?或者是擔心串接後的資安問題?

別讓技術門檻阻礙了你的業務成長。浪花科技專注於高難度的 WordPress 客製化開發與系統整合。

立即聯繫我們,打造你的專屬 AI 業務助理
// FAQ

常見問題

OpenAI Function Calling 跟傳統關鍵字 Chatbot 查訂單有什麼不同?
傳統關鍵字 Chatbot 是封閉式的「輸入 A 回覆 B」,與訂單資料形成資料孤島,看不懂自然語言也撈不到 CRM 資料。導入 LLM 加上 Function Calling 後,AI 能聽懂如「昨天買的鞋子出貨沒」這類意圖,自行判斷該呼叫 get_order_status 函數,並在缺少訂單編號或 Email 時主動向使用者索取,從關鍵字匹配進化為意圖識別與工具使用。
讓 AI 查 CRM 訂單時,後端應該回傳什麼格式給 AI?
後端應回傳 JSON 數據而非 HTML 給 AI,例如訂單狀態、物流單號、商品與更新時間等欄位。AI 收到 JSON 後會再翻譯成親切的口語回覆給使用者,這樣可避免把畫面渲染與資料查詢混在一起,也讓 AI 的回應更自然。
AI 查詢訂單的功能要怎麼避免變成個資外洩破口?
絕對不能只憑訂單編號就吐出完整資料。應加入雙重驗證,要求使用者同時提供 Email 或手機末四碼並在程式端比對;設定 Rate Limiting 限制同一 IP 或 Session 的查詢頻率以防暴力猜號;並對回傳給 AI 的資料做敏感資料遮罩,例如只透露「已出貨至台北市信義區」而非完整地址。
AI 訂單查詢系統需要把整個 CRM 資料庫餵給 AI 嗎?
不需要也不應該,把整個資料庫餵給 AI 是資安自殺行為。正確作法是採類似 RAG 的流程:由 OpenAI 判斷意圖並指定要呼叫的函數,再由 WordPress 後端依參數去查詢 WooCommerce 或 CRM,僅將該筆查詢結果回傳給 AI 生成回應。
~/roamer-tech/newsletter // FREE
// newsletter

訂閱免費電子報

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

$
// final.exec()

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