FreePBX Callback – время дозвона

Недавно начал активно использовать Callback на мобильный и столкнулся с проблемой: не всегда успеваю поднять трубку, вызов прекращается

Оказывается в модуле Callback жестко задано время на вызов 15 секунд. Если бы это был внутренний номер все было бы отлично, а при звонке через шлюз с SIM картами на мобильный идет задержка около 10 секунд пока вызов доходит до абонента

Исправляется все очень просто. Callback реализуется вызовом скрипта /var/lib/asterisk/bin/callback в котором время вызова задано параметром $timeout = “15000”; Меняем его например на $timeout = “30000”; и жалобы прекращаются 🙂

Asterisk documentation in CLI

Если при попытке вызвать справку по команде получаем

01
asterisk-PC*CLI> core show application DISA
02
 
03
-= Info about application 'DISA' =-
04
 
05
[Synopsis]
06
Not available
07
 
08
[Description]
09
Not available
10
 
11
[Syntax]
12
Not available
13
 
14
[Arguments]
15
Not available
16
 
17
[See Also]
18
Not available
19

Для исправления такого результата необходимо сделать ссылку в /var/lib/asterisk на папку /usr/share/asterisk/documentation

1
cd /var/lib/asterisk
2
ln -s /usr/share/asterisk/documentation

Затем необходимо перезагрузить asterisk

1
asterisk-PC*CLI>core restart now

Asterisk: борьба с Sending fake auth rejection for device 5050;tag=0aad9031

в этих сообщениях asterisk пишет свой внешний IP адрес. Поэтому банить его нет смысла.

здесь предложили банить на основе анализа содержимого пакета с помощью iptables

здесь описан вариант с исправлением модуля asterisk чтобы в логах появилась информация с IP адресом взломщика

При попытке взлома могут появляться вот такие сообщения в full:

chan_sip.c: Sending fake auth rejection for device 5550000<sip:5550000@[external_ip]>;tag=71b060d8″.

Сейчас не видно с какого IP адреса идет атака, необходимо пересобрать астериск со следующими параметрами: Открываем исходники астериска файл /../asterisk-/channels/chan_sip.c ищем строки:

1
ast_log(LOG_NOTICE, "Sending fake auth rejection for device %s\n", get_header(req, "From"));

В окне поиска вводим: Sending fake auth rejection for device

Меняем строку:

1
ast_log(LOG_NOTICE, "Sending fake auth rejection for device %s\n", get_header(req, "From"));

на:

1
ast_log(LOG_NOTICE, "Sending fake auth rejection for device %s [IP: %s]\n", get_header(req, "From"), ast_sockaddr_stringify(addr));

после этого должен отображаться Ip адрес атакующего.

Sending fake auth rejection for device 3050<sip:3050@[external_ip]>;tag=fc23ea52 [IP: 166.78.25.181:5071]

если подмены и попытки загрузить модуль командой module load chan_sip.so получаем ошибку “Module was not compiled with the same compile-time options as this version of Asterisk” значит надо воспользоваться этим решением:

надо подменить в файле include/asterisk/buildopts.h значение в строчке  

#define AST_BUILDOPT_SUM “ac1f6a56484a8820659555499174e588”

на свой код AST_BUILDOPT_SUM. В Ubuntu узнать его можно /usr/include/asterisk/buildopts.h из пакета asterisk-dev

после этого скомпилированный новый модуль принимается астериском.

и теперь можно использовать fail2ban с правилом 

1
NOTICE.* .*: Sending fake auth rejection for device .*\<sip:.*@.*\>;tag=.* \[IP: <HOST>:.*\]

Все описанное выше было проверено на 1.8.7 и 1.8.13

Не переключается на русский язык в freepbx

Проблема возникает в web-интерфейсе при выборе языка (любого) ничего не происходит. Язык с Английского не меняется ни на какой другой. При этом модуль languages установлен.

Решение

надо исправить файл  локализаций  “/usr/share/locale/locale.alias”

Удаляем строку с кодировкой для russian и добавляем 3 строки вместо нее:

russian ru
ru ru_RU
ru_RU ru_RU.UTF-8

Затем в консоли:
# locale-gen ru_RU
# /etc/init.d/apache2 restart

вот и все 🙂

 

если и этого не хватает (бывает и такое :)) делаем как написано

редактируем файл FREEPBX_ROOT/admin/header.php 

находим строки
function set_language() {
if (extension_loaded(‘gettext’)) {
if (isset($_COOKIE[‘lang’])) {
setlocale(LC_ALL, $_COOKIE[‘lang’]);
putenv(“LANGUAGE=”.$_COOKIE[‘lang’]);
} else {

меняем на:
function set_language() {
if (extension_loaded(‘gettext’)) {
if (isset($_COOKIE[‘lang’])) {
setlocale(LC_ALL, $_COOKIE[‘lang’].”.UTF-8″);
putenv(“LANGUAGE=”.$_COOKIE[‘lang’].”.UTF-8″);
} else {

Asterisk: задаем свои коды возврата DIALSTATUS и HANGUPCAUSE

пришлось использовать два астериска. На первом стоит FreePBX и всем управляет, а на втором GSM модемы Huawey

И если  модемы отваливались (а у них это периодически бывает 🙁 ), то первый астериск получал в ответ Dial failed for some reason with DIALSTATUS = BUSY and HANGUPCAUSE = 21  и дальше не пытался звонить через другой модем

Как оказалось решается все очень просто. На астериске с модемами выход делаем  Congestion или Hangup(20)

где 20 – Cause Codes ( http://www.aa-asterisk.org.uk/index.php/Cause_Codes  http://eth0.org.ru/2009/voip/коды-отбоев-q931-disconnect-cause-codes)

форум

 

быстрое “выключение” Asterisk

Утро 3 января. Хорошо выспался, настроение приподнятое. Решил проверить сервера, а заодно еще у приятеля.
У него uptime показал 86 дней – прекрасно, а вот Asterisk …… ВСЕГО 3 дня и 20 часов!!!!
– Так, что у вас случилось? Почему Asterisk перезапускался?
– Просто у нас совещание было. Вот я его и вырубил, чтобы звонки не шли!!!!!

Вот это ДА! Т.е. когда у них началось “совещание” (читай корпоратив) – просто УБИЛИ всю телефонию!
Ну звери, честное слово! 🙂

Надо сделать нормальное решение.

Я уже писал статью о так называемых праздничных днях и изменении маршрутов звонков в зависимости от календаря/настроек и т.д. Но вот тут-то совсем другое дело: ведь предсказать ТОЧНО когда состоится очередной корпоратив или же настоящее совещание просто невозможно. Что ж, будем делать нормальное решение  – пусть на такой период все звонки приходят, но не на офисные телефоны, а на ту же голосовую почту.

Для этого написал резервный extensions.conf в котором указал маршруты входящих на VoiceMail и не забыл вставить кусок для разблокировки. Назвал его extensions.conf.mute.

Далее в оригинальном диалплане сделал следующее:

exten => 666,1,Answer
exten => 666,n,System(cp /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.back)
exten => 666,n,System(cp /etc/asterisk/extensions.conf.mute /etc/asterisk/extensions.conf)
exten => 666,n,System(asterisk -rx ‘dialplan reload’)
exten => 666,n,Hangup

Т.е. по набору 666 происходит резервирование текущего диалплана, далее его подмена “новогодним” и перечитывание состояния. Аналогичный кусок для разблокировки в файле extensions.conf.mute только наоборот 🙂

Вот вроде бы и все. Правда потом еще попросили сделать голосовое уведомление в каком же режиме работает станция, а потом еще и меню выбора режимов и т.д. и т.п. А я-то думал что легко отделался 🙂

Еще из опыта.

Пару лет назад такая же аналогичная задача стояла для операторского зала. Дело в том, что смена операторов менялась в 10 утра и 18 часов. Для каждой смены операторов необходимо было вести статистику их работы – сколько за смену принято или пропущено звонков, уровень обслуживания и т.д.
Этот показатель есть в статистике очереди, но он НАКОПИТЕЛЬНЫЙ, а необходимо было его сбрасывать в 0 перед началом новой смены. При этом отработавшая смена должна сначала записать свои показатели.

По идее – просто. Однако простой queue reload all не дает сброса, если не увидел изменений параметров в файле queue.conf.
Поступили тогда простым методом: был написан скрипт на perl, который парсил queue.conf и создавал “двойника”. Если обнаруживал “хитрую” строку-флаг – отбрасывал ее, если нет – добавлял. Т.е. получали на выходе постоянно изменяемый новый файл конфигурации очередей, что приводило к сбросу статистики.

Правда обнаружили небольшую странность: у нас в agents.conf установлен парамтер acceptdtmf=#
который позволяет отвечать на вызов нажатием клавиши на телефоне, а не автоматически. Так вот. После таких перезагрузок получалась ситуация с точность наоборот – будто срабатывал ТРИГГЕР – то отвечать по клавише, то автоматически. Решили это просто – не один раз давали queue reload all, а сразу два.

Ну вот собственно и все.
Всех с наступившим Новым Годом. Удачи всем и хорошего настроения.

оригинал 

настройка шлюза Cisco SPA8800 для Asterisk

Cтатья рассказывает о том, как настроить шлюз Cisco SPA8800 в среде Asterisk. Она включает описание SPA8800, sip.conf Asterisk и Asterisk extensions.conf файлов. Также содержит раздел, описывающий устранение неполадок с примерами трейсов регистрации и звонков.

 На английском языке.

Тип файла: PDF
Размер файла: 2 Мбайт

Загрузить решение