前陣子,我開啟了一個新的Side Project,嘗試使用Flutter和大型語言模型開發我的個人AI助理的手機App,其中一項功能是監控系統。當某個程式出現錯誤時,我希望可以透過Firebase發出Alert,並在iPhone上接收推播通知。不幸的是,我發現我必須先付99美元的年費取得Apple開發者帳號,才能使用Apple推播通知服務(APNs, Apple Push Notification service)。我不是很想付這筆錢,所以試著尋找其他替代方案。後來轉念一想,既然我每天都會看LINE,那就透過LINE Notify來發通知吧!
往下滾動,找到不是很顯眼的Add Service。
有兩點需要注意。首先,service name會顯示在訊息前面,挑一個你喜歡的好名字。其次,Callback URL 稍後會用到,但你不必在你的伺服器上建立頁面或做任何設定。
現在你成功拿到client id和client secret了,這兩個資訊後面會用到。
修改以下的網址。這個步驟對應到文件中authorize的部份,如擷圖所示。順帶一提,根據文件,state 參數是用來應對 CSRF 攻擊的。它不會顯示在通知中。
https://notify-bot.line.me/oauth/authorize?response_type=code&client_id={client_id}&redirect_uri={your_callback_url}&scope=notify&state={your_custom_state}
在一些舊版的教學中,當點擊「Agree and connect」後會彈出一個視窗,顯示 access_token ,但現在流程改變了。點擊後會被轉址到以下的網址,複製其中的code。
{your_callback_url}?code={generated_code}&state={your_state}
def get_token(redirect_uri, client_id, secret, code):
url = 'https://notify-bot.line.me/oauth/token'
payload = {
'grant_type': 'authorization_code',
'code': code,
'redirect_uri': redirect_uri,
'client_id': client_id,
'client_secret': secret
}
r = requests.post(url, params=payload)
return r.text
如果成功,你會收到類似這樣的回應:
{\n "status" : 200,\n "message" : "access_token is issued",\n "access_token" : {your_access_token}\n}
要發送通知到群組前,必須先邀請 LINE Notify加入群組。你可以直接搜尋LINE Notify,或是點擊連結。
現在你可以使用這個function來發送通知了。順帶一提,LINE Notify API 也可以發送網址,方法和發送文字一模模一樣樣。
def send_line_notify(message, access_token):
url = 'https://notify-api.line.me/api/notify'
headers = {
'Authorization': f'Bearer {access_token}'
}
payload = {'message': message}
response = requests.post(url, headers=headers, params=payload)
return response
這份Python code同步發佈在 GitHub上。