Title1

Title2

Title3

2-4 Webhook(e)

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
}