Delivery reports, errors and troubleshooting

What happens to a message after it is accepted, how its final state is reported, and how to investigate messages that fail or arrive late.

Educational guide. General information about messaging integrations. It does not describe a live Wise Network API, and examples are illustrative only.

Download this guide (PDF)Same content as this page, for offline reading and sharing.

Accepted is not delivered

A message passes through several stages: your system submits it, the provider accepts it, it is routed to the destination network, and that network tries to deliver it to the handset. The response to a submission only confirms the first step. The final result arrives later in a delivery report (DLR), also called a delivery receipt.

Typical message lifecycle
StageWhat it means
AcceptedThe provider has taken the message and returned an identifier.
En routeThe message is queued or on its way to the destination network.
DeliveredThe destination network reports that the handset received it.
Undeliverable or rejectedThe network or provider could not or would not deliver it.
ExpiredDelivery kept failing until the validity period ended, for example because the phone was off.
UnknownNo final result was reported.

Delivery receipts over SMPP

In SMPP 3.4, the client asks for a receipt by setting registered_delivery in submit_sm. The receipt arrives later as a deliver_sm with the delivery-receipt flag set in esm_class. Many platforms put the result in the short message text using the informal format shown in an appendix of the specification, and also in optional fields such as receipted_message_id and message_state.

Illustrative example: an SMPP receipt text. Field details vary by platform.
id:0123456789 sub:001 dlvrd:001 submit date:2610281430 done date:2610281431 stat:DELIVRD err:000 text:Your code is 1
Common SMPP receipt states
stat valueMeaning
DELIVRDDelivered to the handset.
ACCEPTDAccepted on behalf of the recipient, for example by an operator system.
EXPIREDThe validity period ended before delivery.
UNDELIVUndeliverable, for example an invalid or inactive number.
REJECTDRejected, for example by policy or a firewall.
DELETEDDeleted before delivery.
UNKNOWNNo valid final state.

The err value is network- or platform-specific. Ask your provider for its list rather than assuming a meaning.

Delivery reports over HTTP and webhooks

HTTP-based platforms report results in two ways: the client polls a status endpoint, or the platform sends each result to the client's own HTTPS address, called a webhook or callback URL. Webhooks avoid constant polling but need careful handling:

  • Authenticate every call. Verify a signature, for example an HMAC-SHA256 of the timestamp and body using a shared secret (RFC 2104), before trusting the content.
  • Reject old or repeated calls. Refuse requests whose timestamp is too old, and ignore events you have already processed.
  • Answer quickly. Return a 2xx status as soon as the event is stored, and process it afterwards, so the sender does not retry unnecessarily.
  • Expect retries, delays and any order. A report can arrive twice, late, or before your own system has saved the submission.
Illustrative example: a webhook call. No Wise Network webhook exists.
POST /hooks/sms-status HTTP/1.1
Host: your-app.example.com
Content-Type: application/json
X-Signature: t=1793197860,v1=<hex-hmac>

{ "id": "msg-0001", "status": "delivered", "done_at": "2026-10-28T14:31:00Z" }

Errors at submission time

Some problems are reported immediately, in the response to the submission, rather than in a later receipt.

SMPP command status

Every SMPP response carries a command_status. Zero means success. Some standard SMPP 3.4 values:

Standard SMPP 3.4 error values
ValueNameUsual cause and action
0x00000008ESME_RSYSERRSystem error on the server side. Retry later.
0x0000000AESME_RINVSRCADRInvalid source address (sender ID). Check format and registration.
0x0000000BESME_RINVDSTADRInvalid destination number. Check E.164 format.
0x0000000DESME_RBINDFAILBind failed. Check credentials, bind type and source IP.
0x0000000EESME_RINVPASWDWrong password.
0x0000000FESME_RINVSYSIDUnknown system ID.
0x00000014ESME_RMSGQFULMessage queue full. Slow down and retry.
0x00000058ESME_RTHROTTLEDThroughput limit exceeded. Reduce the send rate and retry.
0x00000061ESME_RINVSCHEDInvalid scheduled delivery time.
0x00000062ESME_RINVEXPIRYInvalid validity period.

Providers can add their own values in the vendor-specific range. Ask for the provider's full list.

HTTP errors

HTTP APIs report problems with status codes, often with a body that names the field and the reason. Fix 4xx errors before resending; retry 429 and 5xx errors later with increasing delays. See messaging API concepts.

Troubleshooting checklist

Common symptoms and checks
SymptomWhat to check
Cannot connect or bindCorrect host and port, credentials, bind type, and whether your public IP is on the provider's allow-list. See IP access.
Accepted but never deliveredValidity period, destination number status, sender ID rules in the destination country, and the final receipt state.
Garbled or replaced charactersEncoding (GSM-7 or UCS-2) and data_coding value. See SMS encoding.
Message split unexpectedlyMessage length per encoding, and extension characters that count twice.
Sender ID changed on the handsetDestination rules: some countries require registration or replace unregistered sender IDs.
Throttling errorsYour send rate against the agreed limit and window size.
Receipts missingWhether a receipt was requested, whether your receiver session or webhook is reachable, and matching of message IDs.

What to send to support

For each affected message: the message ID, destination number (it can be partly masked), sender ID, submission time with time zone, the error or receipt state, and the connection used. Do not send passwords or the full content of sensitive messages. Email support@wisenetwork.co.

Talk to our carrier team

Tell us which destinations, volumes or networks you are working with. A member of our team will reply by email.

We use these details only to reply to your request. See the privacy policy.