「百變店長・單單」是一個用 Go 製作的 LINE 團購 Bot,用辦公室下午茶團購展示兩種 webhook:
messageEdited:使用者編輯原訊息時,以相同 message ID 更新訂單。unsend:使用者收回原訊息時,刪除 Bot 保存的訂單並重新計算總額。
目前訂單會以 Flex Message 顯示店家、截單時間、訂購人、品項、杯數與總金額。
請先將 LINE Official Account 加入群組。編輯訊息事件目前不支援與官方帳號的一對一聊天室。
-
開團:
開團 五十嵐 15:20 截單 -
Alice 下單:
珍珠奶茶 / 半糖 / 少冰 / 1 -
Alice 編輯同一則訊息:
珍珠奶茶 / 微糖 / 去冰 / 2 -
Bob 下單後收回原訊息,Bot 會刪除該筆內容,並用 push message 顯示更新後的 Flex 總結。
-
查詢或結單:
目前訂單 結單
| 品項 | 單價 |
|---|---|
| 四季春青茶 | $40 |
| 紅茶拿鐵 | $55 |
| 珍珠奶茶 | $60 |
| 波霸紅茶拿鐵 | $65 |
輸入 說明 可以在聊天室查看指令與菜單。
需要 Go 1.25,以及已啟用 Messaging API 的 LINE Official Account。
export ChannelSecret='YOUR_CHANNEL_SECRET'
export ChannelAccessToken='YOUR_CHANNEL_ACCESS_TOKEN'
export PORT=5000
go run .將 LINE Developers Console 的 Webhook URL 設為:
https://YOUR_HOST/callback
另外需要:
- 啟用 webhook。
- 允許 Bot 加入群組聊天室。
- 手機版 LINE 啟用支援訊息編輯的功能與版本。
go test -race ./...
go vet ./...測試涵蓋新增、編輯、亂序 edit、無效 edit、unsend、金額計算及 Flex JSON。
- 多個 edit webhook 可能亂序送達,程式只接受 timestamp 較新的事件。
- webhook redelivery 會用 webhook event ID 去重。
- unsend webhook 沒有 reply token,因此 Bot 使用 push message 更新群組;這會計入訊息用量。
- 收到 unsend 後不會重現原始內容,並會從記憶體刪除該筆訂單。
- 目前狀態保存在單一程式實例的記憶體中。服務重啟或多實例部署時會遺失/分散資料;正式環境應改用 Redis 或資料庫。
技術參考:Edit event/Unsend event