SMPP provides for return of an SMSC delivery receipt via the deliver_sm or data_sm PDU,
which indicates the delivery status of the message.
The informational content of an SMSC Delivery Receipt may be inserted into the
short_message parameter of the deliver_sm operation. The format for this Delivery Receipt
message is SMSC vendor specific but following is a typical example of Delivery Receipt report:
“id:IIIIIIIIII sub:SSS dlvrd:DDD submit date:YYMMDDhhmm done date:YYMMDDhhmm stat:DDDDDDD err:E Text: . . . . . . . . .”
Here is the example Delivery receipt message states:
In my test, I got following Delivery receipt from SMSC:
id:0911897980 sub:001 dlvrd:000 submit date:1201121551 done date:1201121551 stat:UNDELIV err:075 text:-PROFILE
"075" means ESME_RINVDSTNPI:
75 | ESME_RINVDSTNPI | Invalid numbering plan indicator for destination |
So I decode Submit_SM message as following:
command_length = 0000009A command_id = 00000004 command_status = 00000000 sequence_number = 00000073 service_type = service_type_decode = source_addr_ton = 00 source_addr_npi = 00 source_addr = source_addr_decode = dest_addr_ton = 01 dest_addr_npi = 01 dest_addr = 38353832333830 dest_addr_decode = 8582380 esm_class = 40 protocol_id = 00 priority_flag = 00 schedule_delivery_time = schedule_delivery_time_decode = validity_period = validity_period_decode = registered_delivery = 00 replace_if_present_flag = 00 data_coding = 04 sm_default_msg_id = 00 sm_length = 72 short_message = ... short_message_decode =
We can see dest_addr_ton=0x01 (International) and dest_addr_npi=0x01 (ISDN), but the dest_addr is not well format international type, so the dest_addr_ton should be updated to "0x02" which is (National) or the dest_addr should be ISDN format with country code.