Bird vs Bandwidth
Bird vs Bandwidth:SMS 对比
Bird 将 SMS 发送、注册和投递操作整合到一个 API 和工作区中,并为你的代理提供托管工具。将该运营模式与 Bandwidth 的消息应用、运营商服务和本地部署的 MCP 服务器进行对比,然后根据你的发送者和市场要求规划集成方案。
将图标拖到圆点上。使用方向键移动已聚焦的图标。按 Escape 取消拖动。
每天都被构建
世界级软件的团队所信赖。
运营该通道
SMS 覆盖范围
运营商线路
投递可见性
Bandwidth 的优势所在。
Bird 的不同之处。
Bandwidth 的优势所在
消息之外的运营商服务。Bandwidth 提供语音、消息和紧急服务。使用这些服务的团队应评估更换 SMS 提供商对整体部署的影响。
支持更多语言的辅助库。 官方 SDK 覆盖 Java、Node.js、Python、PHP、C# 和 Ruby。使用 Java 或 Ruby 的团队需要直接调用 Bird 的 HTTP API。
Bird 的不同之处
代理可以直接操作账户。 托管在 mcp.bird.com 的 MCP 服务器为代理提供工具,可发送 SMS、读取送达状态以及在您的真实工作区中注册 10DLC 品牌。
恢复不确定的发送。在 Bird 的三小时保留窗口内使用相同的 Idempotency-Key 和请求来恢复原始结果。窗口过期后,该键可能会创建新请求。
消息意图是一等字段。 每条自由文本消息都携带类别:事务性、营销、认证或服务,而 Bandwidth 的发送接口没有对应字段。
对比矩阵
逐项能力对比。
Bandwidth 通过本地 MCP 服务器提供账户工具,并提供丰富的 SDK 选择。Bird 托管工作区工具,并将发送和注册整合在一个 API 主机下。请结合发送者要求和报告对比这两种运营模式。
| 功能 | Bird | Bandwidth |
|---|---|---|
| 发送请求 | 以 JSON 格式发送至区域主机上的 /v1/sms/messages,使用 Bearer API 密钥认证。 | 以 JSON 格式发送至其消息主机上账户路径下的 messages 端点,包含 from、to 和 text 字段,通过 HTTP Basic 认证并携带 applicationId。 |
| 安全重试 | 在 Bird 的三小时保留窗口内使用相同的 Idempotency-Key 和请求进行重试。 | 经审查,Bandwidth 的 Create Message 请求未列出发送幂等性参数。在重新提交之前,请根据消息状态核实不确定的请求。 |
| 消息意图 | 每条自由文本消息都携带类别:事务性、营销、认证或服务。 | tag 携带自由格式标签,priority 设置送达优先级,但两者都不声明消息发送的目的。 |
| 托管 MCP 服务器 | 使用您自己的代理。mcp.bird.com 是托管服务,Claude Code、Cursor、ChatGPT 或您自己的运行时只需登录一次即可使用相同的工具操作工作区。 | Bandwidth 发布了 MCP 服务器,其工具也能操作账户。但它是需要下载并在本地运行的包,客户端必须将其作为本地进程启动,且从本地配置中读取您的生产凭据。 |
| A2P 10DLC 注册 | /v1/sms/10dlc/* 通过 API 注册品牌和活动。 | 其活动管理 API 可注册品牌和活动,支持品牌审核和活动导入,作为 Campaign Registry 的直接合作伙伴。 |
| 整个渠道共用一个主机 | 发送、10DLC 注册和投递事件共享同一个基础 URL 和密钥。 | 发送在其消息主机上,注册在其主 API 主机上,各自有独立的账户路径,因此客户端需要维护两个根地址。 |
| 投递事件 | 工作区 Webhook 订阅您指定的 SMS 事件类型,如 sms.sent、sms.delivered 和 sms.failed,以符合 Standard Webhooks 规范签名的 JSON 格式投递。 | 回调在消息指定的 Application 上配置,而非按每次发送配置。 |
| SDK 语言 | 适用于 TypeScript、Python、Go 和 PHP 的 SMS SDK。其他语言可使用 HTTP API。 | 提供 Java、Node.js、Python、PHP、C# 和 Ruby 的官方 SDK。 |
相同的发送方式
发送调用的结构相似。
两个示例都通过 from、to 和 text 字段发送文本。Bandwidth 将发送关联到一个 applicationId 并使用 HTTP Basic 认证。Bird 使用 Bearer 密钥、工作区 Webhook 和自由文本发送时的 category。成功的请求是投递流程的起点。
Bandwidth
import { Configuration, MessagesApi } from "bandwidth-sdk";
const config = new Configuration({
clientId: process.env.BW_CLIENT_ID!,
clientSecret: process.env.BW_CLIENT_SECRET!,
});
const messagesApi = new MessagesApi(config);
try {
const response = await messagesApi.createMessage(process.env.BW_ACCOUNT_ID!, {
applicationId: process.env.BW_APPLICATION_ID!,
from: "+15557654321",
to: ["+15551234567"],
text: "Your table is ready.",
});
console.log(response.data);
} catch (err) {
console.error(err);
}
Bird
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const message = await bird.sms
.send({
from: "+15557654321",
to: "+15551234567",
text: "Your table is ready.",
category: "transactional",
});
console.log(message.id, message.status);