Smpp сервер своими руками

Smpp сервер своими руками

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

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

Решающим моментом стало наличие хорошей документации к API и наличие готовых решений для распространенных CMS. Мой первый выбор пал на сервис интернет рассылок от ButeHand. Стоимость одного смс в 40коп. для меня не играла роли. В общем все очень быстро завелось на joomshopping и функционирует, по крайней мере особых нареканий небыло.

Но вот появилась совсем другая задача. Позвонил человек по одному из моих обявлений по поиску заказов и спросил смогу ли я помочь ему с таким сервисом? По телефону не сразу были ясны все тонкости вопроса, поэтому решили отложить их до встречи. С лету вспомнил несколько провайдеров, но все это оказалось не то.

А оказалось что моему собеседнику захотелось построить собственный шлюз смс рассылок. Причем с внушительной пропускной способностью. Вопросы которые он задавал были вполне логичны и с недурным любопытством. Минимальный ценник за 1 смс который мне удалось в стретить в интернете — это 7 коп. , но чаще ценник начинался от ометки 40 коп. Мне дали понять что и 6 коп. если количество смсок начинается от миллиона, — это дорого и что возможно собрать сервер рассылки самостоятельно.

Итак постараемся разобраться что такое смс шлюз и какие варианты его реализации есть.

СМС шлюз — это онлайн сервис, позволяющий создавать и отправлять, а также получать sms-сообщения без использования мобильного телефона, при помощи различных автоматизированных систем управления.

Применяется sms шлюз чаще всего в следующих целях:

  • уведомление владельца банковского счета о транзакциях;
  • подтверждение регистрации на сайте или в системе;
  • информирование о состоянии выполнения заказа;
  • информирование о новых акциях, услугах компаний;

Шлюз, в данном контексте, это система которая позволяет отправлять и принимать смс. Собственно, использование API другого шлюза для отправки и создание своего API для приема смс превращает написанное в шлюз.

Если же интересует как работают большие шлюзы, которые обрабатывают миллионы смс в день, то нужно смотреть в сторону протокола SMPP или, если есть желание копать еще глубже, то SS7.

SMPP Short message peer-to-peer protocol — протокол, описывающий взаимодействие конечного клиента с SMS-сервером (SMSC). Используется для передачи SMS и USSD сообщений.

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

Можно арендовать короткий номер у всех операторов, или у агрегаторов (дешевле будет даже не номер, а отдельный префикс, при этом принимать сообщения будете по HTTP от агрегатора, а отправлять сможете как через агрегатора, так и через внешние шлюзы)

Если рассматривать собственный сервер, например чтобы преодолеть лимит в 500 смс/день, как вариант мы можем приобрести несколько сим-карт с красивыми номерами от разных провайдеров и собрать все сами, например на GSM модемах, как советует пользователь блога Subnets. Для приема сообщений кроме как модемом, можно арендовать и промышленный сервис (есть у многих поставщиков, гуглить по словосочетанию Sim hosting)

Если достаточно готового интернет шлюза, то также придется платить:

http://sms.ru/ — от 25 коп. входная цена до 7 коп. оптом.

http://www.smscourier.ru/ — от 20 коп. до 7 коп. оптом. Есть также единый тариф 14 коп. без зависимостей от кол-ва смс.

http://sms.gt/ — 1 доставленное смс — 7 копеек, по заверению разработчиков — никаких пакетов, никаких скрытых платежей.

Читайте также:  Звезда для нового года своими руками

http://smsaero.ru/ — Низкие цены от 19 до 4 копеек за 1 SMS-сообщение. Понравилось что есть 100 бесплатных смс и заявленная скорость отправки — 300смс в секунду. Так же у сайта оказался очень понятный и приятный интерфейс.

Итак мы выяснили, что сам сервис изначально должен создавться опираясь на бюджет и количество времени которое мы готовы уделять его администрированию. Либо это будет готовый интернет шлюз, либо нам необходимо будет ставить свое оборудование и искать специалистов. Немаловажным фактором является возможность прямого выхода на провайдеров своего города, так как от их техподдержки и качества каналов связи напрямую зависит качество нашего проектируемого сервиса.

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

Источник

SMPP — одноранговый протокол коротких сообщений

Привет! Хотя мессенджеры и соцсети с каждым днем вытесняют традиционные способы связи, это не умаляет популярность смс. Верификация на популярном сайте, или оповещение о транзакции демонстрируют — они жыви и будут жить. А задумывались как это все работает? Очень часто для рассылки массовых сообщений используется протокол SMPP, о котором и пойдет речь под катом.

На Хабре уже были статьи о smpp, 1,2, но их целью не было описание самого протокола. Безусловно вы можете сразу начать с первоисточника — спецификации, но думаю будет неплохо, чтобы существовало и краткое ее содержание. Буду объяснять на примере v3.4 Рад вашей объективной критике.

Протокол SMPP это протокол одноранговых сообщений. Это означает, что каждый пир/хаб сервер равноправный. В простейшем случае схема обмена смс сообщениями выглядит так:

Однако, если национальный оператор не имеет маршрута в какой-то отдаленный регион он просит об этом посредника — смс хаб. Иногда, чтобы отправить одну смс, нужно выстроить цепочку между несколькими странами, или даже континентами.

О протоколе

Режим связи

Transmitter (передатчик) — передача сообщения в одну сторону, поочередно
Receiver (приемник) — только прием сообщение от SMSC.
Transreceiver (приемопередатчик) — Обмен сообщениями между SMSC и пользователем

Структура

Длина сообщения

Data Coding Scheme

Однако для передачи сообщения символы требуют кодирования. В протоколе SMPP за кодирование отвечает специальное поле — Data Coding Scheme, или DCS. Это поле, которое указывает как нужно распознавать сообщения. Кроме этого поле DCS включает в себя:

  • набор символов, который определяет кодирование;
  • клас сообщения;
  • запрос на автоматическое удаление после прочтения;
  • указание о сжатии сообщения;
  • язык широковещательного сообщения;

Стандартный 7-битный алфавит (GSM 03.38). Был разработан для системы сообщений в GSM. Такое кодирование подходит для английского и ряда латинских языков. Каждый символ состоит из 7 бит и кодируется в октет.

UTF-16 (в GSM UCS2) Для включения отсутствующих символов в 7-битного кодирования была разработана кодировка UTF-16 которая и добавляет дополнительные символы (в том числе и кириллические) за счет уменьшения размера сообщения с 160 до 70 этот тип кодирования почти полностью повторяет Unicode.

8- битные данные определенные пользователем. К таковым относятся KOI8-R и Windows-1251. Хотя такое решение кажется более экономичным по сравнению с тем же UTF-1, но для использования таких кодировок требуется предварительная настройка на принимающем и передающим устройстве. Если на каком – то из них данные кодировки не поддерживаются сообщение будет отображаться не корректно. Поскольку в таком случае оба устройства должны быть заблаговременно настроены.

Клас сообщения

Тип сообщения

Silent message (SMS0) Тип смс сообщения без контента. Такое смс приходит без уведомления и не отображается на экране устройства.

Каждая pdu операция парная и состоит из запроса и ответа. Например: команда что говорит об установлении соединения (bind_transmitter / bind_transmitter_resp), или о том, что сообщение передано (deliver_sm / deliver_sm_resp)

Каждый pdu пакет состоит из двух частей — заголовок (header) и тело (body). Структура заголовка одинакова для любого pdu пакета: command length это длина пакета, id это название пакета, а команда status показывает успешно передано сообщение, или с ошибкой.

Дополнительные параметры TLV

TLV (Tag Length Value), или дополнительные поля. Такие параметры используются для расширения функций протокола и не являются обязательными. Данное поле указывается в конце поля pdu. В качестве примера с помощью TLV dest_addr_np_information можно организовать передачу информации о портированности номера.

Читайте также:  Диски своими руками уроки

Ton и Npi

TON (Type of Number) параметр, сообщает SMSC о формате адресации и тип сети.
NPI (Numbering Plan Identification) параметр, указывающий на план нумерации.

Адрес источника сообщения, или альфа имя

Сообщения, отправляемые на телефон бывают двух разновидностей: цифровые и буквенные. Цифровые могут быть длинными (похожими на номер телефона) и короткими. Иногда у операторов существуют ограничения на отправку от нейтральных имен, например Infosms, Alert etc. Иногда операторы не пропускают трафик, если имя не зарегистрировано в их сети. Однако это скорее особенности оператора.

Стадии отправки

SMS-SUBMIT — это отправка сообщения MO FSM (короткое сообщение от мобильного терминала)
SMS-SUBMIT REPORT — подтверждение, что сообщение отправлено SMSC
SRI SM (SendRoutingInfo) — SMSC получает информацию от HLR относительно MSC / VLR места нахождения абонента
SRI SM RESP — ответ от HLR относительно мясца положения абонента
MT-FSM — после получения местоположения отправляется сообщение используя операцию «Forward Short Message»
MT-FSM ACK — ответ от SMSC о том, что сообщение отправлено
SMS-STATUS REPORT — SMSC отправляет статус о доставке сообщения.

Статус доставки сообщения

SMS-STATUS REPORT может принимать несколько значений:
DELIVRD сообщение успешно доставлено
REJECTD — сообщение отвергнуто SMS-центром
EXPIRED — сообщение удалено из очереди отправки после окончания TTL (время жизни сообщения)
UNDELIV — другие случаи недоставки
UNKNOWN-не получен ответ об отправке.

Ошибки передачи

Иногда сообщения не доставляются. Вследствие чего возникают ошибки. Ошибки возвращаются в PDUs_sms_resp. Все ошибки можно разделить на временные (Temporary) и постоянные (Permanent).

В качестве примера, к временным можно отнести absent_subscriber абонент не доступен или не в сети, а к постоянным — абонент не существует. В зависимости от ошибок, которые возникают формируется политика переотправки этих сообщений.

Например, если абонент был занят разговором и получил ошибку MT handset is busy, сообщение можно отправить повторно через несколько минут, однако, если у абонента заблокирован сервис приема сообщений повторная переотправка не будет иметь смысла. Список ошибок вы сможете найти на страницах SMSC, например, как эта.

Источник

Как сделать свой сервер для приема, обработки и передачи смс


Доброго времени суток, уважаемое хабросообщество!
Недавно в универе мне была поставлена задача создать сервис смс-рассылки уведомлений старостами (деканатом и прочими) своим группам.
Основные требования к сервису были следующими:
— Сервис должен быть многопользовательским (старост более 1) с возможностью одновременной обработки запросов
— Не должен быть привязан к online сервисам рассылки (дабы не утекли базы пользователей)
— Должен быть достаточно легким и мобильным
— Максимально малозатратным
— Должен использовать только открытое программное обеспечение
— Должен обеспечивать отправку уведомлений, даже если у отправляющей стороны нет доступа к Интернету и/или компьютеру. (т.е. не только отправлять, но и принимать входящие смс сообщения от старост + определять от кого конкретно они поступили и делать рассылку по их группам)

Как удалось это реализовать — смотрите под катом.

Список ингредиентов.

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

  • Компьютером у меня будет выступать нетбук ASUS EEEPC 701
  • Мобильный телефон, используемый для отправки смс — Nokia 3110
  • USB bluetooth адаптер — для связи компьютера и телефона
  • Зарядки для мобильника и нетбука для постоянной поддержки рабочего состояния
  • Подключение к Интернету. По LAN или Wi-Fi.
  • Симкарта с тарифом МТС «Супер МТС». У них все смски по РО на любого ОПСОСа по 10 копеек.
  • Зарегистрированный хостинг и какое-нибудь доменное имя.

В принципе, на этом можно и ограничиться. Но для более комфортной работы я бы посоветовал еще:

  • Монитор
  • Беспроводную клавиатуру
  • Дополнительное охлаждения для нетбука (ибо при работе 24/7 собственного маленького кулера ему будет явно не достаточно)
Охлаждение.

Что касается охлаждения — сделать его совершенно элементарно. Возьмите старый 80 миллиметровый кулер, зачистите красный и черный проводки, идущие от него. Затем отрежьте половину от ненужного USB кабеля. Также зачистите на нем красный и черный провод. Смотайте провода от кулера и от USB вместе, заизолируйте и ваше охлаждение готово. Желательно разместить кулер под нетбуком на пластилиновых ножках, чтобы он громко не резонировал.

Собственно, вот как это выглядит:

Что касается зачистки проводов — я люблю сначала опалить их концы на керосиновой горелке, а потом ножом легко счистить остатки. Керосинку тоже покупать не стоит — ее можно сделать из обычной 60 Ваттной лампочки Ильича. Пробиваете верхушку цоколя, заливаете туда керосин, вставляете кусок старой тряпки вместо фитиля и готово. Вот как это выглядит:

Читайте также:  Игольница ежик своими руками выкройка самая простая

Подготавливаем железо к работе.

В виде операционной системы для нетбука я выбрал EasyPeasy — система для нетбуков, основанная на ядре Linux и модифицированная для слабых компьютеров. Скачать ее, установить на флешку, а затем на нетбук можно тут.

Bluetooth

После того, как операционная система заняла свое место, подключаем bluetooth-адаптер в свободный USB порт. Система должна распознать его автоматически. Включаем Nokia и спариваем телефон и компьютер.

Установка gnokii

Нужно установить gnokii. Я уже и раньше ссылался на эту статью по его установке на Линукс. Думаю, разберетесь.
После установки наберите в консоли что-то вроде echo «Привет, друг!» | gnokii —sendsms ‘+7номер_вашего_друга’ и проверьте, отправилась ли смска.

Подготовка хостинга

Возможно, Вам подойдет какой-либо другой способ организации многопользовательской работы, но я использовал возможности Joomla ACL (уровней доступа). Как это настроить — очень подробно описано в этой статье. Я лишь хочу заметить, что на выходе у Вас должен получиться сайт, где каждый из пользователей (те, кто будет отправлять смски) будет иметь свой личный кабинет, попасть в который он сможет введя номер своего мобильного телефона (в качестве логина, в формате 79XX XXX XX XX) и пятизначный цифровой код в качестве пароля. К примеру, как на сайте vamsms.ru

Подготавливаем программное обеспечение к работе.

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

Итак, наша задача состоит в том, чтобы научить наш сервер общаться с удаленным сайтом, собирать с него заявки на отправку и отправлять сообщения. Кроме того, сервер должен уметь принимать входящие сообщения (на Nokia, с которой смски отправляются), осознавать, что они отправлены старостами и также ставить в очередь на рассылку по той группе, к которой конкретная староста принадлежит. Плюс, все это нужно синхронизировать. Ну и вести логи, конечно.

Организация MySQL БД

Для начала необходимо сделать БД, относящуюся к хостингу, на котором у Вы организовали сайт. Я назвал свою БД — pXXXX_sender (под XXX скрываются цифры моего пользователя на хостинге)
Внутри этой БД нужно создать 3 таблицы. У меня они имеют следующую структуру:

starosti (идентификация и ареалы действий для старост)
— number
— group
— course
— facultet
— pass

telephones (все телефоны в базе)
— number
— groups
— course
— facultet

on_demand (тут хранятся сообщения на отправку)
— message
— group
— course
— id_this_trans
— date_log

Отлично, на этом с базами данных все.

Организация shell-скрипта на нетбуке (сервере).

Теперь нужно сделать так, чтобы нетбук каждые 10 минут проверял:
1) Поступили ли новые сообщения с сайта? Если да, то отправляю их нужным группам.
2) Поступили новые входящие смски? Если да, то от старост ли они? Если нет, то просто удаляю их, если да, то определяю, за какую группу отвечает староста и делаю рассылку сообщения по той группе.

Привожу листинг shell-скрипта:

Кроме того, в папке со скриптом нужно создать файл cache_test_trig.txt со значением 1 (и в таблице on_demand сделать первую запись какую-нибудь)

Организация php-скриптов на удаленном хостинге.

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

Очевидно, данные из формы передаются в файл, лежащий в корневой директории хостинга handler.php

Вот его листинг:

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

файл serv_mobile.php — отвечает за обработку сообщений, принятых мобильным телефоном
Скрипт trigger.php, тоже лежит в корневой директории, создает папки на хостинге, содержащие файл с сообщением и файл с номерами, которым это сообщение будет рассылаться.
Последний файл в корневой директории — файл terminate.php. Удаляет созданные ранее папки с сервера, когда сообщения уже разосланы.

Подведение итогов.

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

Источник

Оцените статью