CМС сообщения через протокол smpp 3.4
SMPP — распространенный вид протокола, используемого для приема и передачи sms-сообщений и USSD-запросов. Особенность его является постоянность подключения, что дает одно очень важное преимущество — соединение не разрывается, а рассылка SMS производится с высокой скоростью (до нескольких раз выше, чем при других способах).
Итак, при использовании smpp протокола, вы получаете следующие возможности:
1. доступны различные форматы, в том числе wap push sms;
2. сообщения, отправленные по smpp могут быть не только короткого формата;
3. запрос полной информации по доставленным сообщениям и с отложенным статусом;
4. двухсторонний канал SMS;
5. регулировка скорости.
Как видите, протокол smpp дает большую свободу использования, но, как и у любого средства, здесь есть собственные уникальные особенности, связанные с с настройкой и непосредственно работой. Об этом и поговорим ниже.
Особенности работы с протоколом
На данный момент для рассылки применяется smpp версии 3.4
Для функционирования smpp требуется сервер, который приспособлен для работы по данному протоколу, и специальное программное обеспечение (клиент). Кроме того, необходимо постоянное стабильное соединение со шлюзом провайдера. Поэтому, мы в обязательном порядке проводим тестирование оборудования, которым располагают наши клиенты — сервер должен быть совместим со скоростной рассылкой SMS. Таким образом, мы изначально упрощаем оказание качественных услуг.
Api подходят для сайтов, написанных на любом языка, в том числе, php.
Протестировать работу настроенного smpp канала могут и сами клиенты, для этого предоставляются все возможности еще до начала пользования услугами. Это позволяет понять, как быстро ваши сообщения, отправленные через протокол smpp, будут доставлены получателям.
Сотрудники сервиса smsdirector.ru/ с радостью помогут вам разобраться вам во всех тонкостях работы через протокол smpp, интеграцию при момощи php на ваш сайт, посодействуют в подключении и тестировании всех служб, ответят на любые вопросы.
Параметры для подключения
- system_id — зарегистрированное в системе имя пользователя вида XXXX.X
- password — пароль пользователя
- Адрес — api.smsdirector.ru
- Порт — 8056
Поддерживаемые команды
Команда |
Описание |
BIND_TRANSMITTER |
Подключиться как TRANSMITTER |
BIND_TRANSCEIVER |
Подключиться как TRANSCEIVER |
SUBMIT_SM |
Отправить сообщение |
QUERY_SM |
Запросить статус сообщения |
DELIVER_SM |
Отправка Delivery Receipt сервером |
ENQUIRE_LINK |
Проверка связи |
GENERIC_NAK |
Ошибочная команда |
UNBIND |
Отключение |
В случае ввода некорректной команды, придет ответ вида GENERIC_NAK, в тексте которого будет код ошибки ESME_RINVCMDID.
Параметры отправки SMS сообщения (SUBMIT_SM)
Параметр |
Значения |
source_addr_ton |
0x01 (для номеров) или 0x00 (для остального) |
source_addr_npi |
0x01 (для номеров) или 0x05 (для остального) |
dest_addr_ton dest_addr_npi esm_class |
0x01 0x01 0x00 или 0x40 при использовании UDH |
registered_delivery data_coding |
0x00 или 0x01 0x01 - ASCII или 0x08 - UCS2 |
Правила соединения
У клиента есть 10 секунд для установки соединения через шлюз smpp, в течение которых должна быть послана одна из команд: BIND_TRANSCEIVER, BIND_TRANSMITTER. В противном случае произойдет разрыв соединения.
Также, разрыв произойдет если клиент не ответит на любой пакет, который отправил сервер не позже чем за одну минуту установленным правилами пакетом resp. При подобном разрыве UNBIND не отправляется.
Ежеминутно сервер отправляет авторизованному и соединенному клиенту пакеты ENQUIRE_LINK, правила ответа клиентом и разрыва smpp подключения на которые точно такое же, как и в предыдущем пункте.
Единовременно допускается smpp соединение лишь от единственного имени пользователя. Все остальные соединения получат ошибку 0x00000005 ESME Already in Bound State. Однако если вам нужно осуществить не одно соединение в рамках вашего кабинета, то для каждого из этих соединений можно создать собственного пользователя.
В случае отсылки Submit_sm, отмеченного при этом флажком registered_delivery, отправка статуса СМС возможна лишь тому пользователю, который отправлял сообщение.
Статус доставки смс
При работе по данному протоколу статус доставки может быть пассивным (желательно) или активным.
Для получения пассивного отчета необходимо пакет SUBMIT_SM отправлять с предварительно включенным флажком registered_delivery.
Текст Delivery Receipt в пакете DELIVER_SM приходит от сервера когда смс переходит на финальный этап рассылки.
При активном отчете статус смс регулярно проверяется при помощи отправки QUERY_SM.
Формат Delivery Receipt
"id:IIIIIIIIII sub:SSS dlvrd:DDD submit date:YYMMDDhhmm done date:YYMMDDhhmm
stat:DDDDDDD err:E Text: . . . . . . . . ."
Поле |
Описание |
id ID |
сообщения |
sub dlvrd |
Количество отправленных сообщений |
submit date done date |
Время отправки сообщения |
stat |
Статус сообщения (расшифровка статусов см. ниже) |
text |
Первые 20 байт сообщения |
Статус |
Описание |
delivrd |
Доставлено |
expired deleted |
Не доставлено из-за истечения периода ожидания доставки Удалено |
undeliv acceptd |
Не может быть доставлено Принято на обработку |
unknown rejectd |
Статус не известен (поле err может содержать код ошибки) |
Зарезервированные коды ошибок
Код |
Описание |
0x0400 (1024) |
Кодировка не распознана |
0x0401 (1025) |
Слишком большой текст сообщения. Максимальная длина не должна превышать 160 |
байт. 0x0402 (1026) |
Ошибка регистрации сообщения на отправку. При возникновении этой ошибки |
0x0403 (1027) |
Не прошла проверка текста сообщения на наличие недопустимых слов и/или фраз |
0x0404 (1028) |
Отправитель или получатель в черном списке |
0x0453 (1107) |
Сработало ограничение по отправке одинакового текста на один и тот же номер в течение небольшого промежутка времени. Обратитесь в поддержку, если хотите отключить или уменьшить период. |
0x043C (1084) |
Нет доступного тарифа для запрашиваемого направления. |
0x043F (1087) |
Нет подходящего тарифа у вышестоящего контрагента. |
0x045A (1114) |
Политика маршрутизации не найдена. |
0x0446 (1094) |
Ошибка транспорта. При возникновении этой ошибки обратитесь в службу поддержки. |
0x433 (1075) |
Недостаточно средств на счете. |