自建 LINE Notify 訊息通知

之前我們有用過 IFTTT 來實現讓 LINE 發送通知的功能,這篇將要透過 Google Apps Script 搭配 LINE Notify,實作出一個類似 IFTTT 的訊息通知服務,最後甚至還可以透過 LINE Notify 發送圖片或貼圖表情。

延伸閱讀:IFTTT 發送 LINE 訊息通知

申請 LINE Notify 權杖

打開 LINE Notify 的網站 ( https://notify-bot.line.me/zh_TW/ ),使用自己的 LINE 帳號登入。

登入後滑鼠移至上方個人帳號,選擇「個人頁面」。

在個人頁面可以發行「權杖」,權杖的作用在於讓「連動的服務」可以透過 LINE Notify 發送訊息通知,而發行後的權杖與其名稱,就會出現在上方的清單中,如果你之前有申請過像是 IFTTT 的連動通知,就會發現上方出現 IFTTT 的服務。

點選「發行權杖」,指定權杖名稱 ( 傳送通知訊息時所顯示的名稱 ),以及選擇是要一對一接收,或是讓群組也可以接收通知。

點選「發行」,會出現一段權杖代碼,這段代碼「只會出現一次」,複製這段代碼,先找個地方貼上並儲存這段代碼,就可以點選下方按鈕「關閉」。

完成後就會發現連動的服務裡,出現了我們自訂的服務。

同時,LINE 訊息裡也會收到 LINE Notify 發出「已發行個人存取權杖」的訊息,到這一步 LINE Notify 已經設定完成,再來看看如何發送訊息。

使用 Google Apps Script 傳送通知

由於 LINE Notify 無法直接透過「純」網頁前端的方式來發送訊息,所以必須在借重 Google Apps Script 簡易後端的能力來傳送通知,進入 Google 雲端硬碟,新增一個 Google Apps Script。

延伸閱讀:簡易後端實作 ( Google Apps Script )

重新命名 Apps Script 專案名稱,並將 myFunction 函式名稱改為 doPost 或 doGet ( 名稱一定要是 doPost 或 doGet,如此一來才能透過外部 POST 或 GET 的方法傳值給 Apps Script )。

將程式碼修改為下面這段,你的權杖的位置填入剛剛產生的權杖,在payload裡放入一個物件,message的屬性就是我們要發出的訊息。( 注意,Bearer 後方帶有一個空格別刪除 )

function doPost() {
    UrlFetchApp.fetch('https://notify-api.line.me/api/notify', {
        'headers': {
           'Authorization': 'Bearer ' + '你的權杖',
        },
        'method': 'post',
        'payload': {
            'message':'測試一下!'
        }
    });
}

點選上方三角形的執行鈕,因為我們的 Apps Script 會連到外部服務,所以一開始會跳出存取權限的視窗,換句話說也就是同意外部服務使用你 Google 的帳號執行這個 Apps Script,這裡點選允許就行了。

允許後,再點選一次上方三角形的執行鈕,應該就會收到 LINE Notify 發出的訊息囉。

LINE Notify 也可以發送表情貼圖,語法只要將payload內容稍做修改,寫入「貼圖包類別號碼 stickerPackageId」和「貼圖號碼 stickerId」就能發送貼圖,不過有別於 LINE Bot 可以單獨發送貼圖,LINE Notify 必須具備 message,所以不能把 message 拿掉

貼圖類別參考:LINE Notify 預設貼圖清單

function doPost() {
    UrlFetchApp.fetch('https://notify-api.line.me/api/notify', {
        'headers': {
            'Authorization': 'Bearer ' + '你的權杖',
        },
        'method': 'post',
        'payload': {
            'message':'測試一下!',
            'stickerPackageId':'1',
            'stickerId':'2'
        }
    });
}

如果要傳送圖片也很簡單,寫入「圖片預覽縮圖網址」以及「圖片網址」就能發送圖片,但圖片大小有限制,預覽縮圖 240x240,圖片則是 1024x1024,格式須為 jpg。

function doPost() {
    UrlFetchApp.fetch('https://notify-api.line.me/api/notify', {
        'headers': {
            'Authorization': 'Bearer ' + '你的權杖',
        },
        'method': 'post',
        'payload': {
            'message':'測試一下!',
            'imageThumbnail':'預覽縮圖網址',
            'imageFullsize':'圖片網址'
        }
    });
}

做到這個步驟,應該都已經能夠輕鬆傳送訊息、貼圖和圖片了,接著要來看看如何透過「網頁」傳送訊息。

網頁傳送 LINE Notify 訊息

如果要透過網頁傳送訊息,基本原理其實是網頁發送 http request 給 Google Apps Script,然後再由 Apps Script 執行發送 LINE Notify 訊息的指令,因此我們要稍微改寫 Apps Script,一開始增加一個 e 的參數,裡頭包含要傳送出去的 msg 訊息。

function doPost(e) {

    var param = e.parameter;
    var msg = param.msg;

    UrlFetchApp.fetch('https://notify-api.line.me/api/notify', {
        'headers': {
            'Authorization': 'Bearer ' + '你的權杖',
        },
        'method': 'post',
        'payload': {
            'message':msg
        }
    });
}

修改程式之後,點選上方選單「發佈」,將 Apps Script 部署為網路應用程式。

每次有修改的部署都選擇「新增」,將應用程式執行為「我」,具有應用程式存取權的使用者選擇「任何人」。

部署後就會得到這個應用程式的網址,這個網址待會會用到。

好了,到這一步終於要來寫網頁了,打開網頁編輯器,先載入 jQuery,就能使用.post來發訊息

$.post('你部署的應用程式網址',
    {msg:'網頁發訊息'},
    function(e){
        console.log(e);
});

完成後執行網頁,就能看到 LINE 收到網頁發過來的訊息囉!

小結

LINE Notify 其實是相當方便的一個服務,可以串接在很多前端或後端的應用裡,甚至也可以搭配物聯網的服務,做到類似陌生人開門就開通知、太亮了就發通知...等的應用,對於 LINE 的重度使用者來說應該不失為一個好管道,不過如果單純只是要通知,也滿推薦 Slack 的服務,畢竟 LINE 還是比較偏向個人用戶,Slack 則是針對公司團體。

延伸閱讀:Slack 自動訊息通知

相關參考:LINE Notify API Document

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