最新消息

[公告2014/05/30] 如有需要將部落格中,任何一篇文章的程式碼使用在商業用途,請與我聯繫。

[公告2015/04/26] Line版的 iInfo程式與投資應用 群組已上線想加入的朋友們,請先查看 "入群須知" 再與我聯繫 Line : aminwhite5168,加入請告知身分與回答 "入群須知" 的問題。

[公告2018/04/22] 台北 Python + Excel VBA 金融資訊爬蟲課程,課程如網頁內容 金融資訊爬蟲班:台北班 Python 金融資訊爬蟲、EXCEL VBA 金融資訊爬蟲

[公告2019/01/08] 請注意:我再次重申,部落格文章的程式碼,是要提供各位參考與學習,一旦網頁改版請自行修改,別要求東要求西要我主動修改,你們用我寫東西賺錢了、交差了,請問有分我一杯羹嗎?既然賺錢沒分我,請問有什麼理由要求我修改,如果沒能力改,就花錢來找我上課。

[公告2019/12/01] 若各位有 Excel VBA 案子開發需求,歡迎與我聯繫,可接案處理。

[公告2020/05/22] 頁面載入速度慢,起因為部分JS來源(alexgorbatchev.com)失效導致頁面載入變慢,目前已做調整,請多見諒。

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

參考資料: