Установка
Установка Asterisk PBX (Private Branch Exchange)
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'};
Конфигурация
[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
[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
[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
www ALL = NOPASSWD: /usr/sbin/asterisk
Режиме отладки лучше запускать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
команды на сервере билkинга
# 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_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\""';
Данная команда вызывается при изменении данных абонента с веб интерфейса биллинга.