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

Telegram频道消息转发Bot无响应问题排查求助

Telegram频道消息转发Bot无响应问题排查求助

问题分析与解决方案

看了你的描述和代码,Bot没反应甚至过滤器的print都不触发,大概率是消息事件类型监听错误,再加上几个可能的配置问题,我给你逐一梳理:

1. 核心问题:频道消息对应channel_post事件,而非message事件

Telegram里,频道发布的帖子不属于普通的Message类型,在aiogram v3中,这类消息对应的是ChannelPost事件。你用@dp.message()装饰器根本监听不到频道的帖子,这就是为什么连过滤器的print都没触发的原因!

修改后的代码如下:

import aiogram
import asyncio
from aiogram.types import ChannelPost  # 新增导入ChannelPost类型

bot = aiogram.Bot(token=token)
dp = aiogram.Dispatcher()
from_chanel = from_chanel  # 确保这里是正确的频道ID(私有频道为-100开头的负数)
to_chanel = to_chanel

class IsSourceFilter(aiogram.filters.BaseFilter):
      async def __call__(self, post: ChannelPost) -> bool:
            print("过滤器已触发!")  # 现在应该能看到输出了
            return post.chat.id == from_chanel

# 将@dp.message()替换为@dp.channel_post()
@dp.channel_post(IsSourceFilter())
async def forward(post: ChannelPost):
      # 优先转发文本消息,可扩展处理其他类型内容
      if post.text:
            await bot.send_message(chat_id=to_chanel, text=post.text)
      # 示例:扩展处理图片消息
      # elif post.photo:
      #       await bot.send_photo(chat_id=to_chanel, photo=post.photo[-1].file_id)

async def main():
      # 指定allowed_updates,确保Bot监听所有用到的更新类型
      await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types())

if __name__ == "__main__":
      asyncio.run(main())

2. 必须确认Bot的频道权限

  • 把Bot添加到源频道,并设置为管理员,权限至少要勾选「读取消息」(如果要转发媒体内容,还需勾选「发送消息」等权限);
  • 目标频道也要确保Bot能正常发送消息,可设为管理员或确认频道允许Bot发言。

3. 频道ID格式要准确

  • 私有频道的ID是-100开头的负数(比如-1001234567890),不要遗漏负号;
  • 公开频道可以用@频道用户名,但建议使用ID更稳定;
  • 可通过@getidsbot获取准确的频道ID。

4. 检查Bot Token与版本兼容性

  • 确认token变量是正确的Bot Token,无复制错误;
  • 确保你的aiogram是v3.x版本,代码中Dispatcher()和start_polling的写法符合v3风格,v2版本写法会有差异。

按上述步骤修改后,应该就能正常触发消息转发了,你可以先测试文本消息,之后再扩展处理图片、视频等其他类型内容。

备注:内容来源于stack exchange,提问作者core_sns

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 12:34:30