首頁/AI 講義/數位工具・自動化

數位工具・自動化 · Workspace+GAS+Gemini約 12 分鐘Automation

客訴情緒分析自動預警|Gemini+GAS

客訴情緒分析自動預警|Gemini+GAS — 賴家榮 AI 教學

Overview這篇教學會做出什麼

客訴和負評最怕的是「太晚看到」。這篇會帶你把評論資料放進 Google 試算表,讓 Gemini 逐筆做情緒分析,把正負面與情緒強度寫回表格並上色,一旦出現強烈負評,就用 GmailApp 立刻通知負責人,讓問題在還小的時候就被處理。

Key Takeaways

  • 用 Gemini 判斷每筆評論是正面、中性還是負面,並給出 1 到 5 的情緒強度。
  • 用 SpreadsheetApp 把分析結果寫回試算表對應欄位。
  • 依情緒自動為列上色,紅色代表要盯的負評,一眼看出重點。
  • 偵測到高強度負評時,用 GmailApp 寄出即時通知給負責人。
  • 金鑰用 PropertiesService 保管,安全不外流。
  • 整套跑在 Google 帳號內,不需伺服器、免費額度即可測試。

完成後,你只要把評論貼進試算表(或用表單自動收集),流程就會幫你判讀每一筆的情緒溫度、標好顏色、並在有人真的很不滿時主動敲你一下。負評不再淹沒在成堆資料裡。

Why為什麼值得這樣做

評論和客訴每天累積,靠人一筆筆讀完幾乎不可能,往往等到客戶公開抱怨、或流失了才發現。而真正該優先處理的,其實只是其中情緒最強烈的少數幾筆——問題在於你很難在成堆資料裡即時把它們挑出來。

Gemini 擅長理解語氣與情緒,能把「有點小失望」和「氣到要退訂」區分開來;SpreadsheetApp 讓結果直接落在你熟悉的試算表裡,GmailApp 則負責在關鍵時刻主動通知。三者合起來,等於幫你的客戶聲音裝了一個溫度計加警報器,該滅火時你會第一時間知道。

Prepare開始前的準備

Checklist

  • 一個 Google 帳號,能使用 Google 試算表與 Gmail。
  • 到 Google AI Studio 申請一組 Gemini API 金鑰(免費額度可測試)。
  • 準備一份試算表,至少有一欄放評論內容,並預留情緒與強度欄位。
  • 確認要收到警報的負責人 Email。
  • 會開啟 script.google.com 或從試算表「擴充功能 > Apps Script」進入編輯器。

Steps一步一步實作

1整理試算表欄位

動作在試算表建立欄位,例如 A 欄評論內容、B 欄情緒、C 欄強度、D 欄狀態,第一列放標題。

常見地雷程式是用欄位位置抓資料,欄位順序調整後記得同步改程式裡的欄號。

2開啟 Apps Script

動作在試算表點「擴充功能 > Apps Script」,這樣程式會自動綁定這份試算表,操作更方便。

常見地雷第一次執行會要求授權存取試算表與 Gmail,請用擁有這份表的帳號授權。

3存放 Gemini 金鑰

動作在「專案設定 > 指令碼屬性」新增 GEMINI_API_KEY,值填你的金鑰。

常見地雷不要把金鑰寫在程式碼字串裡,避免匯出或截圖時外洩。

4貼上 askGemini 函式

動作把下方第一段共用函式貼進編輯器,負責呼叫 Gemini 取回文字結果。

常見地雷確認網址中的模型是 gemini-2.5-flash,打錯會回 404。

5設計情緒分析提示詞

動作要求 Gemini 只回傳固定格式,例如「情緒|強度」,方便程式切割解析。

常見地雷務必限制輸出格式,否則 Gemini 回一段說明文字會讓解析失敗。

6逐列分析並寫回

動作用 getDataRange 讀出所有列,跳過已處理的,逐筆送 Gemini,把結果寫回 B、C 欄。

常見地雷只處理狀態為空的列,避免每次執行都重跑整張表、浪費額度。

7上色與發送警報

動作依情緒為該列背景上色,若是高強度負評,用 GmailApp.sendEmail 通知負責人。

常見地雷設定一個明確門檻(例如負面且強度 >=4 才通知),避免小抱怨也狂發信。

8測試與設定觸發

動作先手動執行 analyzeReviews 看結果,再到「觸發條件」設定每小時或每天定時跑一次。

常見地雷評論量大時分批處理,一次別塞太多列,以免撞到 API 速率限制。

下面第一段是共用的 askGemini 函式,把提示詞送給 Gemini 並回傳純文字結果。其他教學也都會用到它,直接照抄即可。

function askGemini(prompt) {
  const key = PropertiesService.getScriptProperties().getProperty('GEMINI_API_KEY');
  const url = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=' + key;
  const payload = { contents: [{ parts: [{ text: prompt }] }] };
  const res = UrlFetchApp.fetch(url, { method:'post', contentType:'application/json', payload: JSON.stringify(payload), muteHttpExceptions:true });
  return JSON.parse(res.getContentText()).candidates[0].content.parts[0].text.trim();
}

接著是主流程 analyzeReviews:讀取試算表評論、用 Gemini 分析情緒與強度、寫回並上色,遇到強烈負評就寄信通知。請把 ALERT_TO 換成你團隊的負責人信箱。

function analyzeReviews() {
  const ALERT_TO = 'manager@your-company.com'; // 收警報的負責人
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const data = sheet.getDataRange().getValues();

  // 從第 2 列開始(第 1 列是標題)
  for (let i = 1; i < data.length; i++) {
    const comment = data[i][0]; // A 欄:評論內容
    const status  = data[i][3]; // D 欄:狀態
    if (!comment || status === '已分析') continue; // 空白或處理過就跳過

    const prompt = '你是情緒分析器。請判斷下列評論的情緒與強烈程度,只回傳「情緒|強度」格式,不要多餘文字。\n'
      + '情緒為:正面 / 中性 / 負面 其中之一;強度為 1 到 5 的整數(5 最強烈)。\n'
      + '例如:負面|4。\n評論:' + comment;

    const result = askGemini(prompt);
    const parts = result.split('|');
    const mood = (parts[0] || '中性').trim();
    const score = parseInt(parts[1], 10) || 1;

    const row = i + 1; // 試算表列號從 1 起算
    sheet.getRange(row, 2).setValue(mood);   // B 欄:情緒
    sheet.getRange(row, 3).setValue(score);  // C 欄:強度
    sheet.getRange(row, 4).setValue('已分析'); // D 欄:狀態

    // 依情緒為整列上色
    let color = '#ffffff';
    if (mood === '負面') color = '#f4cccc';
    else if (mood === '正面') color = '#d9ead3';
    sheet.getRange(row, 1, 1, 4).setBackground(color);

    // 高強度負評 -> 立即通知負責人
    if (mood === '負面' && score >= 4) {
      GmailApp.sendEmail(ALERT_TO,
        '[客訴警報] 出現強烈負面評論(強度 ' + score + ')',
        '請盡快查看以下評論並跟進:\n\n' + comment);
    }
  }
}

Flow流程長怎樣

評論情緒分析與預警流程
1評論資料進入試算表
2觸發器定時啟動 analyzeReviews
3SpreadsheetApp 讀出尚未分析的列
4Gemini 回傳情緒與強度
5結果寫回 B、C 欄並標記已分析
6依情緒為整列上色
7高強度負評用 GmailApp 通知負責人

整個判讀、上色、通知都由流程自動完成。你打開試算表就能一眼看出哪幾筆是紅色負評,而真正緊急的那幾筆,早已寄到負責人信箱,不必等你翻到才發現。

Tips實用小技巧

FAQ常見問題

常見問題 FAQ

情緒分析準嗎?會不會把反諷看成正面?

反諷、雙關的確是情緒分析最難的地方,任何 AI 都可能被騙。Gemini 對一般直白的評論判斷相當準,但遇到諷刺語氣仍可能失手。建議把它當成「初步分流」,紅色負評務必人工複看;你也可以在提示詞裡提醒它注意反諷,準確度會再好一些。

為什麼要輸出「情緒|強度」這種格式?

因為程式需要固定、可預測的輸出才好解析。用一個分隔符號把兩個資訊隔開,程式一 split 就能拆出情緒與分數,非常穩定。如果讓 Gemini 自由發揮回一整段話,程式就很難可靠地抓到你要的欄位,容易出錯。

每次執行都會把整張表重跑一遍嗎?

不會,只要用「狀態」欄把處理過的列標成已分析,下次執行就會跳過它們,只處理新增的評論。這樣既省 Gemini 的額度、也跑得快。若你想重新分析某些列,把那幾列的狀態清空即可,程式下次就會再處理。

警報信會不會太多、變成疲勞轟炸?

取決於你設的門檻。教學裡預設「負面且強度 4 以上」才通知,過濾掉多數輕微抱怨,只留下真正需要立刻處理的。如果還是太多,可以把門檻提高到只通知強度 5,或改成每天彙整一封摘要信,而不是每筆都即時發。

可以自動收集評論再分析嗎?

可以。常見做法是用 Google 表單收集回饋,回覆會自動落進試算表,再讓這支程式定時分析。若評論來自外部平台,也能先匯出成 CSV 貼進試算表。重點是資料先進到試算表,後面的分析與通知流程就完全一樣,不用改。

免費額度夠用嗎?

對多數中小團隊的評論量來說,Google AI Studio 的免費額度通常足夠先跑起來。因為每筆評論只是一次短短的呼叫,成本很低。若你有大量歷史資料要一次分析,建議分批跑、避開速率限制;長期量大再考慮付費方案即可。

上色會影響原本的資料嗎?

不會,setBackground 只改儲存格的底色,不動內容。你的評論文字、日期等資料都完整保留。若你不喜歡顏色,隨時可以手動清除格式,或把程式裡上色那幾行拿掉,分析與通知功能仍能正常運作,互不影響。

中文以外的評論也能分析嗎?

可以。Gemini 支援多國語言,英文、日文等評論同樣能判斷情緒。你甚至可以在提示詞要求它「不論原文語言,一律用中文回傳情緒」,這樣試算表的結果就統一好讀。若你的客群是多語系,這個功能會特別方便。

如果 Gemini 回傳格式跑掉怎麼辦?

教學的程式已做了防呆:解析不到情緒就預設為中性、解析不到強度就給 1,不會整支中斷。這樣即使偶爾一筆格式異常,其他列仍能正常處理。你只要事後檢查那幾筆奇怪的結果、必要時重跑該列即可,不用擔心一顆老鼠屎壞了整鍋。

要多久分析一次比較好?

看你的即時性需求。若希望負評第一時間被發現,可設每小時跑一次;若評論一天才進來幾筆,設每天一次也很夠。觸發間隔越密、反應越快,但也越吃額度。建議先用每小時觀察,再依實際評論量與急迫度調整。

CTA下一步|找人帶團隊做

有了情緒溫度計加警報器,你的團隊就不會再讓重要負評埋沒在資料堆裡。如果想把這套情緒分析流程完整導入、甚至串接你現有的回饋管道,可以找專人帶著團隊一起做起來。

想讓團隊用 AI+自動化把重複工作交給流程?賴家榮提供 Workspace/GAS/Gemini 企業內訓與大學課程。

預約授課・免費諮詢

本文為賴家榮 AI 教學中心原創教學內容;想讓團隊學會用 AI,歡迎看AI 課程或預約授課 →

代表圖片來源:圖片來源:Pexels

Your turn

把 AI,變成團隊真的用得上的能力。

不論你在哪個產業,賴家榮都能帶團隊把 AI 學到真的用得上。

預約授課・免費諮詢