Message billing has much in common with Telephony billing.
However there are several differences.
Unlike Telephony, not a call duration is billed, but a quantity of billing units.
Billing unit is a text block of size 160 байт.
In case if message is greater than 160 bytes, each 160-byte is billed separately.
For ASCI codec (see SMPP codecs) 160 bytes match 160 text symbols.
In case if multi-byte codecs are used for encoding, for example Unicode, then the amount of text symbols in 160-byte block will decrease.
For UTF-16 coding, the amount of symbols in a block would be 80.
For UTF-8 coding - from 80 to 160.
Unlike from Telephony, where price-lists contain prices for E.164 destination codes, for messaging in inter-operator price-lists prices for billing unit are specified per E.212 code, also known as MCC-MNC codes.
MCC-MNC codes are used for messaging, because more than 50% of mobile subscribers in a world use Number portability service, and E.164 phone number no longer identifies operator, to which is connected subscriber.
As far as price of termination to E.164 number depends on to which operator subscriber number is connected, historically has established, that inter-operator billing is based on MCC-MNC codes.
Billing system supports Transformation of E.164 number to MCC-MNC code to perform correct billing of messages.
Unlike Telephony, where billing event is phone pickup, in messaging billing event is acceptance of message to handling by peer.
After accepting message from Smartswitch, partner has choice - either to decline message, or to accept for forwarding.
In case if peer accepts message for forwarding and sending corresponding response, the cost of message is written off Smartswitch's balance.
The same way Smartswitch behaves: in case if some provider accepts message for forwarding, Smartswitch tells, that message is taken into handling to his customer and writes off it from customer's balance.
Real message delivery to end user could occur during following 3 days (depends on subscriber's availablility).