Перейти к основному содержимому

Отчёты о доставке

Отчёт приходит как 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_class0x04 — отчёт о доставке
data_coding0 или 8, если текст не записать в GSM 7-bit

Адреса не переставлены: отправитель остаётся в source_addr, получатель — в destination_addr. Многие SMSC ставят получателя первым, поэтому сопоставляйте отчёты с сообщениями по id: или receipted_message_id, а не по адресам.

Результат: stat:​

stat:message_stateЧто произошло
DELIVRD2Оператор подтвердил доставку на телефон
ENROUTE1В пути: финальный отчёт с тем же id: придёт следом
ACCEPTD6Принято оператором
EXPIRED3Срок действия истёк раньше, чем телефон появился в сети, или раньше, чем сообщение удалось отправить
UNDELIV5Оператор его не доставил
REJECTD8Сообщение не принято к отправке — причина в err:
DELETED4Сообщение отменено
UNKNOWN7Оператор не сообщил результат

Если оператор так и не сообщил результат, отчёт не приходит. Сообщение, у которого истёк срок действия, пока оно ждало на нашей стороне, получает 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 не передаются.