Hello, list.
Sometimes it's good to know the exact reason why sms was failed.
Is there any way I can get extended information about message delivery
status?
i.e. if it was REJECTED / UNDELIVERABLE / DELETED / EXPIRED
According to SMPP v3.4 message states are:
Message State Value Description
ENROUTE 1 The message is in enroute
state.
DELIVERED 2 Message is delivered to
destination
EXPIRED 3 Message validity period has
expired.
DELETED 4 Message has been deleted.
UNDELIVERABLE 5 Message is undeliverable
ACCEPTED 6 Message is in accepted state
(i.e. has been manually read
on behalf of the subscriber by
customer service)
UNKNOWN 7 Message is in invalid state
REJECTED 8 Message is in a rejected state
Kannel seems to give status = 1 for delivered messages and status = 2 for
all other failed messages (i.e. EXPIRED / REJECTED / UNDELIVERABLE, etc).
Kannel's documentation says there is a 16 status for REJECTED messages, but
kannel still gives status 2 instead. SMSC sends correct message state 8.
I checked the source also it seems there is no handling of additional
statuses in code (from gw/smsc/smsc_smpp.c):
/* first check for SMPP v3.4 and above */
1291 if (smpp->version > 0x33 && receipted_message_id) {
1292 msgid = octstr_duplicate(receipted_message_id);
1293 switch(message_state) {
1294 case 1: /* ENROUTE */
1295 case 6: /* ACCEPTED */
1296 dlrstat = DLR_BUFFERED;
1297 break;
1298 case 2: /* DELIVERED */
1299 dlrstat = DLR_SUCCESS;
1300 break;
1301 case 3: /* EXPIRED */
1302 case 4: /* DELETED */
1303 case 5: /* UNDELIVERABLE */
1304 case 7: /* UNKNOWN */
1305 case 8: /* REJECTED */
1306 dlrstat = DLR_FAIL;
1307 break;
1308 case -1: /* message state is not present, partial SMPP v3.4 */
1309 debug("bb.sms.smpp", 0, "SMPP[%s]: Partial SMPP v3.4,
receipted_message_id present but not message_state.",
1310 octstr_get_cstr(smpp->conn->id));
1311 dlrstat = -1;
1312 break;
1313 default:
1314 warning(0, "SMPP[%s]: Got DLR with unknown 'message_state'
(%ld).",
1315 octstr_get_cstr(smpp->conn->id), message_state);
1316 dlrstat = DLR_FAIL;
1317 break;
1318 }
1319 }
What's the right way to get additional information about message state from
kannel?
Should I modify source or I can use somehow msgdata field from DLR somehow
with stat code (REJECTD/DELIVRD/etc) ?
Thanks in advance.