Статья, вероятно, будет интересна только обладателям GSM шлюзов OpenVox линейки VoxStack, настоящим и потенциальным. Известно, что внутри этих шлюзов находится полноценный Asterisk. Который имеет дополнительные команды в AMI и CLI для отправки смсок.



[Фото из топика с хорошим описанием функционала этих GSM шлюзов]

Далее хочу представить вам две небольшие наработки на node.js, которые позволили мне сделать отправку смс через VoxStack более удобной.



Openvox-sms

npm openvox-sms — это небольшая обертка для AMI команд по отправке смс из приложения на node.js. В ней добавлена функция разбиения длинных текстов на более мелкие, чтобы отправить составное смс.

В CLI asterisk'а шлюза есть две команды для отправки СМС:

> gsm send sync sms span number text timeout

> gsm send sync csms span number text flag smscount smssequence timeout

Первая команда для отправки простой смс (указываем модуль span, номер назначения number, собственно text, и по желанию timeout).

Вторая для отправки части (concatenated sms) из длинной (дополнительно необходимо для каждой части указывать количество всего частей smscount, и текущий номер части smssequence). Необходимо отправить столько команд, сколько у вас частей смс. Если отправить команды с правильными параметрами, то на мобильном телефоне эти части будут собраны в одну смс.

Openvox-sms аккуратно оборачивает взаимодействие с астериском, и тогда смс можно отправить так, не заморачиваясь более длинное или короткое у вас смс.

var osms = require('openvox-sms');
var sms = new osms({host: '192.168.1.5'});
sms.on('connect', function () {
    sms.sendSMS({
        span: 1, 
        number: '8913ХХХХХХХ', 
        text: 'My long-long-long text about London'
        }, function (err, response) {            
            sms.close(function () {
        });
    });
});


Немного больше о командах есть в документации на шлюз.

Подробнее об использованиии npm openvox-sms: github.com/antirek/openvox-sms.

Openvox-sms-worker

Конечно, использование обертки openvox-sms удобно, но не будешь же во все приложения, которые должны отправлять смс, добавлять настройки подключения и проверять как они отправляют смс. (Более того не исключен вариант, что придет время и, вероятно, придется заменить gsm шлюз на какой-нибудь онлайн сервис отправки смс).

В таком случае удобнее использовать очередь RabbitMQ для отправки смс, которую будет обслуживать worker, непосредственно работающий с gsm шлюзом OpenVox VoxStack.

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

Подробнее о настройках openvox-sms-worker: github.com/antirek/openvox-sms-worker.

Предложения, конструктивные идеи?

Комментарии (11)


  1. ddemidov
    31.03.2015 18:52
    +1

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


    1. antirek Автор
      31.03.2015 19:12

      Вся выгода начинается только, если у вас уже есть такой шлюз.

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

      Тогда это удобно использовать
      1. для оповещения мониторинга
      2. корпоративных рассылок, напоминалок
      3. рассылок смс клиентам


      1. ddemidov
        31.03.2015 19:14
        +1

        Логично. Спасибо!


        1. monaxide
          31.03.2015 20:15
          +1

          Расскажу на своем примере.
          У меня в таком шлюзе стоит три сим-карты разных операторов.
          Каждая сим-карта с безлимитным тарифом.
          Роутер работает в режиме sip-сервера, соединен с АТС LG-Ericsson.
          Раньше звонили с sip-провайдера в пределах 30-40 тысяч рублей.
          Сейчас расход — 15 тысяч рублей.
          Вот и выгода.
          Так еще плюс у нас смс-оповещалка для 4 систем (zabbix, СЭД, zenlix, bitrix) — входит в стоимость безлимитных пакетов.


          1. antirek Автор
            01.04.2015 07:09

            По звонкам да, выгода всегда присутствует. Особенно если заморочиться, типа как здесь habrahabr.ru/post/244131/ смс — это как полезное и функциональное дополнение, за которое уже заплачено.


  1. simplit
    31.03.2015 22:24
    +1

    У OpenVox есть такое понятие как Master/Slave по отношению к модулям из 4-х GSM. Что-то типа кластера.
    Для Master-a ваш код работать будет. А как вы предлагаете работать со Slave-модулями?


    1. antirek Автор
      01.04.2015 06:59

      А в чем будет различие для команды «gsm send sync sms span number text timeout» для slave модуля?
      У меня пока стоит 1 модуль, меняю span от 1 до 4 — отправляет. Для 2-го модуля span по идее должен быть от 5 до 8?


      1. simplit
        01.04.2015 12:51
        +1

        К сожалению, slave не доступен из Master-а как span 5-8. Из консоли Master-a вы никак не достучитесь к устройствам Slave. Чтобы работать со Slave-ом нужно поднимать отдельное соединение также, как вы это сделали с Master-ом.

        Вижу здесь два выхода:
        1) Физически подключить еще один сетевой кабель к eth1 (это поможет если у вас только 2 GSM-модуля)
        2) Посадить внутрь прошивки свой php-скрипт

        Наверное, здесь следует более детально пояснить, как работает штатный скрипт HTTP -> SMS, на который вы сделали ссылку…

        1) Скрипт в качестве параметра принимает имя GSM, например gsm-2.1. По первой цифре он определяет board к которому нужно выполнить запрос.

        2) Если board = 1, тогда запрос просто идет в консоль. Также как у вас. А если board >1 тогда скрипт поднимает дополнительное соединение через внутренний интерфейс кластера, который недоступен снаружи.

        Т.е. span всегда находится в диапазоне 1-4. Board-ы автономны и управляются через внутренний сетевой интерфейс кластера.

        В одном из проектов, мы сделали именно так, как я описал — всадили свой скрипт в прошивку, который позволяет выполнить любую CLI-команду.
        Ибо мало просто отправлять SMS-ки, хочется видеть:
        1) общую инфу о статусе каналов (gsm show spans)
        2) детализацию каждого span-a (gsm show span 1-4)
        3) Отправлять/получать USSD для контроля баланса (gsm send ussd)

        ИМХО, без внесения именений в прошивку невозможно сделать какую-то универсальную вещь, которая не будет зависеть от кол-ва Board-ов. Печалька


        1. antirek Автор
          01.04.2015 18:07

          Завтра гляну в свою прошивку на тему board'ов. У меня правда нет HTTP -> SMS, там стоит прошивка 2012 года, я когда доку нашел, первым делом хотел по HTTP закидывать смски, но увы. А поскольку железка достаточно активно уже используется, пришлось так сделать.

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


          1. simplit
            01.04.2015 21:25
            +1

            ок, как выложу — отпишусь


            1. antirek Автор
              02.04.2015 10:42

              Добрался до шлюза, нашел по теме board'ов в cgi-bin, все как вы говорили. Там постоянно request_slave делается, чтобы получить подключение к slave. В общем, можно сделать вариант openvox-sms на взаимодействие с вашим скриптом в прошивке.