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

Telethon中utils.resolve_invite_link返回错误Chat/Channel ID如何解决

问题原因解析

你调用utils.resolve_invite_link返回的第二个字段不是频道的全局公开ID,属于Telegram的隐私设计和标识体系差异导致的正常现象,具体原因如下:

  • Telegram聊天ID的基础规则
    你从IDBot拿到的-1009876543210是频道的全局唯一完整ID:前缀-100是Telegram为所有频道/超级群组固定分配的类型标识,去掉前缀后的9876543210是频道的原始ID,网页端链接里展示的-9876543210是Web端的简化格式,省略了中间的100标识。
  • resolve_invite_link返回值的含义
    该方法返回的三元组结构为(peer_type, invite_link_peer_id, access_hash),三个字段的含义分别为:
    1. 第一个是聊天类型枚举值,不同第三方库的枚举定义略有差异,通常2对应频道类型
    2. 第二个是该私有邀请链接专属的关联ID,不是频道的全局ID:私有频道的邀请链接本身绑定独立的访问标识,Telegram出于隐私保护设计,不会通过未鉴权的邀请链接解析接口直接暴露频道的全局ID,避免邀请链接泄露后被无关人员恶意检索频道信息
    3. 第三个是私有频道的访问哈希,所有对私有频道的操作都需要配合ID和该哈希值才能正常执行
  • 正确获取私有频道全局ID的方法
    你需要先完成账号鉴权,再通过客户端接口拉取频道的完整实体信息才能拿到全局ID,以Telethon库为例,示例代码如下:
    from telethon import utils
    from telethon.sync import TelegramClient
    
    # 替换为你自己的api_id、api_hash,完成账号登录
    client = TelegramClient('session_name', your_api_id, your_api_hash)
    
    with client:
        link = input("Please provide channel invite link: ")
        invite_peer = utils.resolve_invite_link(link)
        # 拉取频道完整实体,需要你的账号拥有该频道的访问权限
        channel_entity = client.get_entity(invite_peer)
        # 拼接生成完整的频道ID
        full_channel_id = int(f"-100{channel_entity.id}")
        print(full_channel_id)
    
    运行上述代码即可输出和IDBot验证结果一致的频道ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:30:00