有人发送到你已开通号码的每条消息都会以 HMAC 签名 webhook 形式送达。读取文本、从同一号码回复,并让 Bird 替你处理 STOP 和 HELP。在你已经在使用的发送 API 上构建会话式流程和自动回复。
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: "+31612345678",
text: "Your order #4821 has shipped. Track it: bird.ly/t/4821x",
category: "transactional",
}).safe();
if (error) throw error;
console.log(data.id);
// → "sms_01m11jw130e7svjzv70kgqr38w"
入站只是又一个 webhook。
双向通信是 Bird SMS API 的一部分。当有人向您的号码发短信时,您会在同一个已签名、防重放的端点上收到 sms.received 事件——该端点已经在传递您的送达回执。无需第二套集成,也无需轮询:只需验证一次签名,然后按类型进行路由。
监听有回复回来的内容。
一条入站消息和一次退订都是事件,与投递回执相同。验证一个签名,按 type 进行分支,并在你已经写好的处理程序中处理每一个。
import { bird } from "@/lib/bird";
export async function POST(req: Request) {
const event = bird.webhooks.unwrap(
await req.text(),
Object.fromEntries(req.headers),
);
switch (event.type) {
case "sms.received":
await handleInbound(event.data.from, event.data.text);
break;
case "sms_suppression.created":
await removeFromCampaigns(event.data.destination);
break;
}
return new Response(null, { status: 204 });
}在每个 Bird 渠道上负载都是相同的信封:一个 evt_ id、一个 HMAC 签名,以及一个防重放的时间戳。
sms.received一条入站消息到达您的号码:包含发送者、您的号码和短信内容。sms.delivered你发送的一条回复到达了手机(运营商 DLR)。sms_suppression.created发送者发送了 STOP 短信:Bird 已抑制该发送者与接收者的配对,并阻止后续从该配对发送的消息。
一条完整的已签名入站消息。
这就是一个 sms.received 事件在传输中的样子。from 是给你发短信的人,to 是你已开通的号码,而 segments 和 encoding 的报告方式与发送时相同,因此一条很长的入站回复永远不会出乎意料。
{
"id": "evt_7nQ9xLp2aR...",
"type": "sms.received",
"created_at": "2026-06-26T14:03:11Z",
"data": {
"id": "sms_5hV02Mr3n...",
"from": "+15005550006",
"to": "+14155550172",
"text": "YES book me in for Thursday",
"encoding": "GSM-7",
"segments": 1
}
}从同一号码回复。
一次回复就是一次把 from 和 to 互换的发送。把 from 设为你的号码、to 设为原始发送者,会话便始终保持在同一号码上,因此接收方看到的是一个会话线程,而不是每次都换一个新的发送者。在此之上构建自动回复、确认或完整的会话式流程。
async function handleInbound(from: string, text: string) {
if (/^yes\b/i.test(text)) {
const { error } = await bird.sms.send({
from: "+14155550172", // your two-way number
to: from, // reply to the sender
text: "Booked. See you Thursday at 10am.",
category: "transactional",
}).safe();
if (error) throw error;
}
}STOP、HELP 和 START 均由我们为你处理。
Bird 会在保留关键词到达您的处理程序之前识别它们:STOP 将发送者添加到您的抑制列表并触发 sms_suppression.created,HELP 返回自动帮助回复,START 则重新选择加入。之后该发送者向被抑制号码发送的消息将被自动阻止。您仍然可以保留自己的关键词,如 YES、BOOK 或流程所需的任何词。完整的关键词和退订规则请参阅退订处理。
付诸实践。
继续查阅此主题的文档、指南和示例。资源为英文。