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