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

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 Мбайт

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

интересные возможности Asterisk

  • интеграция с GoogleTalk – Calling using Google (Google Voice and GTalk)
  • интеграция с LDAP (LDAP Realtime Driver) Asterisk can authenticate users against your LDAP server, Lotus Domino Directory, Apple OpenDirectory, or even Microsoft ActiveDirectory.

sipusers = ldap,”dc=myDomain,dc=myDomainExt”,sip
sippeers = ldap,”dc=myDomain,dc=myDomainExt”,sip
extensions = ldap,”dc=myDomain,dc=myDomainExt”,extensions
sip.conf = ldap,”dc=myDomain,dc=myDomainExt”,config

  •  использовать call файлы для вызова в указанное время (планировщик)

     How to schedule a call

    Call files that have the time of the last modification in the future are ignored by Asterisk. This makes it possible to modify the time of a call file to the wanted time, move to the outgoing directory, and Asterisk will attempt to create the call at that time.

  • в Configuration Parser

задание шаблона

[sets](!) type=friend context=phones host=dynamic secret=password allow=ulaw allow=alaw allow=speex
и его использование
[111](sets)
secret=password

  • комментарии
Comments

All lines that starts with semi-colon “;” is treated as comments and is not parsed.
The “;” is a marker for a multi-line comment. Everything after that marker will be treated as a comment until the end-marker “;” is found. Parsing begins directly after the end-marker.

;This is a comment
label = value
;-- This is
a comment -;
;- Comment --; exten=> 1000,1,dial(SIP/lisa)
  •  добавление в существующую секцию
[section]
label = value
 
[section](+)
label2 = value2

In this case, the plus sign indicates that the second section (with the same name) is an addition to the first section. The second section can be in another file (by using the #include statement). If the section name referred to before the plus is missing, the configuration will fail to load.

  • использование нескольких шаблонов

Using templates (or other configuration sections)

[section](name[,name])
label = value
The name within the parenthesis refers to other sections, either templates or standard sections. The referred sections are included before the configuration engine parses the local settings within the section as though their entire contents (and anything they were previously based upon) were included in the new section. For example consider the following:
[foo]
disallow=all
allow=ulaw
allow=alaw
 
[bar]
allow=gsm
allow=g729
permit=192.168.2.1
 
[baz](foo,bar)
type=friend
permit=192.168.3.1
context=incoming host=bnm
The [baz] section will be processed as though it had been written in the following way:
[baz]
disallow=all
allow=ulaw
allow=alaw
allow=gsm
allow=g729
permit=192.168.2.1
type=friend
permit=192.168.3.1
context=incoming host=bnm
It should also be noted that there are no guaranteed overriding semantics, meaning that if you define something in one template, you should not expect to be able to override it by defining it again in another template.
  • упращенный синтаксис dialplan

начиная с версии 1.6.2

Среди других улучшений – новый синтаксис, призванный упростить процесс написания скриптов диалплана. Расширение позволяет программистам пропускать добавочный номер или идентификатор паттерна в многострочном скрипте, используя ключевое слово “same”, как в следующем примере:

exten => _22XX.,1,NoOp(Incoming Call)
same => n,Answer()
same => n,Wait(1)
same => n,Playback(tt-weasels)
same => n,Hangup()

установка asterisk fax digium

качаем с http://www.digium.com/en/docs/FAX/faa-download.php нужный модуль.

Определить тип модуля может утилита benchfax . Берем ее с http://downloads.digium.com/pub/telephony/fax/benchfax/

Копируем res_fax_digium.conf в /etc/asterisk и res_fax_digium.so в /usr/lib/asterisk/modules. Пути могут отличаться, обращаем на это внимание.

перегружаем asterisk или загружаем модуль

localhost*CLI> module load res_fax_digium.so

увидим строчку

== Found total of 0 FAX for Asterisk licenses

еще надо зарегистрировать этот модуль.

Качаем утилиту register с http://downloads.digium.com/pub/register/

Не забываем сделать chmod +x register. И запускам ее. Из меню выбираем 1 – Digium Products, потом 9 – Free Fax for Asterisk

если все прошло хорошо будет сообщение: Wrote license to /var/lib/asterisk/licenses/FFA-************.lic

перезапускаем astersik или перегружаем модуль res_fax_digium.so. Должно появиться сообщение

 Found total of 1 FAX for Asterisk licenses

Все можно проверять. Теперь при звонке на 666 (номер по умолчанию во FreePBX) должен пищать факс