Черный список ip адресов для voip
sh скрипт который
!/bin/bash10.04.2019
BADIPSFILE="badips.list"
BADIPSFILETEMP="$BADIPSFILE".temp
ADDLISTFILE="$BADIPSFILE".load
# get new list
wget https://www.badips.com/get/list/voip/0 -O $BADIPSFILETEMP
# sort new list
sort $BADIPSFILETEMP -o $BADIPSFILETEMP
# touch to be sure that file exist
touch $BADIPSFILE
# diff old ans new file
diff $BADIPSFILE $BADIPSFILETEMP | grep -Po '\d+.\d+.\d+.\d+' > $ADDLISTFILE
# copy new file to old for next ips going fast
cp -f $BADIPSFILETEMP $BADIPSFILE
cp -f drop_temp.xml drop_temp_.xml
BLOCKED_IP=$ADDLISTFILE
IPTABLES="iptables"
if [ -f $BLOCKED_IP ]; then
while read BLOCKED; do
$IPTABLES -A INPUT_direct -i ens192 -s $BLOCKED -p udp -j DROP
done < $BLOCKED_IP
fi
opensips. dispatcher. loadbalancing. wrong destination.
По установке по умолчания, если вы добавите несколько шлюзов в dispatcher то про запросе авторизации, Opensips будет пересылать новый invite на новый шлюз.
решается выставлением hash механизма ‘0’ в функции ds_select_dst который учитывает callid.
| Posted in kamailio, opensips | No Comments »
troubleshoot. ACK sending to wrong host
solve is add function fix_sdp_contact() into onreply_route .
по-русски: проблема была в том, что опенсипс получая ACK от абонента не пересылал его обратно, через внутренний интерфейс железке. А слал ACK напрямую тому, кто указан был в 200 OK оригинальном. в Итоге помогло добавление функции в onreply_route которая по идее должна заменять поле контакт на адрес источника запроса.
3.04.2019FREEPBX. SURVEY. IVR. REPORT
Задача: написать модуль для freepbx который бы переводил пользователя на ivr оценки качества или просто опрос звонящего
Система обслуживания это несколько вопросов на которые пользователи должны дать ответ нажатием кнопки от 1 до 5.
Ответы должны сохраняться в базу данных с дополнительной информацией о том, какая система опрашивала, какие ответы даны, кто отвечал, запись разговора.
Статья с примером реализации. Кстати отлично показывает как работают некоторые механизмы в freepbx.
итого для создания системы опроса в freepbx можно обойтись вообще без всего и даже отчеты получать в более-менее хорошем виде
1. add content to extensions_custom.conf
;-------Survey logic------------------------------
[macro-survey]
exten => _.,1,answer()
exten => _.,n,Read(answer1,/var/lib/asterisk/sounds/en/custom/${EXTEN}-1,1,,1,2)
exten => _.,n,Read(answer2,/var/lib/asterisk/sounds/en/custom/${EXTEN}-2,1,,1,2)
exten => _.,n,Read(answer3,/var/lib/asterisk/sounds/en/custom/${EXTEN}-3,1,,1,2)
exten => _.,n,Read(answer4,/var/lib/asterisk/sounds/en/custom/${EXTEN}-4,1,,1,2)
exten => _.,n,Read(answer5,/var/lib/asterisk/sounds/en/custom/${EXTEN}-5,1,,1,2)
exten => _.,n,Read(answer6,/var/lib/asterisk/sounds/en/custom/${EXTEN}-6,1,,1,2)
exten => _.,n,Read(answer7,/var/lib/asterisk/sounds/en/custom/${EXTEN}-7,1,,1,2)
exten => _.,n,Read(answer8,/var/lib/asterisk/sounds/en/custom/${EXTEN}-8,1,,1,2)
exten => _.,n,Read(answer9,/var/lib/asterisk/sounds/en/custom/${EXTEN}-9,1,,1,2)
exten => _.,n(finish),set(answer=${answer1}|${answer2}|${answer3}|${answer4}|${answer5}|${answer6}|${answer7}|${answer8}|${answer9})
exten => _.,n,Set(CDR(userfield)=${answer})
exten => _.,n,noop(EXTEN - ${EXTEN})
exten => _.,n,noop(DIDFROM - ${FROM_DID})
exten => _.,n,noop(DEXTEN - ${DEXTEN})
exten => _.,n,noop(TIMESTP - ${TIMESTR})
exten => _.,n,noop(CALLERID - ${CALLERID(num)})
exten => _.,n,noop(RECORDS - ${UNIQUEID})
exten => _.,n,noop(EXTFROM - ${EXTTOCALL})
exten => _.,n,noop(ANSWER1 - ${answer1})
exten => _.,n,noop(ANSWER2 - ${answer2})
exten => _.,n,MYSQL(Connect connid 127.0.0.1 surveyuser 123123 asterisk)
exten => _.,n,MYSQL(Query resultid ${connid} INSERT INTO surveys_report (surveynum,did,surveyname,agent,queue,start_date,calleridorig,callid,answer1,answer2) values ('${EXTEN}','${FROM_DID}',' ','${DEXTEN}',' ','${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}','${CALLERID(num)}','${UNIQUEID}','${answer1}','${answer2}'))
exten => _.,n,playback(/var/lib/asterisk/sounds/en/custom/${EXTEN}-thankyou)
;-------------------------------------
2. Prepare Recordings as at image 1
3. create Custom Destination as at image 2
4. create Ring Group as at image 3
5. all is ready for surveys, results and records will be stored at CDRs pages. for saving results in new table at mysql you should add new table in asterisk database;
6. SQL statement for create new table, also you should know user and password for database;
CREATE TABLE `surveys_report` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`surveynum` varchar(12) DEFAULT NULL,
`surveyname` varchar(255) NOT NULL,
`agent` varchar(64) DEFAULT NULL,
`queue` varchar(64) DEFAULT NULL,
`start_date` varchar(128) DEFAULT NULL,
`calleridorig` varchar(64) DEFAULT NULL,
`callid` varchar(128) DEFAULT NULL,
`answer1` varchar(64) DEFAULT NULL,
`answer2` varchar(64) DEFAULT NULL,
`did` varchar(64) DEFAULT NULL,
PRIMARY KEY (`id`)
)
CREATE USER 'surveyuser'@'localhost' IDENTIFIED BY '123123';
grand all on asterisk.* to 'surveyuser'@'localhost' IDENTIFIED BY '123123';
d-link dvg6004s и asterisk
годные статейки перваяи вторая как подключить голосовые шлюзы, в том числе к elastix.
25.03.2019mixmonitor. playback. file not found
если записать канал и затем попытаться воспроизвести его,то астериск выдаёт: does not exist in any format
решение оказалось таким, записываем без формата
same => n,mixmonitor(mytest-${UNIQUEID})
и воспроизводим тоже
same => n,background(/var/spool/asterisk/monitor/mytest-${UNIQUEID})25.03.2019
freepbx + a2biling different places
Чтобы разнести а2биллинг и астериск по разным машинам, нужно определиться будем ли мы запускать скрипты на машине с астериском или через fastAGI
в интернете есть упоминания о том, что при использовании fastAGI возникли проблемы с биллингом по этому,был выбран путь 1. скачать скрипты, подключиться к БД и вперед
Есть одно неудобство, которая пока не знаю как победить – просмотр логов из панели а2биллинга невозможет, т.к. они лежат на другой тачке.
Что нужно чтобы скрипты заработали, за основу берем хорошую статью:
- Скачать исходники а2биллинга(распаковывать кстати командой unzip, через mc Занимает много времени)
- добавить AGI
Цитата: Set up AGI
mkdir /var/lib/asterisk/agi-bin cd /usr/src/a2billing/AGI cp a2billing.php /var/lib/asterisk/agi-bin cp a2billing_monitoring.php /var/lib/asterisk/agi-bin chown -R asterisk. /var/lib/asterisk/agi-bin chmod 755 /var/lib/asterisk/agi-bin/a2billing.php chmod 755 /var/lib/asterisk/agi-bin/a2billing_monitoring.php ln -s /var/www/html/a2billing/common/lib /var/lib/asterisk/agi-bin/lib ln -s /var/www/html/a2billing/vendor /var/lib/asterisk/vendor
Add the following extensions to /etc/asterisk/extensions_custom.conf
If not using Freepbx then this would go into /etc/asterisk/extensions.conf
. Customize this to your needs.
The 1
in a2billing.php,1
refers to the default agi-conf1
configuration in a2billing system settings. It is possible to add additional agi-conf such as agi-conf2
etc. via System Settings > Add agi-conf
.
nano /etc/asterisk/extensions_custom.conf
[a2billing-did]
exten => _X.,1,AGI(a2billing.php,1,did)
exten => _X.,n,Hangup()
[a2billing-out]
exten => _X.,1,AGI(a2billing.php,1)
exten => _X.,n,Hangup()
Add custom destinations to FreePBX via FreePBX GUI>Admin>Custom Destinations
These destinations are referring to the custom extensions created above in /etc/asterisk/extensions_custom.conf
Target: a2billing-did,${EXTEN},1
Description: A2Billing - Inbound
Target: a2billing-out,${EXTEN},1
Description: A2Billing - Outbound
Create inbound route
We are creating a universal DID inbound route. This requires _.
in the DID number field. That is underscore character followed by period or dot character.
Connectivity > Inbound Routes
Description: Some descriptive name
DID number: _.
Set Destination: Custom Destinations
A2Billing - Inbound
connecting TATA sip trunk
TATA выдает подключает sip-trunkи через локальные сети, т.е. например они дают подсеть 10.0.8.6/32 со шлюзом 10.0.8.5 и только назначив первый ip адрес вы сможете подключиться к их voip сети.
Сразу укажу статью оригинал, которая помогла понять смысл подключения.
В качестве IP SBC\PBX тоже используются локальный адрес, например это может быть 10.0.74.11.
Едем дальше, чтобы получать входящие звонки нужно:
- добавить интерфейс к centos ip address add 10.0.86.6/30 dev eth0:0
- создать статический маршрут route add 10.0.74.11 gateway 10.0.8.5
- регистрироваться на их SBC (пароль по-умолчанию 1234)
register => 66810000:1234:66810000@10.0.74.11/66810000
для совершения исходящих:
- нужно звонить по определенным правилам набора, например для индии это набор номера 10 знаков без 5.
- нужно использовать в поле FROM правильный номер,
- А также необходимо удостовериться что поле contact соответствует 10.0.8.6 (если такое сделать не получится, то у меня звонки проходили и без этого пункта ),
- Обязательно добавьте SIP заголовок к исходящим
P-Preferred-Identity: <sip:66810000@SBC_IP> ,
для FREEPBX добавить sip заголовок к исходящему звонку просто:
- добавить в файл extensions_custom.conf нужный контекст, например такой:
[add-tata1-header]
exten => s,1,SipAddHeader(P-Preferred-Identity: ${ARG1})
exten => s,n,Return
- в настройках транка переопределить DIAL опции на:
B(add-tata1-header^s^1(66810000@10.0.76.11))
Вот так сумбурно, но в целом это все требования.
PS: чтобы freepbx подставлял в поле contact нужные данные, необходимо чтобы был маршрут до SBC. route add sbc_ip gateway gateway_IP. А также сети должны быть прописаны в конфигах Asterisk как localnet
5.03.2019update elastix 2.5 to FreePBX 14
Оказывается, это можно сделать буквально в два движения.
Вот ссылка на инструкцию, там смысл простой запускаешь на машине-приёмнике команду, затем туже команду на машине-источнике и вуаля.
Кое-что придёт перенести вручную, но 90% работы делается автоматически.
1.03.2019pjsip, pitch_shift, real-time
Необходимо решить такую задачу нужно в режиме реального времени менять тональность каналов на asterisk 13.
Для реализации будем использовать AMI который есть почти во всех астерисках.
- Получаем список активных каналов через команду
- “core show channels concise”
- Отображаем пользователям каналы и кнопки увеличения,уменьшения тональности для конкретных каналов
- Применяем к каналам данные настройки через команду:
Action: SetVar
Channel: 1551426910.36
Variable: PITCH_SHIFT(both)
Value: 3
или как итоге получилось:
dialplan set chanvar $channel PITCH_SHIFT(both) high
| Posted in Asterisk | No Comments »