使用消息交互
按钮和可点击指令都能触发业务操作。要用哪个处理函数,取决于用户点击之后会发生什么。
| 需要实现的行为 | 构造入口 | 接收入口 |
|---|---|---|
| 点击后预填命令 | button.Command | 用户发送后进入 OnCommand |
| 单聊点击直接发送命令 | Command(...).AutoSend() | OnCommand |
| 点击后通知服务端 | button.Callback | OnButton 或 OnInteraction |
| 打开网页或平台支持的应用链接 | button.Link | 客户端跳转,不产生按钮回调 |
| 正文内可点击命令 | text.Input、text.Enter | 用户发送后进入 OnCommand |
| 快捷菜单操作 | 平台侧配置菜单 | OnMenu |
配置事件订阅
使用 WebSocket
将所需条目合并到 config.yaml 现有的 connection.websocket.intents 列表,保留其他业务订阅。保存后重启机器人。
yaml
connection:
mode: websocket
websocket:
intents:
- GROUP_AND_C2C_EVENT
- INTERACTION使用 Webhook
在 QQ 机器人运营与管理后台选择 开发设置 → 事件订阅与回调。将接入方式设为 Webhook。在 接收事件配置 选择 部分接收,按事件标识勾选INTERACTION_CREATE(互动事件)。保存设置。已选 全部接收 时,无需逐项勾选。
按任务阅读
交互与消息的区别
回复发给聊天里的人,ACK 发给 QQ 平台确认互动结果。先判断用户有没有操作权限,再及时回复 ACK。耗时的工作可以随后处理。
每个互动事件只选择一个处理函数。
- 先找匹配具体按钮或菜单 ID 的处理函数。
- 再找匹配事件类型的处理函数。
- 最后使用
OnEvent(message.INTERACTION_CREATE, ...)。
在仓库根目录运行下面的示例,就可以在 QQ 里试用这些互动功能。
sh
go run ./examples/interactions -config config.yaml在单聊发送 /interact。群聊按平台要求艾特机器人后发送同一命令。
注意事项
- SDK 配置不会替应用申请权限、创建菜单或更改平台订阅。
- 消息回复和 ACK 分属不同操作,无法互相替代。SDK 不自动选择成功响应。
- 按钮展示、平台权限和客户端兼容性需要在 QQ 客户端测试。本地测试无法验证这些结果。