Как стать автором
Обновить

SMPP в Telegram (Viber)

Время на прочтение4 мин
Количество просмотров5K

00 Вступление

Много лет не писал нечего кроме заметок для себя, но тут получилось интересное решение поэтому решил поделиться со всеми пользователями habr(он много поучаствовал в принятие и поиске решения), не судите строго. Постараюсь разделить все логически правильно, но не обещаю что получится.

01 Задача

Есть куча старых железок, работающая по протоколу SMPP и присылающая уведомления по нему на номера телефонов людей (кроме этого она умеет работать напрямую с GSM-модемом и слать с него-но 21 век на дворе, да и стоимость СМС поражает). Расходы на эти уведомления то дешевели, то дорожали меняли операторов которые предоставляют сервис достаточно часто, эти вечные поиски дешевле и лучше пришли к логическому концу и было принято решение увезти все это куда нибудь в свое пользование, у нас в регионе популярные менеджеры это telegram and viber. У обоих есть боты у обоих есть API. Но так как я все таки ИТ-спец и свои скилы программирования не прокачиваю, буду использовать чужие наработки и опыт в стыковке. В итоге получилась комбинация работающая даже интереснее чем надо, т.к. теперь любые уведомления (с 1С, freepbx, backup) можно напрямую посылать в чатбот по номеру телефона.

10 Вступление

С smpp умеет работать несколько софтин, еще находил несколько исходных кодов серверов на VS, попробовал несколько и понял что код то есть, но заставить его работать не всегда тривиальная задача и некоторые из них платные, а делать потом интеграцию это еще та проблема, поэтому выбор пал на kannel старый и кривой софт. Сколько времени потрачено на то чтобы он заработал на свежем дистрибутиве это отдельная история, но он работает, и в практике работает без особых проблем. В общем нам понадобится старенький комп(можно виртуалку) на борту которой стоит поставить минимальный образ Centos 7 далее можно просто вставлять команды(осторожнее с включением ssh):

#disable selinux, iptables and other....
systemctl enable sshd
systemctl start sshd
yum install mc
mcedit /etc/selinux/config #edit setenforce 0
yum update
yum install gcc libxml2-devel mariadb mariadb-devel wvdial vim openssl-devel texlive-* m4 gcc-c++ make wget -y
yum groupinstall "Development tools" -y
yum remove bison -y
mkdir /usr/local/kannel/
mkdir /usr/local/kannel/src
cd /usr/local/kannel/src
wget https://ftp.gnu.org/gnu/bison/bison-2.7.tar.gz
wget --no-check-certificate http://www.kannel.org/download/1.4.4/gateway-1.4.4.tar.gz
wget --no-check-certificate http://www.kannel.org/download/1.4.5/gateway-1.4.5.tar.gz
wget --no-check-certificate https://www.kannel.org/download/1.5.0/gateway-1.5.0.tar.gz
tar zxvf bison-2.7.tar.gz && cd bison-2.7 && ./configure && make && make install && cd src
cp bison /usr/local/bin/bison && cp bison /usr/bin/bison
cd /usr/local/kannel/src
tar -zxvf gateway-1.4.4.tar.gz && tar -zxvf gateway-1.4.5.tar.gz && tar -zxvf gateway-1.5.0.tar.gz
cd /usr/local/kannel/src/gateway-1.4.5
./configure  --prefix=/usr/local/kannel --enable-start-stop-daemon --with-mysql --with-mysql-dir=/usr/lib/mysql/ --enable-debug --enable-assertions --disable-localtime --enable-start-stop-daemon --enable-pam
make && make install
 cd /usr/local/kannel/src/gateway-1.4.5/addons/opensmppbox/
./configure --prefix=/usr/local/kannel --with-kannel-dir=/usr/local/kannel 
make && make install
 cd /usr/local/kannel/src/gateway-1.4.5/addons/sqlbox/
./configure --prefix=/usr/local/kannel --with-kannel-dir=/usr/local/kannel 
make && make install
systemctl stop firewalld
systemctl disable firewalld
mkdir /var/log/kannel
chmod 777 /var/log/kannel/
yum install php -y

После выполнения набора этих команд вы получите centos с установленным и работающим kannel`ом

11 Настройка Kannel

Все действия будем проводить в каталоге установки kannel, поэтому

cd /usr/local/kannel/sbin/
touch kannel.conf
touch killrestart.sh
touch opensmppbox.conf
touch ouser
touch test.php

все файлы создали, приступим к настройке, рассказывать по всем параметрам смысла не вижу, по идее это все можно с помощью переводчика перевести с перевода на перевод, но общий смысл уловить можно, это простой рабочий конфиг под конкретную цель:

nano kannel.conf
#и приводим файл к следующему виду:
group = core
admin-port = 13000
admin-password = test
smsbox-port = 13001
dlr-storage = internal
store-type = file
log-file = "/var/log/kannel/kannel.log"
access-log = "/var/log/kannel/access.log"
log-level = 4
store-location = "/var/log/kannel/kannel.store"

group = smsbox
smsbox-id = smsboxid
bearerbox-host = localhost
sendsms-port = 13013

group = smsc
smsc = http
smsc-id = tophp
smsc-username = default
smsc-password = default
system-type = kannel
port = 63015
alt-charset = "utf-8"
send-url = http://127.0.0.1:63016/
max-sms-octets = 1000
nano opensmppbox.conf
#и приводим файл к следующему виду:
group = core
dlr-storage = internal
store-type = file
store-location = "/var/log/kannel/smpp_store_sms"

group = opensmppbox
opensmppbox-id = opensmppbox
opensmppbox-port = 3700
bearerbox-host = 127.0.0.1
bearerbox-port = 13001
our-system-id = opensmppbox
smpp-logins = /usr/local/kannel/sbin/ouser
use-systemid-as-smsboxid = true
log-level = 4
log-file = /var/log/kannel/opensmppbox.log
nano ouser
#и приводим файл к следующему виду:
test1 123 user-smpp *.*.*.*
test2 123 user-smpp *.*.*.*
nano killrestart.sh
#и приводим файл к следующему виду:
pkill bearerbox
pkill opensmppbox
pkill php
rm /var/log/kannel/* -f
/usr/local/kannel/sbin/bearerbox /usr/local/kannel/sbin/kannel.conf
/usr/local/kannel/sbin/opensmppbox /usr/local/kannel/sbin/opensmppbox.conf
cd /tmp/ && php -S 0.0.0.0:63016 test.php

Чтобы проверить выполним запуск

/usr/local/kannel/sbin/bearerbox /usr/local/kannel/sbin/kannel.conf
/usr/local/kannel/sbin/opensmppbox /usr/local/kannel/sbin/opensmppbox.conf
cd /tmp/ && php -S 0.0.0.0:63016

Теперь с железки необходимо отправить smpp запрос на IP(где крутится Kannel)на порт 3700, после чего увидите запрос в консоли.

запрос с SMPP клиента на порт 3700
запрос с SMPP клиента на порт 3700

Если все получилось, отлично. Иначе следует смотреть логи.(Для тестирования можно использовать клиент https://inetlab.com/Products/Inetlab.SMPP.html скачать dll with samples, в папке найти Inetlab.SMPP.zip\bin\net461\SmppClientDemo.exe)

Теги:
Хабы:
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

Публикации

Истории

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн