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

MTProto Telegram API 用户B发消息返回PEER_ID_INVALID但用户A正常

错误核心原因

PEER_ID_INVALID 错误90%以上的场景都是因为使用了非当前登录账号对应的peer access_hash。
Telegram 出于隐私保护设计,任意用户、群组、频道的 access_hash 都是和查询账号绑定的,用户A账号获取到的用户X的access_hash仅对A的会话有效,直接复用给用户B账号必然会触发错误,这也是你当前遇到的最可能的诱因。

其余可能的触发原因包括:

  • 用户X设置了隐私限制,仅允许联系人发送消息,且用户B既不是X的好友,也没有和X在共同的群组/频道中
  • 你填写的用户X的user_id本身错误,不是Telegram分配的全局用户ID
  • 用户X的账号已经被官方封禁、主动注销
  • 你读取的是过期缓存的access_hash,用户X修改账号相关设置后旧哈希已经失效
解决思路
  1. 先为用户B账号单独拉取用户X的有效access_hash,可选的拉取方式:
    • 如果B和X是好友,调用contacts.getContacts接口拉取完整联系人列表,提取X对应的access_hash
    • 如果知道X的公开用户名,调用contacts.resolveUsername接口,传入用户名直接获取B会话下X对应的inputPeerUser结构,里面包含正确的user_id和access_hash
    • 如果B和X在同一个群组/频道,调用channels.getParticipants(超级群/频道)或messages.getChats(普通群)拉取群成员列表,提取X的对应哈希
  2. 校验发送权限:先用官方客户端登录用户B账号,尝试直接给X发消息,如果官方客户端也无法发送,说明是X的隐私设置限制,需要先让B发送好友申请并通过,或者加入同一个共同群后再尝试发送
  3. 校验参数正确性:确认你使用的user_id是Telegram分配的全局数字ID,不是短ID、用户名或者其他场景下的临时ID
  4. 修复random_id生成逻辑:你当前代码里的random_id生成规则不严谨,Telegram要求random_id是全局唯一的64位整数,仅用用户ID加随机数容易出现重复,可能会导致消息发送失败或者重复发送,建议用完全随机的64位整数生成规则

内容的提问来源于stack exchange,提问作者jo-chris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:27:05