如何快速安全批量获取15000个客户的Telegram ID(基于手机号)
批量快速获取Telegram ID的高效安全方案
你手里有15000个客户手机号,要快速安全地批量获取对应的Telegram ID,之前用的逐个添加联系人的方法不仅失效,效率还极低——这很正常,Telegram早就限制了空姓名联系人的添加逻辑,而且单线程加5秒延迟的方式处理15000个号码要花20多小时,完全不现实。
问题根源
你之前的代码核心问题:
- 依赖添加联系人的方式获取ID,现在Telegram的风控机制已经屏蔽了这种操作;
- 单线程+固定5秒延迟,效率低到无法处理大规模号码;
- 没有错误处理,一旦某个号码出问题会卡住整个流程。
可行解决方案
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
相关产品推荐
相关产品推荐

