Перейти до основного вмісту

Звіти про доставку

Звіт приходить як 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 не передаються.