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

如何快速安全批量获取15000个客户的Telegram ID(基于手机号)

批量快速获取Telegram ID的高效安全方案

你手里有15000个客户手机号,要快速安全地批量获取对应的Telegram ID,之前用的逐个添加联系人的方法不仅失效,效率还极低——这很正常,Telegram早就限制了空姓名联系人的添加逻辑,而且单线程加5秒延迟的方式处理15000个号码要花20多小时,完全不现实。

问题根源

你之前的代码核心问题:

  1. 依赖添加联系人的方式获取ID,现在Telegram的风控机制已经屏蔽了这种操作;
  2. 单线程+固定5秒延迟,效率低到无法处理大规模号码;
  3. 没有错误处理,一旦某个号码出问题会卡住整个流程。

可行解决方案

1. 用官方API直接解析手机号

Telegram官方提供了contacts.resolvePhone接口,可以直接通过手机号查询绑定的用户信息,不需要添加联系人,这是最合规高效的方式。推荐用Pyrogram或Telethon这两个成熟的MTProto API库实现。

2. 异步并发+动态限流

用异步并发批量处理号码,同时严格控制请求频率,避免触发Telegram的风控。建议并发数控制在5-10个,每个请求后加0.5-1秒的小延迟,比单线程快10倍以上。

3. 错误处理与重试

对无效号码(未绑定Telegram)或请求失败的情况做捕获,失败请求最多重试3次,避免整个流程中断。

优化后的代码示例(Pyrogram)

import asyncio
from pyrogram import Client

# 替换成你的Telegram API信息(从my.telegram.org获取)
API_ID = 123456
API_HASH = "abcdef1234567890abcdef1234567890"
ACCOUNT_PHONE = "+1234567890"

async def get_telegram_id(client, phone_num):
    try:
        # 调用官方接口解析手机号
        user = await client.resolve_phone(phone_num)
        return phone_num, user.id
    except Exception as e:
        # 打印错误信息,跳过无效号码
        print(f"号码 {phone_num} 解析失败: {str(e)}")
        return phone_num, None

async def batch_process(numbers):
    async with Client("telegram_id_resolver", API_ID, API_HASH, phone_number=ACCOUNT_PHONE) as app:
        # 控制并发数为8,可根据实际情况调整
        semaphore = asyncio.Semaphore(8)
        
        async def bounded_process(num):
            async with semaphore:
                result = await get_telegram_id(app, num)
                await asyncio.sleep(0.5)  # 小延迟避免触发风控
                return result
        
        # 批量创建异步任务并执行
        tasks = [bounded_process(num) for num in numbers]
        results = await asyncio.gather(*tasks)
        
        # 筛选有效结果并保存
        valid_ids = {num: tid for num, tid in results if tid is not None}
        with open("telegram_ids_result.txt", "w", encoding="utf-8") as f:
            for num, tid in valid_ids.items():
                f.write(f"{num}\t{tid}\n")
        
        print(f"处理完成!共获取到 {len(valid_ids)} 个有效Telegram ID")

if __name__ == "__main__":
    # 替换成你的15000个手机号列表(确保是国际格式,比如+8613xxxxxxxxx)
    phone_numbers = ["+8613800138000", "+1234567890", ...]
    asyncio.run(batch_process(phone_numbers))

关键注意事项

  • 账号安全:必须用你自己的活跃Telegram账号(有正常聊天记录、使用超过1个月),不要用批量注册的小号,否则大概率被封号;
  • 频率调整:如果遇到429错误(请求过于频繁),立刻降低并发数或增加延迟,不要硬扛;
  • 号码格式:所有手机号必须是国际标准格式(带国家码),保留你之前的conv_number函数做格式转换;
  • 合规性:获取用户ID前要确保符合当地隐私法规,不要用于违规营销或未经授权的操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 10:07:46