v0.5.0

Reply Handler

最後更新


本頁說明 ReplyHandler 何時執行、回傳值送往何處,以及 panic 如何處理。

契約


  1. type ReplyHandler func(ctx context.Context, input Input) string

每個平台套件都以自己的 Input 宣告此型別。Reply(handler) 只保存一個 handler,再次呼叫會取代前一個。收到事件的 SDK goroutine 會呼叫 handler 並等待結果,因此 handler 執行太久會延後該事件的回覆。
回傳值結果
非空字串以純文字回覆送出(目標見下表)
""不送任何訊息;handler 自行送媒體、互動提示或多則訊息時使用

觸發 handler 的事件


平台事件
Telegram所有 message update(文字、caption、圖片、文件;含群組,不檢查 mention);SendSelect 按鈕點擊;SendMultiSelect 的 Done 點擊
Discordbot 自己以外的所有 MessageCreate;SendInput 的 modal 送出;SendSelect/SendMultiSelect 的選取
LINEtext、image、video、audio、file 五種 message event(含 group 與 room,不檢查 mention)

其他事件類型一律略過。

回覆送往何處


平台觸發回覆目標
Telegram訊息同一個 chat,reply 到使用者訊息
Telegram單選/多選同一個 chat,reply 到 prompt 訊息
Discord訊息同一個 channel,reply 到使用者訊息
Discordmodal 送出/選取reply 到傳給 SendInput/SendSelect 的 replyTo;replyTo 為 "" 時改 reply 到 prompt 訊息
LINE任何以事件的一次性 reply token 呼叫 ReplyMessage

Handler 的 context


平台傳給 handler 的 ctx
Telegrampolling 迴圈提供的 context(由 Start 的 context 衍生)
DiscordStart 建立的 bot 內部 context;未執行時收到的事件直接丟棄
LINE每個 webhook request 一個:bot context 加 30 秒 timeout,同一 request 內的所有事件共用

Panic


handler 內的 panic 會被 recover 並以 slog.Warn("reply handler panic") 記錄;SDK goroutine 持續運作。
平台panic 值為 string其他 panic 值
Telegram該字串作為回覆送出不送訊息
LINE該字串作為回覆送出不送訊息
Discord不送訊息不送訊息

相關頁面


EN