问询:无需手机验证下载Telethon公开群组消息的解决办法
解决Telethon Bot调用GetHistoryRequest受限的问题
首先明确:Telegram官方限制了Bot账号调用GetHistoryRequest这类获取历史消息的接口,这是API层面的权限限制,不是Telethon的问题,所以直接用Bot账号走这条路行不通。以下是两种可行的解决方案:
方案1:用普通用户会话文件实现免重复验证
- 首次运行时,用正规普通用户账号(需绑定手机号)完成一次验证,Telethon会自动生成会话文件(默认命名类似
session.session) - 后续自动化流程直接加载这个会话文件即可,无需再次输入手机号验证
- 示例代码:
from telethon import TelegramClient # 替换为你自己的API信息 api_id = 123456 api_hash = 'abcdef1234567890abcdef1234567890' session_file = 'my_telegram_session.session' target_group = 'public_group_username' # 公开群组的用户名或ID client = TelegramClient(session_file, api_id, api_hash) async def fetch_new_messages(): async with client: # 获取最新100条消息,可根据需求调整参数 messages = await client.get_messages(target_group, limit=100) for msg in messages: # 处理消息逻辑,比如存储到数据库 print(msg.text) client.loop.run_until_complete(fetch_new_messages()) - 注意:会话文件相当于账号凭证,务必妥善保管,不要泄露
方案2:用Bot Webhook实时接收新消息
如果你的需求只是获取实时新消息,不需要历史消息,可以采用这种完全符合Bot权限的方式:
- 给Bot配置公网可访问的Webhook URL,让Telegram主动将群组新消息推送到你的接口
- 无需主动调用
GetHistoryRequest,全程在Bot权限范围内运行 - 核心逻辑:
- 通过BotFather给Bot设置Webhook(命令:
/setwebhook) - 编写Web服务接口接收Telegram推送的POST请求
- 在接口中解析并处理新消息内容
- 通过BotFather给Bot设置Webhook(命令:
补充注意事项
- 普通用户会话文件若长时间闲置可能会失效,只需重新运行一次验证流程即可恢复,频率极低,不会影响自动化稳定性
- 避免使用批量注册的小号,容易被Telegram封禁,建议使用正规个人账号
内容的提问来源于stack exchange,提问作者ekdz__
相关产品推荐
相关产品推荐

