Troubleshooting
May 29, 2026 ยท View on GitHub
This guide lists common problems and the first checks to run.
Container Does Not Start
Check:
docker logs sendiumlogs/smsg.logif file logging is enabled- The
confdirectory is mounted to/work/conf credentials.yml,smsg.properties, androutingTable.confexist- The configured SMPP and HTTP ports are not already in use
HTTP API Returns 401
Check:
- The credential entry has
type: HTTP. - The submitted
usernameorusermatches the configuredsystemId. - The submitted
passwordorpassmatches the configuredpassword. - If
allowedIpsis configured, the request source IP is allowed. - The credential file was saved correctly and hot reloaded.
HTTP API Returns 400
The /sendsms endpoint requires:
usernameoruserpasswordorpassfromtotext
Check the response body for the missing parameter.
Message Is Accepted But Not Delivered
Check:
routingTable.confhas a matching rule for the message type.- The target worker name in
routingTable.confmatches a configured worker insmsg.properties. - The SMPP client worker is enabled with
outSms.instance.<name>.enable = true. - The upstream SMPP provider accepted the bind.
- Default
message.trace.mode = necessarylogsmessage.accepted,message.submitted,message.dlr, andmessage.deliver.sentwithout exposing addresses or message content. Temporarily setmessage.trace.mode = allto include route/enqueue/submit-response detail. smppclient.logcontains connection errors. Submit response detail requires temporaryprint.resps = trueand should be treated as sensitive.
Routing Falls Through Unexpectedly
Check:
- Rules are evaluated top-to-bottom.
- The fallback rule uses the
defaultoperator. - Message attributes match the names documented in Routing Engine.
- String comparisons are case-sensitive unless
equalsIgnoreCaseis used.
SMPP Client Cannot Bind
Check:
host,port,username, andpasswordare correct.connections.transceivers,connections.transmitters, orconnections.receiversis greater than zero.- TLS settings match the provider requirement.
- Firewall rules allow outbound traffic to the provider.
- The provider has allowlisted your source IP if required.
SMPP Server Rejects Binds
Check:
- The credential entry has
type: SMPP. - The SMPP client is using the configured
systemIdandpassword. srv.maxConnections,srv.maxConnectionsPerIP,conf.maxConnectionsPerUser.default, or per-user limits are not exceeded.- If
allowedIpsis configured, the bind source IP is allowed.
DLR Callback Is Not Received
Check:
- The HTTP submission includes a URL-encoded
dlr-urlparameter. - The callback endpoint is reachable from the Sendium container or host.
- The callback URL uses supported placeholders from Webhooks.
- The receiving endpoint returns an HTTP status from
200to399. - Logs contain DLR forwarding failures or retry messages.
MO Callback Is Not Received
Check:
forward.mo.urlis configured on the SMPP client worker receiving MO messages.forward.mo.formatis set toJSONorFORM.- The callback endpoint is reachable from the Sendium container or host.
- The receiving endpoint returns an HTTP status from
200to399. - Full incoming MO detail requires temporary
print.mos = trueand should be treated as sensitive.
Logs Are Missing
Check:
QUARKUS_LOG_FILE_ENABLE=trueis set when using file logs./work/logsis mounted to a writable host directory.QUARKUS_LOG_FILE_PATH,QUARKUS_LOG_FILE_SMPPCLIENT_PATH, andQUARKUS_LOG_FILE_SMPPSERVER_PATHpoint to valid paths.- Console logging is enabled if you expect logs in
docker logs.
Asking For Help
Before opening a public issue or discussion, remove credentials, system IDs, IP addresses, phone numbers, and message content from configs and logs.
Use:
- GitHub Discussions for questions and setup help.
- GitHub Issues for reproducible bugs.
info@sendium.orgfor security-sensitive reports.