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, после чего увидите запрос в консоли.
Если все получилось, отлично. Иначе следует смотреть логи.(Для тестирования можно использовать клиент https://inetlab.com/Products/Inetlab.SMPP.html скачать dll with samples, в папке найти Inetlab.SMPP.zip\bin\net461\SmppClientDemo.exe)
ссылка на оригинал статьи https://habr.com/ru/post/669920/
Добавить комментарий