Azure Web频道聊天机器人部署后数小时出现发送失败故障
解决Azure Web App Bot闲置后无法发送消息的问题
嗨,我之前也碰到过几乎一模一样的情况,结合你的场景给你梳理下排查方向和实际可行的解决办法:
核心原因分析
- App Service自动休眠(最常见):如果你的App Service用的是Free/Shared层级,Azure会在应用15-20分钟没流量时自动休眠,唤醒需要一定时间,直接导致机器人请求超时,出现「无法发送」错误
- LUIS连接回收:虽然LUIS和Bot在同一区域,但闲置后系统会回收闲置连接,首次请求重新建立连接时容易触发超时
- 会话状态丢失:如果Bot用的是内存存储会话状态(测试环境常用),闲置过久状态会被清空,导致无法处理新的对话请求
一步步排查验证
- 查看App Service实时日志
登录Azure门户,找到你的App Service,打开左侧的日志流,然后尝试给机器人发消息触发错误,看看日志里有没有超时、连接失败的具体提示,这能帮你精准定位是Bot本身还是依赖服务的问题 - 确认App Service Plan层级
进入对应的App Service Plan,检查是不是Free/Shared层——这类层级的休眠是默认行为,没法直接禁用,得升级层级或者用其他办法规避 - 直接测试Bot端点
用Postman或者curl发个POST请求到Bot的https://zapateria-bot.azurewebsites.net/api/messages端点(模拟Bot Framework的请求格式),看看能不能正常响应,排除前端或者聊天通道的问题
针对性解决办法
- 开启「始终开启」(需Basic+层级)
如果你的App Service Plan是Basic及以上,直接在App Service的配置>常规设置里打开「始终开启」,Azure会持续保持应用运行状态,不会进入休眠 - 添加定时唤醒任务
要是没法升级层级,可以搞个简单的定时任务(比如Azure Function、第三方定时工具),每隔10分钟给Bot的端点发个GET请求,让应用一直处于活跃状态,避免休眠 - 调整LUIS超时配置
在Bot的代码里给LUIS识别器设置更长的超时时间,比如把timeout参数调到10秒以上,给首次连接留足够的唤醒缓冲时间 - 切换持久化会话存储
把内存存储换成Azure Blob Storage或者Cosmos DB,这样就算应用休眠重启,会话状态也不会丢失,能正常处理新的对话请求
你可以先试试重启App Service临时恢复服务,再按照上面的方法从根本上解决问题。
内容的提问来源于stack exchange,提问作者Daniel




