Отчёты о доставке
Отчёт приходит как deliver_sm в сессию receiver или transceiver вашей учётной записи. Он
приходит на каждый submit_sm — на каждую часть длинного сообщения — независимо от того, что
указано в registered_delivery.
Как выглядит отчёт
Текст отчёта — в стандартной форме:
id:4815162342 sub:001 dlvrd:001 submit date:2610301432 done date:2610301433 stat:DELIVRD err:000 text:
| Поле | Что значит |
|---|---|
id: | message_id из submit_sm_resp |
sub: | Всегда 001 |
dlvrd: | 001, если сообщение доставлено, иначе 000 |
submit date: | Когда сообщение передано оператору (для REJECTD — когда его отклонили), YYMMDDhhmm |
done date: | Когда мы зафиксировали результат, YYMMDDhhmm |
stat: | Результат, см. ниже |
err: | Код ошибки, см. ниже |
text: | Всегда пусто |
Обе даты — по киевскому времени (Europe/Kyiv), с точностью до минуты.
Тот же message_id есть и в поле receipted_message_id (TLV 0x001E), а результат числом — в
message_state (TLV 0x0427). Остальные поля PDU:
| Поле | Значение |
|---|---|
source_addr | Имя отправителя, под которым ушло сообщение |
destination_addr | Номер получателя |
esm_class | 0x04 — отчёт о доставке |
data_coding | 0 или 8, если текст не записать в GSM 7-bit |
Адреса не переставлены: отправитель остаётся в source_addr, получатель — в
destination_addr. Многие SMSC ставят получателя первым, поэтому сопоставляйте отчёты с
сообщениями по id: или receipted_message_id, а не по адресам.
Результат: stat:
stat: | message_state | Что произошло |
|---|---|---|
DELIVRD | 2 | Оператор подтвердил доставку на телефон |
ENROUTE | 1 | В пути: финальный отчёт с тем же id: придёт следом |
ACCEPTD | 6 | Принято оператором |
EXPIRED | 3 | Срок действия истёк раньше, чем телефон появился в сети, или раньше, чем сообщение удалось отправить |
UNDELIV | 5 | Оператор его не доставил |
REJECTD | 8 | Сообщение не принято к отправке — причина в err: |
DELETED | 4 | Сообщение отменено |
UNKNOWN | 7 | Оператор не сообщил результат |
Если оператор так и не сообщил результат, отчёт не приходит. Сообщение, у которого истёк срок
действия, пока оно ждало на нашей стороне, получает EXPIRED, и деньги за него возвращаются.
Почему сообщение отклонено: err:
Для REJECTD код показывает, что исправить:
err: | Причина | Что делать |
|---|---|---|
001 | Недостаточно денег на балансе | Пополнить и отправить снова |
002 | Получатель: номер недействителен, заблокирован или его оператор не обслуживается | Проверить номер |
003 | Имя отправителя не разрешено для этой учётной записи | Взять согласованное имя или обратиться в поддержку |
004 | Текст: пустой, слишком длинный или флеш-сообщение длиннее одной части | Сократить или исправить текст |
005 | Маршрут не возит такой тип сообщений | Обратиться в поддержку |
006 | Отправка временно выключена на нашей стороне | Отправить позже |
000 | Другая причина | Обратиться в поддержку с id: |
В отчётах, пришедших от оператора (DELIVRD, UNDELIV и другие), err: — собственный код
оператора, переданный как есть.
Подтверждение отчётов
Отвечайте на каждый отчёт deliver_sm_resp. Одновременно в пути до двадцати отчётов, а
следующие идут, как только вы подтвердите уже отправленные.
Любой ответ убирает отчёт навсегда — включая ненулевой command_status. Если ваша
сторона не смогла обработать отчёт, не ждите его повторно после ответа с ошибкой: сохраните его
и обработайте позже.
Отчёт, который вы не подтвердили, хранится десять дней и приходит следующей сессией.
Несколько сессий
Отчёт идёт в одну из сессий receiver и transceiver учётной записи, не обязательно в ту, через
которую отправлено сообщение. Изредка один и тот же отчёт может дойти в две сессии — убирайте
дубликаты по id:.
Отчёты бывают только для сообщений, отправленных по SMPP. Для сообщений, отправленных через HTTP API, результат приходит на ваш адрес для уведомлений. Входящие сообщения по SMPP не передаются.