Troubleshooting Guide
Common issues and solutions
OmniMessage Connectivity Issues
Since the SMPP Gateway is stateless and depends entirely on OmniMessage Core, connectivity problems with OmniMessage are the most critical issues.
Symptoms of OmniMessage Disconnection
- No outbound messages: Queue builds up, messages not being sent
- No inbound messages: Partners can't submit messages
- Timeouts: API calls timing out or hanging
- Logs show: "Connection refused", "Timeout", "HTTP 503", "Connection reset"
Diagnosis
1. Check OmniMessage Availability:
# Test connectivity
curl -k -v https://omnimessage-core.example.com:8443/api/system/health
# Test from gateway host specifically
ssh gateway-server 'curl -k https://omnimessage-core.example.com:8443/api/system/health'
2. Check Configured API URL:
# Review the configuration
grep -A1 'api_base_url' /opt/omnimessage-smpp/config/runtime.exs
# Check for network connectivity
ping omnimessage-core.example.com
nc -zv omnimessage-core.example.com 8443
3. Check Gateway Logs for API Errors:
# Look for API-related errors
sudo journalctl -u omnimessage-smpp -f | grep -i 'api\|omnimessage\|connect'
# Search logs for recent errors
sudo journalctl -u omnimessage-smpp -n 200 | grep -i error
Solutions
If OmniMessage is down:
- Contact OmniMessage operations team
- Pending messages will accumulate in the queue
- Gateway will keep retrying (see
SMPP_POLL_INTERVAL) - Check OmniMessage status page or monitoring
If OmniMessage is up but gateway can't reach it:
- Check firewall rules allow outbound HTTPS
- Check DNS resolution:
nslookup omnimessage-core.example.com - Check network routing:
traceroute omnimessage-core.example.com - Verify SSL certificates if using HTTPS
If API URL is misconfigured:
- Edit
/opt/omnimessage-smpp/config/runtime.exs - Verify
api_base_urlis correct (must be HTTPS for production) - Restart gateway:
sudo systemctl restart omnimessage-smpp
Connection Problems
Connection Won't Establish
Symptoms:
- Status shows "Disconnected" (red)
- No successful bind in logs
- Repeated connection attempts
Possible Causes & Solutions:
1. Network Connectivity Issues
Check:
# Test DNS resolution
nslookup smpp.carrier.com
# Test connectivity
ping -c 3 smpp.carrier.com
# Test port
telnet smpp.carrier.com 2775
# or
nc -zv smpp.carrier.com 2775
Solutions:
- If DNS fails: Use IP address instead of hostname in configuration
- If ping fails: Check firewall rules, contact carrier
- If port fails: Verify correct port number, check firewall
2. Incorrect Credentials
Check:
- Logs show "bind failed" or "authentication error"
- Web UI: SMPP → Client Peers → verify system_id and password
Solutions:
- Confirm credentials with carrier
- Check for typos (case-sensitive)
- Update configuration and reconnect
3. IP Not Whitelisted
Check:
- Connection rejected immediately
- Carrier logs show unauthorized IP
Solutions:
- Confirm your gateway's public IP:
curl ifconfig.me - Request carrier add IP to whitelist
- Verify IP hasn't changed (dynamic IP)
4. Firewall Blocking
Check:
# Check if port is open
sudo iptables -L -n | grep 2775
# Check UFW (Ubuntu/Debian)
sudo ufw status | grep 2775
# Check firewalld (RHEL/CentOS)
sudo firewall-cmd --list-ports | grep 2775
Solutions:
# Ubuntu/Debian
sudo ufw allow out 2775/tcp
# RHEL/CentOS
sudo firewall-cmd --permanent --add-port=2775/tcp
sudo firewall-cmd --reload
5. Pinned Source Address/Port Unavailable
Only applies when the client bind sets bind_source_ip and/or bind_source_port (see CONFIGURATION.md).
Check:
- Logs show the connection failing to open the local socket
bind_source_ipis not an address held by this host- Another process already holds the configured
bind_source_port
Solutions:
- Confirm
bind_source_ipis a local address:ip addr show - An invalid
bind_source_ipis logged and ignored — the OS then picks the source IP, which may not match the carrier's whitelist. Correct the address if delivery is failing. - The pinned port is opened with
SO_REUSEADDR, so a reconnect rebinds immediately even while the old socket is inTIME_WAIT. If the port is still unavailable, check whether another service uses it:sudo ss -ltnp | grep <port>
Connection Keeps Dropping
Symptoms:
- Connection established but frequently disconnects
smpp_disconnection_totalmetric increasing- Logs show repeated reconnections
Possible Causes & Solutions:
1. Network Instability
Check:
# Monitor packet loss
ping -c 100 smpp.carrier.com | grep loss
# Check network errors
netstat -s | grep -i error
Solutions:
- Contact carrier about network issues
- Check with ISP if on your end
- Consider backup connection/route
2. Enquire Link Timeout
Check:
- Logs show "enquire_link timeout"
- Connection drops after periods of inactivity
Solutions:
- Default timeout is 30 seconds
- Verify network allows keepalive packets
- Check for aggressive firewalls timing out idle connections
3. TPS Limit Exceeded
Check:
- High message rate at disconnect time
- Carrier throttling messages
Solutions:
- Review
tps_limitsetting - Reduce TPS to 70-80% of carrier maximum
- Spread traffic across multiple binds
4. Carrier Server Issues
Check:
- Check carrier service status
- Contact carrier support
Solutions:
- Wait for carrier to resolve
- Configure backup carrier if available
Message Delivery Problems
Messages Not Being Sent
Symptoms:
- Messages stuck in queue
smpp_messages_sent_totalnot increasing- Connection shows connected
Possible Causes & Solutions:
1. Wrong dest_smsc Routing
Check:
- Web UI → Queue → Check message
dest_smscfield - Compare with connection name in SMPP → Live Status
Solutions:
- Messages route based on
dest_smscfield - Verify backend is setting correct
dest_smsc - If
dest_smscis NULL, check default routing
2. Messages Scheduled for Future
Check:
- Web UI → Queue → Check
deliver_afterfield - Messages with future timestamp won't send yet
Explanation:
- Retry system sets
deliver_afterfor failed messages - Messages wait until that time before retry
Solutions:
- Wait for scheduled time
- If urgent, contact backend team to reset timestamp
3. TPS Limit Too Low
Check:
- Large queue buildup
- Messages sending very slowly
Solutions:
- Increase
tps_limitin configuration - Verify carrier can handle higher rate
- See CONFIGURATION.md
4. Queue Worker Not Running
Check:
- Service status
- Logs for errors
Solutions:
# Restart service
sudo systemctl restart omnimessage-smpp
# Check logs
sudo journalctl -u omnimessage-smpp -f
5. Frontend Not Registered Under the Expected Name
OmniMessage Core only routes a message to this gateway if a peer is registered under a frontend name equal to the message's dest_smsc. Each peer registers under its routing key (see Frontend Registration):
- Client peers: the configured
queue, or the bare peer name if noqueueis set. - Server binds: the bind name.
Check:
- Logs for
Successfully registered SMPP peer frontend '<name>'entries — confirm<name>matches thedest_smscon stuck messages - For binds sharing a
queue, expect a single registration under the shared queue name, not one per peer
Solutions:
- Ensure the backend sets
dest_smscto the routing key (the peer'squeue, else its name), not to{hostname}_{peer}(an earlier naming scheme that no longer applies) - If using a shared
queue, route messages to the queue name rather than an individual peer name - Confirm the peer is enabled — disabled peers are not registered
High Delivery Failure Rate
Symptoms:
smpp_delivery_failures_totalincreasing- Logs show "submit_sm_resp" with error status
- Messages not reaching recipients
Possible Causes & Solutions:
1. Invalid Destination Numbers
Check:
- Logs for specific error codes
- Review message destination format
Common Error Codes:
0x0000000B- Invalid destination0x00000001- Invalid message length0x00000003- Invalid command
Solutions:
- Validate number format (E.164 recommended)
- Check number includes country code
- Verify with carrier requirements
2. Invalid Message Content
Check:
- Message length
- Special characters
- Encoding
Solutions:
- GSM-7: Max 160 characters
- UCS-2: Max 70 characters
- Remove unsupported characters
- Check encoding settings
3. Carrier Rejection
Check:
- Specific error codes from carrier
- Patterns in rejected messages
Solutions:
- Contact carrier for rejection reason
- May need content filtering
- Check for spam/abuse patterns
4. Expired Messages
Check:
- Message
expirestimestamp - Delivery attempt timing
Solutions:
- Increase message validity period
- Reduce retry delay for time-sensitive messages
Web UI Problems
Can't Access Web Dashboard
Symptoms:
- Browser can't connect to https://your-server:8087
- Timeout or connection refused
Possible Causes & Solutions:
1. Service Not Running
Check:
sudo systemctl status omnimessage-smpp
Solutions:
# If stopped, start it
sudo systemctl start omnimessage-smpp
# Check logs for errors
sudo journalctl -u omnimessage-smpp -n 50
2. Firewall Blocking Port 8087
Check:
sudo ufw status | grep 8087
# or
sudo firewall-cmd --list-ports | grep 8087
Solutions:
# Ubuntu/Debian
sudo ufw allow 8087/tcp
# RHEL/CentOS
sudo firewall-cmd --permanent --add-port=8087/tcp
sudo firewall-cmd --reload
3. SSL Certificate Issues
Check:
- Browser shows security warning
- Certificate expired or invalid
Solutions:
- Accept security exception (if self-signed)
- Install valid SSL certificate
- Check certificate files exist:
ls -l /opt/omnimessage-smpp/priv/cert/
4. Wrong URL
Check:
- Verify using HTTPS (not HTTP)
- Verify correct server IP/hostname
- Verify port 8087
Web UI Shows Errors
Symptoms:
- Page loads but shows errors
- Functions don't work
- Data not displaying
Solutions:
-
Clear Browser Cache:
- Ctrl+F5 (hard refresh)
- Clear browser cache and cookies
-
Check Browser Console:
- Press F12
- Check Console tab for JavaScript errors
- Report to support if errors found
-
Try Different Browser:
- Test in Chrome, Firefox, Edge
- Isolate browser-specific issues
-
Check Service Logs:
sudo journalctl -u omnimessage-smpp -f
Metrics Problems
Prometheus Metrics Not Available
Symptoms:
curl http://localhost:4000/metricsfails- Prometheus can't scrape metrics
- Empty or error response
Possible Causes & Solutions:
1. Service Not Running
Check:
sudo systemctl status omnimessage-smpp
Solutions:
sudo systemctl start omnimessage-smpp
2. Port Not Accessible
Check:
# Test locally
curl http://localhost:4000/metrics
# Test remotely
curl http://your-server-ip:4000/metrics
Solutions:
- If local works but remote doesn't: Check firewall
- Open port 4000 in firewall for Prometheus server
3. Wrong Endpoint
Verify:
- Endpoint is
/metrics(not/prometheusor/stats) - Port is 4000 (not 8087)
Metrics Show Unexpected Values
Symptoms:
- Counters reset to zero
- Gauges show wrong values
- Missing metrics for some binds
Solutions:
-
Service Restart Resets Counters:
- Counters reset on service restart
- This is normal behavior
- Use
increase()orrate()in Prometheus queries
-
New Binds Not Showing:
- Metrics only appear after first event
- Send test message to populate metrics
- Check bind is enabled and connected
-
Stale Metrics:
- Old binds may still show in metrics
- Restart service to clear stale entries
- Or use Prometheus relabeling to filter
Performance Problems
High CPU Usage
Check:
top -p $(pgrep -f omnimessage-smpp)
Possible Causes:
- Very high message volume
- Too many connections
- Configuration issue
Solutions:
- Check message rate is within capacity
- Review TPS limits
- Contact support if sustained high CPU
High Memory Usage
Check:
ps aux | grep omnimessage-smpp
Possible Causes:
- Large message queue in memory
- Memory leak (rare)
Solutions:
- Restart service to clear memory
- Check message queue size
- Contact support if memory grows continuously
Slow Message Processing
Symptoms:
- Messages take long to send
- Queue building up
- Low message rate
Check:
- TPS limits - may be too restrictive
queue_check_frequency- may be too high- Backend API response time - may be slow
- Network latency to carrier
Solutions:
- Increase TPS if carrier allows
- Decrease
queue_check_frequencyfor faster polling - Optimize backend API
- Check network latency
Configuration Problems
Configuration File Syntax Errors
Symptoms:
- Service won't start after config change
- Logs show "syntax error" or "parse error"
Check:
# Validate Elixir syntax
/opt/omnimessage-smpp/bin/omnimessage-smpp eval "File.read!('config/runtime.exs')"
Common Mistakes:
- Missing comma between map entries
- Mismatched quotes (" vs ')
- Unmatched brackets or braces
- Missing
import Configat top
Solutions:
- Restore from backup
- Carefully review syntax
- Use text editor with Elixir syntax highlighting
Changes Not Taking Effect
Symptoms:
- Modified configuration but no change in behavior
- Old settings still active
Solutions:
# Configuration changes require restart
sudo systemctl restart omnimessage-smpp
# Verify restart succeeded
sudo systemctl status omnimessage-smpp
# Check logs for errors
sudo journalctl -u omnimessage-smpp -n 50
Emergency Recovery
Complete System Failure
Steps:
-
Check basic system health:
# Disk space
df -h
# Memory
free -h
# CPU load
uptime -
Check service status:
sudo systemctl status omnimessage-smpp -
Review recent logs:
sudo journalctl -u omnimessage-smpp -n 200 -
Try service restart:
sudo systemctl restart omnimessage-smpp -
If restart fails:
- Check configuration syntax
- Verify SSL certificates exist
- Check file permissions
- Review logs for specific error
-
Restore from backup (if needed):
# Restore config
sudo cp /opt/omnimessage-smpp/config/runtime.exs.backup \
/opt/omnimessage-smpp/config/runtime.exs
# Restart
sudo systemctl restart omnimessage-smpp -
Contact support if unresolved
Getting Help
Information to Gather
Before contacting support, collect:
- Version:
cat /opt/omnimessage-smpp/VERSION - Recent Logs:
sudo journalctl -u omnimessage-smpp -n 200 > /tmp/smpp-logs.txt - Configuration (sanitize passwords):
sudo cp /opt/omnimessage-smpp/config/runtime.exs /tmp/config.exs
# Edit /tmp/config.exs to remove passwords before sending - Metrics Output:
curl http://localhost:4000/metrics > /tmp/metrics.txt - System Info:
uname -a > /tmp/system-info.txt
free -h >> /tmp/system-info.txt
df -h >> /tmp/system-info.txt
Contact Support
- Email: support@omnitouch.com
- Phone: +61 XXXX XXXX (24/7)
- Include: All information from above
Related Documentation
- USAGE.md - Normal operational procedures
- CONFIGURATION.md - Configuration reference
- MONITORING.md - Monitoring and metrics
- README.md - System overview