您有来自表单、结账和客户关系管理系统的电话号码,您需要知道它们是否有效、是否为移动号码、属于哪个国家,以及在发货之前如何正确格式化它们。在本文结束时,您将验证一个电话号码并提取运营商、国家、线路类型、标准格式(E.164、国际、国内)、时区等信息,使用一个HTTP GET请求。
此API返回的内容及使用时机
电话验证API提供给定电话号码的即时验证和丰富的元数据。您传递一个参数(电话号码),并接收如下字段:
- is_valid, is_possible: 您可以根据这些验证标志来控制流程
- provider, line_type, is_mobile: 路由和消息通道决策
- country, country_code, country_iso2/3, continent, country_flag: 本地化和合规性
- format_national, format_e164, format_international, format_rfc3966: 存储和显示格式
- time_zones, utc_offset: 消息窗口和调度
- currency_code, location, national_number: 账单或客户关系管理的丰富信息
常见用途包括注册表单验证、短信可送达性检查、用户数据库中的电话号码标准化、基于国家的客户路由和时区感知消息。
在Zyla API Hub上入门
该API可在Zyla API Hub上使用,这是一个API市场,您只需一个账户、一个API密钥,以及超过10,000个公共API的订阅+配额模型。要开始:
- 打开列表:开始7天的电话验证API试用。
- 点击订阅(或在可用时开始7天的试用)并获取您的API密钥。没有免费计划;访问是订阅+配额,而不是按调用付费。请查看API页面以获取当前访问选项和定价。
- 使用Authorization: Bearer YOUR_API_KEY调用端点。
您将使用的端点
此API公开一个简单的读取端点。
- 方法:GET
- URL:https://zylalabs.com/api/10138/phone-validator-api/26579/phone-validation
- 查询参数:
- phone (string, required): 一个电话号码,例如,+41799530236
cURL示例(复制/粘贴)
curl -s -X GET "https://zylalabs.com/api/10138/phone-validator-api/26579/phone-validation?phone=%2B41799530236" \
-H "Authorization: Bearer YOUR_API_KEY"
官方示例响应
{
"is_valid": true,
"is_disposable": false,
"provider": "Swisscom",
"location": "瑞士",
"country": "瑞士",
"country_iso2": "CH",
"country_iso3": "CHE",
"country_code": 41,
"continent": "欧洲",
"time_zones": [
"Europe/Zurich"
],
"format_national": "079 953 02 36",
"format_e164": "+41799530236",
"format_international": "+41 79 953 02 36",
"format_rfc3966": "tel:+41-79-953-02-36",
"line_type": "mobile",
"is_mobile": true,
"is_possible": true,
"national_number": "799530236",
"country_flag": "🇨🇭",
"currency_code": "CHF",
"utc_offset": "+02:00"
}
您可能首先使用的内容:
- is_valid和is_possible以接受或拒绝边缘输入
- format_e164用于规范存储(单一真实来源)
- line_type和is_mobile用于控制SMS与语音与WhatsApp
- country_iso2、country_code和time_zones/utc_offset用于路由和调度
- provider用于运营商特定规则或下游丰富信息
Python示例:验证和标准化电话号码
此示例调用相同的端点,检查有效性,然后存储E.164格式和您可能希望在用户资料中保留的一些元数据。
import requests
API_URL = "https://zylalabs.com/api/10138/phone-validator-api/26579/phone-validation"
API_KEY = "YOUR_API_KEY"
def validate_phone(phone: str) -> dict:
params = {"phone": phone}
headers = {"Authorization": f"Bearer {API_KEY}"}
resp = requests.get(API_URL, params=params, headers=headers, timeout=10)
resp.raise_for_status()
data = resp.json()
# 最小检查以控制注册或发送一次性密码
if not data.get("is_valid") or not data.get("is_possible"):
return {
"accepted": False,
"reason": "无效或不可能的号码",
"raw": data
}
normalized = {
"accepted": True,
"e164": data.get("format_e164"),
"national": data.get("format_national"),
"international": data.get("format_international"),
"rfc3966": data.get("format_rfc3966"),
"is_mobile": data.get("is_mobile"),
"line_type": data.get("line_type"),
"carrier": data.get("provider"),
"country": data.get("country"),
"country_iso2": data.get("country_iso2"),
"country_code": data.get("country_code"),
"continent": data.get("continent"),
"time_zones": data.get("time_zones"),
"utc_offset": data.get("utc_offset"),
"currency_code": data.get("currency_code"),
"national_number": data.get("national_number"),
"country_flag": data.get("country_flag"),
"is_disposable": data.get("is_disposable"),
}
return normalized
if __name__ == "__main__":
result = validate_phone("+41799530236")
print(result)
节省时间的实施说明
- 规范存储:将format_e164用作规范电话号码字段。如果您需要审计或用户体验重新显示,请单独保留原始输入。
- 显示与拨打:向同一国家的用户显示format_national;跨境显示使用format_international;拨打或以编程方式发送消息时使用E.164。
- 调度消息:使用time_zones和utc_offset在非工作时间抑制消息。将两者与用户一起存储,以便您可以在每次发送时无需重新验证。
- 国家限制:如果您的产品有国家限制,请在注册时使用country_iso2和country_code进行限制。
- 通道选择:使用is_mobile和line_type选择SMS、语音或其他通道。
- 缓存:在合理的时间窗口内缓存成功的E.164查找,以减少延迟和频繁联系号码的配额使用。
- 错误处理:根据上下文将非2xx视为临时或永久。对于同步用户操作(例如,一次性密码),返回可读消息;对于批处理作业,重试并退避。
您本周可以交付的端到端流程
注册表单:提交时验证
- 在表单提交时,将输入的号码发送到端点。
- 如果is_valid或is_possible为false,则拒绝。显示format_national以显示更正后的格式。
- 存储format_e164、country_iso2和line_type以供下游流程使用。
消息路由:选择正确的通道
- 查看is_mobile和line_type以确定SMS资格。
- 如果您有基于运营商的发送规则,请使用provider。
- 根据time_zones/utc_offset进行节流或调度,以尊重当地时间。
客户关系管理丰富:在系统间标准化号码
- 批量处理您的电话号码字段,为每个唯一号码调用API。
- 用format_e164替换不一致的格式,并保留national_number以供用户界面搜索或本地拨号。
- 添加country_iso2和currency_code以启用区域特定的操作和报告。
通过AI代理从MCP拨打电话
您可以通过Zyla的MCP端点路由电话,该端点与Claude Code、Cursor、Windsurf和其他兼容MCP的客户端一起使用。配置您的代理或客户端以访问:
将您的Zyla API密钥(apikey=YOUR_API_KEY)提供给MCP端点。从那里,您的代理可以调用相同的电话验证API操作,而无需在提示中嵌入原始HTTP逻辑。当您希望助手在聊天或代码会话中验证用户提供的号码时,这非常有用。
生产检查清单
- 身份验证:在每个请求中发送Authorization: Bearer YOUR_API_KEY。
- 输入标准化:接受带或不带前导+的用户输入,但始终存储format_e164。
- 隐私:将电话号码视为个人身份信息。尽量少记录并在痕迹中删除。
- 幂等性:通过E.164在您的队列工作者中去重调用,以避免重复计费配额。
- 可观察性:记录is_valid、is_possible、line_type分布,以捕捉输入中的异常。
- 后备用户体验:在API超时时,让用户继续并发出警告或提示以确认号码。
故障排除提示
- 意外的401/403:确保Authorization头使用Bearer YOUR_API_KEY,并且密钥在您的订阅中处于活动状态。
- 未返回数据:检查电话号码参数是否经过URL编码,并在可用时包含国家前缀。
- 格式不匹配:优先使用API的规范格式_e164,而不是本地客户端格式库,以保持一致性。
参考:端点详细信息
电话号码验证
- 方法:GET
- URL:https://zylalabs.com/api/10138/phone-validator-api/26579/phone-validation
- 查询参数:phone (string, required)
- 身份验证头:Authorization: Bearer YOUR_API_KEY
- 返回:验证标志、运营商、国家和ISO代码、大洲、时区和UTC偏移、国内和国际格式、RFC3966 URI、线路类型、移动标志、国家号码、国家标志和货币代码。
如何评估成本和访问
访问是订阅+配额,而不是按调用付费。没有免费计划。可能会提供7天的试用;请查看列表以获取当前选项。如果您正在测试新的流程,请从试用开始,在功能标志后面部署,并在增加流量之前监控配额使用情况。
常见问题
API是否接受没有前导+的号码?
将电话号码参数按您收到的方式传递,但为了可靠的结果,请包括国家代码(例如,+41...)。响应提供标准化格式,包括E.164。
我应该在数据库中存储哪个格式?
将format_e164存储为规范值。仅在您需要直接向用户显示时保留format_national或format_international。
我如何决定是发送SMS还是语音?
使用is_mobile和line_type。仅在is_mobile为true且line_type指示为移动号码时发送SMS。
我可以根据用户的当地时间调度消息吗?
可以。使用time_zones和utc_offset在当地时间调度。持久化这些字段,以便您在每次发送时无需重新验证。
我在哪里可以获得API密钥,计费是如何处理的?
在列表页面上订阅以获取您的密钥。计费是订阅+配额。在列表上可用时开始7天的试用。
交付它
您可以通过一次GET调用和一个必需的参数来验证和标准化电话号码。创建您的密钥,插入Authorization头,并在您的数据模型中标准化为E.164。当您准备好时,从这里开始:开始7天的电话验证API试用。