How to configure the SMPP Scheduled Delivery Time Field
What is the Scheduled Delivery Time Field?
The Scheduled Delivery Time field in SMPP (Short Message Peer-to-Peer Protocol) is an optional parameter in the submit_sm PDU
that allows a message to be queued for delivery at a future date and time. This field is critical for:
- Delaying message delivery to off-peak hours
- Scheduling time-sensitive campaigns (e.g., birthday messages)
- Coordinating messages across time zones
Field Format and Structure
The SMPP v3.4 specification defines this field as a C-Octet String (null-terminated) with a specific date-time format:
YYMMDDhhmmssnnp
Where:
| Component | Description | Range |
|---|---|---|
| YY | Last two digits of the year | 00-99 |
| MM | Month | 01-12 |
| DD | Day | 01-31 |
| hh | Hour (24h format) | 00-23 |
| mm | Minute | 00-59 |
| ss | Second | 00-59 |
| nn | Tenths of seconds (optional) | 00-99 |
| p | Time zone offset (e.g., +, -) | +/- followed by 4 digits (HHMM) |
-
NULL (immediate delivery)-
000000000000000 (immediate delivery, legacy systems)
Example Time Strings
| Time String | Interpretation |
|---|---|
231015143000000+ |
Oct 15, 2023 14:30:00 UTC+0 |
231015143000000-0800 |
Oct 15, 2023 14:30:00 UTC-08:00 |
000000000000000 |
Immediate delivery (legacy) |
NULL |
Immediate delivery (recommended) |
Use Cases
1. Birthday Messages
Schedule a message to deliver exactly at midnight on the recipient’s birthday:
scheduled_delivery_time: "231016000000000+"
// Oct 16, 2023 00:00:00 UTC+0
2. Off-Peak Delivery
Avoid network congestion by sending bulk messages at night:
scheduled_delivery_time: "231015020000000+"
// Oct 15, 2023 02:00:00 UTC+0
3. Time Zone Coordination
Deliver messages at 9 AM local time for recipients in New York (UTC-5):
scheduled_delivery_time: "231015090000000-0500"
// Oct 15, 2023 09:00:00 UTC-05:00
Example SMPP PDUs
Example 1: Immediate Delivery (NULL)
0000001D // Command Length (29 bytes)
00000004 // Command ID (SubmitSM)
00000001 // Sequence Number
00 // Source TON
00 // Source NPI
736F7572636500 // Source Address ("source")
00 // Dest TON
00 // Dest NPI
36353433323100 // Destination Address ("654321")
00 // ESM Class
00 // Protocol ID
00 // Priority Flag
00 // Schedule Delivery Time (NULL: immediate)
00 // Validity Period
00 // Registered Delivery
00 // Replace-if-Present
00 // Data Coding (DCS=0x00)
00 // SM Default Message ID
07 // SM Length (7 septets)
C8329BFD06DDDF72 // Payload ("Hello!")
Example 2: Future Delivery (Oct 15, 2023 14:30 UTC)
0000002A // Command Length (42 bytes)
00000004 // Command ID (SubmitSM)
00000002 // Sequence Number
00 // Source TON
00 // Source NPI
736F7572636500 // Source Address ("source")
00 // Dest TON
00 // Dest NPI
36353433323100 // Destination Address ("654321")
00 // ESM Class
00 // Protocol ID
00 // Priority Flag
3233313031353134333030303030302B00 // "231015143000000+" (16 bytes + null)
00 // Validity Period
00 // Registered Delivery
00 // Replace-if-Present
00 // Data Coding (DCS=0x00)
00 // SM Default Message ID
07 // SM Length (7 septets)
C8329BFD06DDDF72 // Payload ("Hello!")
Interactions with Other Fields
- validity_period: Defines how long the SMSC will attempt delivery. Starts counting from the scheduled time.
- priority_flag: Higher-priority messages may bypass scheduling queues on some SMSCs.
Common Pitfalls
- Using local time without specifying the time zone offset.
- Incorrectly formatting the date string (e.g., invalid month "13").
- Assuming all SMSCs support scheduled delivery (verify with provider).
- Setting a time in the past, causing immediate delivery.
Some SMSCs ignore fractional seconds (
nn) or restrict how far in advance messages can be scheduled (e.g., 7 days max).
Conclusion
The Scheduled Delivery Time field enables precise control over when SMS messages are delivered. Proper use requires careful formatting of time strings and coordination with SMSC capabilities. Always test scheduled messages with your provider and refer to the SMPP v3.4 specification for edge cases (e.g., leap years, time zone transitions).