ITСooky

IT-рецепты съедобные и не очень!

Боремся со спам звонками на городском телефоне с Asterisk, IVR, Grandstream ht813 на Raspberry Pi 4!

дата 04.11.2022

Век живи, век переустаналивай Asterisk каждый раз как в первый раз, затык на пол дня — не знаю как так получается! Пока скрипя видеокартой тренеруется нейросеть… Да и Orange PC Plus не кстати сдох из первой статьи Боремся со спам звонками на городском телефоне с Asterisk, IVR, Grandstream ht813 на OrangePi PC Plus! — eMMC сдох весь и совсем… Давненько я не бралсь за Raspberry Pi, за самый дешевый ой! А чего происходить то, почему в Китае версия 4Gb стоит сейчас 170 долларов, а у нас под 250(ой и OrangePi PC Plus уже 40 стоит!!!)!!! Ну хоть корпуса для RPi не подоражали, беру Argon One прям такого как у меня уже не делают, у меня тут еще непочатый запас аксесуаров для малинки отсается, но вот один в один только HDMI порты добавили два Argon ONE V2 Case for Raspberry Pi 4 всего за 25$ прям столько когда-то RPi и стоила целая!!!

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

Понятно почему первая версия(как у меня) этого корпуса, пропала и появилась вторая. Надо подпилить чуть-чуть чтобы малинка влезла в него, разьем RJ45 не влезает — пилим.

Корпус выглядет шикарно

Устанавливаем Raspberry Pi OS Lite
Процесс прост до жути, качаем тут www.raspberrypi.com/software/ Raspberry Pi Imager и он сам все делает — качает и пищет на SD карту. Я выбрал Raspberry Pi OS Lite 32-bit было от 2022.09.22

Перед записью надо задать пароль и поставить галочку SSH раньше это по другому делалось. Тут же можно сразу Wi-Fi настроить — удобно однако!

После окончания записи карту можно вставлять в малинку и смотреть какой малинка получила IP я посмотрел на роутере.

Устанавливаем скрипт корпуса Argon One
curl http://download.argon40.com/argon1.sh | bash
Перезагружаемся

И настраиваем под себя
argonone-config

Схема
Нам звонят, Asterisk снимает трубку и проигрывает сообщение — если вы человек нажимите 7, если нет 5 и музыка ожидания. Если нажимают 7 то начинает звонить телефон в квартире!

Raspberry PI будет отвечать за голосовое меню (IVR), при этом единственный SIP телефон будет подключен к HT813 и звонить в город через него же по прямой. Привязать порт FXO HT813 к Asterisk чтобы работал вместе с IVR не получается, вот почему то тут не получилось Заставляем Grandstream ht813 звонить на PSTN через Asterisk!… наверняка все из-за 100500 галочек в HT813!

Устанавливаем Asterisk
sudo apt-get install asterisk
Запускаю и смотрю статус
sudo systemctl start asterisk
systemctl status asterisk

● asterisk.service - Asterisk PBX
     Loaded: loaded (/lib/systemd/system/asterisk.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-11-04 06:38:03 MSK; 1min 5s ago
       Docs: man:asterisk(8)
   Main PID: 7985 (asterisk)
      Tasks: 68 (limit: 4915)
        CPU: 2.568s
     CGroup: /system.slice/asterisk.service
             ├─7985 /usr/sbin/asterisk -g -f -p -U asterisk
             └─7997 astcanary /var/run/asterisk/alt.asterisk.canary.tweet.tweet.tweet 7985

ноя 04 06:38:03 rpiserver asterisk[7985]: [Nov  4 06:38:03] ERROR[7985]: loader.c:2396 load_modules: cel_radius declined to loa>
ноя 04 06:38:03 rpiserver asterisk[7985]: [Nov  4 06:38:03] ERROR[7985]: loader.c:2396 load_modules: cdr_pgsql declined to load.
ноя 04 06:38:03 rpiserver asterisk[7985]: [Nov  4 06:38:03] ERROR[7985]: loader.c:2396 load_modules: cel_tds declined to load.
ноя 04 06:38:03 rpiserver asterisk[7985]: [Nov  4 06:38:03] ERROR[7985]: loader.c:2396 load_modules: pbx_dundi declined to load.
ноя 04 06:38:03 rpiserver asterisk[7985]: [Nov  4 06:38:03] ERROR[7985]: loader.c:2396 load_modules: res_hep_rtcp declined to l>
ноя 04 06:38:03 rpiserver asterisk[7985]: [Nov  4 06:38:03] ERROR[7985]: loader.c:2396 load_modules: chan_unistim declined to l>
ноя 04 06:38:03 rpiserver asterisk[7985]: [Nov  4 06:38:03] ERROR[7985]: loader.c:2396 load_modules: res_hep_pjsip declined to >
ноя 04 06:38:03 rpiserver asterisk[7985]: Asterisk Ready.
ноя 04 06:38:03 rpiserver systemd[1]: Started Asterisk PBX.
ноя 04 06:38:21 rpiserver asterisk[7985]: [Nov  4 06:38:21] NOTICE[8043]: chan_sip.c:29041 handle_request_register: Registratio>

Значит работает

И чтобы запускался на старте
sudo systemctl enable asterisk

Смотрим что он слушает то что нужно
sudo netstat -tulpn | grep asterisk

tcp        0      0 127.0.0.1:5038          0.0.0.0:*               LISTEN      2491/asterisk       
udp        0      0 0.0.0.0:39348           0.0.0.0:*                           2491/asterisk       
udp        0      0 0.0.0.0:5060            0.0.0.0:*                           2491/asterisk       
udp        0      0 0.0.0.0:4569            0.0.0.0:*                           2491/asterisk       
udp6       0      0 :::47426                :::*                                2491/asterisk

Это то что нужно!

Сходим в сам Asterisk
sudo asterisk -rvvvvv

Asterisk 16.16.1~dfsg-1+deb11u1, Copyright (C) 1999 - 2018, Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
Connected to Asterisk 16.16.1~dfsg-1+deb11u1 currently running on rpiserver (pid = 7985)

В extensions.conf в конце добавляем
vi /etc/asterisk/extensions.conf

[users]
exten => 6666,1,Goto(spam_ivr,s,1)
exten => 6001,1,Dial(SIP/6001)
exten => 6002,1,Dial(SIP/6002)
 
[spam_ivr]
exten => s,1,Answer(500)
;exten => s,2,Monitor(wav,,m)
same => n(loop),Background(/var/lib/asterisk/sounds/custom/ivr)
exten => 5,1,Dial(SIP/6001)
exten => 7,1,Dial(SIP/6002)

тут 6002 будет наш реальный телефон который хотим чтобы звонил когда люди на проводе. А 6001 телефон которого нет, будет просто отбой.

Вторая строчк в [spam_ivr] закоменчена, она записывает разговоры.

В users.conf в конце добавляем
vi /etc/asterisk/users.conf

[6001]
fullname = Test Android
secret = 1234
hassip = yes
context = users
host = dynamic
 
[6002]
fullname = Home phone
secret = 1234
hassip = yes
context = users
host = dynamic

Эт учетки наших телефонов

В папку /var/lib/asterisk/sounds/custom/ кладем wav файл подготовленный в вашем любимом аудио редакторе, со словами «если вы человек нажмите 7»! Просто так он играться не будет надо его конверитров под Asterisk.
sox ivr.wav --rate 8000 --channels 1 --type ul ivr.ulaw lowpass 3400 highpass 300
был ivr.wav стал ivr.ulaw

Вот готовый файл ivr.ulaw
Julia_antyspam_ivr

Ну и прям наверняка перестартуем Asterisk
sudo service asterisk restart

Настраиваем Grandstream ht813
Эхх…
cfgHT813G

Это мои настройки, под мою сеть и телефон!

Для начала нужно чтобы звонки с городской телефонной линии звонились в астериск!
Заходим на Grandstream ht813 во вкладке BASIC SETTINGS внизу пишем в Unconditional Call Forward to VOIP:

Это настройка кидает — все звонки что приходят на порт FXO кидать на номер 6666 на ip моего asterisk по порту!
Чтобы применить изменения нажимает Apply

Далее идем в FXO PORT и делаем…

Тут внутри настраиваем, забавная штука!!! VoIP шлюз не может повесить сам трубку просто не понимает, что на другом конце её повесили. Для этого надо ему сказать какие прерывистые гудки слушать — вот для Абонентский терминал GPON RV6699 они такие как у меня

Тут поменяно Enable Current Disconnect и Enable PSTN Disconnect Tone Detection и STN Disconnect Tone и AC Termination Model и PSTN Ring Thru FXS

Как выискивать параметры для вашей линии расскажу ниже

Также на вкладе FXO должно быть включено Account Active
Указан 192.168.1.209 где у меня Asterisk крутиться!
И задан SIP User ID с Authenticate Password при этом это должна быть учетка заданная в Asterisk в users.conf при этом она не будет видна как зарегестрированная ни в Asterisk ни на HT813 но без неё IVR работать не будет! При этом эта учетка может быть на 6666 так и на другой номер 6789… вот какая-то странная странность тут непонятная непонятность!

Чтобы применить изменения нажимает Apply

И порт FSX будет обычным телефоном с номером 6002 захожу в FXS PORT

Здесь меняю Primary SIP Server и IP User ID и Authenticate Password
Чтобы применить изменения нажимает Apply

Чтобы с физического аппарата сразу звонить в город через HT813(минуя Asterisk) просто в Dial Plan в настройках FXS PORT пишем

{ L:x+ }

Все что набирается на стационарном телефоне валится в телефонную линию. Гудки, кстати появляются не сразу, их надо подождать!

Чтобы применить изменения нажимает Apply, Reboot

Как подобрать PSTN Disconnect Tone для вашей телефонной линии?
Позвонил себе с мобильного на домашний, дождался IVR нажал нужную цифру пошел звонок — бросил звонок пошли гудки, но Grandstream продолжает названивать хотя звонок прекрашен — все это пишет asterisk — все звуки!

Забираю аудио файл и открываю его в программе Free, open source, cross-platform audio software Audacity. Выделяю кусок гудка из серии финальных гудков и смотрю его спектограмму Analyze > Plot Spectrum…

Подвожу крусор к пику, и он сразу прыгает на пик, внизу смотрю Peak 425Hz 20.1Db

Меряю длинну гудка и тишину между ними

Внизу видна длинна, только надо выбрать Length and End of Selection у меня 359 милисекунд округляю до 350

И всё, дальше просто подставляем в формулу

Syntax: f1=freq@vol, f2=freq@vol, c=on1/off1-on2/off2-on3/off3;
Allowed Range: freq = 0 to 4000Hz; vol = -40 to -24dBm
Default: Busy Tone: f1=480@-32,f2=620@-32,c=500/500;

У меня для телефонной городской линии МГТС через Абонентский терминал GPON RV6699 надо вставить

f1=425@-21,f2=425@-21,c=350/350;

Пик один, но может быть больше поэтому f1 и f2, для одного пика все описывают его два раза, дальше c это гудок и тишина!

Так или иначе все пока работает!


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *