如何批量校验 WhatsApp 号码(每次请求最多 10 个)

发布于 2026年8月23日 · 更新于2026年10月9日

逐个调用 API 校验号码,对单次注册来说没有问题,但当你需要清洗成千上万条线索名单时,这就不是合适的做法了。批量校验让你每次请求检测多个号码,既节省整体耗时,也减少 HTTP 调用的次数。

本文介绍 batch-check-10 接口,它能在单次请求中校验最多 10 个 WhatsApp 号码,并给出一个可以安全处理整份文件的 Python 脚本:先去重、失败会重试、中断后可以续跑。

为什么批量校验很重要

  • 速度。 每次调用 10 个号码,同样一份名单大约减少十倍的网络往返。
  • 更易管理限流。 需要调度、控速和重试的请求更少。
  • 管道更干净。 一次调用为批次里的每个号码都返回结果,可以直接写入数据库或 CSV。

第一步:获取 API Key

注册后在控制台复制一个有效 Key。账户赠送免费点数,可以先用小文件测试。

第二步:发起批量请求

把完整国际号码用逗号分隔,传给 accounts 参数:

curl "https://api.opendata-api.com/api/project/whatsapp/batch-check-10?key=YOUR_API_KEY&accounts=15551234567,15557654321,442071234567"

响应会为批次里的每个号码分别报告它是否在 WhatsApp 上,以及它是不是企业账号。企业信息相当于免费的附加内容,方便你在同一轮处理中把名单分成个人和企业两类。

第三步:用 Python 扩展到整份名单

把名单切成每组 10 个,每组调用一次接口,并且边处理边写入磁盘。下面的脚本会先去重,失败的批次会退避重试,每个批次写一行 JSON,所以中断的任务可以接着跑,已经完成的工作不会重做。

import json
import os
import time
import requests

API_KEY = "YOUR_API_KEY"
URL = "https://api.opendata-api.com/api/project/whatsapp/batch-check-10"
OUT = "whatsapp_results.jsonl"


def chunks(items, size=10):
    for i in range(0, len(items), size):
        yield items[i:i + size]


def load_done():
    done = set()
    if os.path.exists(OUT):
        with open(OUT) as fh:
            for line in fh:
                done.update(json.loads(line)["requested"])
    return done


def check_batch(batch, attempts=4):
    for attempt in range(attempts):
        try:
            resp = requests.get(
                URL,
                params={"key": API_KEY, "accounts": ",".join(batch)},
                timeout=60,
            )
            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
        except (requests.RequestException, ValueError):
            time.sleep(2 ** attempt)   # 1s, 2s, 4s, 8s
    return None


def run(numbers):
    unique = sorted({n.strip() for n in numbers if n.strip()})
    done = load_done()
    todo = [n for n in unique if n not in done]
    failed = []
    with open(OUT, "a") as out:
        for batch in chunks(todo):
            result = check_batch(batch)
            if result is None:
                failed.extend(batch)
                continue
            out.write(json.dumps({"requested": batch, "result": result}) + "\n")
            out.flush()
    return failed


numbers = [line.strip() for line in open("numbers.txt")]
print("still to retry:", run(numbers))

有几个细节值得带进你自己的实现:

  • 请求的号码列表和原始结果一起保存。 这样你随时可以核对「问了什么」与「返回了什么」,脚本也不依赖响应里每个号码的结果具体怎么排布。
  • 每个批次之后调用 flush()。 进程崩溃时,最多只会重复一个批次。
  • 失败的号码会返回,而不是被吞掉。 重新运行脚本时,只会重新发送还没有保存结果的号码。

节省点数和时间的技巧

  • 先去重。 去掉重复号码,同一个号码永远不要查两遍。
  • 分批前先归一化。 保留数字和国家区号,剔除明显不是手机号的值。
  • 保存结果。 保存结果时带上时间戳,按周期(比如每月)复查,不必每次营销前都重查。
  • 优雅处理失败。 对失败的批次做退避重试,对反复失败的号码做记录,方便单独重跑。
  • 控制节奏。 先用顺序请求,测量之后再按需要增加并行的工作线程。
  • 只补全留下来的号码。 清洗完成后,只对通过的号码做资料查询,见 WhatsApp 号码查询指南。

单个检测与批量检测

如果是在实时注册表单中校验号码,请用单号码的 check-exist-by-phone 或更快的 check-active,两者都不必等凑够 10 个号码。如果是离线清洗名单,就用 batch-check-10 来提高吞吐量。单个号码的完整说明,包括三态的 isExist 结果,请看如何检测号码是否在用 WhatsApp。

跨渠道的批量检测

不在 WhatsApp 上的号码,可能在别的渠道仍然能够触达。清洗后的名单正好可以作为线索核验工作流的起点,把剩下的号码送去做 Telegram、Viber 和 Signal 的检测。如果你的受众也用 Snapchat,可以看看 Snapchat 号码查询是怎么处理批量请求的。

常见问题

一次请求最多能检测多少个号码? batch-check-10 最多 10 个。把它们用逗号分隔,放进 accounts 参数。名单更长时,拆成每组 10 个并循环处理。

每个结果包含什么? 响应会为每个号码分别报告它是否在 WhatsApp 上,以及它是不是企业账号。

批量请求失败了怎么办? 用指数退避重试,如果仍然失败,就记录这些号码,之后单独重跑。上面的脚本会返回失败的号码,下次运行时跳过已完成的批次。

注册表单里该用批量还是单个检测? 用单个检测。check-exist-by-phone 或 check-active 对一个号码立即作答,而批量接口是为离线清洗较大的名单设计的。

名单多久复查一次比较合适? 请按名单变化的快慢来定复查周期,活跃名单例如每月复查一次;对即将用于重要用途的号码,则应更早复查。

立即体验

在 WhatsApp 号码校验页面在线测试批量查询,或阅读 batch-check-10 接口文档。查看定价可估算你名单规模所需的点数成本。