iT邦幫忙

0

line bot聆聽訊息功能 可以在函式裡讀取嗎

  • 分享至 

  • xImage

def game_1(ch,event,message,bump,flag):
line_bot_api.reply_message(event.reply_token, TextSendMessage("Conum"))####1
line_bot_api.push_message(ID, TextSendMessage(text="範圍:" + a + "~" + b))####2

我要在linebot 裡寫一個 數字炸彈的遊戲 (電腦猜一個,我猜一個)
但是當執行完####1時,他會直接回到主程式繼續聆聽新的訊息過來(不會執行####2),並不會在我的遊戲函式裡繼續等待新的訊息,有函示可以在我的game_1裡停留,讀取到新的訊息後在繼續跑完所有程式嗎?(像message = input()這種)
line bot新手 請多多包涵 謝謝

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
zz654456
iT邦見習生 ‧ 2022-10-19 08:46:01

reply_message 一使用,linebot就會自己結束這一次任務,等待使用者輸入下一個訊息
試試改個邏輯,讓push_message先,最後再reply_message
或許能達到你要的效果?

line_bot_api.push_message(ID, TextSendMessage("Conum"))
line_bot_api.reply_message(event.reply_token, TextSendMessage(text="範圍:" + a + "~" + b))
0
ntustzeus
iT邦新手 2 級 ‧ 2022-10-19 10:08:42

Push是主動發送訊息給使用者,要代入userId
reply是用使用者訊息裡的token,在限時內回覆,只能用一次

line_bot_api.push_message(ID, TextSendMessage(text="範圍:" + a + "~" + b))####2

你這行裡的ID是從哪裡取的?
push使用時必須知道發送對向的id,這個必須在user發送訊息時自己儲存

參考
裡面的source裡有userId

"source": {
        "type": "user",
        "userId": "U4af4980629..."
      },

最後,push發送是計費的,免費版的一個月可以發幾百則,用完後push就不會有反應了
(但免費版也不用擔心被收錢,就是不再發訊息到webhook而已)

這個自己玩一下可以,給別人玩一話應該一下就爆量了

1
froce
iT邦大師 1 級 ‧ 2022-10-19 11:25:21

用個資料庫存reply_token、userID和送過來的message和時間不就好了...
另外這個用不到push,應該reply就能做了。

簡單的說,你的 game_1 流程應該是:

  1. 當使用者說出關鍵字,發送到伺服器時,初始化一個遊戲:
    我的建議是在資料庫用張資料表,紀錄USERID和一個遊戲ID(隨機),並產生正確答案
  2. 當使用者發訊息給伺服器時,從資料庫檢查他是否已經有了一個遊戲,有的話且訊息符合格式,先去核對有沒有上次使用者猜的結果,再利用event記錄reply_token、userID和送過來的message和時間,傳回使用者猜的結果
  3. 使用者猜對或傳回關鍵字如放棄遊戲,從資料庫把相關的資料和紀錄刪除或標記為結束

從你的描述看,你的整個流程是錯了,建議好好理一理,至少畫個流程圖...

1
woeichern
iT邦新手 1 級 ‧ 2022-10-19 14:39:41

你可以一次回最多5個訊息,用同一個Reply Token

https://developers.line.biz/en/docs/messaging-api/sending-messages/#reply-messages

我要發表回答

立即登入回答