Lambda+API Gateway构建Discord机器人斜杠命令执行报错求助
Discord斜杠命令交互失败问题排查与修复建议
问题描述
使用Lambda和API Gateway构建Discord机器人,通过INTERACTIONS ENDPOINT URL与Discord集成,已通过以下脚本配置斜杠命令:
import json import requests APPLICATION_ID = "x" BOT_TOKEN = "x" GUILD_ID = "x" HEADERS = {"Authorization": f"Bot {BOT_TOKEN}"} URL = f"https://discord.com/api/v10/applications/{APPLICATION_ID}/guilds/{GUILD_ID}/commands" json_file = { "name": "hello", "type": 1, "description": "replies with bar;/" } r = requests.post(URL, headers=HEADERS, json=data)
机器人已部署并与Discord同步正常,服务器显示已连接,但执行/hello命令时出现错误:
Cosmic Cat:
This interaction failed
查看Lambda函数日志无错误记录,日志显示命令已正常执行:
2022-12-13T14:59:34.807-03:00 START RequestId: 58f5bfc7-a85a-494c-a92b-9f746d401ce9 Version: $LATEST 2022-12-13T14:59:34.808-03:00 event: {'rawBody': '{"app_permissions":"...'resource-path': '/discord'}} 2022-12-13T14:59:34.808-03:00 [*] running command... 2022-12-13T14:59:34.808-03:00 command hello 2022-12-13T14:59:34.808-03:00 [*] detected hello. Executing... 2022-12-13T14:59:34.809-03:00 END RequestId: 58f5bfc7-a85a-494c-a92b-9f746d401ce9
已尝试重新邀请机器人、增加Lambda日志、重新配置API Gateway作为交互端点等操作,问题仍未解决。
修复建议
检查Lambda返回格式是否符合Discord要求
Discord要求交互端点必须在3秒内返回规范响应:- 同步响应需返回
type:4的JSON结构,示例:{ "type": 4, "data": { "content": "bar;/" } } - 若需异步处理,需先返回
type:5的延迟响应。 - 确保API Gateway将Lambda返回值原样传递,且响应头设置
Content-Type: application/json。
- 同步响应需返回
修正命令注册脚本的变量错误
脚本中定义了json_file但请求时传入data,会导致命令注册失败(可能之前正确执行过才显示同步正常)。修正请求参数:r = requests.post(URL, headers=HEADERS, json=json_file)执行修正后的脚本重新注册命令。
验证Discord交互签名
Discord会对每个交互请求签名,需在Lambda中实现签名验证逻辑:- 使用Discord提供的公钥,验证请求头
X-Signature-Ed25519和X-Signature-Timestamp,确保请求来自Discord。 - 签名验证失败时,Discord会拒绝认可交互结果,导致显示失败。
- 使用Discord提供的公钥,验证请求头
检查Lambda与机器人权限
- 确保Lambda超时时间设置≥3秒,避免未返回响应就被终止。
- 确认机器人在服务器中拥有发送消息的权限,无权限会导致响应无法送达(日志不会报错)。
排查API Gateway配置
- 确认API Gateway为HTTP API或正确配置的REST API,已部署到对应阶段。
- 查看API Gateway日志,检查是否存在请求转发失败、响应格式被修改等问题。
内容的提问来源于stack exchange,提问作者Cristopher Adasme
相关产品推荐
相关产品推荐

