Берем за пример статью Пересылка СМС с OpenVox в Telegram, здесь мы получаем сообщения с Opnevox, отсекаем только те сообщения, которые приходят на определённый порт, и отправляем сообщение в Telegram.
В этой статье опишу как «умно» сортировать входящие СМС сообщения, и направлять их на определённые сервисы (в моем примере ниже — на разные почтовые ящики).
Openvox при входящем СМС сообщении, может отправить запрос с параметрами $phonenumber, $port, $message, $time. Соответственно с этими параметрами мы можем гибко настроить пересылку СМС сообщений, также с этой возможностью можно реализовать ответ с номера телефона на который было принято СМС.

Настраиваем Openvox следующим образом:

Переходим на СМС → Настройки СМС → SMS TO HTTP, задаем нужные нам параметры:

После этого, создаем PHP скрипт, для анализа сообщений:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
header('Content-Type: text/html; charset=Windows-1251');
$openvox='';
$token = "00000000:AAAAAAAAAAAAAAAAAAAAAAAAAA";
$chatid = "000000000";
$mailserver='smtp.gmail.com';
$mailserverPort='587';
$mailSend='account@gmail.com';
$mailSendPass='Password';
$mailTo='openvox@gmail.com';
if (((!empty($_GET['phonenumber'])&&!empty($_GET['port']))&&(!empty($_GET['message'])&&!empty($_GET['time'])))&&!empty($_GET['openvox'])){
    $openvox=$_GET['openvox'];
    if($openvox=='192.168.0.11')
        $tel=array(
            'gsm-1.1' => '38067XXXXXXX_nazvanie_1',
            'gsm-1.2' => '38067XXXXXXX_nazvanie_2',
            'gsm-1.3' => '38067XXXXXXX_nazvanie_3',
            'gsm-1.4' => '38050XXXXXXX_nazvanie_4', 
            'gsm-2.1' => '38050XXXXXXX_nazvanie_5',
            'gsm-2.2' => '38050XXXXXXX_nazvanie_6',
            'gsm-2.3' => '38050XXXXXXX_nazvanie_7',
            'gsm-2.4' => '38050XXXXXXX_nazvanie_8', 
            'gsm-3.1' => '38050XXXXXXX_nazvanie_9',
            'gsm-3.2' => '38066XXXXXXX_nazvanie_10',
            'gsm-3.3' => '38067XXXXXXX_nazvanie_11',
            'gsm-3.4' => '38050XXXXXXX_nazvanie_12', 
            'gsm-4.1' => '38050XXXXXXX_nazvanie_13',
            'gsm-4.2' => '38066XXXXXXX_nazvanie_14',
            'gsm-4.3' => '38050XXXXXXX_nazvanie_15',
            'gsm-4.4' => '38067XXXXXXX_nazvanie_16', 
            'gsm-5.1' => '38050XXXXXXX_nazvanie_17',
            'gsm-5.2' => '38050XXXXXXX_nazvanie_18',
            'gsm-5.3' => '38095XXXXXXX_nazvanie_19',
            'gsm-5.4' => '38067XXXXXXX_nazvanie_20'
        );
    else if ($openvox=='192.168.0.12')
        $tel=array(
            'gsm-1.1' => '+38050XXXXXXX_nazvanie_1',
            'gsm-1.2' => '+38099XXXXXXX_nazvanie_2',
            'gsm-1.3' => '+38099XXXXXXX_nazvanie_3',
            'gsm-1.4' => '+38073XXXXXXX_nazvanie_4',
            'gsm-2.1' => '+38067XXXXXXX_nazvanie_5',
            'gsm-2.2' => '+38067XXXXXXX_nazvanie_6',
            'gsm-2.3' => '+38067XXXXXXX_nazvanie_7',
            'gsm-2.4' => '+38063XXXXXXX_nazvanie_8'
        );
    $phonenumber=$_GET['phonenumber'];
    $port=$_GET['port'];
 
    $Subject=$phonenumber.' прислал SMS сообщение на '.$tel[$port];
    $Body=$phonenumber.' прислал сообщение на '.$tel[$port].'. Время получения: '.$_GET['time'].'. Текст сообщения: ';
    $Body=$Body.substr(mb_convert_encoding($_GET['message'], "windows-1251", "auto"), 1);
//Ниже - отправка всех СМС сообщений на openvox@gmail.com ящик:
    exec('"C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin\email.exe" '.$mailserver.' '.$mailserverPort.' '.$mailSend.' '.$mailSendPass.' '.$mailTo.' '.$Subject.' ::S '.$Body);
 
//Ниже - отправка сообщений на ящик sms.zakupki@gmail.com только с определенных портов: 
    if((($port=='gsm-1.1')&&($openvox=='192.168.0.11'))||(($port=='gsm-1.2')&&($openvox=='192.168.0.11'))||(($port=='gsm-1.4')&&($openvox=='192.168.0.11'))||(($port=='gsm-2.1')&&($openvox=='192.168.0.11'))||(($port=='gsm-2.2')&&($openvox=='192.168.0.11'))||(($port=='gsm-3.2')&&($openvox=='192.168.0.11'))) exec('"C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin\email.exe" '.$mailserver.' '.$mailserverPort.' '.$mailSend.' '.$mailSendPass.' sms.zakupki@gmail.com '.$Subject.' ::S '.$Body);
 
//Ниже - отправка сообщений в Telegram с определённого номера (функционал описан в статье https://adminblog.net.ua/linux/peresylka-sms-s-openvox-v-telegram.html):
    if (($port=='gsm-2.1')&&($openvox=='192.168.0.11')) {
    $pattern = "/^\+380\d{3}\d{2}\d{2}\d{2}$/";
    if(preg_match($pattern, $phonenumber)){
        $message=mb_convert_encoding($_GET['message'], "windows-1251", "auto");
        preg_match('(\b\d{3}\b)', $message, $str);
        $time=$_GET['time'];
        if(!empty($str)){
            $text = 'Сообщение от: '.$phonenumber.' - *'.$str[0].'* '.$time;
            echo $text;
            exec('"C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin\telegram.exe" '.$token.' '.$chatid.' Markdown '.$text);
        }
    }
}
}
?>

Допустим у нас есть два OpenVox шлюза (№1 192.168.0.11, №2 192.168.0.12), с которых нужно пересылать сообщения. Во время настроек на самых шлюзах, определим собственный параметр, при помощи которого мы будем определять с какого шлюза пришло сообщения: openvox=192.168.0.11. Когда запускается скрипт, он получает параметры и обрабатывает их. Пример код: 'gsm-1.1' => '38067XXXXXXX_nazvanie_1' — здесь мы задаем массив с понятным описанием порта, на который пришло сообщение.

Приложение C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin\email.exe, описывал в Отправка сообщений на e-mail через cmd

Приложение C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin\telegram.exe, описывал в Отправка сообщений в Telegram.



Таким образом получилось «умное» распределение входящих СМС сообщений.

Похожие статьи:

Оценка работы оператора FreePBX+Asterisk
Задача: 1) Есть группа операторов Call-центра, нужно сделать возможность после разговора, оценивать звонок. 2) Максимальная интеграция с FreePBX. Решение: В Интернете много вариантов, все они ориентированы на чистый Asterisk. Примеры: https://wiki.merionet.ru/ip-telephoniya/55/ocenka-raboty-operatora-posle-zvonka-na-asterisk/ https://habr.com/ru/post/147122/ http://asterisk-service.com/blog/asterisk-1/post/2-0-53 Моя же реализация заключается в том, что все настройки можно делать в Web-интерфейсе FreePBX. Реализация тестировалась и работает на: - версии Asterisk 1.8.10.1 - ...
Мониторинг уровня сигнала SIM-карт в Openvox через Zabbix
При переходе по ссылке http://IP_OPENVOX/service?action=get_gsminfo, или http://IP_OPENVOX/X/service?action=get_gsminfo (где X - номер модуля, больше 1), можно увидеть в json-формате статус портов (span-нов). Если Web-сервер на Openvox, для авторизации использует метод Authorization: Basic, то мониторить статус портов (span-нов), можно средствами zabbix. Но на некоторых (более новых) Openvox-шлюзах ...
Отправка сообщений в Telegram
Здесь описаны возможные способы отправки сообщений в Telegram Windows CMD Для удобства отправки с командной строки, написал консольную программу на языке Pascal. Среда разработки PascalABC.NET uses System.IO, System.Net; var i:integer; html : string; chat_id: string; {:='111111111';} token: string; {:= '0000000:AAAAAAAAAAAAAAAAAAAAAA';} parse_mode: string; {:= 'html';} message: string:=''; {:='Сообщение';} url : string; begin token := ParamStr(1); chat_id := ParamStr(2); parse_mode := ...
Восстановление OpenVox после неудачной прошивки
Проблема После прошивки через Web-интерфейс, шлюз OpenVox перестал отвечать на запросы как ping, так и WEB. При визуальном осмотре, все модули, кроме 1-го (master) работают (на остальных модулях - светодиод SYS моргает примерно раз в 1 секунду, также моргают светодиоды сим карт). Решение За основу решения взял Flash ...
Web CallBack FreePBX
Задача Создать кнопку "Перезвоните мне" на сайте, с максимальной интеграцией во FreePBX. Решение Для примера возьмем статью https://asterisk-pbx.ru/wiki/artikle/asterisk_web_callback. Принцип работы этой реализации заключается в том, что php скрипт генерирует (Originate) вызов. Первым делом отправляет вызов по каналу Channel. После того, как соединение установлено (вызов принят оператором), осуществляется ...
Защита админ-панели RainLoop при помощи NGINX
Админ-панель почтового Web-клиента доступен по адресу: https://domain?admin Чтобы ограничить доступ к данной станицы определенным IP, нужно внести изменения в файлы конфигураций: nano /etc/nginx/conf.d/default.conf server { listen 80; server_name _; server_tokens off; location /.well-known/acme-challenge/ { ...
Доступ к Slave boards Openvox
Для того, чтобы выполнить запрос из консоли Asterisk (asterisk -rx ""), который установлен на шлюз, или через Web-интерфейс (Дополнительно→Asterisk CLI) то будет доступен только Master модуль. Чтобы работать со Slave модулями, нужно поднимать дополнительное соединение. Как же работает Web-интерфейс с Slave модулями? Так и работает! ...
Установка и настройка сервиса сокращений ссылок Polr
Polr - это красивый, современный, легкий и минималистический сервис для сокращения URL ссылок с открытым исходным кодом. Он позволяет создавать собственные сокращенные URL ссылки, маркировать URL и получать контроль над вашими данными. Вести статистику переходов. Polr особенно прост в использовании и предоставляет современный, удобный интерфейс. ...