使用Telethon+Aiogram实现账号授权后机器人遭封禁,求助排查原因
机器人授权用户账号后被封禁的问题排查与解决
问题描述
我开发了一个机器人,用于实现用户账号授权功能,流程如下:
- 请求用户发送手机号
- 调用
send_code_request方法发送验证码 - 要求用户发送字符间带空格的验证码(试图避免验证码失效)
用户发送验证码后,目标登录客户端显示授权成功,但我的机器人随即被封禁,只能重新创建,不清楚问题出在哪里。
相关代码
发送验证码状态代码
# State with sending code if not orm.get_session(phone): user_client = TelegramClient(StringSession(), config.API_ID5, config.API_HASH5) await user_client.connect() await user_client.send_code_request(phone) text = 'Enter code with spaces between characters:' await message.answer(text, parse_mode='Markdown') await state.update_data(phone=phone) await ListParsing.waiting_code.set()
授权验证状态代码
# State with authorization code = message.text code = re.sub(r' ', '', code) data = await state.get_data() phone = data.get('phone') try: user_client = TelegramClient(StringSession(), config.API_ID5, config.API_HASH5) await user_client.connect() await user_client.sign_in(phone=phone, code=code) print(await user_client.get_me()) string = await user_client.session.save() orm.create_session(phone, string)
可能的封禁原因
- API凭据复用:你使用的
API_ID5和API_HASH5如果同时被其他Telegram客户端或机器人使用,Telegram反作弊系统会判定为异常批量登录,直接封禁关联的机器人账号。 - 频繁创建新会话:每次处理请求都新建
TelegramClient实例且使用空StringSession(),这种高频创建新会话的行为会被识别为恶意自动化操作,触发封禁。 - 缺少设备信息模拟:默认客户端配置没有模拟真实设备的型号、系统版本等信息,Telegram很容易识别出这是脚本程序,进而封禁。
- 操作行为过于机械化:没有模拟真实用户的操作节奏,请求间隔过短,加重系统对异常行为的判定。
解决方案
- 使用独立API凭据:为机器人在Telegram官方开发者平台申请专属的API ID和Hash,确保不与其他账号或客户端共用。
- 复用客户端会话:不要每次请求都新建
TelegramClient,可以通过缓存或单例模式管理已创建的客户端连接,减少会话创建频率。 - 添加设备信息模拟:初始化客户端时设置真实的设备参数,示例:
user_client = TelegramClient( StringSession(), config.API_ID5, config.API_HASH5, device_model="iPhone 14", system_version="iOS 17.1", app_version="9.6.1" ) - 模拟真实操作节奏:在发送验证码和登录验证之间添加合理延迟,避免操作过于频繁。
- 完善异常处理:在
sign_in的try块中添加异常捕获,处理两步验证、验证码错误等场景,避免无效请求触发系统检测。
内容的提问来源于stack exchange,提问作者Константин
相关产品推荐
相关产品推荐

