BroadNet
Справочник SMPP v3.4 · command_status

Коды ошибок SMPP.

Каждое значение command_status определённое в спецификации SMPP v3.4, — шестнадцатеричный код, символьное имя, понятное описание, вероятная причина и решение. Ищите по коду или имени, чтобы быстро отладить сбой bind или submit_sm.

48 из 48 кодов
SMPP v3.4 command_status error codes
HexСимвольное имяЗначение и вероятная причина / решение
0x00000000ESME_ROKОшибок нет. PDU принят. Для submit_sm это означает лишь то, что SMSC принял сообщение к обработке, а не то, что оно доставлено — отслеживайте доставку через отчёт о доставке (DLR) в deliver_sm.
0x00000001ESME_RINVMSGLENНедопустимая длина сообщения. short_message или message_payload слишком длинное или пустое для используемой кодировки. Разбейте длинный контент на части или используйте TLV message_payload; проверьте соответствие data_coding длине в байтах.
0x00000002ESME_RINVCMDLENНедопустимая длина команды. command_length в заголовке PDU не совпадает с фактически отправленными байтами. Почти всегда это ошибка кодировщика PDU на стороне клиента либо ошибка границы буфера/фрейма.
0x00000003ESME_RINVCMDIDНедопустимый ID команды. command_id неизвестен или не поддерживается SMSC. Проверьте, что отправляется корректная операция и правильная версия SMPP.
0x00000004ESME_RINVBNDSTSНекорректный статус BIND для данной команды. Операция не разрешена в текущем режиме bind — например, submit_sm на receiver-bind, либо запрос до завершения bind. Сначала выполните bind как transmitter или transceiver.
0x00000005ESME_RALYBNDESME уже находится в состоянии bind. Повторный bind выполнен на уже привязанной сессии. Используйте существующую сессию или выполните unbind перед повторной привязкой.
0x00000006ESME_RINVPRTFLGНедопустимый флаг приоритета. priority_flag выходит за пределы диапазона 0–3, принимаемого SMSC. Используйте поддерживаемое значение (обычно 0).
0x00000007ESME_RINVREGDLVFLGНедопустимый флаг регистрируемой доставки. registered_delivery содержит неподдерживаемое значение. Используйте битовую маску, поддерживаемую SMSC (например, 0x01 для запроса финального DLR).
0x00000008ESME_RSYSERRСистемная ошибка. Общая ошибка на стороне SMSC, препятствующая обработке. Временная — повторите попытку с задержкой (backoff); при повторении обратитесь к провайдеру.
0x0000000AESME_RINVSRCADRНедопустимый адрес источника. source_addr (идентификатор отправителя) сформирован некорректно или не разрешён — неверная длина, недопустимые символы или незарегистрированный буквенно-цифровой отправитель. Зарегистрируйте или внесите отправителя в белый список.
0x0000000BESME_RINVDSTADRНедопустимый адрес назначения. destination_addr сформирован некорректно или не маршрутизируется — неверный формат MSISDN, отсутствует код страны, либо диапазон заблокирован. Приведите к формату E.164.
0x0000000CESME_RINVMSGIDНедопустимый ID сообщения. message_id в query_sm, cancel_sm или replace_sm не соответствует ни одному известному сообщению. Используйте точный ID, возвращённый в submit_sm_resp.
0x0000000DESME_RBINDFAILОшибка bind. Запрос bind отклонён по причине, отличной от учётных данных — например, IP не в белом списке, требуется TLS, либо тип bind не разрешён для данного аккаунта.
0x0000000EESME_RINVPASWDНедопустимый пароль. Пароль в PDU bind неверен или истёк. Проверьте учётные данные; в SMPP 3.4 поле ограничено 8 октетами.
0x0000000FESME_RINVSYSIDНедопустимый ID системы. system_id (имя пользователя) неизвестен SMSC. Проверьте идентификатор аккаунта и его активность.
0x00000011ESME_RCANCELFAILОшибка Cancel SM. cancel_sm не смог удалить сообщение — возможно, оно уже доставлено или истекло. Повторять нечего.
0x00000013ESME_RREPLACEFAILОшибка Replace SM. replace_sm не смог обновить сообщение, обычно потому что оно уже покинуло очередь. Отправьте новое сообщение вместо этого.
0x00000014ESME_RMSGQFULОчередь сообщений заполнена. Очередь хранения и пересылки SMSC заполнена до предела. Снизьте скорость отправки и повторите попытку с задержкой.
0x00000015ESME_RINVSERTYPНедопустимый тип сервиса. Значение service_type не распознано или не разрешено. Оставьте поле пустым либо используйте значение, согласованное с провайдером.
0x00000033ESME_RINVNUMDESTSНедопустимое количество адресатов. number_of_dests в PDU submit_multi выходит за допустимый диапазон. Соблюдайте лимит адресатов на один PDU, установленный SMSC.
0x00000034ESME_RINVDLNAMEНедопустимое имя списка рассылки. Список рассылки, указанный в submit_multi, не существует на SMSC. Создайте список либо отправляйте на явные адреса.
0x00000040ESME_RINVDESTFLAGНедопустимый флаг адресата. В submit_multi поле dest_flag записи не является ни адресом SME (1), ни списком рассылки (2). Исправьте флаг для каждого адресата.
0x00000042ESME_RINVSUBREPНедопустимый запрос 'отправка с заменой'. replace_if_present_flag установлен для операции, которая это не поддерживает, либо скомбинирован со списками рассылки. Уберите флаг.
0x00000043ESME_RINVESMCLASSНедопустимые данные поля esm_class. esm_class содержит неподдерживаемую комбинацию — например, бит UDHI или отчёта о доставке, отклоняемый SMSC. Перепроверьте биты режима/типа сообщения.
0x00000044ESME_RCNTSUBDLНевозможно отправить в список рассылки. Аккаунту не разрешена отправка в указанный список рассылки. Используйте прямую адресацию либо запросите разрешение.
0x00000045ESME_RSUBMITFAILОшибка submit_sm или submit_multi. Общая ошибка отправки на стороне SMSC. Часто временная (маршрутизация/ёмкость) — повторите с задержкой; проверьте TLV на предмет более точной причины.
0x00000048ESME_RINVSRCTONНедопустимый TON адреса источника. source_addr_ton не соответствует формату отправителя — например, для буквенного отправителя требуется TON 5 (буквенно-цифровой), но отправлен числовой TON.
0x00000049ESME_RINVSRCNPIНедопустимый NPI адреса источника. source_addr_npi недопустим или не соответствует TON. Используйте NPI 0 для буквенно-цифровых отправителей и NPI 1 (E.164) для MSISDN.
0x00000050ESME_RINVDSTTONНедопустимый TON адреса назначения. dest_addr_ton недопустим для адресата. Используйте TON 1 (международный) с MSISDN в формате E.164.
0x00000051ESME_RINVDSTNPIНедопустимый NPI адреса назначения. dest_addr_npi недопустим или не соответствует TON. NPI 1 (ISDN/E.164) — обычное значение для мобильных номеров.
0x00000053ESME_RINVSYSTYPНедопустимое поле system_type. system_type в PDU bind не принимается. Оставьте поле пустым либо используйте точное значение, назначенное провайдером.
0x00000054ESME_RINVREPFLAGНедопустимый флаг replace_if_present. replace_if_present_flag установлен в значение, отличное от 0 или 1. Отправьте корректный булев флаг.
0x00000055ESME_RINVNUMMSGSНедопустимое количество сообщений. Поле sm_count / количество сообщений выходит за допустимый диапазон. Исправьте значение в PDU.
0x00000058ESME_RTHROTTLEDОшибка ограничения скорости — превышен лимит сообщений. Отправка происходит быстрее разрешённой для аккаунта скорости (сообщений в секунду). Замедлите цикл отправки и повторите с задержкой. Временное, повторяемое состояние.
0x00000061ESME_RINVSCHEDНедопустимое запланированное время доставки. schedule_delivery_time имеет неверный формат либо указывает на прошлое. Используйте абсолютный/относительный формат времени SMPP (YYMMDDhhmmsstnnp) или оставьте поле пустым.
0x00000062ESME_RINVEXPIRYНедопустимый срок действия сообщения. validity_period имеет неверный формат либо выходит за допустимые пределы. Используйте формат времени SMPP или оставьте поле пустым для значения по умолчанию SMSC.
0x00000063ESME_RINVDFTMSGIDПредопределённое сообщение недопустимо или не найдено. sm_default_msg_id ссылается на заготовленное сообщение, отсутствующее у SMSC. Отправьте полный текст либо корректный предопределённый ID.
0x00000064ESME_RX_T_APPNВременный код ошибки приложения получателя ESME. Возвращается вашим ESME (или вышестоящей системой) для сигнализации о временном сбое приложения при обработке deliver_sm/data_sm. SMSC может повторить доставку позже.
0x00000065ESME_RX_P_APPNПостоянный код ошибки приложения получателя ESME. Принимающее приложение окончательно отклоняет сообщение. SMSC не будет повторять попытку — исправьте обработчик или причину отклонения.
0x00000066ESME_RX_R_APPNКод ошибки отклонения сообщения получателем ESME. Принимающее приложение просит SMSC отклонить сообщение. Используется для отказа от конкретного входящего контента.
0x00000067ESME_RQUERYFAILОшибка запроса query_sm. Не удалось выполнить запрос статуса — message_id может быть неизвестен либо истёк в хранилище SMSC. Проверьте ID.
0x000000C0ESME_RINVOPTPARSTREAMОшибка в необязательной части тела PDU. Поток TLV (необязательный параметр) сформирован некорректно — неверная длина или обрезан. Исправьте кодировщик TLV на стороне клиента.
0x000000C1ESME_ROPTPARNOTALLWDНеобязательный параметр не разрешён. Отправлен TLV, не разрешённый для данной операции или SMSC. Уберите неподдерживаемый необязательный параметр.
0x000000C2ESME_RINVPARLENНедопустимая длина параметра. Заявленная длина TLV не соответствует его значению. Исправьте поле длины необязательного параметра.
0x000000C3ESME_RMISSINGOPTPARAMОтсутствует ожидаемый необязательный параметр. Не предоставлен TLV, обязательный для данной операции (например, message_payload при пустом short_message). Добавьте обязательный необязательный параметр.
0x000000C4ESME_RINVOPTPARAMVALНедопустимое значение необязательного параметра. TLV содержит значение вне допустимого набора. См. спецификацию SMPP для допустимых значений этого параметра.
0x000000FEESME_RDELIVERYFAILUREОшибка доставки (data_sm_resp). Используется с data_sm для указания на невозможность доставки сообщения на телефон. Обрабатывайте как неудавшийся DLR и проверяйте сеть/маршрут.
0x000000FFESME_RUNKNOWNERRНеизвестная ошибка. Обобщённый код, когда у SMSC нет более конкретного кода. Повторите один раз с задержкой; при повторении сообщите провайдеру, приложив пример PDU.

Значения, не указанные в списке, зарезервированы. Согласно спецификации SMPP v3.4: диапазон 0x00000100–0x000003FF зарезервирован для расширений протокола SMPP, 0x00000400–0x000004FF — для ошибок, специфичных для поставщика SMSC, а 0x00000500–0xFFFFFFFF зарезервирован. Отдельные пропуски ниже 0xFF (например, 0x09, 0x10) зарезервированы стандартом.

Короткий ответ

Что такое код ошибки SMPP?

Код ошибки SMPP — это значение поля command_status в каждом ответном PDU SMPP. Оно сообщает клиенту (ESME), принял ли SMSC операцию — 0x00000000 (ESME_ROK) означает успех, а любое ненулевое значение указывает, почему завершился неудачей bind, submit_sm, query_sm или другой запрос. Коды определены спецификацией SMPP v3.4 и одинаковы для всех совместимых SMSC.

Успешный submit_sm_resp с ESME_ROK подтверждает лишь то, что SMSC принял сообщение к обработке — окончательная доставка на телефон сообщается отдельно в отчёте о доставке (deliver_sm). Рассматривайте ошибки на этапе отправки и на этапе доставки как два разных уровня.

Часто задаваемые вопросы

Что такое command_status в SMPP?

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

Что означает ESME_RTHROTTLED (0x00000058)?

Это означает, что вы отправляете сообщения быстрее, чем разрешено для вашего аккаунта (сообщений в секунду). Замедлите цикл отправки, примените экспоненциальную задержку и не превышайте пропускную способность, согласованную с провайдером. Это временное, повторяемое состояние.

В чём разница между ESME_RINVSRCADR и ESME_RINVDSTADR?

ESME_RINVSRCADR (0x0000000A) означает, что адрес источника — ваш идентификатор отправителя — сформирован некорректно или не разрешён, часто это незарегистрированный буквенно-цифровой отправитель. ESME_RINVDSTADR (0x0000000B) означает, что MSISDN получателя сформирован некорректно или не маршрутизируется. Приводите адреса к формату E.164 и регистрируйте идентификаторы отправителя там, где требуется.

Означает ли ESME_ROK, что сообщение доставлено?

Нет. ESME_ROK в submit_sm_resp подтверждает лишь то, что SMSC принял сообщение к обработке. Окончательная доставка на телефон сообщается позже в отчёте о доставке (deliver_sm), который несёт собственный статус, например DELIVRD, UNDELIV или EXPIRED. Всегда сверяйте принятие отправки с DLR.

Какие ошибки SMPP безопасно повторять?

Временные системные коды можно повторять с задержкой: ESME_RSYSERR (0x08), ESME_RMSGQFUL (0x14), ESME_RTHROTTLED (0x58), ESME_RSUBMITFAIL (0x45) и ESME_RUNKNOWNERR (0xFF). Ошибки валидации, такие как неверные адреса, TON/NPI, длина сообщения или неверные учётные данные, являются постоянными — исправьте запрос или конфигурацию вместо повтора.

Одинаковы ли эти коды для всех SMSC?

Коды 0x00000000–0x000000FF определены спецификацией SMPP v3.4 и одинаковы для всех совместимых SMSC. Диапазоны 0x00000400–0x000004FF зарезервированы для ошибок, специфичных для поставщика, поэтому конкретный SMSC может возвращать там дополнительные коды с собственными значениями — всегда сверяйтесь с документацией вашего провайдера для таких случаев.

Устанавливаете сессию SMPP?

BroadNet предлагает прямые подключения SMPP 3.4 с предсказуемой пропускной способностью и понятной обработкой command_status. Обсудите подключение с нашей командой.