BroadNet
SMPPОшибки

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

Обновлено 2 мин чтенияна основе стандартов
Прямой ответ

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

§01

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

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

§02

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

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

Часто встречающиеся коды command_status
ЗначениеИмяЗначениеТипичная реакция
0x00000000ESME_ROKНет ошибкиУспешно
0x00000001ESME_RINVMSGLENНедопустимая длина сообщенияИсправление полезной нагрузки / сегмента
0x00000005ESME_RALYBNDBind уже выполненНе выполняйте повторный bind; используйте существующую сессию
0x0000000AESME_RINVSRCADRНеверный адрес источникаИсправить отправителя / TON / NPI
0x0000000BESME_RINVDSTADRНеверный адрес назначенияИсправить MSISDN получателя
0x0000000DESME_RBINDFAILОшибка bindСделайте паузу (backoff), проверьте учётные данные
0x0000000EESME_RINVPASWDНеверный парольКритическая ошибка — исправьте учетные данные
0x0000000FESME_RINVSYSIDНеверный идентификатор системыКритическая ошибка — исправьте учетные данные
0x00000014ESME_RMSGQFULОчередь сообщений заполненаСделайте паузу (backoff) и повторите попытку
0x00000043ESME_RINVESMCLASSНекорректный esm_classИсправить биты esm_class
0x00000058ESME_RTHROTTLEDThrottling — превышена скоростьСнизьте скорость, backoff с джиттером
0x00000062ESME_RINVEXPIRYНекорректный validity_periodИсправьте формат срока действия
0x000000FEESME_RDELIVERYFAILUREОшибка доставки (data_sm)Проверка/повторная попытка в соответствии с политикой
0x000000FFESME_RUNKNOWNERRНеизвестная ошибкаЗаписать в журнал, оповестить, осторожно повторить
§03

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

Не каждый полученный код есть в основной спецификации. Спецификация резервирует 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, поэтому ваш провайдер может вернуть значение, задокументированное только им. Обратитесь к таблице ошибок провайдера и сопоставьте его со своей внутренней таксономией.

Ссылки

Технические характеристики источника

На этой странице представлены опубликованные стандарты, на которых они основаны. (Открывается в новой вкладке)

BNПоддерживается инженерной командой BroadNet·Обмен сообщениями операторского класса с 2003 года.
Прикрепите это к проводу

Разработано с использованием реального SMPP подключения и REST API.

Запросите тестовый доступ с реальными тестовыми ключами: сначала отправьте их на свой подтвержденный номер, а затем, после утверждения вашей личности отправителя и маршрутов, переходите к использованию в производственной среде более чем в 200 странах.