====== FreePBX ======
* [[http://val.bmstu.ru/unix/voip/Rukovodstvo_Administratora_FreePBX_na_russkom_yazyke.pdf|FreePBX 13 руководство]]
===== Установка =====
* [[https://downloads.freepbxdistro.org/ISO/SNG7-PBX16-64bit-2302-1.iso]] Новый образ FreePBX
==== Подготовка VM ====
* Память от 2Gb
* https://www.freepbx.org/downloads/
* https://www.asterisk.org/downloads/
==== Настройка сети ====
* При наличии вебинаристов использовать сеть 172.16.1.0/24
* Настройка сети в Linux [[Настройка сети в Linux#Файлы конфигурации CentOS/SL/RHEL]] или
# ifconfig eth0 inet 172.16.1.100+X/24
# route add default gw 172.16.1.254
# echo "nameserver 172.16.1.254" > /etc/resolv.conf
* При проблемах со звуком, помогает рестарт asterisk
[root@freepbx ~]# ps ax | grep ast
[root@freepbx ~]# kill NNNN
[root@freepbx ~]# service asterisk start
Работает вариант:
freepbx*CLI> core restart now
==== Процесс начальной конфигурации ====
* В визарде все ответы по умолчанию (Skip или Yes)
* [[https://wiki.freepbx.org/pages/viewpage.action?pageId=37912685#fwconsolecommands(13+)-Unlock|unlock the GUI login of FreePBX to let you into the FreePBX GUI without the username and password]]
* !!! Большая пауза в конфигурационном визарде для загрузки русских семплов (в настоящее время не доступны)
Username: admin
Password: Pa$$w0rd
Admin Email address: userX@isp.un
==== Отключение Firewall ====
* Можно оставить
Connectivity - Firewall - Disable Firewall
* !!! в методических целях - обязательно
# systemctl stop fail2ban
===== Базовая конфигурация =====
Settings - Asterisk SIP Settings
External Address: 172.16.1.100+X
Local Networks: 172.16.0.0 / 16
Local Networks: 10.0.0.0 / 8
===== Управление телефонными номерами и пользователями =====
* [[https://wiki.freepbx.org/display/FPG/Bulk+Handler+User+Guide|Bulk Handler User Guide]]
* !!! Проверить для новых версий FreePBX, может не работать
Application-Extensions
Add Extensions -> PJSIP
User Extension: 402
Display Name: Petr Petrov
Secret: tpassword402
Link to a Default User: Create New User
Username: user2 Use Custom Username
Password For New User: password2
C:\> cd Documents
C:\> notepad extensions.csv
extension,name,secret
401,Ivan Ivanov,tpassword401
403,Sidor Sidorov,tpassword403
C:\> notepad users.csv
username,password,default_extension
user1,password1,401
user3,password3,403
Admin -> Bulk Handler
!!! Не включает в группу All Users, приходится "вручную" для доступа к UCP
===== Звонки в "город" =====
* !!! Могут быть проблемы с голосом, помогает потребуется перезагрузка всей системы (попробовать перезагрузить сервис asterisk)
Connectivity -> Trunks
Add Trunk -> Add...pjsip...
Trunk Name: PSTN
Outbound CallerID: 8495NNNNNNN
Username: 00000X
Secret: spasswordX
SIP Server: voip1.un
Contact User: 8495NNNNNNN
From Domain: voip1.un
From User: 00000X
Connectivity -> Outbound Routes
Route Name: ToPSTN
Trunk Sequence for Matched Routes: PSTN
Dial Patterns (match pattern): 8XXXXXXXXXX
Connectivity -> Inbound Routes
Description: FromPSTN
DID Number: 8495NNNNNNN
Set Destination: Ext 403
===== Звонки в "соседний офис" =====
Connectivity -> Trunks
Add Trunk -> Add...iax2...
Trunk Name: CORP
Outbound CallerID: 013401
iax Settings
Outgoing
Trunk Name: corp_out
PEER Details
host=corp.un
username=corp13
secret=apassword13
type=peer
auth=md5
Incoming
USER Context: corp
USER Details:
secret=apassword
type=user
host=dynamic
auth=md5
Connectivity -> Outbound Routes
Route Name: ToCORP
Trunk Sequence for Matched Routes: CORP
Dial Patterns
prefix: 000
match pattern: XXX
Connectivity -> Inbound Routes
Description: FromCORP
DID Number: _XXX
Set Destination: Ext 401
===== Интерфейс пользователя =====
http://172.16.1.100+X/ucp/
===== Использование файлов конфигурации =====
* [[https://asterisk-pbx.ru/wiki/freepbx/custom_context|Во FreePBX предусмотрено использование пользовательских (custom) файлов]]
* Admin -> Config Edit
# cat /etc/asterisk/extensions_custom.conf
exten => 301,1,Answer()
exten => 301,n,Playback(hello-world)
exten => 301,n,SayDigits(X)
exten => 301,n,Hangup()
[from101] ; no need, use DAHDI Channel
exten => s,1,Dial(DAHDI/1,20)
exten => s,n,Hangup()