SMS Developer Tools
Essential utilities for optimizing SMS campaigns and debugging message encoding. Free, privacy-focused, and client-side only.
SMS Segment Calculator
Paste your message below to detect encoding and calculate segments.
Unicode Detected
Your message contains non-GSM characters. This reduces the segment limit from 160 to 70 characters, potentially doubling your cost.
Why Use This Calculator?
SMS billing is based on "segments". A standard SMS segment is 160 characters, but only if you use the GSM-7 character set (standard letters, numbers, and symbols).
If you include a single emoji (e.g., "✅") or a special character like a smart quote, the entire message encoding switches to Unicode (UCS-2). This drops the limit to just 70 characters per segment.
For a marketing campaign with 10,000 users, accidentally sending a 71-character Unicode message (2 segments) instead of a 1-segment message effectively doubles your cost instantly.
Technical Breakdown
- GSM-7 Single Segment 160 chars
- GSM-7 Multi-Segment 153 chars
- Unicode Single Segment 70 chars
- Unicode Multi-Segment 67 chars
SMS PDU Decoder
How to use:
- Get a raw PDU string from your GSM modem or SMSC logs.
- Paste the hex string into the input box above.
- Click Decode PDU to parse the headers.
-
* Supports standard GSM 03.40 PDU format.
Why Decode PDUs?
When SMS messages travel through the network at the lowest level, they are encoded in PDU (Protocol Data Unit) mode. This hex string contains everything: the sender, the message center (SMSC), the timestamp, and the message content itself.
Developers working with GSM modems, IoT devices, or direct SMSC connections often need to debug raw hex data to understand why a message failed or was malformed.
07 = Length of SMSC info
91 = International format
04 = PDU Type (SMS-DELIVER)
0C = Sender address length
// This tool unpacks these bytes for you.
SMPP Log Analyzer
Parse raw SMPP logs to extract command IDs, status codes, and sequence numbers.
Understanding SMPP Logs
Commands
SMPP uses command IDs (e.g., submit_sm for sending, deliver_sm for receiving) to define the action. Responses always mirror the command ID (e.g., submit_sm_resp).
Status Codes
Every response includes a status. 0x00000000 (ESME_ROK) means success. Anything else indicates an error (e.g., Invalid Source Address, System Error).
Sequence #
Asynchronous protocols rely on sequence numbers to match requests with responses. If you send a request with sequence #105, the response must also be #105.