覆盖 150 多个国家,240 条直连运营商线路,统一认证模型。全球约 40% 的商业 SMS 流量经由 Bird 网络传输——我们已深耕十年。95% 的消息在 2.5 秒内送达。
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
从 npm install 到首次发送仅需 5 分钟
用您熟悉的编程语言发送 SMS。
支持所有主流运行时的 SDK。首次发送将发往指定测试接收号码(+15005550006),因此您可以在分配号码之前先完成 CI 检查。
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: "Hello from Node.",
}).safe();我们代您处理十项申报、配置和路由工作。
路由、合规与入站基础能力,命名清晰、可审计。
- 01
覆盖 150 多个国家
一个统一 API,一个账单关系——无需逐区域签订合同。
- 02
240 条运营商直连线路
我们与移动运营商之间没有中间聚合商抽取利润或丢失回执。
- 03
运营商级路由
当运营商路径质量下降时实时重新选路;故障切换在您察觉之前已完成。
- 04
双向 SMS 入站
入站消息以 HMAC 签名的 webhook 形式送达到您已分配的号码上。
- 05
各种类型的号码
长号码、短号码、免费电话号码和字母数字发送者 ID——通过一个端点统一分配。
- 06
A2P 10DLC 控制台内注册
品牌和活动注册在控制台中完成;状态可通过 API 查询。
- 07
发送前 MNP 查询
我们在每次发送时解析接收方的当前运营商,确保路由始终正确。
- 08
STOP / HELP 合规
自动按接收方识别退订关键词;退订列表可通过 API 查询。
- 09
以 webhook 形式接收送达回执
每次状态变更都会触发一个签名事件——从 sms.queued 到 sms.delivered 或 sms.failed。
- 10
分段与 Unicode 安全
SDK 在发送前计算分段数,并在编码切换可能导致消息拆分时发出警告。
我们为何构建 SMS
SMS 是最复杂的通信渠道。我们构建了让它变得简单可控的 API。
每个国家有不同的规则,每家运营商有不同的路由,每个地区有不同的发送者 ID 规范。我们运营 SMS 已有十年,所有这些知识都整合在一个端点、一个认证模型、一套 Webhook 契约之后。无论上游如何变化,您调用的 bird.sms.send 接口始终不变。
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..."
每次状态变更都是一个 webhook。
HMAC 签名的载荷,防重放,幂等。所有 Bird 渠道使用相同的信封格式——学会一个,就学会了全部。
{
"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",
"segments": 1,
"latency_ms": 1284
}
}
重试策略:5 秒、30 秒、5 分钟、30 分钟、2 小时、6 小时、12 小时。最终尝试失败后进入死信队列;每个死信事件均可通过控制台或 API 重新发送。
sms.queued已被 API 接受并排队等待运营商交接。sms.sent已提交至目标运营商的 SMSC。sms.delivered已收到运营商的送达回执(DLR)。sms.failed永久失败——运营商拒绝、无效号码或命中退订列表。sms.received在您已分配的号码上收到入站消息。sms.opted_out接收方发送了 STOP 关键词;后续发往该号码的消息将被抑制。
集成了 SMS,就等于集成了 WhatsApp。
相同的鉴权模型、相同的幂等性约定、相同的错误信封、相同的 webhook 结构。区别在于各自能做什么,而不是你如何调用。
SMS
一个动词。纯文本。数字格式的收发号码。每位开发者都已形成肌肉记忆的格式。
await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: `Your code is ${code}.`,
});
同一个动词。不同的载荷——模板化、用户已授权、运行在全球 20 亿人每天打开的渠道上。
await bird.whatsapp.send({
from: "+15551234567",
to: "+15005550006",
template: { name: "otp", variables: { code } },
});