WhatsApp 与 Telegram 号码查询 API:该选哪一个?
WhatsApp 和 Telegram 是企业触达用户的两大消息平台,但它们是彼此独立的网络,用户群也不同。号码在一个平台上已注册,并不能说明另一个平台上的情况,所以名单需要逐个平台检测。如果你在做号码校验或数据补全,往往想知道某个联系人到底用哪个平台,或者两个都用。
本文把 WhatsApp 与 Telegram 两套查询 API 放在一起比较:你要传什么、会返回什么、各自的两段式流程如何运作,并附一个同时检测一个联系人在两个平台状态的 Python 脚本。
两者的共同点
两套 API 都回答关于联系人的相同核心问题:
- 是否已注册? 一次轻量检测就能告诉你号码(在 Telegram 上也可以是用户名)是否有账户。
- 公开资料是什么? 对已注册账户,可以获取头像以及简介或「关于」文本。
两者都采用相同的两段式流程。注册校验会为已存在的账户返回有效期 24 小时的 userHash,而较重的资料接口只接受这个 hash。缺失、未知或已过期的 hash 都会被拒绝,所以你不会为不存在的号码支付资料查询的费用。
对照一览
| Telegram | ||
|---|---|---|
| 检测接口 | check-exist-by-phone | check-exists |
| 输入 | phoneNumber,或变体接口中的 cc + phone | peer:+手机号、@用户名 / 裸用户名,或 user:<id> |
| 注册标志 | isExist:true、false 或 null(不确定,稍后重试) | exists:true 或 false,并带 reason,例如 PHONE_NOT_OCCUPIED |
| Hash | userHash,有效期 24 小时 | userHash,有效期 24 小时 |
| 附加信息摘要 | hasExtra 列出可用的补充字段 | 校验结果返回数字用户 ID、用户名和显示名称 |
| 头像 | get-avatar:临时照片链接加头像版本 ID | get-picture:base64 图片 data 加 pictureSet |
| 简介 | get-about | get-about |
| 企业资料 | get-biz-profile(isBusiness、名称、地址、网站) | 不在查询范围内 |
| 在线状态 | get-presence(受隐私限制) | 不在查询范围内 |
| 批量辅助 | batch-check-10 一次最多 10 个号码 | 每次调用检测一个 peer |
请求示例
传入的号码格式很重要。WhatsApp 接收完整国际号码的数字,空格、短横线、+ 和 00 前缀都可以。Telegram 的 peer 有三种形式,手机号必须带前导 +,手工拼接 URL 时要写成 %2B。
# WhatsApp: validate by phone number
curl "https://api.opendata-api.com/api/project/whatsapp/check-exist-by-phone?key=YOUR_API_KEY&phoneNumber=15551234567"
# Telegram: validate by phone number (plus sign encoded)
curl "https://api.opendata-api.com/api/project/telegram/check-exists?key=YOUR_API_KEY&peer=%2B15551234567"
# Telegram: validate by username
curl "https://api.opendata-api.com/api/project/telegram/check-exists?key=YOUR_API_KEY&peer=@some_username"
通过用户名查询是两者在实际使用中的差别:只有用户名时,只有 Telegram 能解析它。WhatsApp 的完整流程请阅读 WhatsApp 号码查询指南,Telegram 一侧请看 Telegram 号码检测。
资料接口各返回什么
WhatsApp 偏重企业场景。get-biz-profile 返回商家名称、认证等级、简介、地址、邮箱和网站,个人号码则返回 isBusiness=false。get-presence 只在对方隐私设置允许时才报告在线和最后在线状态,否则返回 visible=false。详细说明见头像、签名与在线状态指南。
Telegram 的资料查询集中在头像和简介。Telegram 的头像没有公开链接,所以 get-picture 会把图片以 image/jpeg 的 base64 编码放在 data 里返回,解码即可得到图片字节。pictureSet=false 表示没有头像或头像被隐藏。get-about 返回简介、数字用户 ID 和用户名;如果 peer 是群组或频道,则会得到一个 bad-request 业务码。
一次检测同一个联系人在两个平台的状态
下面的脚本在两个网络上各跑一次低成本检测,并合并成一条记录。全程使用 .get(),字段缺失时不会抛出异常。
import requests
API_KEY = "YOUR_API_KEY"
ROOT = "https://api.opendata-api.com/api/project"
def get(project, operation, **params):
params["key"] = API_KEY
resp = requests.get(f"{ROOT}/{project}/{operation}", params=params, timeout=30)
resp.raise_for_status()
body = resp.json()
# A reply can be wrapped more than once as {"code": ..., "data": {...}}
while isinstance(body, dict) and "code" in body and isinstance(body.get("data"), (dict, list)):
body = body["data"]
return body
def channels(number):
"""Return which platforms the number is registered on."""
wa = get("whatsapp", "check-exist-by-phone", phoneNumber=number.lstrip("+"))
tg = get("telegram", "check-exists", peer="+" + number.lstrip("+"))
return {
"number": number,
"whatsapp": wa.get("isExist"), # True, False or None (unknown)
"telegram": tg.get("exists"),
"telegram_reason": tg.get("reason"),
"wa_hash": wa.get("userHash"),
"tg_hash": tg.get("userHash"),
}
print(channels("+15551234567"))
WhatsApp 字段为 None 并不等于「否」,它表示答案不确定,稍等片刻再重试。请保存这两个 hash,24 小时内用它们调用资料接口,过期后再重新做一次注册校验。
什么时候用哪一个
- 消费者线索名单与广泛的国际覆盖:从 WhatsApp 开始。
- 以 Telegram 为中心的社群、只有用户名而没有号码、群组和频道受众:使用 Telegram。
- 追求最大覆盖:两个都跑。联系人可能在一个平台上能触达,而在另一个平台上不存在,渠道选择会影响送达率和互动效果。
各平台的普及程度因国家而差异很大,所以别凭印象判断,要用自己的名单来衡量:抽一份样本在两个平台上各检测一遍,按国家比较命中率,再据此排定优先级。想把各渠道的结果合成一个联系人质量评分,请看线索核验工作流。
最佳实践
- 把两次检测视为相互独立。 不要根据 Telegram 的命中推断 WhatsApp 是否注册,反过来也一样。
- 发送前先校验。 如果打算发消息,WhatsApp 消息发送指南和 Telegram 消息发送指南都从收件人校验开始。
- 分平台缓存。 保存注册结果和 hash,并附上时间戳,按计划重新检测,而不是每次触达都检测。
- 尊重隐私。 简介为空、没有头像都是正常结果,不是错误。资料数据只能用于合法目的,并遵守各平台的条款。
常见问题
号码在 WhatsApp 上,是不是也在 Telegram 上? 不一定。两个网络彼此独立,需要分别检测。把两个查询都跑一遍,并把每个结果分开对待。
哪个平台支持按用户名查询?
Telegram。它的 check-exists 接口除了 +手机号 和 user:<id>,还接受 @用户名 或裸用户名。WhatsApp 的检测则从手机号开始。
两套 API 的两段式流程一样吗?
一样。每个注册校验接口都会为已存在的账户返回有效期 24 小时的 userHash,资料接口只接受这个 hash。
哪一个能返回企业信息?
WhatsApp。它的 get-biz-profile 接口返回商家名称、地址和网站,并用 isBusiness=false 标记个人号码。Telegram 的查询返回头像和简介。
如何一次检测大量号码?
WhatsApp 提供 batch-check-10,一次请求最多检测 10 个号码,可以减少大名单的 HTTP 往返次数。Telegram 的检测每次调用处理一个 peer。
立即开始
两套 API 使用相同的免费点数模式,可以先测试再决定。在登录页创建账户,从控制台复制密钥,然后并排试用 WhatsApp 和 Telegram 页面,并查看定价了解每次请求的成本。