Представим себе сервис уведомлений водителей такси о поступивших заказах по SMS. Вы заказали такси для поездки в аэропорт, диспетчер отправил водителю сообщение, а у того телефон разрядился час назад... представили? Чтобы избежать подобных ситуаций, большинство SMSC поддерживает передачу информации о доставке SMS абоненту. Итак, попробуем разобраться с тем, каким образом можно получить уведомление о доставке SMS, используя все тот же Kannel.
Чтобы получить уведомление о доставке, при отправке нового сообщения необходимо указать следующие параметры: dlr-mask (маска уведомлений) и dlr-url (адрес обработчика уведомлений о доставке).
Чтобы не запутаться в отправляемых сообщениях и DLR-ках, в параметре dlr-url можно указать свой собственный идентификатор, который и будет передан Kannel'ом обработчику.
Текст сообщения имеет следующий вид:
id:IIIIIIIIII sub:SSS dlvrd:DDD submit date:YYMMDDhhmm done date:YYMMDDhhmm stat:DDDDDDD err:E Text: . . . . . . . . .
В поле stat содержится очень понятный мнемонический статус - например, EXPIRED, DELIVRD или UNDELIV. Более подробное описание можно найти в приложении B спецификации SMPP 3.4.
Несмотря на кажущуюся простоту, разработчики SMSC успели заложить, как минимум, одни прикольные грабли. Заключаются они в том, что идентификатор сообщения в submit_sm_resp и в последующей DLR могут быть представлены в разном виде, а именно, в виде бинарной строки, десятичного или шестнадцатиричного числа. В связи с этим, в настройке SMPP подключения в Kannel есть один полезный параметр msg-id-type, указывающий, в каких форматах будет встречаться message_id в разных командах.
Например: msg-id-type = 0x02 определяет ситуацию, в которой при отправке мы получаем идентификатор в виде десятичного числа, а при получении уведмоления - шестнадцатиричного.