Eén API voor elk
sms-bericht dat je verstuurt.

Verstuur transactionele berichten en notificaties via Bird. Geef je tekst en afzender op, of gebruik een template; bekijk de codering en het segmentaantal in het antwoord. Voeg een idempotency-sleutel toe voor veilig opnieuw proberen en volg de aflevering via ondertekende webhooks.

Eén bericht. Een zichtbaar resultaat.

Voorbeeldverzending

FVeldnotities
Je bestelling #4821 ligt klaar om op te halen.
Status202 Accepted
CoderingGSM-7
Segmenten1

Bekijk acceptatie en een later ontvangstbewijs van de provider. Dit voorbeeld verstuurt geen sms; aflevering bewijst niet dat iemand het heeft gelezen.

Test je eerste SMS-integratie.

Vanuit de taal die je al gebruikt.

Verzenden is de kern van de Bird SMS API. Het onderstaande voorbeeld toont de vorm van het verzoek. Vervang voor een gecontroleerde test de ontvanger door het gedocumenteerde sandbox-nummer +15005550006. Stel eerst een geschikte US-afzender in en activeer de bestemming, en verifieer dan acceptatie- en aflevergebeurtenissen voordat je naar klanten verstuurt.

1
2
3
4
5
6
7
const msg = await bird.sms.send({
  from: "+15557654321",
  to: "+14155550100",
  text: "Your verification code is 123456.",
  category: "authentication",
});
console.log(msg.id, msg.status);

Een SMS-verzending levert de tekst af die je opgeeft. Gebruik voor inlog- en accountverificatie Bird Verify om codes te genereren, te laten verlopen en te controleren als onderdeel van een verificatiestroom.

Bouw op een helder verzendcontract.

Bereid het verzoek voor en volg het resultaat.

  1. 01

    Segmenten tellen vóór verzending.

    Bird rapporteert de berekende codering en het segmentaantal in het antwoord. Gebruik de segmentcalculator om een concept te inspecteren voordat je het indient.

  2. 02

    GSM-7 en Unicode, automatisch bepaald.

    Tekens bepalen de codering. GSM-7 past 160 eenheden in één segment; Unicode past 70. Meerdelige berichten reserveren ruimte voor hersamenstelling, en emoji kunnen meer dan één eenheid innemen.

  3. 03

    Batch in één aanroep.

    Dien tot 100 onafhankelijke berichten in één batch in. Validatie vindt plaats vóór de wachtrij; elk geaccepteerd bericht heeft daarna een eigen uitkomst.

  4. 04

    Probeer opnieuw met een idempotency-sleutel.

    Gebruik één idempotency-sleutel per logisch verzoek en hergebruik deze voor een identieke retry. Het bewaarde API-antwoord kan opnieuw worden afgespeeld; dit garandeert geen exactly-once aflevering door de carrier.

  5. 05

    Aflevergebeurtenissen voor je applicatie.

    Abonneer je op geaccepteerde, verzonden en definitieve uitkomstgebeurtenissen. Verifieer handtekeningen, dedupliceert webhook-retries en gebruik berichtleesbevestigingen om ontbrekende of vertraagde observaties te onderzoeken.

Breng de integratie verder met een gecontroleerde test.

Breng je huidige verzoeksvelden, afzenderregistraties en gebeurtenisafhandeling over naar Bird. Stem opt-outs af voordat je verkeer verplaatst en vergelijk een gecontroleerde test voordat je de productierouting wijzigt.

twilio.ts
Twilio
import twilio from "twilio";

const client = twilio(accountSid, authToken);

await client.messages.create({
  from: "+14155550172",
  to:   "+15005550006",
  body: "Your code is 123456.",
});
bird.ts
Bird
import { BirdClient } from "@messagebird/sdk";

const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });

await bird.sms.send({
  from:     "+14155550172",
  to:       "+15005550006",
  text:     "Your code is 123456.",
  category: "authentication",
});

Ken het segmentaantal vóór verzending.

GSM-7 past 160 septets in één segment; UCS-2 past 70 code-eenheden. Meerdelige capaciteit is respectievelijk 153 of 67. Uitgebreide GSM-7-tekens gebruiken twee septets en emoji kunnen twee code-eenheden innemen. Bird retourneert codering en segmenten bij acceptatie; het toepasselijke tarief en eventuele carrierkosten worden apart berekend.

segments.ts
202 · 1 segment
const { data, error } = await bird.sms.send({
  from:     "Bird",
  to:       "+31612345678",
  text:     "Your code is 123456.",
  category: "authentication",
}).safe();
if (error) throw error;

console.log(data.segments);
// → { characters: 20, count: 1, encoding: "GSM_7BIT" }

Eén bericht of honderd, één aanroep.

Batch tot 100 onafhankelijke berichten, elk met een eigen ontvanger en tekst. Ongeldige invoer weigert het verzoek vóór de wachtrij. Na een geslaagd 202-antwoord kunnen verwerking en aflevering per SMS afzonderlijk slagen of falen. Hergebruik het verzoek en de idempotency-sleutel bij opnieuw proberen binnen het gedocumenteerde bewaarvenster.

reminders.ts
202 · batch
const { data: batch, error } = await bird.sms
  .sendBatch(
    users.map((u) => ({
      from: "Bird",
      to:   u.phone,
      text: `Hi ${u.name}, your appointment is tomorrow at ${u.time}.`,
    })),
  )
  .safe();

if (error) throw error;
console.log(`queued ${batch.data.length} messages`);

Volg acceptatie tot aan de gerapporteerde uitkomst.

Een geslaagd verzoek retourneert 202 Accepted. Facturering en carrierindiening vinden later plaats en kunnen alsnog falen. Gebruik ondertekende aflevergebeurtenissen en inspecteer het berichtrecord bij het onderzoeken van de uitkomst.

app/api/webhooks/bird/route.ts
signed
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.delivered":
      await markDelivered(event.data.sms_id);
      break;
    case "sms.failed":
      await flag(event.data.to, event.data.error?.description);
      break;
  }

  return new Response(null, { status: 204 });
}

Inspecteer fouten op hun gerapporteerde reden. Ondersteunde STOP-trefwoorden en carrier-opt-outs creëren suppressies; andere afleverfouten worden niet automatisch een opt-out.

  • sms.acceptedGeaccepteerd door de API en in de wachtrij voor overdracht aan de carrier.
  • sms.sentIngediend bij het SMSC van de bestemmingscarrier.
  • sms.deliveredAfleverbevestiging ontvangen van de carrier (DLR).
  • sms.failedEen definitieve fout voor deze SMS-poging. Inspecteer de gerapporteerde fout en de berichttijdlijn.

Ga dieper in de docs.

Koppel webhooks, maak elke verzending veilig om opnieuw te proberen met idempotency keys, en lees de foutreferentie zodat je elke fout op de juiste manier afhandelt.

Vragen voordat je bouwt

Kies ik de afzender?
Bij een vrije-tekstverzending geef je een afzender op die je werkruimte kan gebruiken in de bestemming, met de juiste berichtcategorie. Een systeemsjabloonverzending leidt de categorie en afzender af uit het sjabloon.
Hoe voorkomen nieuwe pogingen een dubbel bericht?
Geef een idempotentiesleutel mee en hergebruik die bij een nieuwe poging van hetzelfde verzoek. Een verzending zonder die sleutel kan als een nieuw bericht worden behandeld.
Betekent geaccepteerd ook afgeleverd?
Nee. Een 202-respons betekent dat de API het verzoek heeft geaccepteerd. Volg het berichtrecord en de ondertekende events voor het door de provider gerapporteerde resultaat. Een afleverbevestiging bewijst niet dat de ontvanger het bericht heeft gelezen.
Is een batch hetzelfde als een broadcast?
Een batch bevat maximaal 100 onafhankelijke berichten, elk met een eigen ontvanger en inhoud. Een broadcast is een doelgroepcampagne met gedeelde content en een beheerde verzendcyclus. Kies de workflow die bij je taak past.

Schaal zonder
controle te verliezen.

Organiseer teams in werkruimtes, beheer API-toegang en traceer wijzigingen via auditlogs.

BirdHarborOrganization
WorkspacesProductionSandbox

Delivery agent

API key · Customer operations team
Active
PermissionsAccess
EmailRead & write
SMSRead & write
ALAlex Lee AdminPermissions updated

Audit log

Production
Workspace
Production
Resource
Delivery agent
WhatsApp
ReadRead & write
Succeeded

Begin met SMS.
Bouw over kanalen heen met Bird.

Jouw volgende idee.
Klaar om te verbinden.