WordPress AI 讀心術:用 Gemini API 實現客戶回饋自動結構化分析
客服回覆堆積如山,還在靠「感覺」分類?資深工程師手把手教你將 Google Gemini API 深度整合至 WordPress 後台。透過精心設計的 Prompt Engineering,我們能將客戶留言轉化為結構化的 JSON 數據,一秒抓出正負評、關鍵字與行動建議。立即升級你的網站,讓數據驅動決策,告別低效通靈,不再錯失任何黃金商機!
客服回覆到手軟?教你用 Gemini API 打造 WordPress 自動讀心術,一秒看懂客戶在想啥!
嗨,我是浪花科技的 Eric。身為一個整天跟程式碼和伺服器打交道的工程師,我最怕的不是 Bug,而是那種淹沒在後台、看不見盡頭的客戶回饋、留言和表單訊息。每一則都像是個黑盒子,裡面可能藏著金礦(超棒的建議),也可能埋著地雷(緊急的客訴)。
以前,我們只能靠人工一則一則讀,用 Excel 標籤,然後開會憑「感覺」決定下一步。這不僅慢,而且極度主觀。A 同事覺得是好評,B 同事可能覺得語氣有點酸。這種「通靈」式的工作流程,在講求數據驅動的今天,簡直就是一場災難。
但現在,我們有了新的武器:大型語言模型(LLM),特別是 Google 的 Gemini API。它不只是個聊天機器人,它是一個能理解人類語言細微差別的分析引擎。今天,我就要帶你動手,把這個「大腦」植入你的 WordPress 網站,打造一個不只能辨識正負評,還能自動摘要、抓關鍵字,甚至在後台直接視覺化的「客戶回饋儀表板」。別再通靈了,我們直接用 Code 來讀心!
為什麼你需要的不只是「正/負評」標籤?
市面上有很多情感分析工具,很多只能給你一個簡單的「正面」、「負面」或「中性」標籤。老實說,這在實務上幫助有限。身為工程師,我們要的是更結構化、更深度的洞察。
想像一下,一則留言寫著:「你們的 UI 設計很漂亮,但我找了半天才找到結帳按鈕,而且載入速度有點慢。」
- 傳統工具可能標為「中性」或「負面」,然後呢?沒了。
- 但如果我們利用 Gemini API 的強大理解能力,我們可以得到這樣的結構化資料:
{
"sentiment": "Mixed",
"score": -0.3,
"summary": "使用者肯定 UI 美感,但對結帳流程的易用性和網站載入速度感到不滿。",
"keywords": ["UI 設計", "結帳按鈕", "載入速度"],
"actionable_items": ["優化結帳流程可見度", "檢查網站效能"]
}
看到差別了嗎?這不是數據,這是可以直接丟給 PM 和設計師的 actionable ticket!這才是我們工程師追求的效率。今天,我們就要來實作這個。準備好了嗎?泡杯咖啡,我們開始了。
第一步:打通 WordPress 與 Gemini 的任督二脈
在我們開始寫任何程式碼之前,基礎建設要先搞定。這就像蓋房子,地基沒打好,上面蓋得再漂亮都是枉然。
1. 取得你的 Gemini API 金鑰
首先,你需要一個 Google 帳戶,然後前往 Google AI Studio 取得你的 API 金鑰。過程很簡單,基本上就是點幾個按鈕。拿到金鑰後,請把它當作你家鑰匙一樣保管好,絕對不要直接寫在程式碼裡!
2. 安全地把金鑰放進 WordPress
這是很多新手會犯的錯:直接把 API Key 寫在 `functions.php` 裡。千萬不要!這樣做,你的主題一旦換掉,或是程式碼被別人看到,金鑰就外洩了。
最安全、也是 WordPress 官方推薦的做法,是把它定義在 `wp-config.php` 檔案中。這個檔案位於你的 WordPress 根目錄,非常核心。
打開你的 `wp-config.php`,在 `/* That’s all, stop editing! Happy publishing. */` 這行註解上面,加入以下這行:
define( 'GEMINI_API_KEY', '把你的API金鑰貼在這裡' );
這樣一來,我們就可以在程式碼中透過 `GEMINI_API_KEY` 這個常數來安全地取用金鑰,而不用擔心它會被意外洩露。
第二步:攔截使用者回饋,發送給 Gemini 分析
現在,我們要寫一個 PHP 函式來「攔截」新的留言,並把它送去給 Gemini API 處理。這裡我以 WordPress 最常見的「留言」功能為例,但同樣的邏輯也適用於 Contact Form 7、Gravity Forms 等表單外掛的提交事件。
把下面的程式碼加到你佈景主題的 `functions.php` 檔案裡:
// 當有新留言儲存到資料庫後,觸發這個動作
add_action('comment_post', 'roamer_analyze_comment_with_gemini', 10, 2);
function roamer_analyze_comment_with_gemini($comment_ID, $comment_approved) {
// 如果留言正在等待審核,就先不處理
if (1 != $comment_approved) {
return;
}
// 取得留言物件和內容
$comment = get_comment($comment_ID);
$comment_content = $comment->comment_content;
// 如果金鑰不存在或留言內容是空的,就直接閃人
if (!defined('GEMINI_API_KEY') || empty($comment_content)) {
return;
}
// 這裡就是工程師的魔法:精心設計的 Prompt
$prompt = "請針對以下客戶留言進行情感分析,並嚴格依照以下 JSON 格式回傳,不要包含任何其他說明文字或程式碼標籤:\n\n";
$prompt .= "{\n";
$prompt .= " \"sentiment\": \"請填寫 Positive, Negative, Neutral 或 Mixed\",\n";
$prompt .= " \"score\": \"請填寫一個 -1.0 到 1.0 之間的分數\",\n";
$prompt .= " \"summary\": \"請用繁體中文產生一句話的摘要\",\n";
$prompt .= " \"keywords\": [\"請找出1至3個關鍵字詞\"]\n";
$prompt .= "}\n\n";
$prompt .= "客戶留言:\"" . $comment_content . "\"";
// 設定 API 請求的參數
$api_url = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=' . GEMINI_API_KEY;
$api_body = [
'contents' => [
[
'parts' => [
['text' => $prompt]
]
]
]
];
// 使用 WordPress 內建的 HTTP API 發送請求
$response = wp_remote_post($api_url, [
'method' => 'POST',
'headers' => ['Content-Type' => 'application/json'],
'body' => json_encode($api_body),
'timeout' => 30, // 增加超時時間,因為 AI 可能需要點時間思考
]);
// 檢查 API 回應是否正常
if (is_wp_error($response) || wp_remote_retrieve_response_code($response) != 200) {
// 在這裡可以加入錯誤日誌記錄,但我們先簡單處理
return;
}
$response_body = wp_remote_retrieve_body($response);
$data = json_decode($response_body, true);
// 解析 Gemini 回傳的內容
// 這邊的解析路徑可能會因 API 版本更新而改變,要特別注意
$gemini_response_text = $data['candidates'][0]['content']['parts'][0]['text'] ?? '';
// Gemini 有時候會手癢多包一層 markdown,我們要把它清掉
$gemini_response_text = trim(str_replace(['```json', '```'], '', $gemini_response_text));
// 解碼 Gemini 回傳的 JSON
$analysis_result = json_decode($gemini_response_text, true);
if ($analysis_result && is_array($analysis_result)) {
// 把分析結果存到留言的 meta data 裡,這超好用!
update_comment_meta($comment_ID, '_sentiment_analysis', $analysis_result);
}
}
這段程式碼做了幾件很重要的事:
- 掛載 Hook: `add_action(‘comment_post’, …)` 讓我們可以在使用者一留言時就執行我們的分析函式。
- 防呆機制: 檢查留言是否已通過審核,以及 API 金鑰是否存在。這是寫出強韌程式碼的基本功。
- Prompt Engineering: 這是我覺得最有趣的地方。我們不只是把留言丟給 AI,而是給了它一個非常明確的「指令」,要求它必須回傳我們指定的 JSON 格式。這可以大幅提高資料的穩定性和一致性,避免 AI 天馬行空地回答。
- wp_remote_post: 我們使用 WordPress 內建的函式來發送 API 請求,這比自己用 cURL 更安全也更標準。
- 儲存結果: `update_comment_meta()` 是關鍵!我們把 Gemini 回傳的整包 JSON 資料,直接存成這則留言的「附加資訊」。這樣一來,資料就跟著留言本身,管理起來非常方便。
第三步:讓分析結果「看得見」!改造 WordPress 後台
資料存進資料庫裡,如果沒人看得到,那就等於白做工。接下來,我們要動一點小手術,讓 WordPress 後台的留言管理頁面,直接顯示出我們的情感分析結果。
同樣地,把這段程式碼也加到 `functions.php` 裡:
// 1. 在留言列表新增一個「情感分析」的欄位
add_filter('manage_edit-comments_columns', 'roamer_add_sentiment_column');
function roamer_add_sentiment_column($columns) {
$columns['sentiment_analysis'] = '情感分析';
return $columns;
}
// 2. 告訴 WordPress 這個新欄位要顯示什麼內容
add_action('manage_comments_custom_column', 'roamer_display_sentiment_column', 10, 2);
function roamer_display_sentiment_column($column, $comment_ID) {
if ($column == 'sentiment_analysis') {
// 從 meta data 撈出我們之前存的分析結果
$analysis_result = get_comment_meta($comment_ID, '_sentiment_analysis', true);
if (empty($analysis_result) || !is_array($analysis_result)) {
echo 'N/A';
return;
}
// 根據分數設定顏色,讓結果一目了然
$score = floatval($analysis_result['score'] ?? 0);
$color = '#777'; // 中性預設色
if ($score > 0.3) {
$color = '#28a745'; // 正面
} elseif ($score < -0.3) {
$color = '#dc3545'; // 負面
}
echo '<div style="font-weight: bold; color: ' . $color . ';">';
echo esc_html($analysis_result['sentiment'] ?? 'Unknown');
echo ' (' . esc_html($score) . ')';
echo '</div>';
// 顯示摘要和關鍵字
if (!empty($analysis_result['summary'])) {
echo '<p style="font-size: 12px; margin: 5px 0 0;"><strong>摘要:</strong>' . esc_html($analysis_result['summary']) . '</p>';
}
if (!empty($analysis_result['keywords']) && is_array($analysis_result['keywords'])) {
echo '<div style="font-size: 11px; margin-top: 5px;">';
foreach ($analysis_result['keywords'] as $keyword) {
echo '<span style="background: #eee; padding: 2px 5px; border-radius: 3px; margin-right: 5px;">' . esc_html($keyword) . '</span>';
}
echo '</div>';
}
}
}
這段程式碼透過 WordPress 的 Filter 和 Action Hooks,巧妙地在不修改核心檔案的情況下,客製化了後台界面:
- `manage_edit-comments_columns` 這個 filter 讓我們可以「注入」一個新的欄位標題。
- `manage_comments_custom_column` 這個 action 則是在 WordPress 準備顯示每一列的內容時觸發,我們在這裡判斷如果是我們自訂的欄位,就去撈 `comment_meta` 的資料,然後用 HTML 把它美美地呈現出來。
現在,你去後台的留言列表看看,是不是多了一個超酷的「情感分析」欄位?紅色代表客訴警報,綠色代表客戶讚賞,摘要和關鍵字一目了然。恭喜你,你已經把你的 WordPress 網站從一個單純的內容發布系統,升級成一個初步的商業智慧平台了!
工程師的小囉嗦:上線前的最後思考
程式碼能動了,但一個專業的工程師會想得更遠。在上線服務真實客戶前,有幾點你必須考慮:
1. 成本與效能
每一次 API 呼叫都是要錢的(雖然 Gemini 目前有免費額度,但流量一大就很可觀)。而且,API 呼叫需要時間,如果直接在使用者提交留言的當下同步處理,可能會讓使用者覺得網站「卡了一下」。對於流量大的網站,最好的作法是「非同步處理」。也就是說,先把留言存起來,然後透過 WordPress Cron Job 或 Action Scheduler 這類背景排程工具,在離峰時間批次去呼叫 Gemini API。這樣既不影響使用者體驗,也可能可以做一些批次處理來節省成本。
2. 錯誤處理與日誌
我的範例程式碼中,API 呼叫失敗時只是簡單地 `return`。在正式環境中,你應該要把錯誤訊息記錄下來(log),例如 API 回傳了什麼錯誤碼、是哪個留言分析失敗了。這樣你才能在問題發生時快速定位並解決。
3. 資料隱私
記住,你正在把使用者的留言傳送到 Google 的伺服器。請確保你的隱私權政策有充分揭露這點,並且在傳送前,可以考慮過濾掉一些敏感的個人資訊(PII),例如 email、電話號碼等。
從一個簡單的想法,到一個完整的實作,再到對上線環境的周全考量,這就是工程師解決問題的完整路徑。透過 Gemini API,我們不僅僅是解決了「讀不完留言」的問題,更是為企業挖掘出以前從未看見的數據價值。這就是程式碼的魅力所在!
相關閱讀
- 客戶回饋淹沒你?教你用 Gemini API 打造 WordPress 情感分析機器人,躺著讀懂使用者心聲!
- 你的 WordPress 網站是「真 AI」還是「裝 AI」?資深工程師手把手教你串接 OpenAI API,打造會思考的智慧大腦!
- 你的 WordPress 正在大開後門嗎?資深工程師的 Webhook 設計與安全驗證終極指南
需要更進階的 AI 整合或客製化系統嗎?
今天我們打造的只是一個起點。如果你的企業需要更複雜的 AI 應用,例如整合 CRM 系統、自動觸發客服流程,或是建立更全面的商業數據儀表板,這些都需要更深入的架構設計與開發工作。浪花科技專精於將 AI 技術與 WordPress 深度整合,為企業打造真正能解決問題、提升效率的客製化系統。如果你有任何想法,或是在實作中遇到困難,歡迎隨時與我們聯繫,讓我們的專業團隊為你規劃最佳解決方案!
常見問題 (FAQ)
Q1: 為什麼要用 Gemini API,而不是其他現成的 WordPress 情感分析外掛?
A1: 現成的外掛通常功能較為制式,可能只能提供簡單的正、負、中性標籤。使用 Gemini API 的最大優勢在於「彈性」與「深度」。透過我們自己設計的 Prompt,不僅可以進行情感分析,還能同時要求 AI 產出摘要、抓取關鍵字、甚至提出建議,並以我們想要的 JSON 格式回傳。這讓我們能得到更結構化、更具商業價值的數據,而不只是一個模糊的標籤。
Q2: 把 API 金鑰放在 wp-config.php 真的安全嗎?
A2: 是的,這是目前 WordPress 生態系中最標準且相對安全的方法。wp-config.php 檔案通常會被伺服器設定為禁止透過瀏覽器直接存取,它的權限也比主題或外掛目錄下的檔案更嚴格。將金鑰定義為常數,可以讓你在程式碼中取用,但金鑰本身不會被儲存在 git 版本控制中(如果你有正確設定 .gitignore),也不會因為更換主題而遺失。相較於直接寫死在 functions.php,這是一個安全幾個等級的做法。
Q3: 每次有新留言就呼叫一次 API,會不會讓我的網站變得很慢?
A3: 這是一個非常好的問題!是的,如果你的網站留言量很大,同步呼叫 API 確實會影響使用者提交留言時的等待時間。文章中提到的「非同步處理」就是最佳解法。你可以安裝像 Action Scheduler 這類的外掛,將呼叫 API 的任務變成一個背景工作排程。這樣一來,使用者提交留言後會立刻收到完成訊息,而網站會在背景默默地處理分析任務,完全不影響前端的使用者體驗。這是從「能動」邁向「高效能」的關鍵一步。






