技術筆記-Line Messaging Api 的基本用法

更新於 發佈於 閱讀時間約 9 分鐘

Line Notify 即將停止服務,隨著時間越來越緊迫,隱約聽到許多人在哀嚎。印象中有許多廠商,把 Line Notify 用得淋漓盡致,甚至可以一個客戶建一個群組,把許多客製化服務都用程式管理的井井有條,得到很好的滿意度。但這種好康,無限免費的即時訊息,沒有了,時間就在 2025/3/31!公告在此

raw-image

之前試著 測試 Discord 的訊息功能,但用了幾個月後,發現它的「延遲」問題有點嚴重,有的甚至到半小時以上!因此,還是回來研究一下 Line 的解決方案。官方建議是用 Messaging Api,高手們請直接轉檯官方文件,本人只是把最基本的功能測通,做一些紀錄。

準備工作

首先必須建立一個發訊息的身份。從前用 Line Notify 發訊息,其身份是一個統一的系統角色,藉著把這位 LINE Notify 邀進各個群組,就可以製作各種應用,但將來已經不行了,這個圖示應該在三月底後成為絕響了吧:

raw-image


以 Line 的服務架構看來,「Provider」是最底層的單位,管理的介面稱為 Line Developer Console,先建立一個 Provider,代表一個提供服務的公司,組織,或開發者:

raw-image


在 Provider 裡面,建立 Channel,從以下得知還有好幾種 Channel,我們選 Messaging API。

raw-image


欲建立 Messaging API Channel,系統提示,它必須依附於一個「官方帳號」而存在,從另一個介面建立,進去後發現要填的東西有點多,因此不能很浮濫的建立:

raw-image


建立官方帳號時,必須設定 Provider,之後就不能改了。進到官方帳號的管理介面,發現裡面的功能非常豐富:

raw-image

這些功能主要是提供給「業主」經營管理使用的,身為「開發者」還是回到 developer console,完成程式呼叫的最重要設定:access token,設定位置在此頁的最下方:

raw-image

以上設定就告一段落,拿著這個 access token,就可以開始寫程式了。

廣播訊息(broadcast)

原始的 Messaging API 以 Web Endpoint 方式提供,雖然在官方與社群也提供了許多 sdk,但我想原始 api 已經設計的非常好用了,不需要給自己增加一個 dependency,就從最原始和單純的架構開始,只用 python requests 套件來實作:

# 功能一:發送廣播訊息
import requests
import json

token = "...xxxyyy"
url = "https://api.line.me/v2/bot/message/broadcast"

headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {token}"
}

data = {
"messages": [
{ "type": "text",
"text": 'test from python'
} ]
}

res = requests.post(url, headers = headers, data = json.dumps(data))
if res.status_code in (200, 204):
print(f"Request fulfilled with response: {res.text}")
else:
print(f"Request failed with response: {res.status_code}-{res.text}")

以上程式會發所給「所有加官方帳號為好友的人」,這樣已經可以達到通知自己的目的了。與 Line Notify 的邏輯不同,因為有此官方帳號的群組,也不會收到訊息,對訊息對象的控制比較精確;這對官方非常有好處,因為「計費」也更精確了,可以依據傳送的則數計算費用。

特定對象(push)

與廣播不同之處,在於多一個參數「to」,必須填入 User ID:

import requests
url = "https://api.line.me/v2/bot/message/push"

headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {token}"
}

data = {
"to": "...xxxyyy02f54e1",
"messages": [
{ "type": "text",
"text": 'personal msg from python'
} ]
}

res = requests.post(url, headers = headers, data = json.dumps(data))
if res.status_code in (200, 204):
print(f"Request fulfilled with response: {res.text}")
else:
print(f"Request failed with response: {res.status_code}-{res.text}")

注意這個 User ID 並不是在 Line App 中看到的 Line ID,無法以簡單的方法取得,所以想要傳給一個非特定對象是很難的。正常取得 User ID 的程序,必須自己寫一個 web api,實際部署到雲端,取得正式服務的網址,然後設定此官方帳號的 webhook。當特定 User 傳送訊息給官方帳號,系統會呼叫 webhook 所設定的網址,然後在自己的程式中接收 Line 系統傳來得參數,解析其中欄位,才能得到那位對象的 User ID。夠麻煩吧!


那有沒有簡單測試的方法?可以的,可在 Line Developer Console 查到自己的 User ID,除此以外,無處可以取得:

raw-image

至於傳給其他人,比如說某位加入官方帳號為好友的人,就沒那麼容易了,必須先搞定以下部分:接收並解析訊息。之後才能夠處理「回覆」,或是任何智能運算的部分。

接收訊息(webhook)

這是藉著 Webhook 達成的,當事件發生,Line 系統會把資訊傳送到指定的 Webhook,所以我們必須實作並部署一個 Web Api Service,我用 flask 做一個最簡單的 api:

@app.route("/linebot", methods=['POST'])
def linebot():
try:
data = request.get_json()
if not data:
return {"error": "Invalid JSON"}, 400
crawlService.notify(f'{data}')
return {"message": "Data received", "data": data}
except Exception as e:
return {"error": str(e)}, 500

以上是把 Line 系統發送的資料內容,完整的轉傳出去,可以利用本文稍早提到的 broadcast or push 方式,或暫時還是借用尚未下線的 notify 機制,解開並觀察 post 物件。在 local 測試成功後,必須部署到雲端,把正式網址設定到 Webhook 欄位:

raw-image

如此 linebot 的服務就正式上線了,以下就是請朋友隨便傳一個訊息給我的官方帳號,系統轉傳給我的資料:

raw-image

將這段 json 字串 decode 後,顯示出清晰表達的資訊,其中 userId 終於現身了:

raw-image

有了 userId 就可以用 push 的方式,傳送一對一的訊息了。當然也可以用 reply 的方式,Line 官方尚有許多功能可以使用,使用方法都大同小異,就不一一展開了:

raw-image


以上已經大致掌握了 Line Messaging Api 的主要用法,四月之後就非用不可了,只是要省著點用,因為免費額度只有每月 200 則而已。


Newman 2025/3/1


導覽頁:紐曼的技術筆記-索引

參考連結:




avatar-img
24會員
110內容數
漫步是一種境界。
留言
avatar-img
留言分享你的想法!

































































newman的沙龍 的其他內容
「通知」這種功能現在已經非常稀鬆平常了,三不五時手機跳出訊息或聲音,不勝其擾!但不要因噎廢食,對於「真正重要的事件」,即時通知還是非常必需的。像是刷卡通知,應該沒有人會關掉吧!所以對於一個交易系統而言,牽涉到金錢的進出,通知功能是一定要的啦。有 line notify 相伴的年代,輕鬆愉快:
如題,這應該是很容易犯的錯誤,據說 git 能使時光倒流!它就是這麼厲害,所以光是刪除檔案重新 commit 是沒用的,必須執行以下步驟: # 1. 將檔案移出納管範圍,但注意加 --cached 就不會實體刪除檔案
這一趟越走越興奮的旅程,從 測試富邦新一代 api 開始,很自然的開始 用 python 造出自己的 gui 程式,本來也不想學太多有的沒的,頂多三五分鐘用 api 監控一次市場行情,就可以玩出很多策略了,沒想到 api 一個小小的不完美,迫使我把手伸進 socket 領域了。 原來我想監控的
開始玩 python gui,首先稍微交代一下背景,這種 client-server 的應用架構,一直以來是我所唾棄的方式,因為:每個前端都需要安裝,所以若要部署給多人使用,很麻煩,每個人的電腦環境千奇百怪,難保平台與各種軟體均能相容。所以出問題時原因難查,若軟體是銷售的,也容易有爭
雖然公眾資料庫和網路爬蟲,已經可以玩得不亦樂乎了,但所有研究最終的目的,還是要實施於一個真實賬戶,真金白銀的實際效益才有意義。尤其是「即時」性要求較高的策略,一定需要用程式補上「自動化下單」的部分,快速變動的資料如「行情報價」,「訂單狀態」,「帳戶庫存」等等,也需要程式嚴密監控,這就需要券商提供
「最佳化」是很酷的觀念,因為現實世界中許多問題,並沒有嚴謹一致的公式解,但可以利用計算機高速運算能力,透過巧妙的演算法,迭代式反覆逼近最佳解,應用領域非常廣。若能多瞭解一點原理,一定可以提昇解決問題的能力。今天從網路上發現一堂手把手的教學課程,就來演練一下整個過程。期望徹底了解之後,後面可以
「通知」這種功能現在已經非常稀鬆平常了,三不五時手機跳出訊息或聲音,不勝其擾!但不要因噎廢食,對於「真正重要的事件」,即時通知還是非常必需的。像是刷卡通知,應該沒有人會關掉吧!所以對於一個交易系統而言,牽涉到金錢的進出,通知功能是一定要的啦。有 line notify 相伴的年代,輕鬆愉快:
如題,這應該是很容易犯的錯誤,據說 git 能使時光倒流!它就是這麼厲害,所以光是刪除檔案重新 commit 是沒用的,必須執行以下步驟: # 1. 將檔案移出納管範圍,但注意加 --cached 就不會實體刪除檔案
這一趟越走越興奮的旅程,從 測試富邦新一代 api 開始,很自然的開始 用 python 造出自己的 gui 程式,本來也不想學太多有的沒的,頂多三五分鐘用 api 監控一次市場行情,就可以玩出很多策略了,沒想到 api 一個小小的不完美,迫使我把手伸進 socket 領域了。 原來我想監控的
開始玩 python gui,首先稍微交代一下背景,這種 client-server 的應用架構,一直以來是我所唾棄的方式,因為:每個前端都需要安裝,所以若要部署給多人使用,很麻煩,每個人的電腦環境千奇百怪,難保平台與各種軟體均能相容。所以出問題時原因難查,若軟體是銷售的,也容易有爭
雖然公眾資料庫和網路爬蟲,已經可以玩得不亦樂乎了,但所有研究最終的目的,還是要實施於一個真實賬戶,真金白銀的實際效益才有意義。尤其是「即時」性要求較高的策略,一定需要用程式補上「自動化下單」的部分,快速變動的資料如「行情報價」,「訂單狀態」,「帳戶庫存」等等,也需要程式嚴密監控,這就需要券商提供
「最佳化」是很酷的觀念,因為現實世界中許多問題,並沒有嚴謹一致的公式解,但可以利用計算機高速運算能力,透過巧妙的演算法,迭代式反覆逼近最佳解,應用領域非常廣。若能多瞭解一點原理,一定可以提昇解決問題的能力。今天從網路上發現一堂手把手的教學課程,就來演練一下整個過程。期望徹底了解之後,後面可以
你可能也想看
Google News 追蹤
Thumbnail
感謝所有訂閱的朋友們, 在個人因健康、工作、出國、雜務等諸多因素, 無法定期更新的情況下, 仍然願意訂閱, 在此表達萬分感謝。
Thumbnail
👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻 +81 70-9259-1826 or+81 70-9220-0945(請使用imessage) 我會透過方格子回應喔🙌🏻一日會員限定
Thumbnail
感謝所有支持的訂閱戶, 自5月重啟專欄以來, 獲利約45元, 均有前後文可稽。
Thumbnail
Line:@mqy0772c (加入並私訊我!!) https://liff.line.me/1645278921-kWRPP32q/?accountId=mqy0772c
Thumbnail
Line:@mqy0772c (加入並私訊我!!) https://liff.line.me/1645278921-kWRPP32q/?accountId=mqy0772c
Thumbnail
大家好,好久沒更新,最近教學論命繁忙,這邊有所耽擱,真的抱歉。 最近也有跟設計師在討論要架官網,時間真的是不夠用了,因此方格子這邊我會先暫停一下,架好官網之後會將文章轉移到官網,至於會不會有收費文章,這邊我還再思考當中。 如果想看我最新的貼文,可以轉到我的社群上面去。目前是每周二晚上八點發放貼文
Thumbnail
有時候工作信件上的來來往往百百種,但不外乎就是約會議時間、討論內容、回應問題或是向對方提出要求,這邊就列出一些模擬的情境跟相關信件做為參考。
Thumbnail
基於 LINE 在資源整合的優勢以及看好未來發展,非營利組織現階段使用 LINE OA 有流量紅利,應該積極經營佈局
Thumbnail
感謝所有訂閱的朋友們, 在個人因健康、工作、出國、雜務等諸多因素, 無法定期更新的情況下, 仍然願意訂閱, 在此表達萬分感謝。
Thumbnail
👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻 +81 70-9259-1826 or+81 70-9220-0945(請使用imessage) 我會透過方格子回應喔🙌🏻一日會員限定
Thumbnail
感謝所有支持的訂閱戶, 自5月重啟專欄以來, 獲利約45元, 均有前後文可稽。
Thumbnail
Line:@mqy0772c (加入並私訊我!!) https://liff.line.me/1645278921-kWRPP32q/?accountId=mqy0772c
Thumbnail
Line:@mqy0772c (加入並私訊我!!) https://liff.line.me/1645278921-kWRPP32q/?accountId=mqy0772c
Thumbnail
大家好,好久沒更新,最近教學論命繁忙,這邊有所耽擱,真的抱歉。 最近也有跟設計師在討論要架官網,時間真的是不夠用了,因此方格子這邊我會先暫停一下,架好官網之後會將文章轉移到官網,至於會不會有收費文章,這邊我還再思考當中。 如果想看我最新的貼文,可以轉到我的社群上面去。目前是每周二晚上八點發放貼文
Thumbnail
有時候工作信件上的來來往往百百種,但不外乎就是約會議時間、討論內容、回應問題或是向對方提出要求,這邊就列出一些模擬的情境跟相關信件做為參考。
Thumbnail
基於 LINE 在資源整合的優勢以及看好未來發展,非營利組織現階段使用 LINE OA 有流量紅利,應該積極經營佈局