专为需要快速交付的开发者打造的 SMS API。
覆盖 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.`,
category: "authentication",
}).safe();
if (error) throw error;
console.log(data.id);
// → "sms_4kT01Lq2m..."
Today at 2:14 PM
从 npm install 到首次发送仅需 5 分钟
用您熟悉的编程语言发送 SMS。
支持所有主流运行时的 SDK。首次发送将发往指定测试接收号码(+15005550006),因此您可以在分配号码之前先完成 CI 检查。
bird sms send \
--category authentication \
--from +15557654321 \
--metadata '{"user_id":"usr_12345"}' \
--tag campaign=signup \
--text 'Your verification code is 123456.' \
--to +15551234567我们代您处理十项申报、配置和路由工作。
路由、合规与入站基础能力,命名清晰、可审计。
- 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.accepted 到 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.`,
category: "authentication",
}).safe();
if (error) throw error;
console.log(data.id);
// → "sms_4kT01Lq2m..."
每次状态变更都是一个 webhook。
HMAC 签名载荷,防重放保护,幂等设计。所有 Bird 渠道使用相同的消息信封:学会一个,全部通用。
{
"type": "sms.delivered",
"timestamp": "2026-05-19T15:42:01.221Z",
"data": {
"sms_id": "sms_4kT01Lq2m",
"workspace_id": "ws_8KQ2",
"to": "+15005550006",
"from": "Bird",
"tags": [{ "name": "campaign", "value": "otp" }],
"metadata": { "user_id": "usr_12345" },
"carrier": "Verizon",
"mcc_mnc": "311480"
}
}
重试策略:5 秒、30 秒、5 分钟、30 分钟、2 小时、6 小时、12 小时。最终尝试失败后进入死信队列;每个死信事件均可通过控制台或 API 重新发送。
sms.accepted已被 API 接受并排队等待运营商交接。sms.sent已提交至目标运营商的 SMSC。sms.delivered已收到运营商的送达回执(DLR)。sms.rejected在运营商交接前即被拒绝:无效目标号码、被抑制或触发内容策略防护。sms.undelivered运营商报告了一个非永久性投递失败。sms.failed终态失败:消息将不会被送达。
集成了 SMS,就等于集成了 WhatsApp。
相同的鉴权模型、相同的幂等性约定、相同的错误信封、相同的 webhook 结构。区别在于各自能做什么,而不是你如何调用。
SMS
一个动词。纯文本。数字格式的收发号码。每位开发者都已形成肌肉记忆的格式。
await bird.sms.send({
to: "+15005550006",
text: `Your code is ${code}.`,
category: "authentication",
});
相同的调用方式,不同的载荷:模板化、用户已授权、在每天二十亿人打开的渠道中触达。
await bird.whatsapp.send({
from: "+15551234567",
to: "+15005550006",
template: { name: "otp", variables: { code } },
});