[Фото из топика с хорошим описанием функционала этих 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)
simplit
31.03.2015 22:24+1У OpenVox есть такое понятие как Master/Slave по отношению к модулям из 4-х GSM. Что-то типа кластера.
Для Master-a ваш код работать будет. А как вы предлагаете работать со Slave-модулями?antirek Автор
01.04.2015 06:59А в чем будет различие для команды «gsm send sync sms span number text timeout» для slave модуля?
У меня пока стоит 1 модуль, меняю span от 1 до 4 — отправляет. Для 2-го модуля span по идее должен быть от 5 до 8?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-ов. Печалькаantirek Автор
01.04.2015 18:07Завтра гляну в свою прошивку на тему board'ов. У меня правда нет HTTP -> SMS, там стоит прошивка 2012 года, я когда доку нашел, первым делом хотел по HTTP закидывать смски, но увы. А поскольку железка достаточно активно уже используется, пришлось так сделать.
Вот так всегда, напишешь заметку, и найдется человек, который в теме по самые уши: ) Спасибо за такие подробности. Выложили бы свой скрипт для прошивки на гитхаб?
simplit
01.04.2015 21:25+1ок, как выложу — отпишусь
antirek Автор
02.04.2015 10:42Добрался до шлюза, нашел по теме board'ов в cgi-bin, все как вы говорили. Там постоянно request_slave делается, чтобы получить подключение к slave. В общем, можно сделать вариант openvox-sms на взаимодействие с вашим скриптом в прошивке.
ddemidov
Напишите, пожалуйста, для какой цели может использоваться такой метод отправки смс. В чем выгода по сравнению с использованием специализированных сервисов?
antirek Автор
Вся выгода начинается только, если у вас уже есть такой шлюз.
В нем может стоять несколько ваших корпоративных сим-карт разных операторов с относительно выгодными пакетами смс. Особенно в рамках корпоративной группы мобильных номеров, т.е. если у вас в телефоне и в gsm шлюзе стоят сим-карты одного оператора с корпоративным пакетом, то смс-ки вообще могут быть бесплатны между этими номерами.
Тогда это удобно использовать
1. для оповещения мониторинга
2. корпоративных рассылок, напоминалок
3. рассылок смс клиентам
ddemidov
Логично. Спасибо!
monaxide
Расскажу на своем примере.
У меня в таком шлюзе стоит три сим-карты разных операторов.
Каждая сим-карта с безлимитным тарифом.
Роутер работает в режиме sip-сервера, соединен с АТС LG-Ericsson.
Раньше звонили с sip-провайдера в пределах 30-40 тысяч рублей.
Сейчас расход — 15 тысяч рублей.
Вот и выгода.
Так еще плюс у нас смс-оповещалка для 4 систем (zabbix, СЭД, zenlix, bitrix) — входит в стоимость безлимитных пакетов.
antirek Автор
По звонкам да, выгода всегда присутствует. Особенно если заморочиться, типа как здесь habrahabr.ru/post/244131/ смс — это как полезное и функциональное дополнение, за которое уже заплачено.