You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用aiogram的bot.send_message出现Timeout上下文管理器错误求助

解决AIogram中bot.send_message协程调用失败的问题
  • 确认事件循环上下文匹配
    核心问题几乎都是调用bot.send_message时,当前代码不在AIogram机器人绑定的事件循环上下文中。AIogram的Bot对象依赖初始化时关联的事件循环,若在非异步线程、未关联循环的环境调用,必然报错。
    正确处理方式:

    • 若在同步函数中调用,使用asyncio.run_coroutine_threadsafe将协程提交到机器人的事件循环,而非手动新建线程或循环:
      import asyncio
      from aiogram import Bot
      
      # 假设bot为已初始化的全局/正确实例
      def sync_trigger():
          target_loop = bot.loop
          # 提交协程到机器人的事件循环执行
          asyncio.run_coroutine_threadsafe(
              bot.send_message(chat_id=你的聊天ID, text="测试消息"),
              target_loop
          )
      
    • 若在异步函数中调用,直接用asyncio.create_task包裹协程即可,但需确保当前函数运行在机器人的事件循环中。
  • 摒弃错误的线程/任务创建方式
    你尝试的新建线程、exec()等操作会破坏AIogram的异步上下文一致性。机器人的Bot和Dispatcher绑定在同一个事件循环,手动新建线程会导致新线程无有效循环或循环不兼容,直接引发协程执行失败。

  • 从报错回溯定位根因
    结合报错信息针对性排查:

    • 若报错RuntimeError: Event loop is closed:说明调用协程时机器人的事件循环已关闭,需确保代码执行时机在机器人运行期间。
    • 若报错RuntimeError: no running event loop:说明当前上下文无活跃事件循环,需切换到机器人绑定的循环上下文执行。
  • 验证Bot实例有效性
    确认调用bot.send_message的Bot对象是初始化时的有效实例,未被意外销毁或重新创建。重复实例化Bot会导致新实例绑定的循环与原机器人循环不匹配,引发执行失败。

内容的提问来源于stack exchange,提问作者TheAIguy_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 20:50:05