Discord斜杠命令返回Unknown interaction(404-10062)错误求助
Discord斜杠命令报错:404 Not Found (error code: 10062): Unknown interaction
问题场景
使用discord.py开发的斜杠命令,已通过interaction.response.defer()处理异步响应,但执行到followup.send()时抛出404错误,命令逻辑已完成但无法发送最终确认消息。
示例代码:
@bot.tree.command(name="evaluate") async def evaluate(interaction: discord.Interaction): await interaction.response.defer(ephemeral=True) await asyncio.sleep(10) await interaction.followup.send("Command works")
错误堆栈:
File "/home/container/.local/lib/python3.11/site-packages/discord/app_commands/commands.py", line 862, in _do_call return await self._callback(interaction, **params) # type: ignore ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/container/bot.py", line 282, in evaluate await interaction.response.defer(ephemeral=False, thinking=True) File "/home/container/.local/lib/python3.11/site-packages/discord/interactions.py", line 636, in defer await adapter.create_interaction_response( File "/home/container/.local/lib/python3.11/site-packages/discord/webhook/async_.py", line 218, in request raise NotFound(response, data) discord.errors.NotFound: 404 Not Found (error code: 10062): Unknown interaction
成因分析
- 交互响应超时:Discord强制要求必须在3秒内对交互做出响应(包括defer)。如果
defer()调用前存在耗时操作(如数据库查询、外部API请求),Discord会提前标记该交互为失效,后续followup请求自然找不到对应交互。另外,defer后的交互有效期为15分钟,若命令执行时间超出这个范围也会触发错误。 - 重复调用defer:每个交互只能被响应一次(defer或直接send)。从错误堆栈看,实际代码中可能多次调用了
interaction.response.defer(),第一次响应后交互状态已变更,第二次调用会直接导致404。 - Discord API/网络异常:偶尔会遇到Discord API节点故障,导致defer的响应未被正确记录,后续followup请求无法匹配到有效交互会话。容器部署的机器人还可能存在网络隔离、DNS解析异常等问题。
- 机器人缓存/连接异常:discord.py客户端连接不稳定、内部缓存未同步交互信息,会导致后续followup时无法识别有效交互。
解决方案
- 优先执行defer:将
await interaction.response.defer()放在命令函数的最开头,确保在任何耗时操作前完成响应。示例代码的写法是正确的,但要检查实际代码中是否存在前置耗时逻辑。 - 禁止重复响应:排查代码,确保每个交互只调用一次
interaction.response.defer()或interaction.response.send_message(),避免重复操作导致交互状态失效。 - 处理网络异常:给followup操作添加异常捕获,尝试重试发送,或向用户提示“命令已执行,但结果发送失败”。容器部署时检查网络配置,确保机器人能正常访问Discord API。
- 重启机器人:若怀疑是缓存或连接问题,重启机器人可重置客户端状态,同步最新的交互缓存。
内容的提问来源于stack exchange,提问作者Zaid Hussain
相关产品推荐
相关产品推荐

