推播訊息
客戶端使用 Line 傳送訊息到 bot 後,bot 會將訊息再度傳送到指定的伺服器。
bot 資訊及使用者資訊
在 Django 指定的 /line 網頁 view.py 中,可以使用如下代碼取得 bot 資訊及使用者資料。
@csrf_exempt def html(request): body = request.body.decode("utf-8") data=json.loads(body) user_id = data['events'][0]['source']['userId'] #使用者的資訊 print("使用者資訊") profile = line_bot_api.get_profile(user_id) print(profile) line_bot_api = LineBotApi(G.line_access_token) #bot的資訊 print("bot資訊") print(line_bot_api.get_bot_info())
結果如下
bot資訊
{"basicId": "@190fpywi", "chatMode": "chat", "displayName": "Thomas\u7a0b\u5f0f\u8a2d\u8a08", "markAsReadMode": "manual", "pictureUrl": "https://profile.line-scdn.net/0hhMVG1lRmN2JrPic2QyhINVd7OQ8cEDEqEwwvDE86OQJACXRkXgh_BEo7a1QVCXMwBF97Bk4-aAFA", "userId": "Uf9c2............0b6"}
System check identified no issues (0 silenced).
February 07, 2025 - 21:32:25
Django version 5.0.4, using settings 'pyweb.settings'
Starting development server at http://0.0.0.0:7001/
Quit the server with CONTROL-C.
使用者資訊
{"displayName": "\u5433\u660e\u5b78 Thomas", "language": "zh-TW", "pictureUrl": "https://profile.line-scdn.net/ch/v2/p/u1390d704847b29623cafa053685002af/1354300368068", "userId": "U121..........9a3"}
get_bot_info()
get_bot_info 可以取得 bot 資訊,直接寫在 view.py 中。當 Django 開始執行就會自動取得。其中最重要的是 user_id 及 displayName。user_id 是在註冊 Line 時所得到獨一無二的號碼,displayName 則是顯示在 bot 中的自定名稱。
get_profile(user_id)
get_profile 則是取得使用者的資訊,這個方法需寫在 def html(request)中,因為當使用者傳送訊息後才會觸發 html 方法,此時才可以取得使用者的資訊。
push_message
push_message 可以由 bot 傳送訊息給使用者,而且可以連續發送好幾則。不過這個方法是有額度的,如果是免付費的 bot,一個月最多只能發送 200 則訊息。
push_message 的第一個參數是要發給誰的 user_id,第二個參數需為TextSendMessage()、ImageSendMessage、FlexSendMessage 等多種訊息。
push_message 可以對多人傳送訊息,但需使用 for 迴圈一個一個傳送,也可以使用 group_id (群組) 一次傳送。
🔒 更多內容,請登入會員繼續閱讀。
立即登入reply_message
reply_message 跟 push_message 幾乎一模一樣,可發送 TextSendMessage()、ImageSendMessage、FlexSendMessage 及 TemplateSendMessage 給使用者。
但每次觸發 html 方法時,只能執行一次 reply_message 方法,而這個方法沒有額度限制。
另外 reply_message 第一個參數必需為 replyToken,跟 push_message 的 user_id 不同。
🔒 更多內容,請登入會員繼續閱讀。
立即登入雖然不能重複使用 reply_message,但卻可以使用 list 發送多則訊息,一次最多可以發送 5 則訊息,如下所示。
