利用 Line Notify 於 Line Bot ( Django + Heroku ) 進行群組推播提醒
系列文章
- MoBot : LINE Bot 開發紀錄 ( LINE / Heroku )
- 芋香冬瓜「查」 : 專為自家需求的機器人查詢系統 App ( MoBot ver.2 )
- 利用 Line Notify 於 Line Bot ( Django + Heroku ) 進行群組推播提醒
- Line Bot 在群組中監控成員的加入與退出
What's Line Notify ?
Line Bot 的應用中,除了「被動回覆」使用者外,「主動推播」的功能在 Line Bot 中亦是不可或缺的一環。在商業應用上,主動推播的需求甚至高過於被動回覆,主動推播可以讓業主進行最即時的通知,無論是警示通知或是行銷企劃的宣傳,都會讓使用者對於 Line Bot 的依賴性更強,當然,也可以讓業主的行銷變得更精準,進而帶來後續的收益。
一定有人會問,主動推播功能不就利用帳號直接傳送給使用者就好了嗎 ? 的確,不管是以前的 Line@ 還是 Line Bot,直接利用帳號進行訊息的傳送最簡單,但當使用者人數增加到一定的程度後,訊息的費用也會是一筆可觀的費用,以下是 Line 官方帳號針對訊息的計費方式 :
官方帳號的計費方式以用量做區分,分為低、中、高用量,每月的免費訊息則數個別是 500、4000、25000 則,對於精打細算的業主來說,雖然費用不算太高,但也總是期望是否能有更好的選擇。也因此,Line Notify 便是 CP 值相對高的另一種主動推播方案。
Line Notify 我們可以視為是 Line 生態系中的一個小工具,可以讓我們利用其進行免費主動推播,在概念上,其實就相當於我們將要發送的訊息先傳至 Line Notufy 中,再由 Line Notify 來進行推播。
Line Notify 登錄步驟
Line Notify 並非 Line 的主體服務,所以我們必須前往 Line Notify 的網站 ( https://notify-bot.line.me/zh_TW/ ) 進行相關設定。
利用 Line 的帳號密碼進行登入後,網站右上角會顯示登入的 Line 帳號暱稱,點擊後會出現下拉選單 : * 個人頁面 : 顯示目前 Line Notify 的連動狀況,簡單來說就是顯示目前有哪些服務可以使用 Line Notify,另外,此頁面也提供了個人 ( 開發人員 ) 的連動權杖發行。 * 管理登錄服務 : 此頁面針對提供服務的用戶進行 Line Notify 的連動,我們要使用 Line Bot 連棟則是透過這部分來進行。 * 登出
本篇文章主要旨在介紹 Line Bot 如何與 Line Notify 進行連動,因此筆者接下來介紹的會以【管理登錄服務】來進行 Notify 的相關設定。
從登入的下拉選單中我們選擇【管理登錄服務】,之後點選【登錄服務】後會出現下圖的欄位需要填寫,每一個欄位都是必填,但除了最後的 Callback 欄位外,其餘的部分其實都簡單填寫即可,不會影響後續的操作。
Callback 網址的設定主要是參照 Line Bot 的 webhook url 再加上 /notufy
,以筆者例子來說,將 Line Bot 部署於 heroku 的話 Callback 網址就會是如下的型態 : 1
https://<LineBot App name>.herokuapp.com/notify
Access Token
當我們要利用 Line Notify 進行訊息推播前,須取得對方的 Access Token 才能進行推播,接下來的部分較為複雜,這也是筆者認為利用 Notify 中最麻煩的部分。
要取得 Access Token 我們需要以下幾個步驟來進行:
- 先進入連動用網址,利用此網址進行 Line Notify 綁定
- 取得 User Code
- 利用 user Code 來取得 User Access Token
連動網址取得
根據 Line Notify API Document的說明,我們可以利用 create_auth_link
函式來進行連動網址的生成。
1 | def create_auth_link(user_id, client_id=client_id, redirect_uri=redirect_uri): |
其中參數說明如下:
- response_type : 輸入字串
code
- client_id : 輸入 Line Notify 的 Client ID
- redirect_url : 輸入 Line Notify 的 Callback URL
- scope : 輸入字串
notify
- state : 輸入任意亂碼字串,目的是避免網路攻擊。
- response_mode : 輸入字串
from_post
User Code 取得
將生成出來的網址放入瀏覽器中進行連結,會出現一個頁面,可以選擇要連結 Notify 服務的群組
選取要連結之群組後,按下【同意並連動】之按鈕後,網址會轉換成下列型態:
1 | <Callback URL>?code=<CODE>&state=<STATE> |
並且在 Line Notify 中會即時傳送一個群組連動成功之訊息
此時我們可以將 Notufy 帳號加至欲連動之群組中。
User Access Token 取得
利用 Line Notify API 來進行 User Access Token 的取得
1 | token_get_url = 'https://notify-bot.line.me/oauth/token' |
數數說明 :
- grant_type : 輸入字串
authorization_code
- code : 擷取出
<CODE>
的部分填入 - redirect_url : 輸入 Line Notify 的 Callback URL
- client_id : 輸入 Line Notify 的 Client ID
- client_secret : 輸入 Line Notify 的 Client Secret
利用這樣的方式我們便可以取得群組的 Access Token,後續 Line Notify 便會根據這個token 來針對特定群組進行訊息的推播。
Django 的設置
在 Line Bot 側,我們需要監控 Notify 是否有推播訊息,因此在 Line Bot 程式中要加入以下程式碼 :
views.py
1 | def notify(request): |
至此,我們已經完成了所有 Line Notify 連動的相關工作。
訊息推播
我們目前已經可以取得要推播的群組之 Access Token,就可以來進行訊息的推播了,透過下面的 script 我們可以將想要傳送的訊息透過 API 進行推播 :
1 | api = 'https://notify-api.line.me/api/notify' |
之後我們便可以在該群組中收到訊息如下 :
後記
這篇文章主要是要讓讀者了解整個 Notify 推播的主要流程,熟悉這樣的流程後,其實可以有更多的應用面,例如,我們可以利用最後的 script 搭配 Django 資料庫系統將各個群組的 Access Token 進行儲存,也可以將這段 Script 寫進 API 中,在特定狀況下直接 trigger API 達到自動推播的效果。
不過正如同本文最前面提到的,提供服務的 Line Bot 在訊息中其實並沒有很明顯的辨識度,這是 Notify 在商業應用中較為可惜的一點,倘若讀者可以接受這樣的呈現方式,那麼 Line Notify 確是一個蠻不錯的推播工具的。