# Коды ошибок command_status в SMPP

> command_status — это 4-байтовое поле заголовка, сообщающее результат операции. В запросе оно равно 0 (ESME_ROK); в ответе оно несёт код ошибки ESME_R*. 0x00000000 означает успех; ненулевые значения указывают на конкретные сбои, такие как неверный пароль, троттлинг или переполненная очередь сообщений.

- Канонический URL: https://www.broadnet.me/ru/reference/smpp-command-status-errors
- Язык: ru
- Последнее обновление: 2026-07-18
- Издатель: BroadNet (https://www.broadnet.me)

Поле command_status в SMPP и диапазон ошибок ESME_R*: что означают распространённые коды (ESME_RINVPASWD, ESME_RTHROTTLED, ESME_RMSGQFUL…) и как реагировать на каждый из них.

## Как работает command_status

Каждый PDU-ответ повторяет sequence_number запроса и устанавливает command_status в результат. ESME_ROK (0) означает успех. Любое другое значение — это ошибка, числовой код которой соответствует именованной константе ESME_R* из спецификации. Коды 0x00000100–0x000003FF зарезервированы для расширений SMPP, а 0x00000400–0x000004FF — для ошибок конкретного производителя SMSC, поэтому всегда корректно обрабатывайте неизвестные коды.

## Коды, которые вы реально увидите

Небольшой набор кодов покрывает большую часть реальной обработки. Сгруппируйте их по реакции: повторить после задержки (троттлинг, переполнение очереди, системная ошибка), исправить запрос (неверный адрес, TON/NPI, data_coding, длина сообщения) и фатальные для сессии (неверный пароль или системный идентификатор, сбой bind).

*Часто встречающиеся коды command_status*

| Значение | Имя | Значение | Типичная реакция |
|---|---|---|---|
| 0x00000000 | ESME_ROK | Нет ошибки | Успешно |
| 0x00000001 | ESME_RINVMSGLEN | Недопустимая длина сообщения | Исправление полезной нагрузки / сегмента |
| 0x00000005 | ESME_RALYBND | Bind уже выполнен | Не выполняйте повторный bind; используйте существующую сессию |
| 0x0000000A | ESME_RINVSRCADR | Неверный адрес источника | Исправить отправителя / TON / NPI |
| 0x0000000B | ESME_RINVDSTADR | Неверный адрес назначения | Исправить MSISDN получателя |
| 0x0000000D | ESME_RBINDFAIL | Ошибка bind | Сделайте паузу (backoff), проверьте учётные данные |
| 0x0000000E | ESME_RINVPASWD | Неверный пароль | Критическая ошибка — исправьте учетные данные |
| 0x0000000F | ESME_RINVSYSID | Неверный идентификатор системы | Критическая ошибка — исправьте учетные данные |
| 0x00000014 | ESME_RMSGQFUL | Очередь сообщений заполнена | Сделайте паузу (backoff) и повторите попытку |
| 0x00000043 | ESME_RINVESMCLASS | Некорректный esm_class | Исправить биты esm_class |
| 0x00000058 | ESME_RTHROTTLED | Throttling — превышена скорость | Снизьте скорость, backoff с джиттером |
| 0x00000062 | ESME_RINVEXPIRY | Некорректный validity_period | Исправьте формат срока действия |
| 0x000000FE | ESME_RDELIVERYFAILURE | Ошибка доставки (data_sm) | Проверка/повторная попытка в соответствии с политикой |
| 0x000000FF | ESME_RUNKNOWNERR | Неизвестная ошибка | Записать в журнал, оповестить, осторожно повторить |

## Зарезервированные диапазоны и диапазоны производителей

Не каждый полученный код есть в основной спецификации. Спецификация резервирует 0x00000100–0x000003FF для будущего использования в SMPP и 0x00000400–0x000004FF для кодов конкретного SMSC, поэтому ваш провайдер может вернуть значение, объяснённое только в его документации. Сопоставляйте коды провайдера с нормализованной внутренней таксономией (неверный номер, заблокирован, троттлинг, временный сбой), чтобы качество разных маршрутов оставалось сопоставимым.

*Зарезервированные диапазоны command_status*

| Диапазон | Зарезервировано для |
|---|---|
| 0x00000100 – 0x000003FF | Расширения протокола SMPP |
| 0x00000400 – 0x000004FF | Ошибки, специфичные для поставщика SMSC |
| 0x00000500 – 0xFFFFFFFF | Зарезервировано |

## Частые вопросы

### Что означает ESME_RTHROTTLED и как это обрабатывать?

ESME_RTHROTTLED (0x00000058) означает, что вы превысили разрешённую скорость отправки сообщений. Прекратите наращивать нагрузку, приостановите отправку и выдержите паузу с джиттером перед повтором. Продолжение на той же скорости грозит тем, что провайдер разорвёт bind.

### Восстановима ли ошибка ESME_RINVPASWD?

Нет, не во время работы. ESME_RINVPASWD (0x0000000E) указывает на неверные учётные данные. Не зацикливайте bind; исправьте конфигурацию system_id/password и переподключитесь. Повторные неудачные bind могут привести к блокировке IP.

### В чём разница между ESME_RMSGQFUL и ESME_RTHROTTLED?

ESME_RMSGQFUL (0x00000014) означает, что очередь SMSC временно переполнена; ESME_RTHROTTLED (0x00000058) означает, что вы превысили лимит скорости. Оба требуют выдержки, но троттлинг касается вашего TPS, а переполнение очереди — ёмкости SMSC.

### Я получил код ошибки, которого нет в спецификации — почему?

SMPP резервирует 0x400–0x4FF для кодов конкретного производителя SMSC, поэтому ваш провайдер может вернуть значение, задокументированное только им. Обратитесь к таблице ошибок провайдера и сопоставьте его со своей внутренней таксономией.

## Источники

- [SMPP v3.4 specification — §5.1.3 command_status](https://smpp.org/SMPP_v3_4_Issue1_2.pdf)
- [SMPP v5.0 specification](https://smpp.org/SMPP_v5.pdf)

## См. также

- [Поиск кодов ошибок SMPP (бесплатный инструмент)](https://www.broadnet.me/ru/tools/smpp-error-codes)
- [Структура PDU в SMPP](https://www.broadnet.me/ru/reference/smpp-pdu-anatomy)
- [SMPP enquire_link и троттлинг](https://www.broadnet.me/ru/reference/smpp-enquire-link-throttling)
- [Лучшие практики интеграции SMPP](https://www.broadnet.me/ru/reference/smpp-integration-best-practices)
- [Чек-лист интеграции SMPP (руководство)](https://www.broadnet.me/ru/guides/smpp-integration-checklist)
