Skip to main content
This is the operator’s side. If you are a customer changing your integration, read Migrating from Jasmin instead.

From Jasmin

The API is close enough that most customers change one line. Your work is mostly configuration and one reconciliation. The customer-visible changes are on their page. What matters to you:
Messages now bill to the credential’s accountId, not its login name.Previously HTTP billed to the username while SMPP billed to accountId — so one customer appeared as two identities depending on how they connected. accountId is both the rating scope and the prepaid credit key, so the two had to be reconciled before credit could work over HTTP at all.
Check your rate table before cutting over. If rates.conf has a [scope] named after an HTTP username, rename it to that credential’s accountId — otherwise those messages stop matching and become unrated, which means sent and charged nothing rather than refused.

From Kannel

GET /sendsms has been removed. There is no compatibility shim.
The coding scale changed, and it fails quietly. It is now the SMPP data_coding field.A client sending coding=2 for UCS-2 now gets an unspecified octet alphabet. Nothing errors — the message goes out encoded wrongly. UCS-2 is 8.Sweep your customers’ integrations for coding=2 before cutover, because neither side will notice until a recipient reports mojibake.
Delivery receipts changed too. FireFlo POSTs a JSON body by default, so a Kannel DLR handler expecting %d/%s substituted into a GET stops working. Set smsg.dlr.forward.format = kannel to keep the old behaviour while customers migrate.

The billing change that alters invoices

Billing is one unit per REST request, however many segments the body occupies.
That is cheaper than the same message over SMPP, where each inbound PDU is billed. A customer who moves from SMPP to REST gets a lower bill for identical traffic, and one who moves the other way gets a higher one.Set smsg.restapi.billing.units=segment to price them alike. Decide this before cutover — changing it afterwards looks like a price rise.

A cutover order that works

1

Reconcile rate scopes to accountId

Before anything moves. An unmatched scope means unrated traffic, which is silent.
2

Decide the REST billing unit

Request or segment. This is a pricing decision, not a technical one.
3

Set the receipt format customers expect

kannel if they have Kannel handlers, so their side keeps working while they migrate.
4

Run report-only whitelisting for a period

whitelist_would_reject tells you what enforcement would refuse before it refuses anything.
5

Move a small share of traffic first

Compare delivery rates knowing FireFlo reports the worst segment of a long message, so its figures are legitimately lower than a gateway reporting the first.

Customer notices

What to tell customers, and how to find who is affected.

The customer's side

What their integration has to change.