Отправка смс по протоколу smpp, api для разработчиков. SMPP-сервер, подключение по протоколу SMPP

01.05.2019

Отправка СМС через smpp, smpp-шлюз

Одним из протоколов отправки SMS-сообщений является SMPP. Он описывает процесс взаимодействия получателя сообщения, то есть smpp-клиента с smpp-сервером, используя при этом особую систему передачи данных.

Взяв за основу отправку CMC-сообщений через протокол SMPP, Вы получите возможность:

  • 1) использовать различные текстовые форматы, а также wap push смс;
  • 2) отсылать не только короткие, но и длинные тексты;
  • 3) получать подробные отчеты о доставленных и отложенных смс;
  • 4) обмениваться сообщениями в двустороннем формате;
  • 5) выбирать скорость отправки.

Таким образом, протокол smpp обладает большими возможностями, которые, однако, сопряжены и с некоторыми особенностями использования и установки, которые мы и рассмотрим.

ТРЕБУЕТСЯ КАЧЕСТВЕННЫЙ SMPP-ШЛЮЗ? Свяжитесь с нами и мы предоставим тестовый доступ!

Особенности работы с SMPP

Для работы с протоколом SMPP необходимо иметь соответствующее ПО (SMPP-клиент, версии 3.4). При этом оборудование должно быть постоянно подсоединено к шлюзу компании "СМС-Агент". Для того чтобы отправка SMS через SMPP осуществлялась быстро и без задержек, все клиенты нашей фирмы проходят тест на совместимость оборудования. Это позволяет избавиться от многих технических сложностей еще на начальном этапе.

Кроме того, перед использованием протокола для проведения SMS-рассылок, пользователи могут провести тестовую отсылку СМС сообщений через SMPP, чтобы определиться с желаемой скоростью доставки.

Специалисты компании "СМС-Агент" всегда готовы предоставить консультацию по вопросам использования, подключения и тестирования сервиса SMPP, что упростит Вашу задачу.

Подключение по SMPP протоколу

System_id - зарегистрированное в системе имя пользователя
password - пароль пользователя
Адрес - smpp.сайт
Порт - 2775
Для шифрованного SSL-подключения используется порт 3443

Поддерживаемые команды по протоколу SMPP

Параметры отправки сообщения (SUBMIT_SM) по SMPP

Правила работы с SMPP подключением

При установке подключения клиенту дается 10 секунд, что бы отправить команду BIND_TRANSMITTER или BIND_TRANSCEIVER. Иначе соединение будет разорвано сервером.

Клиент обязан отвечать на все пакеты отправленные сервером соответствующим resp пакетом в течение 1 минуты. Иначе соединение будет разорвано сервером без отсылки UNBIND.

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

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

Пассивный вариант предусматривает установку флага registered_delivery пакета SUBMIT_SM.
После перехода сообщения в финальное состояние сервер отправит DELIVER_SM пакет с Delivery Receipt сообщением.
Формат Delivery Receipt сообщения ниже.

Активный вариант предусматривает периодический опрос статуса сообщения отсылкой QUERY_SM.

Формат Delivery Receipt

"id:IIIIIIIIII sub:SSS dlvrd:DDD submit date:YYMMDDhhmm done date:YYMMDDhhmm stat:DDDDDDD err:E Text: . . . . . . . . ."

Зарезервированные коды ошибок при smpp соединении

Код Описание
0x0400 (1024) Кодировка не распознана
0x0401 (1025) Слишком большой текст сообщения. Максимальная длина не должна превышать 160 байт
0x0402 (1026) Ошибка регистрации сообщения. При возникновении этой ошибки обратитесь в службу поддержки
0x0403 (1027) Не прошла проверка текста сообщения на наличие недопустимых слов и/или фраз
0x0404 (1028) Отправитель или получатель в черном списке
0x0453 (1107) Сработало ограничение по отправке одинакового текста на один и тот же номер
0x043C (1084) Нет доступного тарифа для запрашиваемого направления
0x043F (1087) Нет подходящего тарифа у вышестоящего контрагента
0x045A (1114) Политика маршрутизации не найдена
0x0446 (1094) Ошибка транспорта. При возникновении этой ошибки обратитесь в службу поддержки
0x0433 (1075) Недостаточно средств на счете

(Short Message Peer to Peer - короткое сообщение равноправных узлов) – открытый протокол, который используется для отправки/получения смс-сообщений между равноправными субъектами. Данный протокол используется, как и HTTP, поверх TCP/IP, но является бинарным. Как правило, SMPP протокол обеспечивает режим постоянного подключения, без совершения запросов и ожидания ответов от сервера с дальнейшим разрывом соединения. Использование постоянного подключения увеличивает в разы скорость отправки сообщений.

SMS провайдеры могут ограничить скорость, с которой они будут принимать сообщения в целях оптимизации и распределения их ресурсов. Если вы пытаетесь отправить с большей скоростью, чем позволяет ваш провайдер, вы можете столкнуться с неожиданными ошибками и задержками.

SMPP способен передавать любой тип сообщения, включая такие как UCP/EMI. SMPP поддерживает как длинные текстовые сообщения, так и сообщения, написанные в Unicode. Некоторые SMPP-сервера требуют от отправителя цельное длинное сообщение, а другие - чтобы выполнялось сегментирование сообщения, основанное на типе сообщения.

Существуют три различных типа соединений, которые могут быть поддержаны SMPP сервером.

  • «Отправитель» или «отправить только» - работает только передача сообщения и сервер не может получать никаких сообщений.
  • «Получатель», или «только прием» - подключение через соединение для передачи сообщений не допускается, сервер может только принимать сообщения. Любая попытка получать сообщения через это соединение, как правило, приводит к ошибке.
  • «Трансивер» - разрешено отправлять и передавать сообщения через одно соединение.

Тип подключения, который вы используете, будет зависеть от предпочтений и политики ваших SMPP услуг.

Протокол SMPP является расширяемым, что позволяет провайдерам добавлять свои собственные дополнительные параметры, которые известны как TLV параметры, названные так из-за формата этих параметров: тег (метка), длина, стоимость. Некоторые TLV параметры, определены в спецификации, но не являются обязательными в использовании. Другие параметры предоставляются провайдером.

Возможно использование сервиса SMS, как SMPP сервер для других приложений. Другие клиенты или приложения подключаются к SMS-сервису и их SMPP серверу, и SMS-сервис связывается с одним или несколькими другими SMS-центрами для отправки и получения SMS-сообщений, с использованием SMPP, или, возможно других протоколов.

Передача сообщений между SMS-сервером и SMS Центром провайдера GSM службы по IP связи может быть через выделенную линию (шлюз) через Интернет. При этом IP-соединение между ПК и SMS Центром может быть защищено.

Преимущество SMPP протокола состоит в том, что процесс происходит намного быстрее и с меньшим интервалом (от одной до десяти секунд), чем при использовании мобильного телефона. SMPP рекомендуется применять, если максимальное количество отправляемых сообщений более чем 100 смс/час. Также, SMPP-сервис позволяет вписывать любую информацию (11 знаков) в строку номера отправителя. Поддерживаются цифры, символы латинского алфавита, знаки препинания пробел. Введенная информация будет фигурировать у получателя в строке «Сообщение от:» и может быть самостоятельно сменена отправителем. Таким образом, у вас есть возможность использовать свой SMS-центр, работающий по протоколу SMPP.

SMPP - распространенный вид протокола, используемого для приема и передачи sms-сообщений и USSD-запросов. Особенность его является постоянность подключения, что дает одно очень важное преимущество - соединение не разрывается, а рассылка SMS производится с высокой скоростью (до нескольких раз выше, чем при других способах).

Итак, при использовании smpp протокола, вы получаете следующие возможности:

1. доступны различные форматы, в том числе wap push sms;

2. сообщения, отправленные по smpp могут быть не только короткого формата;

4. двухсторонний канал SMS;

5. регулировка скорости.

Как видите, протокол smpp дает большую свободу использования, но, как и у любого средства, здесь есть собственные уникальные особенности, связанные с с настройкой и непосредственно работой. Об этом и поговорим ниже.

Особенности работы с протоколом

Для функционирования smpp требуется сервер, который приспособлен для работы по данному протоколу, и специальное программное обеспечение (клиент). Кроме того, необходимо постоянное стабильное соединение со шлюзом провайдера. Поэтому, мы в обязательном порядке проводим тестирование оборудования, которым располагают наши клиенты - сервер должен быть совместим со скоростной рассылкой SMS. Таким образом, мы изначально упрощаем оказание качественных услуг.

Api подходят для сайтов, написанных на любом языка, в том числе, php.

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

Сотрудники сервиса с радостью помогут вам разобраться вам во всех тонкостях работы через протокол smpp, интеграцию при момощи php на ваш сайт, посодействуют в подключении и тестировании всех служб, ответят на любые вопросы.

Параметры для подключения

  • system_id - зарегистрированное в системе имя пользователя вида XXXX.X
  • password - пароль пользователя
  • Адрес -
  • Порт - 8056

Поддерживаемые команды

Описание

BIND_TRANSMITTER

Подключиться как TRANSMITTER

BIND_TRANSCEIVER

Подключиться как TRANSCEIVER

Отправить сообщение

Запросить статус сообщения

Отправка Delivery Receipt сервером

Проверка связи

Ошибочная команда

Отключение

В случае ввода некорректной команды, придет ответ вида GENERIC_NAK, в тексте которого будет код ошибки ESME_RINVCMDID.

Параметры отправки SMS сообщения (SUBMIT_SM)

Правила соединения

У клиента есть 10 секунд для установки соединения через шлюз smpp, в течение которых должна быть послана одна из команд: BIND_TRANSCEIVER, BIND_TRANSMITTER. В противном случае произойдет разрыв соединения.

Также, разрыв произойдет если клиент не ответит на любой пакет, который отправил сервер не позже чем за одну минуту установленным правилами пакетом resp. При подобном разрыве UNBIND не отправляется.

Единовременно допускается 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: . . . . . . . . ."

Зарезервированные коды ошибок

Описание

Кодировка не распознана

Слишком большой текст сообщения. Максимальная длина не должна превышать 160

0x0402 (1026)

Ошибка регистрации сообщения на отправку. При возникновении этой ошибки
обратитесь в службу поддержки.

Не прошла проверка текста сообщения на наличие недопустимых слов и/или фраз

Отправитель или получатель в черном списке

Сработало ограничение по отправке одинакового текста на один и тот же номер в течение небольшого промежутка времени. Обратитесь в поддержку, если хотите отключить или уменьшить период.

Нет доступного тарифа для запрашиваемого направления.

Нет подходящего тарифа у вышестоящего контрагента.

Политика маршрутизации не найдена.

Ошибка транспорта. При возникновении этой ошибки обратитесь в службу

Поддержки.

Недостаточно средств на счете.

SMPP (аббревиатура: Short message peer-to-peer protocol) в переводе с английского означает «Короткое сообщение равноправных узлов» и позволяет описать взаимодействие между SMS сервером и конечным клиентом. Данный протокол относится к числу наиболее популярных у SMS-провайдеров, использующих его для обмена текстовыми сообщениями между СМС центрами с равными правами. Для работы с SMPP протоколом необходимо наличие постоянно включенного сервера и соответствующего ПО, совместимого с SMS-шлюзом провайдера.

  • Поддержка различных текстовых форматов и wap sms;
  • Отправка длинных текстов;
  • Двухсторонний обмен сообщениями;
  • Выбор скорости отправки;
  • Выбор способа кодировки;
  • Расширяемость;
  • Получение детальных отчетов.

Протокол незаменим для регулярной отправки большого объема сообщений по надежному и высокоскоростному каналу. Поэтому SMS провайдер обычно использует данный протокол для обмена SMS и USSD сообщениями в системах VAS, для подключения различных внешних систем и т.д. Узнать подробнее о протоколе SMPP и о том, как существляется рассылка, Вы сможете, обратившись к нашим специалистам.

  • Поддерживаемые команды
  • Параметры отправки сообщения (SUBMIT_SM) по SMPP
  • Правила работы с smpp подключением
  • Формат Delivery Receipt
  • Зарезервированные коды ошибок протокола smpp
  • Приложение

Расшифровку ошибок можно найти в спецификации SMPP 3.4.

Внимание: Вам необходимо прислать список IP адресов, с которых Вы будете
подключаться, перед тем как начать использовать SMPP.

Параметры подключения с использованием SMPP

  • system_id - зарегистрированное в системе имя пользователя вида XXXX.X
  • password - пароль пользователя
  • Адрес -
  • Порт - 8056

Поддерживаемые команды по протоколу SMPP

На неподдерживаемые команды будут приходить GENERIC_NAK сообщения с кодом ошибки ESME_RINVCMDID.

Параметры отправки сообщения (SUBMIT_SM) по протоколу smpp

Правила работы с SMPP подключением

При установке подключения клиенту дается 10 секунд, что бы отправить команду BIND_TRANSMITTER или BIND_TRANSCEIVER, в противном случае соединение будет разорвано.

Клиент обязан отвечать на все пакеты, полученные через шлюз соответствующим resp пакетом в течение 1 минуты, иначе соединение будет разорвано без отсылки UNBIND.

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

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

Пассивный вариант предусматривает установку флага registered_delivery пакета SUBMIT_SM.
После перехода сообщения в финальное состояние сервер отправит DELIVER_SM пакет с Delivery Receipt сообщением. Формат Delivery Receipt сообщения ниже.

Активный вариант предусматривает периодический опрос статуса сообщения отсылкой
QUERY_SM.

Формат Delivery Receipt

"id:IIIIIIIIII sub:SSS dlvrd:DDD submit date:YYMMDDhhmm done date:YYMMDDhhmm
stat:DDDDDDD err:E Text: . . . . . . . . ."

Зарезервированные коды ошибок при smpp соединении

Код Описание
0x0400
(1024)
Кодировка не распознана
0x0401
(1025)
Слишком большой текст сообщения. Максимальная длина не должна превышать 160
байт.
0x0402
(1026)
Ошибка регистрации сообщения на отправку. При возникновении этой ошибки
обратитесь в службу поддержки.
0x0403
(1027)
Не прошла проверка текста сообщения на наличие недопустимых слов и/или фраз
0x0404
(1028)
Отправитель или получатель в черном списке
0x0453
(1107)
Сработало ограничение по отправке одинакового текста на один и тот же номер в течение небольшого промежутка времени. Обратитесь в поддержку, если хотите отключить или уменьшить период.
0x043C
(1084)
Нет доступного тарифа для запрашиваемого направления.
0x043F
(1087)
Нет подходящего тарифа у вышестоящего контрагента.
0x045A
(1114)
Политика маршрутизации не найдена.
0x0446
(1094)
Ошибка транспорта. При возникновении этой ошибки обратитесь в службу
поддержки.
0x433
(1075)
Недостаточно средств на счете.

В сети существует такой класс сервисов,
которые дают пользователям возможность
вызывать какие-либо функции, посылая SMSки на
специальные номера и получая ответы также в
SMSках. Например, вы можете зарегистрировать
email-ящик для которого можно установить
форвардинг входящего мыла на ваш телефон.
Можно получать в реальном времени новости и
участвовать в чатах. Можно с помощью SMS
заказывать картинки и мелодии для своей
мобилы. Наконец, можно участвовать в
голосованиях. Некоторые ОпСоСы
поддерживают такую услугу, когда за каждую
отправленную юзером SMSку он платит не
только ОпСоСу, но и владельцу сервиса,
осуществляя оплату за услуги, чаще всего,
виртуальные. Пользуясь телефоном, мы не
придаем сопутствующему расходу денег
такого значения, как при использовании WebMoney
или при платежах через СберБанк.
Возможности SMS дают широкий простор для
электронного бизнеса. Многих привлекает
заманчивая перспектива получать легкие
деньги, когда ты только наблюдаешь на
процессом и считаешь деньги, а работают за
тебя скрипты на сервере. Я не ставлю цели
составить руководство по новому виду "бизнеса
для одного человека". В этой статье я
изложу лишь техническую сторону проблемы
автоматизированной обработки SMS.

Разные подходы

В зависимости от поставленных задач и от
имеющегося количества денег можно выбрать
одно из следующих решений:

  • Только передавать SMS можно через формы
    на сайтах ОпСоСов или на каких-нибудь
    порталах. Это бесплатно. Так можно
    реализовать отправку SMS со своего портала,
    но для реализации платного сервиса, от
    которого юзеры ждут особой надежности,
    это несерьезно. О них много уже писалось,
    поэтому не буду заострять на них внимание,
    тем более, что все они в настоящее время
    защищены тестом Тьюринга, так что этот
    способ в настоящее время недоступен.
  • Специальные http-to-SMS шлюзы для бизнес-приложений.
    Ты платишь, и тебе дают возможность http-запросами
    из своих скриптов посылать SMSки в любую
    точку мира, а также получать SMS,
    отправленные на специальные номера. Так
    очень легко сделать портал с SMS-формой или
    уведомление о новых письмах.
  • Протокол SMPP дает возможность не только
    принимать и передавать SMS, но и получать
    уведомления о доставке отправленных
    сообщений, а также отменять и заменять
    сообщения. Тебе выделяется номер или
    целый диапазон номеров, ты получаешь все
    сообщения, приходящие на него и
    отправляешь сообщения от любого номера.
    Возможно уведомление о полученных
    сообщениях: SMS-центр подсоединяется на
    предварительно указанный IP и порт и
    передает тебе сообщения.

В этой статье я расскажу об SMPP как о самом
продвинутом методе работы с SMS-шлюзами.

С помощью этого протокола можно принимать
и посылать SMS через так называемые SMS-центры.
SMS-центры являются шлюзами между интернетом
и сотовыми сетями. Для работы с этим
протоколом существуют готовые решения,
например, Net::SMPP в Perl. Описание протокола и
ссылки на программные продукты можно найти
по адресу www.smpp.org .
Последняя версия протокола на момент
написания статьи — 3.4. Там же можно скачать
прогу для тестирования клиентского ПО — SMPP
Client Test Tool (SCTT). Пока еще не купили доступ к
реальному SMS-центру, надо как-то тестить
свои проги. Неудобно только ко, что SCTT
написана под Linux, так что придется
повозиться с Virtual PC или сразу кодить под Linux.

Описание протокола

Инициировать соединение может как
пользователь, называемый в описании
протокола External Short Message Entity (ESME), так и SMS-центр
(SMSC). Заметим, что ввиду этой возможности
было бы неправильно называть SMS-центр
сервером, поскольку он может быть и
клиентом. Первый вариант используется, как
правило, при отправке сообщений, а второй
при получении, хотя никто не запрещает
отправлять сообщения через соединение,
установленное SMS-центром и получать через
соединение, установленное тобой самим. Все
данные в протоколе SMPP вложены в блоках,
называемых Protocol Data Units (PDU), которые имеют
заголовок, в котором указан размер блока и
код операции.

Формат PDU header:

DWORD Length — длина всего блока, включая
заголовок
DWORD Command
DWORD Status — 0 в запросах и код ошибка и ответах
DWORD SequenceNumber — порядковый номер.

Порядковый номер в ответе должен
равняться номеру в запросе.

Все числа в SMPP кодируются так, что старший
байт слева. Для этого можно воспользоваться
функцией htonl(). Все PDU делятся на запросы и
ответы. В кодах запросов старший бит равен
нулю, в о ответах единице. На каждый запрос
должен прийти ответ, за исключением
уведомлений о поступивших сообщениях. Пока
ответ не получен, операция считается
незавершенной. Если ответа не последовало
до разрыва соединения, участник, будь то SMSC
или ESME, должен повторить запрос. Протокол
асинхронный, т.е. отправитель запроса может
посылать очередной запрос, не дожидаясь
ответа, и ответы могут следовать в любой
последовательности. Все операции также
делятся на те, которые могут использоваться
ESME, которые могут использоваться SMSC и те,
которые могут использоваться обеими
сторонами. Соединение может находиться в
следующих состояниях:

— Открыто (еще не пройдена аутентификация)
— Передача
— Прием
— Прием и передача
— Закрыто

В состоянии "Открыто", т. е. сразу после
установления TCP-соединения ESME, желающий
передать SMS, должен послать запрос bind_transmitter.
Для приема — bind_receiver. Для обоих действий
сразу — bind_transceiver. В этом запросе передается
логин и пароль. Если соединение установлено
SMSC, то сначала он должен послать запрос outbind
и в нем передать логин и пароль, потому что в
этой ситуации уже его права доступа надо
проверять. Для примера покажу, как выгладит
команда bind_transmitter:

Заголовок:
DWORD Длина
DWORD Command = BIND_TRANSMITTER
DWORD Status = 0
DWORD Sequence number

Данные:
Строка Логин
Строка Пароль
Строка Тип системы (например, WWW или Mail)
BYTE Версия протокола = 0x34
BYTE addr_ton (тип номеров), 0 = default
BYTE addr_npi (Number Plan), 0 = default
Строка Диапазон номеров, пустая строка,
если провайдер и сам знает, какие номера мы
обслуживаем

Строки — ASCIIZ, т. е. Null-terminated.

Большинство параметров этого запроса
могут быть нулями или пустыми строками. В
ответ на такой запрос придет ответ, в
котором кроме заголовка будет SystemId SMS-центра,
а в поле Status будет ноль в случае успеха. Если
установлено соединение для передачи, то мы
имеем право посылать запросы submit_sm, а если
установлено соединение для приема, то надо
ждать запросов deliver_sm, содержащих тексты
поступивших сообщений, и обрабатывать их.
Завершив работу, посылаем сообщение unbind и
отключаемся.

В большинстве запросов есть куча
параметров, над которыми можно особо не
париться и занулять их. Так что несмотря на
внушительный объем документации,
простенький SMS-автоответчик, на основе
которого можно построить какую-нибудь
справочную систему, получился у меня
объемом всего в 25 кБ текста на C++, и тест на
SCTT показал, что всё работает, и осталось
только купить доступ к SMSC:).

К кому подключаться

Сообщения по протоколу SMPP для своих
клиентов принимают многие ОпСоСы, так что
никаких конкретных ссылок. Ищите инфу на
сайте того ОпСоСа, к которым предпочитаете
работать. Кроме того, свой SMS-центр,
работающий по протоколу SMPP, предоставляет