如何通过Discord INTERACTIONS ENDPOINT URL获取表情反应交互请求
核心原因
你配置的INTERACTIONS ENDPOINT URL仅会接收Discord交互类事件,包括斜杠命令触发、按钮/下拉菜单点击、模态框提交这类场景,普通频道消息发送、消息表情反应事件根本不会推送到这个端点,这就是你斜杠命令正常、但收不到消息/反应请求、CloudWatch无对应日志的根本原因。
解决方法
根据你当前使用AWS Lambda无服务器环境的场景,推荐选第二种方案,适配性更好:
- 方案一:通过网关长连接接收事件
- 前往Discord开发者后台,进入应用的Bot设置页,在Privileged Gateway Intents分区开启
MESSAGE CONTENT INTENT(读取消息内容必填)、消息反应相关的网关意图权限 - 注意:AWS Lambda是短执行周期的无服务器环境,默认无法维持WebSocket长连接,要使用这个方案你需要把服务部署到常驻运行环境(EC2、ECS等),成本和改造成本更高
- 前往Discord开发者后台,进入应用的Bot设置页,在Privileged Gateway Intents分区开启
- 方案二(适配Lambda架构):配置Discord事件Webhook
- 进入开发者后台对应应用的Integrations页面,新建Webhook,勾选你需要订阅的事件:
MESSAGE_CREATE(频道新消息)、MESSAGE_REACTION_ADD(新增表情反应)等 - 将Webhook的投递地址设置为你Lambda暴露的API接口地址,注意Webhook的签名校验规则和Interactions端点的校验规则不同,需要单独编写校验逻辑,不能直接复用你现有的交互签名校验代码
- 补充机器人权限:你之前OAuth2选的权限范围缺少读取消息内容、查看频道、读取消息历史的相关权限,重新生成邀请链接勾选全对应权限后,重新邀请机器人进服务器即可
- 进入开发者后台对应应用的Integrations页面,新建Webhook,勾选你需要订阅的事件:
现有代码问题修正
你当前路由定义顺序有问题:express.json()中间件写在了根路径POST路由的后面,会导致该路由无法正常获取解析后的请求体,建议把所有全局中间件移动到路由定义之前,避免出现请求解析异常。
内容的提问来源于stack exchange,提问作者simon Shim
相关产品推荐
相关产品推荐

