2026年10月28日 星期三

進階 LINE 智能客服(7):整合 Google Calendar,打造自動化預約系統

經過前面幾篇的實作,我們的 LINE 機器人已經具備了精美的卡片選單與 AI 對話能力。今天,我們要來挑戰一個非常實用的商業應用場景:自動化預約系統。透過 Google Apps Script (GAS) 強大的生態系,我們可以讓 LINE 機器人直接與 Google Calendar (日曆) 連動,讓客戶或學生在 LINE 上輸入時間,系統自動幫你把行程登記到行事曆上!

1. 預約系統的運作流程

我們將設計一個簡單的指令格式,例如使用者輸入:預約 2026-10-30 14:00 專案諮詢。後端程式會擷取這段文字中的時間與事項,接著呼叫 Google Calendar 服務建立行程,最後回報預約成功的訊息給使用者。

LINE 使用者傳送指令 預約 14:00... GAS 後端 解析時間與字串 Google 日曆 新增 Event 行程 30 1. Webhook 4. 回傳確認訊息 2. 寫入行程 3. 成功狀態
▲ LINE 整合 Google Calendar 系統資料流

2. 取得 Google 日曆 ID

為了讓 GAS 知道要把行程寫在哪個日曆中,我們需要先取得 日曆 ID:

  1. 打開網頁版 Google 日曆,在左側找到你想用來接收預約的日曆。
  2. 點擊該日曆旁邊的「⋮」選擇「設定和共用」。
  3. 向下滑動到「整合日曆」區塊,複製 日曆 ID(通常是你的 Gmail 地址,或是一串 @group.calendar.google.com 結尾的字串)。

3. 修改 GAS 程式碼處理預約邏輯

接下來,我們在 doPost 中加入字串解析邏輯,並使用 CalendarApp 服務來建立行程。為求簡化,我們假設預約時間預設為 1 小時。

✏️ 自動寫入行事曆實作範例

function doPost(e) {
  var channelToken = "你的_LINE_CHANNEL_ACCESS_TOKEN";
  var msg = JSON.parse(e.postData.contents);
  var replyToken = msg.events[0].replyToken;
  var userMessage = msg.events[0].message.text.trim();
  
  var replyText = "";

  // 判斷是否為「預約」指令 (格式:預約 YYYY-MM-DD HH:mm 預約事項)
  if (userMessage.startsWith("預約")) {
    replyText = createCalendarEvent(userMessage);
  } else {
    replyText = "若要預約諮詢,請輸入格式:\n「預約 2026-10-30 14:00 專案討論」";
  }
  
  // 回傳訊息給 LINE
  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);
}

// === 建立 Google Calendar 行程函式 ===
function createCalendarEvent(message) {
  try {
    var calendarId = "你的_日曆_ID"; 
    var cal = CalendarApp.getCalendarById(calendarId);
    
    // 切割字串:["預約", "2026-10-30", "14:00", "專案討論"]
    var parts = message.split(" ");
    
    if (parts.length < 4) {
      return "格式錯誤 ❌\n請確保指令包含日期、時間與事項,中間以半形空白分隔。";
    }
    
    var datePart = parts[1]; // 2026-10-30
    var timePart = parts[2]; // 14:00
    var title = "LINE預約:" + parts[3]; 
    
    // 組合起始時間
    var startTimeString = datePart + "T" + timePart + ":00";
    var startTime = new Date(startTimeString);
    
    // 預設行程長度為 1 小時
    var endTime = new Date(startTime.getTime() + (60 * 60 * 1000));
    
    // 寫入 Google Calendar
    cal.createEvent(title, startTime, endTime);
    
    return "預約成功!✅\n已為您登記行程:" + title + "\n時間:" + datePart + " " + timePart;
    
  } catch (err) {
    return "預約失敗,請確認您的時間格式是否正確 (YYYY-MM-DD HH:mm)。";
  }
}

4. 測試與應用場景

儲存並重新部署後,在 LINE 視窗中輸入:預約 2026-11-01 10:00 系統開發諮詢,幾秒後你就會在自己的 Google 日曆上看到這個行程完美出現!這個功能不僅可以結合在工作室的接案流程中,也可以作為你在學校管理與學生面談時間的絕佳工具。

沒有留言:

張貼留言

熱門文章