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 tokenYour 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 不單純只有傳送訊息的功能,之後會再找篇幅,繼續介紹更多相關應用。

有興趣瞧瞧其他新文章嗎?