線上書籍

Home

GAS 開發 LineBot 自動接單系統

Youtube:教學影片 Line Bot 流程
  1. Line Bot透過 Webhook(e),將用戶訊息送至GAS
  2. 判斷「事件類型」為 messsage => 用戶傳送訊息給聊天機器人
    呼叫「lineMessage(botData)」
  3. 判斷「訊息為文字」,做出回應
    用「replyToken」與回應訊息 呼叫「lineReplyMessage(replyToken, replyMessage)」
/**============================================ Webhook(e) =============================================*/ function Webhook(e) { //---------------------------------- 記錄Line Bot 訊息 // e.postData.contents 收到的 JSON 字串 故將之轉為 JSON JSON.parse(e.postData.contents) let formData = { sn: '', timestamp: '', type: 'prog_line_bot / Webhook()', code: JSON.parse(e.postData.contents) } insert_sheet_record(formData); //---------------------------------- 記錄Line Bot 訊息 end // 傳入資訊 const botData = e.postData.contents ? JSON.parse(e.postData.contents) : {}; // 事件類型 const botType = botData .events[0].type; switch (botType) { case 'message': //用戶傳送訊息給聊天機器人 lineMessage(botData); break; case 'follow': //用戶將聊天機器人加為好友 // follow(botData); break; case 'unfollow': //用戶封鎖聊天機器人 // unfollow(botData); break; case 'join': //用戶將聊天機器人加入群組 // join(botData); break; case 'leave': //聊天機器人離開群組 // leave(botData); break; case 'postback': //當用戶表現postback的動作 break; case 'beacon': //當用戶進入或離開Line beacon的範圍 break; default: } return; } /**======================================== 用戶傳送訊息給聊天機器人 =========================================*/ function lineMessage(botData){ const botMessageType = botData.events[0].message.type; // 判斷訊息是否為文字 if(botMessageType === 'text'){ // 用戶聊天訊息內容 const botMessageText = botData.events[0].message.text; // 用戶訊息的來源 const source = botData.events[0].source; // 用戶 token const replyToken = botData.events[0].replyToken; let messages = [{ 'type': 'text', 'text': botMessageText }] lineReplyMessage(replyToken, messages) } } /*============================================ Line Bot 回覆 ============================================*/ function lineReplyMessage(replyToken, replyMessage){ //-----------------------------------回傳訊息給line 並傳送給使用者 let url = 'https://api.line.me/v2/bot/message/reply'; try { UrlFetchApp.fetch(url, { 'headers': { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN, }, 'method': 'post', 'payload': JSON.stringify({ 'replyToken': replyToken, 'messages': replyMessage }), }); }catch(e){ //---------------------------------- 記錄Line Bot 回覆 錯誤訊息 let formData = { sn: '', timestamp: '', type: 'Line Bot 回覆 錯誤訊息', code: e } insert_sheet_record(formData); //---------------------------------- 記錄Line Bot 回覆 錯誤訊息 end } //---------------------------------------回傳訊息給line 並傳送給使用者 end }