實作 LINE 聊天機器人 ( Google Apps Script )

 建立 LINE Messaging API

LINE developers:https://developers.line.me/


(1)點選右上角log in 登入

(2)點選中間  console








(3)點選左邊清單 Providers  → Create

 
(4)創建 Providers 名稱



(5)選擇使用的類型
這裡我們聊天機器人選擇 create a messaging API channel



(6)依照項目填寫

channel icon                           LINE上的頭橡
channel name                         LINE上的名稱
channel description                沒太大用途
Category                                機器人類別
Subcategory                           機器人子類別

其他可留空

勾選同意 > 創建







創建完畢

免費方案 一個月最多發送500則訊息

Basic settings        會有此api基本資料,部分資料可修改
Messaging API     這邊會有串接使用的重要token






點選 Messaging API
內有QR code  拿出手機掃碼就可以加此機器人為好友

Webhook URL 串接( Google Apps Script )會使用到,因此 打開 Use webhook 







複製 Channel access token 程式碼呼叫機器人使用


 建立 Google Apps Script
Google Apps Script Dashboard:https://script.google.com/

(1)點選新增專案

Google Apps Script 有限定名稱格式為 doGet 或 doPost,因為我們的程式會向 LINE 發送 HTTP POST request,所以這裡要將 myFunctions 名稱改為 doPost,後方接著一個 e 的參數。因為e.parameters需包含指定的 key 與 value,所以這裡使用e.postData.contents來獲取完成傳送的內容,但因為獲取的訊息內容為「字串」,所以再用JSON.parse來轉換資料格式。

下面的例子使用console.log來印出收到的訊息,CHANNEL_ACCESS_TOKEN 是剛剛我們產生的那組金鑰。


以下進行範例

function doPost(e) {
    var CHANNEL_ACCESS_TOKEN = '你的 Channel access token';
  var msgJSON.parse(e.postData.contents);
  console.log(msg);
}





你的 Channel access token = 剛剛在line所複製的Channel access token




請以"新增"進行
選取類型(網頁應用程式)






完成後

複製產生出來的網址(貼至LINE developers:https://developers.line.me/)




已經能夠順利接收 LINE 訊息後,接著就是要來發送 LINE 訊息,首先看到 LINE Messaging API 的 reference,裏頭 Send Reply Message 有針對回傳的訊息格式做了定義,因此我們也必須遵照定義回傳。

Send reply message:


以下是LINE範例檔案(更新完畢請部屬請從新新增)
---------範例一-------

function doPost(e) {

  var CHANNEL_ACCESS_TOKEN = '你的 Channel access token';
  var msg = JSON.parse(e.postData.contents);
  console.log(msg);

  // 取出 replayToken 和發送的訊息文字
  var replyToken = msg.events[0].replyToken;
  var userMessage = msg.events[0].message.text;

  if (typeof replyToken === 'undefined') {
    return;
  }

  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': replyToken,
      'messages': [{
        'type': 'text',
        'text': userMessage+' ( google )',
      }],
    }),
  });
}

完成範例






---------範例二-------youtube搜尋關鍵字 前3則影片網址

function doPost(e) {
  var CHANNEL_ACCESS_TOKEN = '你的機器人TOKEN';
  
  var msg = JSON.parse(e.postData.contents);
  console.log(msg);


  // 取出 replayToken 和發送的訊息文字
  var replyToken = msg.events[0].replyToken;
  var userMessage = msg.events[0].message.text;
 
  //var id = '!yt 終結孤單 五月天';
  
  if (typeof replyToken === 'undefined') {
    return;
  }

  var star_bot = userMessage.match("!yt");


  if(userMessage == '!help'){
    msg = '輸入格式\n!yt xxx 自動再Youtube 上進行搜尋xxx';
    sendtext(CHANNEL_ACCESS_TOKEN,replyToken,msg);
  }else if(star_bot !=null){
    search = userMessage.slice(4);
    hash = searchByKeyword(CHANNEL_ACCESS_TOKEN,replyToken,search);
 }else{
     hash = 'No Data Found!';
  }

}

//youtube 關鍵字搜尋影片
function searchByKeyword(CHANNEL_ACCESS_TOKEN,replyToken,search) {
  var msg;
  var results = YouTube.Search.list('id,snippet', {q: search, maxResults: 3});
  j = 1;

  for(var i in results.items) {
    var item = results.items[i];
    msg = msg + '[第'+ j +'筆]' + item.snippet.title + ': https://www.youtube.com/watch?v=' + item.id.videoId + '\n\n';
    j++;
  }
  sendtext(CHANNEL_ACCESS_TOKEN,replyToken,msg);
}
 
//發送文字檔
function sendtext(CHANNEL_ACCESS_TOKEN,replyToken,msg) {

  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': replyToken,
      'messages': [{
        'type': 'text',
        'text': msg,
      }],
    }),
  });
}




留言

這個網誌中的熱門文章

LDAP log紀錄

LDAP 存取控制 slapd.conf(伺服器設定檔)

透過python爬蟲, LINE Notify 通知 (股票) win10排程