CentOS下Telegram Python自动化发消息脚本报错排查
报错原因
报错核心是参数类型不匹配:Telegram底层MTProto协议序列化请求时,要求user_id、access_hash、api_id这类ID类参数必须是整数类型,你当前代码里这些参数都传了字符串,序列化时直接抛出required argument is not an integer错误。从报错日志里的InputPeerUser(user_id='user_id', access_hash='user_hash')就能看出来,两个参数都带字符串的引号标记,类型完全不符合要求。
具体修改点
- 修正
api_id类型:把你申请到的Telegram API ID从字符串改成整数,去掉外层单引号,示例:
# 错误写法 api_id = '1234567' # 正确写法 api_id = 1234567
api_hash本身是字符串,保留引号即可。
- 修正接收方构造逻辑:不要手动传字符串形式的
user_id和user_hash给InputPeerUser,两个参数都必须是整数。更简单的写法是完全不用手动构造InputPeerUser对象,直接把整数形式的接收方用户ID传给send_message方法即可,Telethon会自动完成peer解析,避免手动构造的类型错误:
# 原错误写法 # receiver = InputPeerUser('user_id', 'user_hash') # client.send_message(receiver, message, parse_mode='html') # 正确写法 receiver_id = 123456789 # 替换成你实际要发送的目标用户ID,整数类型,不要加引号 client.send_message(receiver_id, message, parse_mode='html')
- 删除冗余代码:你代码里定义的
token = 'telegram token'在手机号登录的用户客户端模式下完全用不到,直接删掉即可,避免和Bot模式的逻辑混淆。
CentOS服务器部署额外注意事项
- 第一次运行脚本完成验证码登录后,运行目录下生成的
.session会话文件要保留,给运行脚本的用户开放该文件的读写权限,后续运行不需要重复接收验证码登录。 - 确认Telethon依赖版本,执行
pip install -U telethon升级到最新稳定版,避免旧版本存在的类型校验兼容问题。 - 如果需要获取目标用户的正确ID和access_hash,可以先运行脚本拉取自己的对话列表,从对话实体里拿整数类型的对应值,不要自己随便填字符串占位。
内容的提问来源于stack exchange,提问作者rodskies
相关产品推荐
相关产品推荐

