Bird 通过 240 条直连运营商连接覆盖 150 多个国家/地区。当某条运营商路径质量下降时,我们会在下一条消息发出之前实时重选路由。而且每次发送都会返回一份运营商投递回执,因此你始终知道手机是否收到了它。
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const code = generateOtp();
const { data, error } = await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: `Your Bird verification code is ${code}. Reply STOP to opt out.`,
}).safe();
if (error) throw error;
console.log(data.id);
// → "sms_4kT01Lq2m..."Today at 2:14 PM
你的发送所依托的那一层。
路由是 Bird SMS API 之下的那一层。你用一个 from、一个 to 和一段 text 调用一个端点;在底层,我们会解析接收方的运营商、选择一条连接并交付消息。当某条路径变差时,路由会改变,而你的代码不会。
路由层为你决定的内容。
按消息解析,隐藏在一次 API 调用背后。
- 01
直连运营商连接。
240 条连接将我们直接接入 150 多个国家/地区的移动运营商。你的发送与运营商的 SMSC 之间没有转售商链条。
- 02
实时路由重选。
我们监测每条路径上的投递和延迟。当某条运营商路由开始质量下降时,下一条消息会经由一条更健康的连接发往同一运营商。故障转移在你察觉之前就已完成。
- 03
发送前进行 MNP 查询。
我们在每次发送时解析接收方当前的运营商,因此一个已携号转网的号码会路由到实际持有它的运营商,而不是它最初被分配时所属的运营商。
- 04
为每条消息提供一份投递回执。
运营商自己的 DLR 会以 sms.delivered 或 sms.failed webhook 形式返回,携带它落地的网络以及所用的时间。你这边无需推测。
- 05
按路由选择最低成本或最高质量。
路由会为每个目的地权衡成本与投递质量。事务性流量倾向于最快、最可靠的路径;批量流量则可以偏向最低成本。
为什么直连运营商胜过聚合商链条。
大量 SMS 流量在到达运营商之前会经过两三个转售商。每一次跳转都增加了一处消息可能停滞、价格可能攀升、投递回执可能被丢弃或伪造的地方。直连连接消除了这些中间商:消息从 Bird 直接到运营商,回执也沿同一路径返回。这正是全球约 40% 商业 SMS 已经通过这张网络运行的方式,其中 95% 的消息在 2.5 秒内投递。
投递回执,直接来自运营商。
一次发送会返回 202;结果会以一个携带运营商 DLR 的签名 webhook 形式送达。负载会告诉你它落地的网络、目的地国家/地区,以及往返延迟。
{
"type": "sms.delivered",
"id": "evt_7jR42x...",
"created_at": "2026-05-19T15:42:01.221Z",
"data": {
"sms_id": "sms_4kT01Lq2m",
"from": "Bird",
"to": "+15005550006",
"mcc_mnc": "310-260",
"country": "US",
"latency_ms": 1284
}
}mcc_mnc 标识了接收该消息的确切移动网络;一个与号码归属运营商不同的值,就是你判断接收方已携号转网的信号。
sms.delivered运营商已确认手机收到了消息(DLR)。sms.failed运营商拒绝或无法投递——并附带原因。
路由依赖号码情报。
用于选择正确运营商的 MNP 查询,与你可以通过 号码查询(Lookup) 单独调用的号码情报是同一种——发送前获取线路类型、当前运营商和可携性。一旦消息上线,接入 webhook 以接收投递回执,阅读 错误参考 以处理每个失败码,或查看 可投递性指南 了解这些回执告诉你什么。