LINE BOT Push Message 主動通知
在前面的文章裡,提到可以透過 LINE Notify 主動發送訊息通知,那麼功能更強大的 LINE Bot 能做到一樣的事情嗎?當然可以,既然可以和機器人聊天,也可以要求機器人透過 Push Message 的方法,主動發送訊息通知。
實作 Psuh Message 必備知識導讀:實作 LINE 聊天機器人
延伸閱讀:自建 LINE Notify 訊息通知
使用 Push Message
要使用 Push Message 之前,必須先建立自己的 LINE Bot,因為我在 實作 LINE 聊天機器人 這篇文章裡已經有做了很完整的介紹,所以在這邊就直接略過這一段,就先跳到機器人已經建立好之後的過程。
如果你已經建立了 LINE 機器人,請登入並進入機器人的控制台內,這裡會需要裡頭的兩個資訊:Channel access token 和 Your user ID ( 在最下方 ),Channel access token 基本上只要是聊天機器人都一定需要。
![]()
Your user ID 表示要把訊息傳給誰,因為 Push Message 不像聊天一般,可以透過 reply token 知道要傳給哪個對象,所以必須指定 user ID。
![]()
透過 LINE Push Message Reference 可以知道,Request headers 和聊天機器人、LINE Notify 是同樣的寫法,而 Request body 必須包含 to 哪個 user ID 以及傳送的 message,傳送的 message 可以是 LINE 所指定的物件 ( 文字、圖片、樣版、影片或表情貼圖...等 ),原則上使用應該滿簡單的,接著就一樣透過 Google Apps Script 來傳訊息。
![]()
使用 Google Apps Script 傳送訊息
進入 Google 雲端硬碟,新增一個 Google Apps Script,重新命名 Apps Script 專案名稱,並將專案程式碼改為下面這些,比較需要注意的是 payload 使用JSON.stringify轉換為 JSON 格式送出,裡頭第二層 messages 需要參照 LINE 的訊息物件格式撰寫
function doPost() {
var CHANNEL_ACCESS_TOKEN = '你的 Channel access token';
var url = 'https://api.line.me/v2/bot/message/push';
UrlFetchApp.fetch(url, {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN,
},
'method': 'post',
'payload': JSON.stringify({
'to': '你的 user ID',
'messages': [{
type:'text',
text:'哈囉我是 Push Message!'
}]
}),
});
}
點選上方三角形的執行鈕,因為我們的 Apps Script 會連到外部服務,所以一開始會跳出存取權限的視窗,換句話說也就是同意外部服務使用你 Google 的帳號執行這個 Apps Script,這裡點選允許,允許後,再點選一次上方三角形的執行鈕,應該就會收到 LINE Bot 發出的訊息。
![]()
傳送貼圖的 messages 格式如下,packageId 為「貼圖包類別號碼」,stickerId 為「貼圖號碼」,貼圖類別可以參考:LINE Notify 預設貼圖清單,完成後再執行一次程式,就會收到 LINE Bot 發出的貼圖表情。
'messages': [{
type:'sticker',
packageId:'1',
stickerId:'2'
}]
![]()
至於其他像圖片、影片、聲音和地點,基本上都和傳送表情貼圖差不多,可以自行前往 LINE 的訊息物件格式查看,在這邊就不一一描述,接下來要繼續透過網頁,讓 LINE Bot 傳送訊息給自己。
網頁呼叫 LINE Bot 傳送訊息
如果要透過網頁傳送訊息,基本原理其實是網頁發送 http request 給 Google Apps Script,然後再由 Apps Script 執行發送 LINE Bot 訊息的指令,因此我們要稍微改寫 Apps Script,一開始增加一個 e 的參數,裡頭包含要傳送出去的 msg 訊息,最後送出訊息,再回傳一個 response 給網頁。
function doPost(e) {
var param = e.parameter;
var msg = param.msg;
var CHANNEL_ACCESS_TOKEN = '你的 Channel access token';
var url = 'https://api.line.me/v2/bot/message/push';
UrlFetchApp.fetch(url, {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN,
},
'method': 'post',
'payload': JSON.stringify({
'to': '你的 user ID',
'messages': [{
type:'text',
text:msg
}]
}),
});
return ContentService.createTextOutput(msg);
}
修改程式之後,點選上方選單「發佈」,將 Apps Script 部署為網路應用程式。
![]()
每次有修改的部署都選擇「新增」,將應用程式執行為「我」,具有應用程式存取權的使用者選擇「任何人」。
![]()
部署後就會得到這個應用程式的網址,這個網址待會會用到。
![]()
好了,到這一步終於要來寫網頁了,打開網頁編輯器,先載入 jQuery,就能使用.post來發訊息
$.post('你部署的應用程式網址',
{msg:'網頁發訊息'},
function(e){
console.log(e);
});
完成後執行網頁,就能看到 LINE 收到網頁發過來的訊息囉!
![]()
小結
其實 Push Message 是很容易的,不過如果只是想單純傳送訊息通知,使用 LINE Notify 搞不好更簡單,但畢竟 LINE Bot 不單純只有傳送訊息的功能,之後會再找篇幅,繼續介紹更多相關應用。