Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Asterisk - the Open Source PBX (Private Branch Exchange) - открытая коммуникационная платформа, которая используется для развертывания программных АТС, систем голосовой связи, VoIP-шлюзов, организации IVR-систем (голосовое меню), голосовой почты, телефонных конференций и call-центров.

Установка

Установка Asterisk PBX (Private Branch Exchange)

FreeBSD 

Code Block
languagebash
cd /usr/ports/net/asterisk16/  &&  make && make install

Ubuntu, Debian

Code Block
languagebash
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}' / IPnot_allow_ipВаш IP адрес не зарегистрирован 
Звонок осуществляется с неразрешенного IP адреса. 
Данная ошибка возникает только если у клиента прописан IP адрес в сервисе телефонии
Incoming onlyincoming_onlyВы можете принимать только входящие звонки 
В профайле абонента разрешены только входящие звонки
Not allow answernot_allow_answerВходящие звонки недоступны 
Не разрешены входящие звонки 
Указывается в профайле абонента
Not allow callsnot_allow_callИсходящие звонки недоступны 
Не разрешенный исходящие звонки 
Указывается в профайле абонента
Service Disableservice_disabledУслуга заблокирована 
Услуга телефония заблокирована
Account Disableuser_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 calltoo_small_depositНедостаточно средств для совершения звонка на это направление
Too small deposit please recharge balacedeposit_alertНа вашем счету заканчиваются средства. Пожалуйста пополните баланс 
Данное предупреждение проигрывается абоненту если в тарифном плане установлено значение предупреждения о балансе и депозит ниже этого значения. После проигрывания сообщения абонент может дальше осуществлять звонок

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

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

Code Block
languagebash
titleasterisk/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


Code Block
languagebash
titleasterisk/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 

Code Block
languagebash
titleasterisk/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';Файл регистрации пользователей. 
Обязательно сделайте линк в Asterisk на него 
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

Code Block
languagebash
www   ALL = NOPASSWD: /usr/sbin/asterisk

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

Code Block
languagebash
asterisk  -gvvv


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

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

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

Code Block
languagebash
adduser abills_admin
# задаем пароль для пользвателя abills_admin
passwd abills_admin
touch /etc/asterisk/abills_sip.conf
chown  abills_admin /etc/asterisk/abills_sip.conf
# добавляем пользователя в нужные нам группы
usermod -G asterisk,apache abills_admin
usermod -G abills_admin,apache asterisk
# директория для хранения файлов оповещения
mkdir -p /usr/abills/Abills/templates/ring
chown asterisk:apache /usr/abills/Abills/templates/ring
chmod g+w /usr/abills/Abills/templates/ring

/etc/sudoers

Code Block
languagebash
abills_admin   ALL = NOPASSWD: /usr/sbin/asterisk

/etc/group

Code Block
languagebash
asterisk:x:1008:abills_admin

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

Code Block
languagebash
cd /usr/abills/misc/
./certs_create.sh ssh abills_admin -UPLOAD -HOST nas_host

config.pl

Code Block
languagebash
$conf{VOIP_ASTERISK_RESTART}='HOST=nas_host; USER=abills_admin; /usr/bin/scp -i /usr/abills/Certs/id_rsa.${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_rsa.${USER} -o StrictHostKeyChecking=no ${USER}@${HOST}  "/usr/bin/sudo   /usr/sbin/asterisk -rx \"sip reload\""';  

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