2017年2月14日 星期二

Line Bot 入門與應用(2) --- Line Messaging API V2 + Google Apps Script 串接 雲端機器人

如 Line 機器人 入門與應用(1) --- Line Messaging API V2 + PHP 串接 文章介紹如何串接 Line機器人,接著就用Google Apps Script來串接,這樣筆者就可以直接整合 Google 雲端文件,就先來了解如何打通這部分。
來看以下的步驟:
Step 1. 在Google雲端硬碟中新增一個名為Line Bot的Google Apps Script檔案。


Step 2. 輸入以下的程式碼存檔。
var CHANNEL_ACCESS_TOKEN = '你的Token';

//抓取IP位置
function doGet(e) {
  return ContentService.createTextOutput(UrlFetchApp.fetch("http://ip-api.com/json"));
}

//處理Line server傳進來訊息,再送出訊息到用戶端
function doPost(e) {
  var reply_token= JSON.parse(e.postData.contents).events[0].replyToken;
  if (typeof reply_token === 'undefined') {
    return;
  }
  var user_message = JSON.parse(e.postData.contents).events[0].message.text;
  
  var url = 'https://api.line.me/v2/bot/message/reply';
  UrlFetchApp.fetch(url, {
      'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN,
    },
    'method': 'post',
    'payload': JSON.stringify({
      'replyToken': reply_token,
      'messages': [{
        'type': 'text',
        'text': user_message,
      }],
    }),
  });
  return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}


Step 3. 設定部署成網路應用程式,「發佈」->「部署成網路應用程式」。

Step 4. 「具有應用程式存取權的使用者」設定成「任何人、甚至是匿名使用者」。


Step 5.  對外發佈與對外服務的權限。


Step 6 . 「點選畫面最新的程式碼」取得Line Messaging API後台所需「白名單IP」、「目前的網路應用程式網址」為「Webhook URL」這個畫面很重要。

「白名單IP」。

「Webhook URL」。

Step 7 . 設定 Line Messaging API 後台「白名單IP」、「Webhook URL」。

PS:根據筆者經驗「白名單IP」可以不填,填了反而要注意更多IP的設定,但「Webhook URL」一定要填。


到這裡已完成設定,接著進行測試。
執行結果:
修改一下上面的程式碼。
var CHANNEL_ACCESS_TOKEN = '你的Token';

//抓取IP位置
function doGet(e) {
  return ContentService.createTextOutput(UrlFetchApp.fetch("http://ip-api.com/json"));
}

//處理Line server傳進來訊息,再送出訊息到用戶端
function doPost(e) {
  var events = JSON.parse(e.postData.contents).events[0];
  var reply_token = events.replyToken;
  
  if (typeof reply_token === 'undefined') 
    return;
  
  var url = 'https://api.line.me/v2/bot/message/reply';
  
  var header = {
    'Content-Type': 'application/json; charset=UTF-8',
    'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN,
  }

  var payload = {
    'replyToken': reply_token,
    'messages' : ProcMsg(events.message)
  }
  
  var options = {
    'headers': header,
    'method': 'post',
    'payload': JSON.stringify(payload)
  }
  
  UrlFetchApp.fetch(url, options);

  return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}

function ProcMsg(message)
{
  var type = message.type;
  var retMsg;

  switch(type)
  {
    case 'text':
         retMsg = {
           'type': type,
           'text': message.text
         };
    break;
      
    case 'image':
         retMsg = {
           'type': type,
         };
    break;
      
    case 'sticker':
         retMsg = {
           'type': type,
           'packageId': message.packageId,
           'stickerId': message.stickerId            
         };
    break;
      
      
  }

  return [retMsg];
}
執行結果:

PS:這裡有個重點,就是當Apps Script程式修改後,一定要記得重新發佈「佈署為網路應用程式」,這裡有個重點一定要注意,就是在發佈的視窗中,記得將「專案版本」設定為「新增」,不然你所修改的部分將無法被執行出來,這點很重要! 重要! 重要!

參考資料: