SMS-Server для GOIP-шлюзов (Multy Channels GSM VoIP Gateway)


IP-телефония (Виртуальные АТС и SIP-телефония) Администрирование операционных систем на базе Linux (Debian/Ubuntu и Centos/RedHat)
apache2 github goip goip sms gsm voip gateway i386 jira server sms
 
 

* В этом блоге я описываю свою повседневную рабочую практику, поэтому все статьи в блоге написаны лично мной и при копировании их на свой сайт пожалуйста указывайте ссылку на страницу откуда вы скопировали.
* Если какая-то статья вам помогла, то вы можете дать мне немного денег вместо простого спасибо (ссылка на форму поддержки проекта внизу страницы), если вы что-то не поняли или у вас что-то не получается, то вы можете нанять меня и я вам все подробно расскажу (расценки и ссылки в конце статьи).


(последние правки 3 недели, 4 дня)

Наконец то появилась интересная и нестандартная задача, а именно, надо реализовать отправку СМС-уведомлений о задачах в JIRA по нескольким проектам. Если с Jira все относительно понятно и c его API я уже работал, то реализовать отправку уведомлений через SMS Gateway это задачка уже интереснее.

В интернете (на GitHub) имеется несколько проектов которые реализуют фактически один и тот же функционал, а именно, приложение использует request-запросы, авторизуется на GOIP-шлюзе, заполняет необходимые поля и уже после этого выполняет пост запрос для отправки СМС.

Это все выглядит так, как будто вы нажали кнопку "Send" в Web-интерфейсе GOIP-шлюза. Честно говоря, это вообще какой-то костыль и для обеспечения гарантированной отправки надо будет отслеживать статусы ответа сервера, создать очередь отправки и много-много прочей шелухи которую надо будет отлаживать.

Я в свою очередь решил пойти другим путем и использовать родной SMS-сервер от разработчика GSM VOIP-шлюза. Страница где вы можете скачать необходимые компоненты находится по адресу:

http://www.hybertone.com/en/news_detail.asp?newsid=21

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

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

Starting GoIP SMS System install 
ln: failed to create symbolic link '/var/lib/mysql/mysql.sock': No such file or directory 
Configure httpd config: 
Enter the httpd config file PATH: (default: /etc/apache2/sites-enabled) 
Defautl press Enter

Соответственно, первым делом, мы как обычно установим необходимые для работы SMS Server пакеты:

# aptitude install libapache2-mod-php apache2
# aptitude install mysql-server

Установку будем проводить на платформу Debian 9.3 и начнем с загрузки SMS Server по ссылке на официальном сайте производителя оборудования:

# wget http://118.142.51.162/update/goip_install-v1.24.4.tar.gz
# tar -xvf ./goip_install-v1.24.4.tar.gz
# cd ./goip_install/

Запускаем инсталятор и следуем мастеру установки:

# ./goip_install.sh

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

В современных версиях Debian уже не используется файл /etc/rc.local, но так как приложение древнее как мамонт, вам придется создать этот файл и сделать его исполняемым (сервис который его исполняет все еще присутствует).

# touch /etc/rc.local
# chmod +x /etc/rc.local

Так же, не забудьте добавить в конец скрипта exit 0.

Как я уже говорил, приложение довольно старое и для его нормальной работы требуется установить библиотеки совместимости с i386-режимом и PHP версии 5.5.

Устанавливаем требуемые для работы i386-библиотеки:

# dpkg --add-architecture i386 
# apt-get update 
# aptitude install libstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386 
# aptitude install libgssapi-krb5-2:i386

Вместо того, чтобы устанавливать PHP версии 5.5 вы можете просто переписать модуль отвечающий за взаимодействие с базой данных с mysql_connect на mysqli_connect и мой экспериментальный патч выполняющий эту операцию выглядит следующим образом:

diff --git a/inc/conn.inc.php b/inc/conn.inc.php 
index 1e27ea6..b6ca06c 100755 
--- a/inc/conn.inc.php 
+++ b/inc/conn.inc.php 
@@ -1,6 +1,6 @@ 
 <?php 
 set_time_limit(0); 
-error_reporting(E_ALL & ~E_NOTICE); 
+/* error_reporting(E_ALL & ~E_NOTICE); */ 
 ini_set("memory_limit", "500M"); 
 /* 
       $dbhost='localhost';   //database server 
@@ -34,38 +34,37 @@ function myaddslashes($var) 
 } 
 
 class DB { 
+   public $conn; 
       function DB(){ 
               global $dbhost,$dbuser,$dbpw,$dbname; 
 
-              $conn=mysql_connect($dbhost,$dbuser,$dbpw) or die("Could not connect"); 
-              mysql_select_db($dbname,$conn); 
-              mysql_query("SET NAMES 'utf8'");                
-              mysql_query("set sql_mode='ANSI'"); 
+              $this->conn=mysqli_connect($dbhost,$dbuser,$dbpw) or die("Could not connect"); 
+              $this->conn->select_db($dbname); 
+              $this->conn->query("SET NAMES 'utf8'"); 
+              $this->conn->query("set sql_mode='ANSI'"); 
       } 
       function query($sql) { 
- 
-              $result=mysql_query($sql) or die("Bad query: ".mysql_error()."($sql)"); 
+          $result = $this->conn->query($sql); 
               return $result; 
       } 
       function updatequery($sql) { 
- 
-               $result=mysql_query($sql); 
-               return $result; 
+           $result = $this->conn->query($sql); 
+        return $result; 
        } 
 
       function fetch_array($query) { 
-              return mysql_fetch_array($query); 
+          return $query->fetch_array(MYSQLI_NUM); 
       } 
        
       function fetch_assoc($query) { 
-              return mysql_fetch_assoc($query); 
+          return $query->fetch_assoc(); 
       } 
        
       function num_rows($query) { 
-              return mysql_num_rows($query); 
+          return $query->num_rows; 
       } 
       function real_escape_string($item){ 
-              return mysql_real_escape_string($item); 
+              return mysqli_real_escape_string($item); 
       } 
 }

Если такая операция вам не по зубам, то вы можете все же откатить PHP до версии 5.5, но я бы рекомендовал тогда ограничить доступ к этому серверу только с адресов администраторов, так как в этой легаси версии слишком много потенциальных уязвимостей:

# echo "deb http://packages.dotdeb.org wheezy-php55 all" >> /etc/apt/sources.list.d/dotdeb.list 
# echo "deb-src http://packages.dotdeb.org wheezy-php55 all" >> /etc/apt/sources.list.d/dotdeb.list 
# wget http://www.dotdeb.org/dotdeb.gpg -O- |apt-key add - 
# apt-get update
# aptitude install libapache2-mod-php5

Переходим по адресу http://<ip-address-of-server>/goip/ и авторизуемся, а логин и пароль по умолчанию это root/root.

Выглядит это конечно как привет из диких 90-х, но да и черт с ним, главное что оно работает. После того как вы авторизовались в SMS-сервере, переходите в раздел: System manage -> Goip Manage, где выбирайте Add Goip.

Настраиваете исходящие шлюзы и можете попробовать отправлять SMS-ки.

Моя официальная страница на FaceBook
Мой микроблог в твиттер

Установка FreePBX на Centos 7

Установка FreePBX на Centos 7

Перевод официальной документации по установке FreePBX в Centos 7. Я прошелся по всем этапам установки и удостоверился, что все работает. Казалось бы, чего там может быть непонятно, просто бери и вводи команды последовательно из официальной документации, но как оказалось переведенная инструкция достаточно актуальная штука.


Настройка Fail2ban для Asterisk (FreePBX)

Настройка Fail2ban для Asterisk (FreePBX)

Небольшое описание того, как я возился с настройкой Fail2ban в Centos 7. Что интересно, штатные правила конфигурации для FirewallD с виду работают, добавляют заблокированные адреса в соответствующие цепочки, но подключения клиентов все равно не блокируются. Для Asterisk который является просто лакомым кусочком для разного рода жуликов работать без Fail2Ban крайне опасно.


Плагины которые необходимо установить в FreePBX-Core для полноценной работы

Плагины которые необходимо установить в FreePBX-Core для полноценной работы

В качестве логического продолжения цикла статей по сборке FreePBX Core необходимо рассказать, о том как устанавливать плагины из репозитариев исходного кода. Если вы устанавливали стандартный FreePBX, то наверное у вас разбегались глаза от количества элементов меню, но если вы устанавливаете все по моей инструкции для FreePBX-core, то вы наверное наоборот удивились, что пунктов меню очень мало. Вы можете установить плагины через стандартное меню администрирования плагинов или установить их самостоятельно собрав пакет плагина.


Основы настройки и управления FreePBX

Основы настройки и управления FreePBX

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


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


Есть вопросы?
Спрашивайте и я обязательно вам отвечу!

* Поля обязательные для заполнения .