# Получение статусов доставки сообщений

Есть две возможности получения статуса доставки (активный и пассивный).

Пассивный вариант предусматривает установку флага registered\_delivery пакета SUBMIT\_SM. После перехода сообщения в финальное состояние сервер отправит DELIVER\_SM пакет с Delivery Receipt сообщением.

Чтобы запросить отчёт о доставке, для пакета SUBMIT\_SM нужно установить флаг registered\_delivery=0x01. В ответ SMSC отправляет пакет DELIVER\_SM, содержащий поле short\_message c отчётом о доставке.

**Пример отчёта о доставке**

```
(deliver_sm: 187 0x00000005 0 5018878) (body: (serviceType [] sourceAddr [1 1 [msisdn]] destAddr [5 0 [SenderName]] esmCls [0x04] regDlvry [0x00] dcs [0x00] message [id:6166f5d3de004fbb sub:001 dlvrd:001 submit date:2212150751 done date:2212150751 stat:DELIVRD err:000 text:])) (opts: (receipted_message_id: 0x001E 17 [6166f5d3de004fbb]) (message_state: 0x0427 1 [2]))
```

Подробное описание параметров, входящих в отчёт, приведено в таблице ниже.

**Параметры доставки**

| Параметр    | Описание                                                         |
| ----------- | ---------------------------------------------------------------- |
| serviceType | Параметр для указания SMS Application service                    |
| sourceAddr  | Номер абонента                                                   |
| destAddr    | Имя отправителя                                                  |
| esmCls      | Специальные атрибуты сообщения                                   |
| regDlvry    | Параметр для запроса уведомления о доставке SMSC                 |
| dcs         | Кодировка сообщения                                              |
| id          | ID сообщения                                                     |
| sub         | Количество отправленных сообщений                                |
| dlvrd       | Количество доставленных сообщений                                |
| submit date | Время отправки сообщения                                         |
| done date   | Время финализации сообщения                                      |
| stat        | Статус сообщения(dlvrd - доставлено или undeliv - не доставлено) |
| err         | Код ошибки (при наличии)                                         |
| text        | Состояние сообщения (промежуточное или финализированное)         |
| tlv         | Дополнительные параметры                                         |

**Описание дополнительных параметров**&#x20;

<table><thead><tr><th width="160.65818829353802">Значение параметра</th><th width="183.21971252566738">Параметр</th><th>Описание</th></tr></thead><tbody><tr><td>1059</td><td>network_error_code</td><td>Параметр network_error_code используется, чтобы указать код фактической сетевой ошибки для неудачи доставки.</td></tr><tr><td>1063</td><td>message_state</td><td>SMSC использует данный параметр в PDU deliver_sm и data_sm, чтобы передать конечное состояние сообщения для SMSC Delivery Receipt. Описание состояний представлено в таблице ниже.</td></tr><tr><td>30</td><td>receipted_message_id</td><td>Параметр receipted_message_id указывает ID сообщения, которое принимается в SMSC Delivery Receipt.</td></tr></tbody></table>

**Описание состояний message\_state**

| Код | Состояние сообщения  | Описание                                    |
| --- | -------------------- | ------------------------------------------- |
| 1   | ENROUTE              | Сообщение находится в состоянии отправки    |
| 2   | DELIVERED            | Сообщение доставлено адресату               |
| 3   | EXPIRED              | Истек период допустимой отправки сообщения  |
| 4   | DELETED              | Сообщение было удалено                      |
| 5   | UNDELIVERABLE        | Сообщение является не доставляемым          |
| 6   | ACCEPTED             | Сообщение находится в принятом состоянии    |
| 7   | UNKNOWN              | Сообщение находится в неизвестном состоянии |
| 8   | REJECTED             | Сообщение находится в отклоненном состоянии |

**Получение статусов многосоставных сообщений**

При отправке многосоставного сообщения SMSC сразу возвращает реальные статусы доставки для каждой части сообщения.&#x20;

На каждый пакет submit от клиента отправляется sumbit\_resp, далее передается пакет deliver с конечным статусом клиенту на каждую часть сообщения.

**Пример deliver пакета:**

```
(deliver: (pdu: 0 5 0 1774484) (addr: 1 1 msisdn) (addr: 5 0 SenderName) (sm: enc: UTF-8 msg: id:6166f5d3de004fbb sub:001 dlvrd:001 submit date:2110131805 done date:2110131806 stat:DELIVRD err:000 text:<r:FINAL>) (opt: (byte: (tlv: 1063) 2) (str: (tlv: 30) 6166f5d3de004fbb) ) )
```

Активный вариант предусматривает периодический опрос статуса сообщения отсылкой QUERY\_SM. Предполагается использование метода QUERY\_SM для тех сообщений, по которым не был получен deliver пакет.

_**Запрос:**_

```
(query: (pdu: 36 3 0 28671372) 6166f9adde00b313 (addr: 5 0 ) )
```

В пакете `query_sm` клиент передает `message_id` для получения информации по конкретному сообщению.\
\
&#xNAN;_**Ответ:**_

```
(query_resp: (pdu: 0 80000003 0 28671372) 6166f9adde00b313 1 0 )
```

В ответе передается статус сообщения (в примере показано сообщение в статусе ENROUTE).
