Asterisk

Asterisk - the Open Source PBX!
Связь с биллингом осуществляется при помощи AGI интерфейса (/usr/abills/Abills/modules/Voip/agi_rad.pl).

Установка

Установка Asterisk PBX

FreeBSD

# cd /usr/ports/net/asterisk16/  &&  make && make install

Ubuntu,Debian

# sudo apt-get install asterisk

Установить Perl AGI интерфейс.

AGI интерфейс авторизации

Связь с биллингом осуществляется при помощи AGI интерфейса (/usr/abills/Abills/modules/Voip/agi_rad.pl).

Авторизация абонентов происходит следующим образом
При звонке AGI (agi_rad.pl) интерфейс отправляет запрос авторизации на RADIUS сервер. RADIUS пробует авторизировать абонента. При успешной авторизации отправляет следующие данные звонка:

  • максимальное время звонка по данному направлению
  • дополнительные параметры авторизации (префиксы звонка номера если надо)
  • Фильтры (которые AGI может преобразовывать в голосовые сообщения)

После положительного ответа от RADIUS AGI открывает сессию звонкаи отправляет аккаунтинг данные (Start Session) на RADIUS сервер.
По завершению звонка AGI отправляет (Stop Session) на RADIUS сервер.

Если RADIUS серверу не удалось авторизовать абонента он отправляет для AGI отрицательный ответ и следующие параметры

  • сообщение с описанием ошибки
  • фильтр с параметром ошибки (которые AGI может преобразовывать в голосовые сообщения)


После успешной или неуспещной авторизации система записывает в журнал ошибок параметры сессии и причины ошибки (если она есть). Данные ошибки можно просмотреть в журнале / Отчёт / Voip / Ошибки / или в сервисе абонента меню ошибки (Ошибки)

IVR сообщения и сообщения об ошибках

Таблица ошибок подключения

Текстовые шибки подключения Файлы голосовых сообщений IVR ответы и расшифровка ошибок
Answer Number Not Exist '$RAD→{USER_NAME}' answer_not_exist Номер не существует.
Номер на который звонят не существует
Возникает только если звонят на внутренние номера
Caller Number Not Exist '$RAD→{USER_NAME}' call_not_exist Ваш номер не зарегистрирован
Номер звонящего не зарегистрирован в базе.
Возникает елси номер абонента еще не внесён в базу
Not allow IP '$RAD→{FRAMED_IP_ADDRESS}' / IP not_allow_ip Ваш IP адрес не зарегистрирован
Звонок осуществляется с неразрешенного IP адреса.
Данная ошибка возникает только если у клиента прописан IP адрес в сервисе телефонии
Incoming only incoming_only Вы можете принимать только входящие звонки
В профайле абонента разрешены только входящие звонки
Not allow answer not_allow_answer Входящие звонки недоступны
Не разрешены входящие звонки
Указывается в профайле абонента
Not allow calls not_allow_call Исходящие звонки недоступны
Не разрешенный исходящие звонки
Указывается в профайле абонента
Service Disable service_disabled Услуга заблокирована
Услуга телефония заблокирована
Account Disable user_disable Ваш счёт отключён
Счет абонента отключён
Negativ deposit 'DEPOSIT'. Rejected! neg_deposit На Вашем счету отрицательный баланс. Пожалуйста пополните счет
У абонента негативный депозит и у него нет возможности пользоваться счетом до пополнения баланса
No route $RAD→{CALLED_STATION_ID} no_route Не правильный номер. Прорвете правильность набора
Нет такого направления звонка.
Направления указываются в / Система / Voip / Направления, а также в интервалах тарифного плана
Route disabled $RAD→{CALLED_STATION_ID} route_disable Звонки на данное направление временно отключены.
Данное направление временно отключено.
Отключение направления производится в меню / Система / Voip / Направления
No price for route prefix 'PREFIX' number '$RAD→{CALLED_STATION_ID}' no_price_for_route Направление не доступно.
Для данного направления еще не задана цена.
Цена задаётся в меню Система / Voip / Тарифные планы (Интервалы)
Too small deposit for call too_small_deposit Недостаточно средств для совершения звонка на это направление.
Too small deposit please recharge balace deposit_alert На вашем сету заканчиваются средства. Пожалуйста пополните баланс
Данное предупреждение проигрывается абоненту если в тарифном плане установлено значение предупреждения о балансе и депозит ниже этого значения. После проигрывания сообщения абонент переходи может дальше осуществлять звонок

После проигрывания сообщения об ошибки система завершает звонок абонента без набора выбранного номера (исключением является ошибка deposit_alert). Файлы голосовых сообщений нужно помещать в каталог Asteriska для голосовых сообщений и указівать его в переменной $conf{'VOIP_ASTERISK_IVR_DIR'};

Конфигурация

asterisk/extensions.conf

[general]
static=yes
writeprotect=no

; outgoing calls
[default]
exten => 600,1,Playback(demo-echotest)  ; Let them know what's going on
exten => 600,2,Echo                     ; Do the echo test
exten => 600,3,Playback(demo-echodone)  ; Let them know it's over
exten => _X.,1,AGI(/usr/abills/Abills/modules/Voip/agi_rad.pl)
exten => _X.,3,Wait,2
exten => _X.,4,Hangup()
; Add other extensions here

; incoming calls
[answer]
exten => s,1,Set(answer=1)
exten => _X.,1,AGI(/usr/abills/Abills/modules/Voip/agi_rad.pl)
exten => _X.,2,Hangup()
; Add other extensions here

asterisk/sip.conf

[general]
context=default
port=5060
bindaddr=0.0.0.0
srvlookup=yes
disallow=all
allow=ulaw
allow=alaw
allow=g729

[sip_proxy]
; For incoming calls only.
type=peer
host=10.10.10.1                 ; Your SIP proxy IP address
canreinvite=no

; файл с аккаунтами
#include "abills_sip.conf";

; Внешний провайдер услуг 
[PSTN]
type=peer
host=11.11.11.1
context=answer
allow=alaw,ulaw
trustrpid=yes
canreinvite=no
insecure=invite,port
qualify=yes
dtmf=rfc2833
dtmfmode=rfc2833
cos=0

Управление сервером. Если Asterisk находиться на удалённом сервер нужно указать разрешённый IP permit=xx.xx.xx.xx/255.255.255.0

asterisk/manager.conf

[general]
displaysystemname = yes
enabled = yes
webenabled = no
port = 5039
bindaddr = 127.0.0.1
displayconnects = yes
timestampevents = yes

[abills_admin]
secret=Password
deny=0.0.0.0/0.0.0.0
permit=127.0.0.0/255.255.255.0
read = system,call,log,verbose,command,agent,user,config
write = system,call,log,verbose,command,agent,user,config

ABillS

abills/libexec/config.pl

$AUTH{asterisk} = 'Voip_aaa'; Для сервера с типом asterisk применять правила авторизации VOIP
$ACCT{asterisk} = 'Voip_aaa'; Для сервера с типом asterisk применять правила аккаунтинга VOIP
$conf{VOIP_RADIUS_SERVER_HOST}='radius.server'; IP RADIUS сервера
$conf{VOIP_RADIUS_SERVER_SECRET}='radius.secret'; пароль для радиус сервера
$conf{VOIP_NAS_IP_ADDRESS}='192.168.101.11'; IP Asterisk сервера. Может быть любой. Этот параметр отсылается RADIUS как Nas-IP-Address.
$conf{VOIP_NAS_ID}=''; Индентификатор Asterisk сервера для радиуса. Отсылается в параметре NAS-Identifier. Если не знаете для чего онЭ не заполняйте.
$conf{VOIP_NAS_PORT}='0'; Порт клиента отсылается RADIUS в параметре NAS-Port
$conf{VOIP_AGI_PROTOCOL}='SIP'; Протокол соединения SIP или H323
$conf{VOIP_DEFAULTDIALTIMEOUT}=120; Таймаут при авторизации
$conf{VOIP_MAX_SESSION_TIME}=10800; Максимальная длина активной сессии
$conf{VOIP_ASTERISK_USERS}='/usr/abills/Abills/templates/users.conf'; Файл регистрации пользователей.
обязательно сделайте линк в астериске на него
ln -s /usr/abills/Abills/templates/users.conf /usr/local/etc/asterisk/abills_sip.conf (для linux,- адрес /etc/asterisk/)
$conf{VOIP_ASTERISK_RESTART}='/usr/bin/sudo /usr/sbin/asterisk -rx «sip reload»'; Команда перезапуска asterisk
$conf{VOIP_ONEMONTH_INCOMMING_ALLOW}=1; Предоставление бесплатного месяца работы
$conf{'VOIP_ASTERISK_IVR_DIR'}='/usr/local/share/asterisk/sounds/'; Каталог с IVR файлами.
К данному каталогу добавляются подкаталоги en и ru
Если название фильтра совпадает с файлом в каталогах система проигрывает с начало с подкаталога ru потом en. Если запись только в одном каталоге она проигрывается только один раз
$conf{'VOIP_AGI_DIAL_DELIMITER'}=','; Разделитель для звонка.
По умолчанию вертикальная черта.
SIP/73333332\
120\S(800))

для выполнения команд с правами супер пользователя (root) sudoers

www   ALL = NOPASSWD: /usr/sbin/asterisk

Режиме отладки лучше запускать астериск со следующими параметрами

# asterisk  -gvvv

Asterisk на удалённом сервере

Если у вас Asterisk на одном сервере, а Abills на другом.
Скопировать билинг на удалённый сервер и подключить его к базе главного сервера

команды на удалённом сервере

# adduser abills_admin
# touch /etc/asterisk/abills_sip.conf
# chown  abills_admin /etc/asterisk/abills_sip.conf

/etc/sudoers

abills_admin   ALL = NOPASSWD: /usr/sbin/asterisk

/etc/group

asterisk:x:1008:abills_admin

команды на сервере билинга

# cd /usr/abills/misc/
# ./certs_create.sh ssh abills_admin -UPLOAD nas_host

config.pl

$conf{VOIP_ASTERISK_RESTART}='HOST=nas_host; USER=abills_admin; /usr/bin/scp -i /usr/abills/Certs/id_dsa.${USER} -o StrictHostKeyChecking=no -q  /usr/abills/Abills/templates/users.conf ${USER}@${HOST}:/etc/asterisk/abills_sip.conf; /usr/bin/ssh -i /usr/abills/Certs/id_dsa.${USER} -o StrictHostKeyChecking=no ${USER}@${HOST}  "/usr/bin/sudo   /usr/sbin/asterisk -rx \"sip reload\""';  

Данная команда вызывается при изменении данных абонента с веб интерфейса биллинга

Дополнительно