# SMS migreren vanuit Sinch

Deze pagina vertaalt Sinch's SMS API, groepen en afleverrapporten naar Bird. Volg de [hoofdmigratiegids](/docs/guides/sms/migrate) op volgorde en gebruik deze vertalingen voor stap 3, 4 en 5.

Twee structurele verschillen bepalen de migratie, en beide kosten meer dan de veldhernoemingen. Sinch koppelt de verzending aan een serviceplan in het URL-pad en stuurt een **batch**, dus één bericht aan één persoon is nog steeds een array; [`POST /v1/sms/messages`](/docs/api/reference/create-sms-message) van Bird accepteert één ontvanger op je regionale host met een bearer-sleutel en zonder plansegment. En de US-registratie die je niet kunt overslaan staat op een andere host dan de verzending, achter een andere credentialfamilie, dus een codebase die Sinch voor beide aanspreekt, bereikt twee plekken.

## Geef dit aan je agent

Gebruik deze briefing in je coding-agent. Het begint met inventarisatie en levert een reviewbaar migratieplan op vóór enige productiewijziging.

```text
Help me migrate my SMS integration from Sinch 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/sinch.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 Sinch 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            | Sinch                                         | Bird                                             |
| ----------------------- | --------------------------------------------- | ------------------------------------------------ |
| Ontvanger               | `to` (array, of een groeps-ID)                | `to` (één per request)                           |
| Afzender                | `from`                                        | `from`                                           |
| Inhoud                  | `body`                                        | `text`                                           |
| Accountroutering        | serviceplan, in het URL-pad                   | de bearer-sleutel; geen padsegment               |
| Intentie                | (geen)                                        | `category`, verplicht bij vrije tekst            |
| Afleverrapportage       | `delivery_report` + `callback_url`, per batch | een werkruimte-webhook; geen per-verzendcontrole |
| Correlatie              | `client_reference`                            | `metadata`, meegestuurd bij elk event            |
| Filterbare labels       | (geen)                                        | `tags`: `{name, value}`-paren                    |
| Veilig opnieuw proberen | (niet gedocumenteerd)                         | `Idempotency-Key`-header                         |
| Flash                   | `flash_message`                               | geen equivalent                                  |

Opmerkingen bij de migratie:

- **Kies bewust voor een enkele verzending, een batch of een broadcast.** `to` is een array bij Sinch en hier een enkel nummer, dus gebruik enkele verzendingen of het batch-endpoint voor maximaal 100 onafhankelijke berichten. Een doelgroepcampagne hoort bij de [broadcast-workflow](/products/sms/marketing/campaigns). Een batch die een groep noemde, vereist dat het lidmaatschap eerst wordt opgelost; zie het opt-outgedeelte, want dat is hetzelfde probleem.
- **`body` wordt `text`.** Dit is de enige hernoeming die elke aanroeplocatie raakt.
- **`client_reference` is geen idempotentiesleutel.** Sinch definieert het als een identifier die aan het afleverrapport van de batch wordt toegevoegd, dus het correleert maar dedupliceert niet. Als je erop vertrouwde om opnieuw proberen veilig te maken, was je niet gedekt; `Idempotency-Key` is wat dat hier doet.
- **Niets correspondeert met `category`.** Bepaal per berichttype of het `transactional`, `marketing`, `authentication` of `service` is.

## Opt-outs overnemen

**Sinch registreert wie erin zit, en Bird moet weten wie eruit is.** Die inversie is het werk.

Sinch beheert ontvangers als groepen, en een groep kan automatisch bijwerken op basis van trefwoordtriggers, dus een abonnee die `STOP` sms't wordt uit de groep verwijderd en een abonnee die `SUBSCRIBE` sms't wordt toegevoegd. De opt-out is daardoor gecodeerd als _afwezigheid_ uit een lijst in plaats van aanwezigheid op een lijst, en afwezigheid is niet exporteerbaar: een nummer dat ontbreekt in een groep kan zijn uitgeschreven, kan nooit lid zijn geweest, of kan zes maanden geleden door een import zijn verwijderd.

Reconstrueer dus in plaats van te exporteren. Je eigen logboek van inkomende berichten is de betrouwbare bron, want sommige opt-outs begonnen als inkomende berichten, terwijl andere via support, formulieren of een ander voorkeurskanaal binnenkwamen, en die berichten bestaan ongeacht wat het groepslidmaatschap nu zegt. Waar je je eigen uitschrijfvlag naast de groep bijhield, is die vlag beter bewijs dan het lidmaatschap. Neem de gereconstrueerde lijst mee naar de [suppressieloop](/docs/guides/sms/migrate#4-carry-over-your-opt-out-list) en laat de lijst zien aan degene die eigenaar is van het account voordat je importeert: een verkeerde vermelding hier stopt stilletjes berichten die je wilde verzenden.

Een Bird-suppressie is één afzender-en-abonneepaar, dus een abonnee die je bij drie afzenders stopt, levert drie records op. [Suppressies lezen en beheren](/docs/guides/sms/opt-outs-and-keywords#reading-and-managing-suppressions) bevat het commando, en de reden waarom een handmatige suppressie elke categorie blokkeert, inclusief transactioneel.

Als je eenmaal hier bent, beantwoordt Bird de stopwoorden zelf vanuit zijn eigen catalogus per land, dus het automatisch bijwerken van groepen heeft geen tegenhanger om na te bouwen: een abonnee die `STOP` sms't, produceert een suppressie zonder dat je applicatie iets hoeft te doen. Redenen stapelen in plaats van samen te voegen, dus een paar dat je importeerde als `manual` en dat later `STOP` sms't, bevat twee records, en berichten blijven gestopt 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 creëert geen bericht; 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.

Sinch's [afleverrapportreferentie](https://developers.sinch.com/docs/sms/api-reference/sms/delivery-reports/getdeliveryreportbybatchid) bevat queued, dispatched, delivered en verscheidene afzonderlijke definitieve foutstatussen. Bewaar de code en status op ontvangerniveau bij het vertalen van je rapportage.

| Sinch-concept                       | Bird-integratiebeslissing                                                                                                                      |
| ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| `Queued` / `Dispatched`             | Volg acceptatie en carrierindiening apart met `sms.accepted` en `sms.sent`.                                                                    |
| `Delivered`                         | Registreer de netwerkuitkomst via `sms.delivered`; het bewijst niet dat het bericht is gelezen.                                                |
| `Failed` / `Rejected` / `Deleted`   | Inspecteer de gerapporteerde reden. Bird-foutevents worden niet geselecteerd door een naam-voor-naamvervanging.                                |
| `Aborted` / `Expired` / `Cancelled` | Bewaar de oorzaak en fase. De individuele verzending via API van Bird heeft geen planning- of geldigheidstimer om deze controles na te bouwen. |
| `Unknown`                           | Houd de uitkomst onzeker; tel een ontbrekend interpreteerbaar ontvangstbewijs niet als aflevering.                                             |

`sms.expired` van Bird volgt op een carriervervalrapport. Beoordeel je bestaande verval- en annuleringsgedrag apart van dat event in plaats van elke timeout ernaar te mappen.

Merk ook op dat tussentijdse statussen alleen worden gerapporteerd wanneer de batch om `per_recipient`-rapportage vroeg, wat deel uitmaakt van wat hieronder verandert.

**Je verliest per-verzendcontrole over afleverrapportage, en dat is het waard om duidelijk te zeggen.** Een Sinch-batch kiest zijn eigen rapportgranulariteit en kan de callback-URL van het serviceplan voor die ene verzending overschrijven. Bird heeft geen van beide: rapportage is een werkruimte-abonnement, elk geabonneerd event wordt afgeleverd, en er is geen per-berichtoverschrijving. Als je `delivery_report` gebruikte om drukke campagnes stil te houden, verplaatst die filtering naar je handler. Als je de rapporten van één campagne naar een ander endpoint routeerde, wordt dat één endpoint plus een vertakking, of een tweede abonnement.

Registreer het endpoint eenmalig en noem de eventtypes die je handler wil: de `sms.*`-events hierboven zijn de lijst om je op te abonneren, en er is geen wildcard die ervoor in de plaats komt. Bird stuurt JSON ondertekend volgens [Standard Webhooks](https://www.standardwebhooks.com); [Een endpoint aanmaken](/docs/guides/webhooks#create-an-endpoint) bevat het commando en het enige dat je bij de eerste aanroep goed moet doen: het ondertekeningsgeheim opslaan dat het antwoord 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 [eventpagina](/docs/guides/sms/events#failure-events).

## Overschakelen

[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. Twee Sinch-specifieke items horen op het overschakelingsplan.

Je 10DLC-merk en -campagne zijn geregistreerd bij The Campaign Registry via Sinch en worden niet automatisch Bird-registraties. Bevestig de toepasselijke migratie- of registratieprocedure voordat je betaald werk indient. **Dit is ook waar de integratie eenvoudiger wordt.** Bij Sinch is de registratie-API een aparte host van de verzending en gebruikt projectcredentials in plaats van het serviceplantoken, en Sinch's eigen documentatie zegt dat HTTP Basic daar bedoeld is voor alleen testdoeleinden en sterk beperkt is in het aantal verzoeken, dus een productie-integratie bouwt een OAuth-tokenflow ervoor. Bij Bird staat `/v1/sms/10dlc/*` naast `/v1/sms/messages` onder één basis-URL en één sleutel, dus die tokenlevenscyclus wordt afgeschaft in plaats van gemigreerd. Begin bij [Registreren voor 10DLC](/docs/guides/sms/10dlc), dat beschrijft wat elk veld betekent en de requirements-aanroep die je vertelt wat je moet aanleveren voordat je het merk aanmaakt, wat de factureerbare stap is.

Nummers die je bezit bij Sinch vereisen een port die support regelt, op hun schema in plaats van het jouwe.

## Volgende stappen

- [Bird en Sinch vergelijken voor SMS](/products/sms/compare/bird-vs-sinch): productevaluatie en migratieoverwegingen

- [SMS verzenden](/docs/guides/sms/sending-sms): de volledige payload waar je naartoe migreert
- [Opt-outs en trefwoorden](/docs/guides/sms/opt-outs-and-keywords): trefwoorddekking per land en suppressiebeheer
- [SMS-events](/docs/guides/sms/events): de eventwoordenschat waar je rapporthandler naartoe verhuist
- [Webhooks & events](/docs/guides/webhooks): endpointconfiguratie 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)
