Python开发Microsoft Teams机器人闲置2分钟后发送消息触发ConnectionResetError的问题求助
Python开发Microsoft Teams机器人闲置2分钟后发送消息触发ConnectionResetError的问题求助
大家好,我最近基于微软官方的Microsoft-Teams-Samples/samples/app-hello-world示例,用Python开发了一款Microsoft Teams机器人。初始运行一切正常,能正常接收和回复消息,但遇到了一个棘手的问题:只要消息间隔超过2分钟的闲置期,连接就会断开,抛出以下错误:
ConnectionError(ProtocolError('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))) ClientRequestError from msrest.exceptions
但紧接着再发送一条消息,机器人又能恢复正常工作。
我的环境信息
- 技术栈:Python 3.13、uv、uvicorn、FastAPI
- 本地开发环境:NixOS系统 + ngrok内网穿透
- 生产环境:AWS Ubuntu服务器 + nginx反向代理 + docker部署
我已经做过的排查和尝试
- 反复测试确认:闲置满2分钟后必现该问题,用
bot-conversation-quickstart测试也是同样结果 - 生产环境中另一台远程服务器上的机器人也能稳定复现这个问题
- 怀疑过是代理的长连接(keep-alive)配置问题,但不确定具体是哪部分环节出了问题
- 用C#版本的Bot Framework示例做了相同场景测试,本地环境下无法复现(没在生产环境测C#版本)
- 切换到手机热点网络测试,问题直接消失,无法复现
当前的困惑和临时尝试
我怀疑这个问题可能和Python版的Bot Framework SDK有关,但不知道该从哪里入手彻底解决。现在不确定服务器端需要调整哪些配置,临时写了一个错误处理函数,想问问这样处理是否合理,或者有没有更根本的修复方案?
临时错误处理代码:
async def adapter_error_handler(turn_context: TurnContext, exception): """Handle errors inside the Bot processing loop.""" logger.error(f"Bot encountered an error: {str(exception)}", exc_info=True) try: if isinstance(exception, ClientRequestError): logger.info("Handling ClientRequestError - attempting recovery with direct method call") if turn_context.activity.type == ActivityTypes.message: # Call the specific handler instead of on_turn to avoid recursion await management_bot.on_message_activity(turn_context) return await turn_context.send_activity(ErrorMessages.GENERAL_ERROR) except Exception as secondary_error: logger.critical( f"Error handler failed to process exception. Original error: {str(exception)}, " f"Secondary error: {str(secondary_error)}", exc_info=True )
任何建议或思路都非常感谢!
内容来源于stack exchange
相关产品推荐
相关产品推荐

