Берем за пример статью Пересылка СМС с 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.

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

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

Мониторинг времени простоя компьютера
Чтобы реализовать мониторинг времени простоя компьютера, нужно учитывать тот факт, что пользователь обычно работает с мышкой, поэтому будем анализировать ее активность. Если мышь была не активной в течение N минут, сделаем вывод, что пользователь в настоящее время не работает с ПК. Всю статистику будем отправлять ...
Bitrix24 cоздание лида через API
Задача - создание лида через API запрос к облачному Bitrix24. Для решения этой задачи, будем использовать webhook. Для создания webhook переходи на портале Bitrix24 по пункту "Дополнения"→"Вебхуки" Нажимаем на кнопку "создать вебхук", из выпадающего списка выбираем "Входящий вебхук". На следующем окне нужно ввести имя вебхука ...
Мониторинг состояния RAID массива контроллеров P420
Описание Контроллер HPE Smart Array P420 - это низкопрофильный RAID-контроллер с интерфейсом 6 Гбит/с, PCIe 3.0, Serial Attached SCSI (SAS), корпоративного класса, который обеспечивает производительность хранилища и защиту данных для стоечных серверов HPE ProLiant Gen8. Он оснащен восемью внутренними портами SAS и обеспечивает повышенное время безотказной ...
Мониторинг уровня сигнала 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-шлюзах ...
Установка Bitwarden Server для организации
Проблема Нужно установить Bitwarden Server для работой с организацией. Также не забываем о Docker. Решение Для запуска и установки в личных целях, достаточно воспользоваться официальной инструкцией по ссылке https://help.bitwarden.com/article/install-on-premise/. Не забываем установить Docker и Docker-compose: curl -sSL https://get.docker.com/ | sh sudo usermod -aG docker ${USER} sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o ...
Защита админ-панели 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/ { ...
Отправка сообщений в 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 := ...
Отправка сообщения всем активным пользователям RDP на Windows Server 2016
Обратите внимание! Если пользователь работает без рабочего стола (запуск приложения), то сообщения не будет. Отправляются только тем, у кого разрешен Рабочий стол. Пошаговое руководство Запускаем cmd от имени администратора Выполняем команду msg.exe * /server:MY-Name-Server "Почистите, пожалуйста, свои корзины!" Где MY-Name-Server - название сервера. Источник: http://pyatilistnik.org/send-a-message-to-all-users-of-the-rds-farm/