2026年10月25日 星期日

進階 LINE 智能客服(3):加入關鍵字邏輯判斷,讓機器人聰明回覆


在先前的教學中,我們成功讓 LINE 客服機器人學會了「回覆訊息」與「將對話自動記錄到 Google 試算表」。然而,一個實用的客服系統,必須要能針對客戶的具體問題提供解答。今天,我們就要為機器人加上「大腦」,透過條件邏輯判斷 (Conditional Logic),讓它能根據使用者的特定關鍵字(例如:營業時間、運費、地址)自動給出不同的回覆!

1. 關鍵字回覆的運作原理

當使用者在 LINE 發送訊息後,我們的 Google Apps Script (GAS) 後端會收到這串文字。接下來,我們會透過程式碼中的 if-else 分支或 switch 陳述式,檢查這串文字中是否包含特定的「關鍵字」:

  • 比對成功: 如果訊息包含「營業時間」,就回覆「我們的營業時間是...」。
  • 模糊比對: 除了精準比對,我們也可以利用 JavaScript 的 indexOf() 或 includes() 方法,只要使用者的話裡含有關鍵字(例如:「請問運費怎麼算」含有「運費」),就能觸發相對應的回覆。
  • 未知問題(預設回覆): 如果比對不到任何關鍵字,則轉為親切的預設回覆,引導使用者或通知人工客服。

2. 在 GAS 中加入邏輯判斷

我們直接在 doPost(e) 函式中,加入 switch-case 或 if-else 判斷邏輯。為了讓程式架構更清晰,我們可以將「決定回覆內容」的邏輯獨立拆出一個 function。

✏️ 關鍵字判斷與自動回覆實作範例

將你原本的 GAS 程式碼更新為以下版本:

function doPost(e) {
  // 1. 基本設定
  var channelToken = "你的_LINE_CHANNEL_ACCESS_TOKEN";
  var sheetId = "你的_GOOGLE_SHEET_ID";
  
  // 2. 解析 LINE 傳來的訊息
  var msg = JSON.parse(e.postData.contents);
  var replyToken = msg.events[0].replyToken;
  var userId = msg.events[0].source.userId;
  var userMessage = msg.events[0].message.text;
  
  // 取得現在時間並格式化
  var currentTime = Utilities.formatDate(new Date(), "Asia/Taipei", "yyyy-MM-dd HH:mm:ss");
  
  // 3. 將對話紀錄寫入 Google 試算表
  var sheet = SpreadsheetApp.openById(sheetId).getSheets()[0];
  sheet.appendRow([currentTime, userId, userMessage]);
  
  // 4. 關鍵字邏輯判斷 (根據 userMessage 決定 replyText)
  var replyText = getBotResponse(userMessage);
  
  // 5. 回覆使用者
  var url = "https://api.line.me/v2/bot/message/reply";
  var options = {
    "method": "post",
    "headers": {
      "Content-Type": "application/json",
      "Authorization": "Bearer " + channelToken
    },
    "payload": JSON.stringify({
      "replyToken": replyToken,
      "messages": [{
        "type": "text",
        "text": replyText
      }]
    })
  };
  
  // 執行回覆
  UrlFetchApp.fetch(url, options);
}

// 根據關鍵字,決定回覆內容的邏輯
function getBotResponse(message) {
  // 將文字轉為小寫或去除空白,增加比對成功率
  var msg = message.trim();
  
  if (msg.includes("營業時間") || msg.includes("幾點開")) {
    return "⏰ 我們的營業時間為:\n週一至週五 09:00 - 18:00\n(例假日及國定假日休息)。";
  } 
  else if (msg.includes("運費") || msg.includes("宅配") || msg.includes("免運")) {
    return "📦 【運費說明】\n全館單筆消費滿 $1,500 即享免運優惠!\n未滿額之訂單,宅配運費為 $100,超商取貨為 $60。";
  } 
  else if (msg.includes("地址") || msg.includes("在哪")) {
    return "📍 我們的辦公室地址在:\n新北市新莊區新興街66巷7號2樓\n歡迎在營業時間內前來!";
  } 
  else if (msg.includes("專人") || msg.includes("客服") || msg.includes("電話")) {
    return "☎️ 需要專人協助嗎?\n您可以直接撥打我們的服務專線:02-89927153\n或在此留下您的聯絡電話,我們將會盡快與您聯繫!";
  } 
  else {
    // 預設回覆
    return "您好!已收到您的訊息:『" + message + "』。\n\n💡 常見問題請輸入:\n👉 營業時間\n👉 運費\n👉 地址\n👉 專人客服\n\n若有其他問題,請耐心等候,我們將盡快由專人為您回覆!";
  }
}

4. 測試與微調

在完成程式部署 (Deploy) 並更新 Webhook 後,你可以打開手機 LINE,發送「你們幾點開門?」或「免運門檻是多少?」,測試機器人是否能正確辨識並回覆。當比對條件增加時,建議將 getBotResponse 的邏輯獨立維護,甚至可以從 Google 試算表中動態讀取關鍵字與對話庫,讓維護變得更加方便!

沒有留言:

張貼留言

熱門文章