Sign inGet started

SMS migreren vanuit Infobip

Deze pagina brengt Infobip's SMS API, Blocklist en afleverrapporten in kaart naar Bird. Volg de hoofdmigratiegids op volgorde en gebruik deze mappings voor stap 3, 4 en 5.
Twee verschillen doen het meeste werk. Infobip's payload is gebouwd voor het bulkscenario, dus één bericht aan één persoon is een array van berichten, elk met een array van bestemmingen, met de tekst twee niveaus diep in content.text; POST /v1/sms/messages neemt from, to en text op het topniveau. Daarnaast is je Infobip base-URL gepersonaliseerd per account, in de vorm xxxxx.api.infobip.com, geauthenticeerd met Authorization: App <key>. Bird verzendt vanaf een regionale host met een bearer key, dus de host in je code verandert tegelijk met de payloadstructuur.

Geef dit aan je agent

Gebruik deze briefing in je codeeragent. Hij begint met discovery en levert een reviewbaar migratieplan op vóór enige productiewijziging.
Codevoorbeeld
Help me migrate my SMS integration from Infobip to Bird.
1. Inspect this repository's sends, senders, callbacks, schedules, templates, opt-outs and tests. List the traffic and behavior that must survive the migration.
2. Read the Markdown guides at https://bird.com/docs/guides/sms/migrate/infobip.md and https://bird.com/docs/guides/sms/migrate.md. Use an existing authenticated Bird MCP or CLI connection. If neither is available, follow https://bird.com/docs/ai/set-up-your-agent.md. Discover the actual operations; do not invent commands or ask me to paste credentials into chat.
3. Prepare the code changes, sender/destination requirements, consent migration, webhook verification and rollout/rollback plan. Preserve the scope of each customer's preferences, including requests outside SMS replies. Separate API batches from audience broadcasts and preserve any behavior that has no direct endpoint equivalent.
4. Show me the exact affected resources, destinations, test volume and known costs before an action that sends messages, spends money, registers or changes a sender, or moves production traffic. Require explicit human authorization for each paid submission or production change. Name one-off 10DLC registration and resubmission fees before requesting approval. An existing explicit approval for that exact action is sufficient; broad migration approval is not. Simulated SMS destinations are billable and still require authorization.
5. If I am keeping Infobip numbers, prepare the human support port request and obtain authorization to send it. Read bird support-tickets create --help, then use the available CLI or MCP support operation with the reviewed number list and requirements. Return the ticket ID and follow the reply; support arranges the port on its own schedule, separately from the code cutover.
6. Run local and intercepted tests first. When authorized, perform the agreed bounded integration tests, inspect accepted and final outcomes separately, and report failures or uncertainty. Do not claim a delivery receipt proves reading or that request idempotency guarantees exactly-once delivery.
7. Keep production cutover and retiring the old provider as explicit steps in the approved rollout. Finish with the diff, evidence, unresolved requirements and the next action.

Breng de verzendaanroep in kaart

De hernoemtabel is kort, want de structuurwijziging is het echte werk:
Wat het doetInfobipBird
Ontvangermessages[].destinations[].toto (één per request)
Afzendermessages[].senderfrom
Inhoudmessages[].content.texttext
Intentie(geen)category, verplicht bij vrije tekst
Afleverrapportenwebhooks.delivery, per berichteen werkruimte-webhook geabonneerd op de afleverevents hieronder
Round-trip-contextwebhooks.callbackDatametadata, maar zie de opmerking over grootte hieronder
Campagnegroeperingoptions.campaignReferenceIdtags, alleen voor filtering; zie hieronder
Flashoptions.flashgeen equivalent
Geldigheidoptions.validityPeriodgeen equivalent: validity_period wordt geweigerd
Aflevervensteroptions.deliveryTimeWindowgeen equivalent
Veilig opnieuw proberen(geen in hun gegenereerde clients)Idempotency-Key-header
Porteernotities:
  • Drie niveaus worden nul. De nesting bestaat om veel berichten en veel bestemmingen in één request te dragen. Bij het verzenden van één bericht aan één persoon neemt Bird de drie velden op het topniveau, dus de builder die de arrays opbouwt wordt verwijderd in plaats van vertaald.
  • callbackData is groter dan metadata. Infobip accepteert tot 4000 tekens en stuurt het mee op het afleverrapport. Bird's metadata is beperkt tot 2 KB geserialiseerd en wordt meegestuurd bij elk event voor het bericht, niet alleen het laatste. De echo is de betere deal; de limiet niet, dus alles wat de limiet nadert moet worden ingekort tot een sleutel die je kunt opzoeken in plaats van volledig mee te sturen.
  • campaignReferenceId is rapportagecontext, geen campagnemigratie. Bird's tags zijn {name, value}-paren die querydimensies worden, zodat je analytics per campagne kunt segmenteren zoals je gewend was. Wat er niet bij komt is een campagneobject: een tag maakt geen broadcast aan en configureert die ook niet. Evalueer de campagneworkflow apart wanneer je doelgroepcampagnes verplaatst.
  • campaignReferenceId is geen idempotentiesleutel. Infobip definieert het als een ID om de prestaties van een campagne te volgen, dus het groepeert maar dedupliceert niet. Als je erop vertrouwde om een retry veilig te maken, was je niet gedekt; de Idempotency-Key-header doet dat hier.
  • Niets komt overeen met category. Infobip's berichtopties dekken geldigheid, aflevervenster, flash en regionale instellingen, en geen ervan verklaart waarom het bericht wordt verstuurd. Beslis per berichttype of het transactional, marketing, authentication of service is.
  • Twee optievelden hebben geen plek. validityPeriod is gereserveerd en beantwoordt 422 SMSUnsupportedFeature; deliveryTimeWindow heeft geen tegenhanger, dus planningsvensters verplaats je naar je eigen dispatcher.

Opt-outs overnemen

Infobip houdt een Blocklist bij: een lijst van ontvangers die zich hebben afgemeld voor je communicatie, beheerd via de Blocklist API of via People in de webinterface, waarbij een verzending naar iemand op de lijst wordt geweigerd. Keyword-triggers voegen er automatisch aan toe, dus een abonnee die STOP sms't, komt er terecht zonder dat je applicatie iets hoeft te doen.
Dat maakt de export de makkelijkste van alle providers in deze set, en de uitbreiding de grootste. Een Blocklist-vermelding is één abonnee voor het hele account; een Bird-suppressie is één afzender-en-abonneepaar. Elke vermelding wordt dus net zoveel suppressies als je afzenders hebt: een Blocklist met duizend vermeldingen en zes afzenders levert zesduizend records op. Bereken de vermenigvuldigingsfactor voordat je begint, want het is het verschil tussen een import die een minuut duurt en een die batching en een voortgangslog nodig heeft.
Behoud het oorspronkelijke bereik van de Blocklist. Vernauw een intrekking tijdens de migratie niet alleen omdat het nieuwe technische model smallere paren kan uitdrukken. Een werkruimtebrede voorkeur kan een bredere intrekking vertegenwoordigen; het is een aparte eigenaar ten opzichte van afzendersuppressies. Controleer beide bij het bepalen van de toelaatbaarheid.
Importeer via de suppressielus. Suppressies lezen en beheren bevat het commando en de reden waarom een handmatige suppressie elke categorie blokkeert, inclusief transactioneel.
Zodra je hier bent, beantwoordt Bird de stopwoorden zelf vanuit zijn eigen catalogus per land, dus de keyword-triggers die je had ingesteld hoeven niet opnieuw te worden opgebouwd, en eventuele aangepaste triggers worden keyword-regels. Redenen stapelen in plaats van samen te voegen, dus een paar dat je hebt geïmporteerd als manual en dat later STOP sms't, houdt twee records, en berichten blijven geblokkeerd totdat beide zijn beëindigd.

Afleverstatussen vertalen

Gebruik deze tabel om levenscyclusconcepten te vergelijken, niet om events mechanisch te hernoemen. Bird kiest een fout-event op basis van de gerapporteerde status en reden. Een geweigerd API-request maakt geen bericht aan; een afwijzing na acceptatie kan sms.rejected opleveren, inclusief een carrierafwijzing. Ontbrekend afleverbewijs blijft onbekend. Bewaar de ruwe providerstatus en -code naast je genormaliseerde uitkomst.
Infobip rapporteert een statusgroep en een statusnaam op elk afleverrapport, en Bird zendt een eventtype uit:
UitkomstInfobip-statusgroepBird
API heeft het bericht geaccepteerdPENDINGsms.accepted
Overgedragen aan de carrierPENDINGsms.sent
Carrier bevestigde afleveringDELIVEREDsms.delivered
Carrier meldde niet-afleveringUNDELIVERABLEsms.undelivered
Permanent falenREJECTEDsms.failed
Geweigerd voor verzendingREJECTEDsms.rejected
Geldigheidsvenster verstrekenEXPIREDsms.expired
EXPIRED is de rij die je goed moet lezen, omdat hij twee verschillende dingen aan hun kant dekt en er hier maar één van bestaat. Infobip laat een bericht verlopen wanneer de geldigheidsperiode van hun eigen platform afloopt (standaard 48 uur) of wanneer de operator "verlopen" retourneert als eindstatus. Bird stelt geen eigen geldigheidsvenster in en draait geen timer die een bericht beëindigt, dus sms.expired komt altijd alleen van het afleverrapport van de carrier. De door de operator gerapporteerde helft mapt over; de platformtimerhelft heeft geen tegenhanger, en een bericht dat op hun klok zou zijn verlopen blijft hier in vlucht totdat de carrier beslist.
REJECTED verschijnt bewust twee keer. Infobip gebruikt het zowel voor een bericht dat het zelf heeft geweigerd als voor een bericht dat de operator als afgewezen heeft geretourneerd, wat Bird's events zijn gekozen op basis van de verwerkings- of carrieruitkomst en de reden; een carrierafwijzing kan sms.rejected opleveren. De statusnaam binnen de groep is wat ze onderscheidt, dus een handler die alleen op de groep vertakte heeft hier de naam nodig. PENDING dekt ook twee rijen, omdat het de groep is waar het bericht in zit van acceptatie tot er een eindrapport binnenkomt.
Drie mechanismen veranderen mee met de namen:
  • Abonnementen vervangen per-bericht-webhooks. Infobip noemt een webhook op elk bericht, dus de bestemming wordt gekozen door wie de aanroep schrijft, en het contenttype wordt daarbij gekozen. Bird levert JSON af op endpoints die je werkruimte registreert, elk geabonneerd op de gewenste eventtypes, dus een tweede consumer is een tweede abonnement in plaats van een wijziging op elke aanroepplek.
  • Je verliest de keuze per bericht, inclusief XML. Infobip laat een bericht kiezen tussen JSON of XML en tot 4000 tekens aan callbackdata bijvoegen. Bird stuurt alleen JSON, en callbackData wordt metadata, dat wordt meegestuurd bij elk event voor dat bericht in plaats van alleen bij het rapport.
  • Pull wordt push. Infobip laat je rapporten ophalen van een reports-endpoint en ze ook ontvangen. Bird heeft geen equivalent poll voor events; abonneer je, en lees de berichtstatus via de API wanneer je die on demand nodig hebt.
Registreer het endpoint eenmalig en noem de eventtypes die je handler wil: de sms.*-events hierboven zijn de lijst om op te abonneren, en er is geen wildcard die ze vervangt. Bird stuurt JSON ondertekend volgens Standard Webhooks; Een endpoint aanmaken bevat het commando en het enige dat je bij de eerste aanroep goed moet doen: het ondertekeningsgeheim opslaan dat de response precies één keer toont.
Bird rapporteert een fout met een gestandaardiseerde error-code zoals invalid_destination, content_rejected, provider_unavailable of recipient_opted_out; de volledige lijst staat op de events-pagina. Koppel je alerting aan die codes in plaats van aan Infobip's numerieke groep-en-naamparen.

Overschakelen

Bestemmingen, afzenders en de traffic-ramp zijn provideronafhankelijk en worden behandeld in de hoofdgids. Drie Infobip-specifieke items horen op het overschakelplan.
De host verhuist, en het is configuratie in plaats van code. Je Infobip base-URL wordt uitgegeven per account; Bird verzendt vanaf een regionale host die is gekozen toen je werkruimte werd aangemaakt. Zoek elke plek waar die host is ingesteld vóór de overschakeling, inclusief omgevingsvariabelen, secrets managers en deploy-manifesten, want een gemiste plek faalt bij runtime in plaats van bij build.
Je 10DLC-merk en -campagne zijn geregistreerd bij The Campaign Registry via Infobip's nummerregistratie API en worden niet automatisch Bird-registraties. Bevestig de toepasselijke migratie- of registratieprocedure voordat je betaald werk indient. Begin bij Registreren voor 10DLC: het behandelt wat elk veld betekent, de entiteitstypen die het register herkent, en de requirements-aanroep die je vertelt wat je moet aanleveren voordat je het merk aanmaakt, wat de betaalde stap is.
Nummers die je bij Infobip bezit hebben een port nodig die support regelt, op hun planning in plaats van de jouwe.

Volgende stappen

Gerelateerde bronnen

Ga verder met de documentatie, gidsen en voorbeelden voor dit onderwerp. De bronnen zijn in het Engels.