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.

Reply via email to