印度尼西亚 OTP API 集成会调用哪些端点?
一切都针对 https://otproute.com/api/v1 运行,使用带有 or_live_ 前缀的 Bearer 密钥。在开发者控制台创建一个;每个账号最多可持有 10 个密钥,便于把 CI 运行器与预发布(staging)机器区分开。
- 获取
GET /api/v1/services和GET /api/v1/countries并缓存这两个列表。印度尼西亚的 id 是id。 - 请求
GET /api/v1/prices?country=id&service=<id>,获取你即将测试的服务的当前价格和可用情况。库存在一天之中会变动,所以每次运行都要查询,而不要硬编码。 - 使用
POST /api/v1/activations创建订单,请求体类似{"service": "tokopedia", "country": "id"}。你会得到一个激活 id 和一个 +62 号码。 - 把该号码输入或注入到你自己应用或测试账号的电话字段中。
- 通过 Webhook 读取结果,或轮询
GET /api/v1/activations/{id}。当测试在短信步骤之前失败时,用POST /api/v1/activations/{id}/cancel干净地中止。
在测试套件开始前快速调用一次 GET /api/v1/balance,可以让运行提前失败,而不是中途失败。以合理的间隔轮询,很容易落在每分钟 300 个请求的上限之内。完整的数据结构见 API 文档。
如何用带签名的 Webhook 处理 +62 验证码?
轮询对单个开发者来说没问题;并行任务用推送投递更从容。每个账号最多注册 5 个端点,并订阅 activation.sms_received、activation.expired 和 activation.cancelled。
每个请求都带有格式为 t=<unix>,v1=<hex> 的 X-OTPRoute-Signature 请求头。把被签名的字符串重建为 <t>.<raw body>,用端点密钥计算 HMAC-SHA256,并以恒定时间与 v1 比较。在任何 JSON 解析之前先对原始字节做哈希,并丢弃时间戳太旧的请求,这样被截获的载荷就无法重放。
把事件视为以激活 id 为键,并让处理程序保持幂等:重试投递时应当发现验证码已经存储。我们关于 HMAC Webhook 安全的文章逐项讲解了这些检查。
在 OTP Route 上,哪些服务可以接收印度尼西亚短信 OTP?
印度尼西亚的实时快照涵盖 3,000 多项服务。热门线路包括 WhatsApp、Tokopedia、Shopee、Lazada、Telegram、Google(Gmail 和 YouTube)、Facebook、Instagram、TikTok、LINE、Discord、Microsoft 与 Outlook 和 ChatGPT(OpenAI)。
对于从不接触 API 的同事,控制台可以完成同样的工作:登录,选择服务,选择印度尼西亚,查看显示的价格,然后下单。+62 号码会显示在屏幕上,短信一到,验证码就会显示在旁边。如果测试取消,可以在同一个视图中取消订单。
+62 号码应该如何存储和规范化?
印度尼西亚使用 0 作为长途前缀,所以人们在国内把手机号写成 08 加其余数字。在 E.164 中 0 会消失:本地写作 0812... 的号码变成 +62812...。请存储 E.164 格式,通过去掉空格、短横线和开头的 0 来规范用户输入的内容,并交由维护良好的电话号码库判断有效性,因为印度尼西亚的用户号码并非都是同一长度。
发往印度尼西亚号码的短信模板经常是印尼语(Bahasa Indonesia),不过有些服务发送英语。请用数字模式提取验证码,而不要匹配"kode"或"code"这样的词,这样你的解析器就不会在意模板用的是哪种语言。
产品团队为什么要在印度尼西亚测试注册流程?
印度尼西亚是世界上人口最多的国家之一,其互联网使用以移动端为主,所以手机号验证位于许多开户流程的最前面。拓展东南亚的团队想看到自己的印尼注册和登录界面在真实的 +62 号码下表现正确,检查印尼语文案显示时不会被截断,并确认他们的风控规则不会拦截合法的本地用户。
区域运营和电商平台团队也会使用这条线路,验证他们为印度尼西亚店铺管理的企业账号。QA 测试页面介绍了如何把这项工作纳入回归计划。
如果印度尼西亚的验证码一直没出现怎么办?
送达时间取决于服务和线路,所以在判断失败之前,要给激活留出余地。当没有短信到达时:
- 让 20 分钟的窗口走完,或者取消;无论哪种方式,全额金额都会自动退回你的钱包。
- 稍后再下一次单,或者如果测试允许,尝试另一条服务线路。
- 确认目标服务对该操作是否接受虚拟号码。有些不接受,这正是退款规则存在的原因。
- 避免在紧凑的循环中重复下单。在两次尝试之间退避,免得 CI 任务在几秒钟内耗尽重试次数。
更多诊断思路见减少 OTP 投递失败。
有专属的 +62 号码吗?如何计费?
没有。不提供自助式的印度尼西亚长期线路。专属号码是仅限美国和加拿大的产品,低至 $1.95/月。如果你的团队确实需要长期的 +62 线路,请发邮件至 [email protected];能否安排取决于当地规定,不作承诺。
OTP Gateway 的计费使用一个预付美元钱包,没有月费,也无需选择套餐。可以用银行卡或 USDT/USDC 稳定币为钱包充值;每次充值都会触发一封带 PDF 发票的邮件,供你的财务记录使用。开发账号可以申请沙盒模式,返回模拟的号码和验证码,用于端到端的集成测试,不花费资金。请参阅价格或创建账号。
常见问题
没有本地 SIM 卡,可以测试我的应用的印度尼西亚注册流程吗?
可以。从 OTP Gateway 为相关服务订购一个 +62 号码,把它输入到你的应用中,然后在控制台或通过 API 读取验证码。
OTP Route API 对印度尼西亚使用什么国家 id?
印度尼西亚是 id,所以价格查询写作 GET /api/v1/prices?country=id&service=<id>。
印度尼西亚短信一直没到,我需要付费吗?
不需要。如果 20 分钟窗口内没有任何内容送达,或你取消了,全部费用会自动退回你的钱包。
保存印度尼西亚手机号时应该保留开头的 0 吗?
只在以本地格式显示时才保留。存储 +62 加不带 0 的国内号码,这就是 E.164 格式。
印度尼西亚的验证短信会是英文的吗?
不一定。许多是印尼语,所以请解析数字验证码,而不要依赖周围的文字。
印度尼西亚号码可以用于任何目的吗?
只限合法使用:在各服务的条款范围内测试和运营你自己的产品和账号。OTP Route《可接受使用政策》适用于每一笔订单。
服务名称均为其各自所有者的商标,OTP Route 与其无任何关联。请合法使用号码,并遵守各服务的条款及我们的可接受使用政策。