Je eerste sms via een providers-API versturen kost een middag. Het echte werk begint daarna: wat "verzonden" betekent, wat er gebeurt bij een timeout, en wat het kost om van provider te wisselen.
Eigen contract in plaats van providers-SDK
De belangrijkste vroege beslissing is of applicatiecode rechtstreeks een providers-SDK aanroept. Beter: definieer één intern contract met bestemming, berichtinhoud, traffic-klasse, afzenderselector en een eigen clientreferentie. Alles providerspecifieks leeft achter een adapter — dat maakt een tweede provider een nieuwe adapter in plaats van een refactor.
Clientreferenties en dubbelzinnige timeouts
Genereer voor elk bericht een eigen referentie vóór verzending en sla die op, want provider-ID's bestaan pas na een succesvolle respons. Het lastigste geval is de timeout: het bericht kan zijn geaccepteerd, verzonden of afgeleverd. Kies bij voorkeur voor idempotency keys van de provider, anders een lookup op je eigen referentie, anders een expliciet beleid per traffic-klasse.
Afzenderidentiteit, encoding en statusmapping
Afzenderidentiteit is configuratie, geen waarde die op verzendmoment wordt gekozen — afhankelijk van de markt een geregistreerde alfanumerieke sender ID, long number, short code of nummerpool, vaak met registratietermijnen van weken. GSM-7 geeft 160 tekens per segment, Unicode maar 70; één bijzonder teken kan het hele bericht naar meersegments Unicode kantelen en de kosten veranderen — bereken en bewaar het segmentaantal vóór verzending. Map providerstatussen naar een eigen canonieke set, bewaar de ruwe waarden voor debugging, en alert op ongemapte waarden.
Webhooks, retries en doorvoer
Statuscallbacks moeten signatuur-geverifieerd en replay-beschermd zijn, tolerant voor duplicaten en verkeerde volgorde, met snelle bevestiging en asynchrone verwerking plus een reconciliatiejob voor vastzittende berichten. Retrybeleid hoort op één plek eigendom te zijn — anders retryen applicatie, platform en provider tegelijk. Doorvoer is gelimiteerd per account, verbinding of afzender; aparte wachtrijen per traffic-klasse voorkomen dat een campagnebatch verificatietraffic vertraagt.
Correlatie, meting en exit-gereedheid
Een correlatie-ID over het triggerende event, de send, de callbacks en eventuele kliks laat zien of een bericht daadwerkelijk tot de gewenste actie leidde — delivery receipts alleen zijn daarvoor een zwakke indicator. Exit-gereedheid is testbaar: kun je een route via configuratie wisselen zonder release, zit er providerspecifieke code in de applicatie, zijn berichtgeschiedenis en consent exporteerbaar?
Grenzen van sms-beveiliging
Gewone sms is niet end-to-end versleuteld; inhoud is zichtbaar voor tussenpartijen en staat onversleuteld op het toestel. Wachtwoorden, volledige rekeningnummers of betaalgegevens horen niet in een sms; eenmalige codes moeten kortlevend, sessiegebonden en rate-limited zijn.
Flowstates levert messagingroutes en kan deze operationele laag beheren; klanten kunnen eigen leveranciersrelaties behouden via BYOV of beide hybride combineren.