# SMS migreren van Bird Connectivity Platform

Deze pagina vertaalt de Bird Connectivity Platform API op `rest.messagebird.com`, die je misschien nog kent als de MessageBird API, naar Bird. Volg de [hoofdmigratiegids](/docs/guides/sms/migrate) op volgorde en gebruik deze vertalingen voor stap 3, 4 en 5.

Beide platformen zijn van Bird, en de API is het deel dat verandert. Drie verschillen raken elke aanroep. Requests gaan naar je regionale host, `https://us1.platform.bird.com` of `https://eu1.platform.bird.com`, in plaats van één globale host. Authenticatie gebruikt een bearer API-sleutel (`Authorization: Bearer bk_us1_…`) in plaats van `Authorization: AccessKey`. En het verzenden is asynchroon: [`POST /v1/sms/messages`](/docs/api/reference/create-sms-message) retourneert `202 Accepted` met het bericht in de wachtrij, terwijl het Connectivity Platform het berichtobject retourneerde met al een status per ontvanger.

## Geef dit aan je agent

Gebruik deze briefing in je coding agent. Het begint met discovery en levert een reviewbaar migratieplan op voordat er iets in productie verandert.

```text
Help me migrate my SMS integration from Bird Connectivity Platform 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/connectivity-platform.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 Connectivity Platform 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.
```

## Vertaal de verzendaanroep

| Wat het doet            | Connectivity Platform      | Bird                                                                   |
| ----------------------- | -------------------------- | ---------------------------------------------------------------------- |
| Ontvanger               | `recipients` (maximaal 50) | `to`, één per request                                                  |
| Afzender                | `originator`               | `from`                                                                 |
| Inhoud                  | `body`                     | `text`                                                                 |
| Intent                  | (geen)                     | `category`, verplicht bij vrije tekst                                  |
| Codering                | `datacoding`               | automatisch gedetecteerd                                               |
| Transliteratie          | (geen)                     | `options.smart_encoding` (standaard `false`)                           |
| Clientreferentie        | `reference`                | `metadata`, of `tags` als je erop filtert                              |
| Statusrapporten         | `reportUrl`                | een werkruimte-webhook geabonneerd op de onderstaande bezorgingsevents |
| Veilig opnieuw proberen | (geen)                     | `Idempotency-Key` header                                               |
| Inplannen               | `scheduledDatetime`        | geen equivalent: `scheduled_at` wordt geweigerd                        |
| Geldigheid              | `validity`                 | geen equivalent: `validity_period` wordt geweigerd                     |
| Routeselectie           | `gateway`                  | Bird selecteert de route                                               |
| Berichtklasse           | `mclass`                   | geen equivalent                                                        |
| Binair en flash         | `type`, `typeDetails`      | alleen tekst                                                           |

Beide geweigerde velden zijn [gereserveerd](/docs/guides/sms/sending-sms#reserved-fields) en beantwoorden `422 SMSUnsupportedFeature`.

Opmerkingen bij de migratie:

- **De ontvangers-array wordt één aanroep per ontvanger.** Een Connectivity Platform-aanroep met 50 ontvangers wordt 50 verzendingen, of één [batch](/docs/guides/sms/sending-sms#batch-sending) van onafhankelijke berichten. De batch is geen fan-out van één body: elke entry bevat zijn eigen ontvanger, afzender en tekst.
- **`datacoding` heeft geen equivalent, en dat is bewust.** Bird detecteert de codering uit de body en rapporteert het aantal segmenten op het bericht. Als je `datacoding: auto` instelt om berichten binnen GSM-7 te houden, is het dichtstbijzijnde gedrag `options.smart_encoding`, dat de gedocumenteerde vervangingstabel van Bird toepast. Het is geen algemene transliterator; niet-ondersteunde tekens kunnen nog steeds Unicode-codering vereisen.
- **`reference` wordt opgesplitst in twee velden.** Zet een intern id in `metadata`, dat wordt meegestuurd bij elk webhook-event, en gebruik `tags` voor de labels met lage kardinaliteit waarop je analytics wilt filteren en uitsplitsen.
- **Flash-berichten, binaire payloads en UDH-concatenatie worden niet gemigreerd.** Als je afhankelijk bent van `mclass` of `typeDetails`, neem dit dan op met support voordat je de cutover plant, niet erna.
- **Ook op de Connectivity Platform Verify API?** De migratie is een apart traject met een eigen gids: zie [Verify migreren van een andere provider](/docs/guides/verify/migrate).

## Opt-outs overnemen

Het Connectivity Platform liet de afhandeling van stopwoordzoekwoorden aan jou over, of je dat nu in Flows had gebouwd of in je eigen applicatie op basis van inkomende berichten. Bird doet dat zelf: het herkent stop-, start- en help-trefwoorden op je nummers in ondersteunde landen, registreert de onderdrukking en handhaaft die bij elke verzending. Schakel een oude handler pas uit nadat je hebt bevestigd dat de catalogus van Bird het gedrag dekt en je bredere voorkeursproces nog werkt.

Wat niet verdwijnt is de lijst. Exporteer wat je nu hebt, als paren van abonneenummer en de originator waarop ze gestopt hebben, en importeer het via de [suppressielus](/docs/guides/sms/migrate#4-carry-over-your-opt-out-list) vóór je eerste productieverzending. Als je alleen een globale lijst bijhield van abonnees die zich hadden afgemeld, importeer dan elke abonnee eenmaal per originator waarvandaan je nog verzendt.

## Statusrapporten 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 carrier-afwijzing. Ontbrekend bezorgingsbewijs blijft onbekend. Bewaar de ruwe providerstatus en -code naast je genormaliseerde uitkomst.

| Uitkomst                        | Connectivity Platform | Bird                             |
| ------------------------------- | --------------------- | -------------------------------- |
| Geaccepteerd door het API       | (synchroon)           | `sms.accepted`                   |
| Overgedragen aan de carrier     | `sent`, `buffered`    | `sms.sent`                       |
| Carrier bevestigde bezorging    | `delivered`           | `sms.delivered`                  |
| Bezorging mislukt               | `delivery_failed`     | `sms.failed`                     |
| Geldigheidsvenster verstreken   | `expired`             | `sms.expired`                    |
| Request geweigerd bij toelating | requestfout           | HTTP-fout; geen bericht of event |
| Wacht op verzending             | `scheduled`           | nog geen equivalent              |

Het bezorgingsmechanisme verandert meer dan het vocabulaire:

- **Ondertekende JSON-posts vervangen `reportUrl` GET-callbacks.** Statusrapporten kwamen binnen als `GET`-requests met de uitkomst in de query string (`status`, `statusReason`, `statusErrorCode`, `mccmnc`, `price[amount]`). Bird `POST`t een JSON-event naar endpoints die je werkruimte registreert, ondertekend volgens [Standard Webhooks](https://www.standardwebhooks.com). De handler is een herschrijving, geen URL-wijziging.
- **Correlatie hangt niet meer af van `reference`.** Een statusrapport was alleen bruikbaar als je een referentie had ingesteld; een Bird-event bevat altijd `sms_id`, beide nummers, en je meegegeven `metadata` en `tags`.
- **Retry-semantiek verschilt.** Het Connectivity Platform deed tot 10 pogingen bij een mislukt rapport. De bezorgingen van Bird zijn at-least-once en ongeordend, dus dedupliceer op de `webhook-id`-header en sorteer op de payload `timestamp`.
- **Kosten afstemmen via het bericht en de facturatie-eigenaren.** Het Connectivity Platform-rapport bevatte `price[amount]` en `price[currency]`. Lees de geregistreerde kosten van het bericht met [`GET /v1/sms/messages/{id}`](/docs/api/reference/get-sms-message) en stem kosten af met facturatie. De [Stats API](/docs/guides/sms/stats-api) is voor bezorgingsmetrics, niet voor een gezaghebbend facturatietotaal.

Inkomende berichten werken op dezelfde manier: abonneer je eenmalig op `sms.received` voor de werkruimte in plaats van elk nummer naar een URL te verwijzen.

## Cutover

[Bestemmingen](/docs/guides/sms/migrate#1-enable-your-destination-countries), [afzenders](/docs/guides/sms/migrate#2-set-up-a-sender) en de [verkeersopbouw](/docs/guides/sms/migrate#6-test-against-simulated-destinations) zijn provideronafhankelijk en worden behandeld in de hoofdgids. Het punt om vroeg aan te kaarten zijn je originators: alfanumerieke afzender-ID's worden opnieuw aangemaakt en, als het land dat vereist, hier opnieuw geregistreerd, en nummers die je op het Connectivity Platform hebt worden verplaatst via een port die support regelt, niet via een instelling die je omzet.

## Volgende stappen

- [Bird SMS verkennen](/products/sms): productworkflows en implementatiepaden

- [SMS verzenden](/docs/guides/sms/sending-sms): de volledige payload waarnaar je migreert
- [Opt-outs en trefwoorden](/docs/guides/sms/opt-outs-and-keywords): wat Bird voor je afhandelt en hoe je suppressies beheert
- [SMS-events](/docs/guides/sms/events): het eventvocabulaire waarnaar je statushandler migreert
- [Webhooks & events](/docs/guides/webhooks): endpoint-setup en Standard Webhooks-verificatie

## Related resources

- [Choose a sender for your markets](/explained/sms/which-sms-sender-type-should-i-use) (answer)
- [Check your message segments](/tools/sms-segment-calculator) (tool)
- [Compare SMS providers](/products/sms/compare) (product)
