You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

非频道管理员身份下如何实现Telegram机器人读取指定频道消息(无需将机器人设为频道管理员)

解决方案:无需成为频道管理员,实现Telegram消息中转

我来帮你解决这个问题——其实你遇到的核心限制是Telegram官方对机器人账号的权限约束:机器人账号无法直接读取未将其设为管理员的频道消息,不管频道是公开还是私有。那些已存在的中转机器人,都是借助普通用户账号(而非机器人账号)作为桥梁来实现的,具体可行方案如下:

核心思路

使用Telegram的MTProto API(而非Bot API),用你自己的普通Telegram账号登录并监听目标频道的消息,再将消息转发给你指定的聊天(比如你和机器人的对话,或者直接转发到你的账号)。

具体实现步骤(以Python为例)

1. 准备普通账号的API密钥

首先,你需要为自己的普通Telegram账号申请API密钥:

  • 访问Telegram的开发者页面,用你的普通账号登录
  • 注册一个新应用,获取api_idapi_hash(这是普通用户账号的API信息,和机器人的bot token是两回事)

2. 使用MTProto库实现监听与转发

推荐使用telethonpyrogram这两个Python库,它们封装了MTProto API,操作简单。下面是telethon的示例代码:

from telethon import TelegramClient, events

# 替换为你的普通账号API信息
api_id = 123456  # 你的api_id
api_hash = "your_api_hash_string"  # 你的api_hash
# 会话文件名,会自动生成,用来保存登录状态
client = TelegramClient("my_channel_listener", api_id, api_hash)

# 目标频道的标识:可以是频道用户名(比如@your_target_channel)或ID
target_channel = "@your_target_channel"
# 接收转发消息的聊天ID:可以是你自己的账号ID,或者你和机器人的聊天ID
your_chat_id = 123456789  # 替换为你的聊天ID

@client.on(events.NewMessage(chats=target_channel))
async def forward_channel_message(event):
    # 当目标频道有新消息时,自动转发到指定聊天
    await client.forward_messages(your_chat_id, event.message)

# 启动客户端并保持在线
client.start()
client.run_until_disconnected()

3. 运行与注意事项

  • 第一次运行代码时,需要输入你的普通账号手机号和验证码完成登录,登录状态会保存在会话文件中
  • 会话文件(比如my_channel_listener.session)要妥善保管,泄露后他人可以登录你的账号
  • 遵守Telegram的服务条款,避免频繁转发大量消息,否则可能触发反垃圾机制导致账号受限

为什么机器人账号不行?

Telegram的Bot API设计之初就限制了机器人的权限:只有当机器人被频道管理员添加为管理员并授予相应权限时,才能读取频道内的消息。这是官方的硬性限制,没有绕过的办法,所以必须借助普通用户账号来实现需求。

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

火山引擎 最新活动