Posts Tagged ‘ asterisk

Отладка Asterisk

просматривать красивый дамп по SIP протоколу:

tcpdump -pvvvvvv -i <inface> -s0  udp port 5060

Iskratel vs Asterisk

Состыковка Астериска с ИскраТел проходит довольно занятно.
Провайдер телефонной связи может отдавать телефонные звонки по SIP, но сервер сигнализации и голосовые сервера находятся в разных местах.
По умолчанию Астер считает, что источник RTP находится на одном хосте с Сервером сигнализации, чтоб сказать ему о поиске голоса на тех хостах которые приходят в INVITE, а также в SDP, в настройках sip.conf необходимо добавить такие строки

canreinvite=yes
dtmfmode=info

When SIP initiates the call, the INVITE message contains the information on where to send the media streams. Asterisk uses itself as the end-points of media streams when setting up the call. Once the call has been accepted, Asterisk sends another (re)INVITE message to the clients with the information necessary to have the two clients send the media streams directly to each other.

А также опцией permit разрешить посылать голос на хосты отличные от сигнального.
В итоге лог должен содержать что-то типа такого:
Read more

Blacklist в Asterisk

Допустим нужно, чтоб определенный список людей попадал сразу в отдел продаж минуя IVR.

Реализация такой схемы:

[incoming]
exten => s,1,LookupBlacklist(j) ;проверка на наличие номера в базе, j - переход на приоритет n+101
exten => s,2,Goto(ivr,s,1)
exten => s,102,Dial(SIP/1234,60,tT)
exten => s,103,Hangup

Добавление номера в базу данных происходит таким образом:

asterisk -rx "database put blacklist 0442223344 1"

Если номеров много, можно реализовать скриптом.

В более новых версиях Asterisk (>1.4) нужно использовать функцию Blacklist()

pbx*CLI> core show function BLACKLIST

Пример диалплана:

exten=> s,1,Answer()
exten=> s,n,GotoIf($[${BLACKLIST()}=1]?blacklist)
exten=> s,n,GoTo(incoming,s,1)
exten=> s,n(blacklist),Hangup()

BLACKLIST() проверяет в базе данных AstDB в семействе blacklist ключ, равный Caller*ID, со значением 1. Если ключ есть и значение равно единице, то BLACKLIST() возвращает 1.
Добавление номера в черный список:

pbx*CLI> database put blacklist 0441112233 1

Новый синтаксис в Asterisk 1.6

Буду тут оставлять заметки о том как меняется синтаксис между Asterisk 1.2 и Asterisk 1.6

1. Вместо “трубы” теперь в диалплане используется запятая, например

1.2

include => kiev|8:30-18:30|mon-fri|*|*

1.6

include => kiev,8:30-18:30,mon-fri,*,*

2. В ivr сменилось использование переменных DigitTimeout, ResponseTimeout, например:
1.2

exten => s,1,DigitTimeout,5 ; Set Digit Timeout to 5 seconds
exten => s,2,ResponseTimeout,10 ; Set Response Timeout to 10 seconds

1.6

exten => s,1,Set(TIMEOUT(digit)=5) ; Set Digit Timeout to 5 seconds
exten => s,2,Set(TIMEOUT(response)=10) ;Set Response Timeout to 10 seconds

Залипание порта в Asterisk

упал несколько раз Астериск 1.6.1.14.

Перед смертью в логи было написано пару милионов раз:

WARNING[21761] asterisk.c: Accept returned -1: Too many open files

а система утверждает, что Астер не врет

lsof | grep asterisk | wc -l
1129

Read more

Блокировка звонков в не рабочее время

Нужно заблокировать звонки в не рабочее время из офиса  при помощи Asterisk

есть 2 варианта решения:

Read more

Е1 в Asterisk

По Украинской национальной версии в области телефонии поддключение по Е1 производится по сигнализации EuroISDN

в настройках chan_dahdi.conf Астериска нужно выставлять такие параметры:

switchtype = euroisdn
signalling = pri_cpe
prilocaldialplan=national

Что позволит принимать телефонные номера как national в стандарте EuroISDN но появляется небольшая проблема – требуется еще и от себя устанавливать аналогичное соединение, пролистав example который идет в комплекте к Астеру нашел такие строки:

; pridialplan may be also set at dialtime, by prefixing the dialled number with
; one of the following letters:
; U – Unknown
; I – International
; N – National
; L – Local (Net Specific)
; S – Subscriber
; V – Abbreviated
; R – Reserved (should probably never be used but is included for completeness)
;
; Additionally, you may also set the following NPI bits (also by prefixing the
; dialled string with one of the following letters):
; u – Unknown
; e – E.163/E.164 (ISDN/telephony)
; x – X.121 (Data)
; f – F.69 (Telex)
; n – National
; p – Private
; r – Reserved (should probably never be used but is included for completeness)

Чтоб соответствовать всему вышеперечисленому нужно в dialplan писать следующее:

exten =&gt; 2XXXXXX,1,Dial(${TRUNK}/Se${EXTEN})

Переменная PRI_CAUSE (ISDN Cause code)

Переменная PRI_CAUSE используется для передачи информации по линиям связи ISDN PRI о причине разрыва связи до ее фактического разрыва.

Переменная появилась, начиная с версии 1.0 сервера Asterisk.

Для каналов: Zap PRI, chan_capi и chan_misdn BRI есть возможность установки значения переменной PRI_CAUSE до выполнения команды Hangup(). Это приведет к тому, что в отправляемом сообщении PRI DISCONNECT будет установлен параметр CAUSE, который может быть использован телефонным коммутатором.
Read more

Asterisk 1.4 [1.6] on Gentoo

захотелось поставить себе версию 1.4 … а еБилдах доступна только 1.2.27 🙁

Read more