Quantcast
Channel: IP АТС Asterisk
Viewing all 1041 articles
Browse latest View live

Шаблоны для набора цифр(patterns) в Asterisk

$
0
0

Шаблоны для набора цифр(patterns) в Asterisk

Екстеншены могут сопоставляться шаблону, вместо однозначно заданных цифр. Шаблон должен начинаться с символа подчеркивания ( _ ) и может использовать любой из следующих символов:

  • X– любая цифра от 0-9
  • Z– любая цифра от 1-9
  • N– любая цифра от 2-9
  • [14-6]– цифры 1,4, 5 и 6
  • .– (точка) любые возможные символы.

Как настроить Zoiper на Android

Временный сброс пароля FreePBX

$
0
0

Временный сброс пароля FreePBX

Эта возможность работает, если опция Asterisk Advanced Settings - Enable Remote Unlocking (REMOTEUNLOCK) = true.
В версии FreePBX 2.11 - true по умолчанию.
Начиная с версии FreePBX 12 - по умолчанию - false

При помощи команды amportal a u xxxxxxxxxxxxxxxx-можно войти во FreePBX без ввода имени пользователя и пароля.
xxxxxxxxxxxxxxxx-требуется заменить на PHP ID сессии. Выполните следующие действия:

Откройте веб интерфейс FreePBX в вашем браузере - http://ip_address/adminи нажмите ctrl-A:

freepbx php session id

Слева вы увидите уникальный id php сессии. Скопируйте его и вставьте вместо xxxxxxxxxxxxxxxx-:

amportal a u cl1q3tp4tsaccit6pbl2vispp0

[root@localhost ~]# amportal a u cl1q3tp4tsaccit6pbl2vispp0

Please wait...

session unlocked!

После ввода этой команды, вы сможете зайти в веб интерфейс без ввода логина/пароля.

Разблокировка действует только для текущей php сессии и после обновления страницы, id сменится, и снова потребуется ввести пароль.

freepbx php session id

FreePBX

Asterisk настройка TLS SRTP для PJSIP

$
0
0

Asterisk настройка TLS SRTP для PJSIP

asterisk-pjsip-tls-srtp Настроим защищенное подключение SIPклиентов к Asterisk 14 за NAT, используя драйвер PJSIP, транспорт TLS и шифрование голоса SRTP.

См. также SIP TLS SRTP Asterisk

На входе у нас Asterisk 14 скомпилированный с поддержкой srtp:

 yum install  libsrtp libsrtp-devel
 ./configure --libdir=/usr/lib64 --with-crypto --with-ssl=ssl --with-srtp

Transport Layer Security (TLS) обеспечивает шифрование сигнализации SIP. Это способ защитить информацию о вызовах от man in the middle. SRTP обеспечивает шифрование голоса. Для настройки TLS между Asterisk и SIPклиентом требуется:

  1. Создать ключи шифрования.
  2. Настроить транспорт драйвера PJSIP для использования TLS.
  3. Настроить PJSIP Endpoint и SIPклиент для использования TLS и SRTP.

Убедитесь что модуль res_srtp.soзагружен.

*CLI> module show like srtp
Module                         Description                              Use Count  Status      Support Level
res_srtp.so                    Secure RTP (SRTP)                        0          Running              core
1 modules loaded

Если нет, попытайтесь загрузить его:

*CLI> module load res_srtp.so
Loaded res_srtp.so
 Loaded res_srtp.so => (Secure RTP (SRTP))

Asterisk TLS keys

Сперва создадим само-подписанные сертификаты и ключи шифрования.

Создать директорию для ключей:

  mkdir /etc/asterisk/keys

С исходниками Asterisk поставляется скрипт для создания ключей:

  cd  /usr/src/asterisk-14*/contrib/scripts/

в моем случае, это Asterisk 14, но пойдет и 13, и м.б. 12. Выполните скрипт с тремя ключами:

./ast_tls_cert -C pbx.asterisk-pbx.ru -O "asterisk-pbx.ru" -d /etc/asterisk/keys
  • «-C» - укажите домен или ip адрес
  • «-O» - укажите имя
  • «-d» - директория для ключей

ast_tls_cert

ast_tls_cert

No config file specified, creating '/etc/asterisk/keys/tmp.cfg'
You can use this config file to create additional certs without
re-entering the information for the fields in the certificate
Creating CA key /etc/asterisk/keys/ca.key
Generating RSA private key, 4096 bit long modulus
..++
........................................................................................................................++
e is 65537 (0x10001)
Enter pass phrase for /etc/asterisk/keys/ca.key:
Verifying - Enter pass phrase for /etc/asterisk/keys/ca.key:
Creating CA certificate /etc/asterisk/keys/ca.crt
Enter pass phrase for /etc/asterisk/keys/ca.key:
Creating certificate /etc/asterisk/keys/asterisk.key
Generating RSA private key, 1024 bit long modulus
.++++++
.........++++++
e is 65537 (0x10001)
Creating signing request /etc/asterisk/keys/asterisk.csr
Creating certificate /etc/asterisk/keys/asterisk.crt
Signature ok
subject=/CN=pbx.asterisk-pbx.ru/O=asterisk-pbx.ru
Getting CA Private Key
Enter pass phrase for /etc/asterisk/keys/ca.key:
Combining key and crt into /etc/asterisk/keys/asterisk.pem

В ходе выполнения этой операции, вам будет предложено ввести секретную фразу и повторить ее два раза. Сохраните пароль, в дальнейшем он понадобится для генерации пользовательских сертификатов. В результате будут созданы следующие файлы и помещены в директорию заданную ключом 'd' :

  • asterisk.crt
  • asterisk.csr
  • asterisk.key
  • asterisk.pem
  • ca.cfg
  • ca.crt
  • ca.key
  • tmp.cfg

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

  ./ast_tls_cert -m client -c /etc/asterisk/keys/ca.crt -k /etc/asterisk/keys/ca.key -C pbx.asterisk-pbx.ru -O "asterisk-pbx.ru" -d /etc/asterisk/keys -o zvezdo4kin
  • «-m client» - получить клиентский сертификат.
  • «-c /etc/asterisk/keys/ca.crt» - указать наш же 'Certificate Authority'.
  • «-k /etc/asterisk/keys/ca.key» - указать ключ для 'Certificate Authority'.
  • «-C» - хост или ip адрес, те же, что и для сервера
  • «-O» - имя компании, то же что и для сервера.
  • «-d» - директория с ключами
  • «-o» - имя для клиентского сертификата.

В итоге получим такие файлы:

  • zvezdo4kin.crt
  • zvezdo4kin.csr
  • zvezdo4kin.key
  • zvezdo4kin.pem

Теперь с сертификатами и ключами покончено и можно переходить к настройке Asterisk.

Asterisk TLS SRTP PJSIP

Создадим транспорт pjsip и пользовательcкий аккаунт.

/etc/asterisk/pjsip.conf

transport pjsip

[transport-tls]
type=transport
protocol=tls
bind=0.0.0.0:5066
cert_file=/etc/asterisk/keys/asterisk.crt
priv_key_file=/etc/asterisk/keys/asterisk.key
domain=pbx.asterisk-pbx.ru
external_media_address=123.123.123.111
external_signaling_address=123.123.123.111
local_net=192.168.0.0/16
method=tlsv1
allow_reload=true

Специфические настройки транспорта для TLS налицо:

  • protocol=tls
  • cert_file=/etc/asterisk/keys/asterisk.crt
  • priv_key_file=/etc/asterisk/keys/asterisk.key
  • method=tlsv1

Сервер находится за NAT, поэтому укажем внешний медиа и сигнальный адрес:

  • external_media_address=123.123.123.111
  • external_signaling_address=123.123.123.111

Будем работать по порту 5066

  • bind=0.0.0.0:5066

На шлюзе/роутере пробросьте диапазон портов RTP (tcp и udp) и сигнальный порт 5066 (tcp и udp)

pjsip endpoint, aor, auth

[zvezdo4kin]
type=aor
max_contacts=1
remove_existing=yes

[zvezdo4kin]
type=auth
auth_type=userpass
username=zvezdo4kin
password=mypassword

[zvezdo4kin]
type=endpoint
transport=transport-tls
direct_media=no
aors=zvezdo4kin
auth=zvezdo4kin
context=from-zvezdo4kin
dtls_cert_file=/etc/asterisk/keys/zvezdo4kin.crt
dtls_private_key=/etc/asterisk/keys/zvezdo4kin.key
disallow=all
allow=opus
allow=alaw
allow=ulaw
force_rport=yes
ice_support=yes
dtmf_mode=rfc4733
media_encryption=sdes

В параметрах ENDPOINT пользовательского аккаунта зададим метод шифрования голоса:

  • media_encryption=sdes

Применим настройки рестартом asterisk (иначе транспорт не поднять) и убедимся, что он взлетел:

*CLI> pjsip show transport transport-tls

Transport:  <TransportId........>  <Type>  <cos>  <tos>  <BindAddress....................>
==========================================================================================

Transport:  transport-tls             tls      0      0  0.0.0.0:5066

 ParameterName              : ParameterValue
 ============================================================
 allow_reload               : false
 async_operations           : 1
 bind                       : 0.0.0.0:5066
 ca_list_file               :
 ca_list_path               :
 cert_file                  : /etc/asterisk/keys/asterisk.crt
 cipher                     :
 cos                        : 0
 domain                     : pbx.asterisk-pbx.ru
 external_media_address     : 123.123.123.111
 external_signaling_address : 123.123.123.111
 external_signaling_port    : 0
 local_net                  : 192.168.0.0/255.255.0.0
 method                     : tlsv1
 password                   :
 priv_key_file              : /etc/asterisk/keys/asterisk.key
 protocol                   : tls
 require_client_cert        : No
 tos                        : 0
 verify_client              : No
 verify_server              : No
 websocket_write_timeout    : 100

В дальнейшем изменения в настройках транспорта, можно будет применять командой core reload, т.к. при настройке транспорта, я предусмотрительно указал allow_reload=true, иначе, по умолчанию, только рестартом.

Теперь осталось только подключить SIPклиент.

Asterisk TLS SRTP SIP клиент

Софтфон Zoiper прекрасно работает с SRTP, как в десктопном, так и мобильном варианте на Android. Для iPhone хорошо себя зарекомендовала Bria.

asterisk-pjsip-zoiper-tls-srtp

asterisk-pjsip-zoiper-tls-srtp-advanced

asterisk-pjsip-zoiper-tls-srtp-preference-advanced

zoiper call encrypted srtp tls

Asterisk настройка

SIP TLS SRTP Asterisk

$
0
0

SIP TLS SRTP Asterisk

Настройка защищенного соединения TLS SRTP между двумя серверами Asterisk и для SIPклиентов, с использованием драйвера chan_sip.

см. также Asterisk настройка TLS SRTP для PJSIP

Создание ключей и сертификатов

Создайте директорию для ключей:

  mkdir /etc/asterisk/keys

В директории ../contrib/scripts/ исходных файлов Asterisk находится скрипт ast_tls_certдля генерации ключей:

  cd  /usr/src/asterisk-13*/contrib/scripts/

Сгенерируем сертификаты сервера:

  ./ast_tls_cert -C pbx.asterisk-pbx.ru -O "asterisk-pbx.ru" -d /etc/asterisk/keys
  • -C - domain или IP адрес
  • -O - наименование
  • -d - путь к созданной выше директории для ключей (/etc/asterisk/keys)

ast_tls_cert operation

ast_tls_cert operation

No config file specified, creating '/etc/asterisk/keys/tmp.cfg'
You can use this config file to create additional certs without
re-entering the information for the fields in the certificate
Creating CA key /etc/asterisk/keys/ca.key
Generating RSA private key, 4096 bit long modulus
..++
........................................................................................................................++
e is 65537 (0x10001)
Enter pass phrase for /etc/asterisk/keys/ca.key:
Verifying - Enter pass phrase for /etc/asterisk/keys/ca.key:
Creating CA certificate /etc/asterisk/keys/ca.crt
Enter pass phrase for /etc/asterisk/keys/ca.key:
Creating certificate /etc/asterisk/keys/asterisk.key
Generating RSA private key, 1024 bit long modulus
.++++++
.........++++++
e is 65537 (0x10001)
Creating signing request /etc/asterisk/keys/asterisk.csr
Creating certificate /etc/asterisk/keys/asterisk.crt
Signature ok
subject=/CN=pbx.asterisk-pbx.ru/O=asterisk-pbx.ru
Getting CA Private Key
Enter pass phrase for /etc/asterisk/keys/ca.key:
Combining key and crt into /etc/asterisk/keys/asterisk.pem

В ходе этой операции вам будет предложено задать ключевое слово (pass phrase) Задайте пароль и повторите его ввод еще два раза, при запросах скрипта.

Asterisk SRTP

Asterisk поддерживает TLS «из коробки» дополнительных действий, кроме настройки в секции [general] файла sip.conf, не требуется. Для поддержки SRTP Asterisk должен быть скомпилирован соответствующим образом.
Должны быть установлены зависимости, библиотеки srtp:

 yum install  libsrtp libsrtp-devel

Конфигурация должна быть выполнена с ключами:

   --with-crypto --with-ssl=ssl --with-srtp

Загрузите модуль srtp:

*CLI> module load res_srtp.so
Loaded res_srtp.so
 Loaded res_srtp.so => (Secure RTP (SRTP))
*CLI> module show like srtp
Module                         Description                              Use Count  Status      Support Level
res_srtp.so                    Secure RTP (SRTP)                        0          Running              core
1 modules loaded

В файле modules.conf включите загрузку модуля, если требуется:

 load = res_srtp.so
asterisk1

Сконфигурируем настройки general драйвера chan_sip для использования транспорта TLS.
etc/asterisk/sip.conf

[general]
tcpenable=yes
bindaddr=0.0.0.0
tlsenable=yes
tlsbindaddr=0.0.0.0:5061
tlscertfile=/etc/asterisk/keys/asterisk.pem
tlscafile=/etc/asterisk/keys/ca.crt
tlscipher=ALL
tlsclientmethod=tlsv1
tlsdontverifyserver=yes

В нашем примере для TLS используется порт 5061, этот порт должен отличаться от порта TCP, например:

 asterisk -rx 'sip show settings' | grep -C 2 "UDP Bindaddress"
Global Settings:
----------------
  UDP Bindaddress:        0.0.0.0:6665
  TCP SIP Bindaddress:    0.0.0.0:6666
  TLS SIP Bindaddress:    0.0.0.0:6667

Зарегистрируемся по протоколу TLS на удаленном сервере Asterisk:

[general]
register => tls://SIPTRUNK:PASSWORD@asterisk2:5061

Настроим SIPтранк:

[trunk_to_asterisk2]
type=friend
context=from-astrisk2
host=asterisk2
port=5066
secret=PASSWORD
dtmfmode=rfc2833
disallow=all
allow=alaw
fromdomain=asterisk2
insecure=port,invite
qualify=yes
canreinvite=no
encryption=yes
transport=tls

Настройки транка типовые, кроме опций:

  • encryption=yes
  • transport=tls

Настройки SIPаккаунтов, тоже совершенно обычные, кроме transport=tls и encryption=yes

[mobile](!)
host=dynamic
type=friend
context=from-mobile
qualify=yes
qualifyfreq=60
canreinvite=no
directmedia=nonat
nat=force_rport,comedia
transport=tls
encryption=yes
disallow=all
allow=ulaw
allow=alaw
directrtpsetup=nonat

[1234](mobile)
defaultuser=1234
callerid= "user1234" <1234>
secret=password

[1235](mobile)
defaultuser=1235
callerid="user1235" <1235>
secret=password

примените настройки:

*CLI> sip reload
 Reloading SIP
  == Parsing '/etc/asterisk/sip.conf': Found
  == Using SIP TOS bits 96
  == Using SIP CoS mark 4
  == TLS/SSL ECDH initialized (automatic), faster PFS ciphers enabled
  == TLS/SSL certificate ok

Обратите внимание на вывод TLS/SSL..

Второй сервер должен быть скомпилирован с поддержкой SRTP соответственно.
Скопируйте ключи в директорию /etc/asterisk второго сервера:

    scp /etc/asterisk/keys asterisk2:/etc/asterisk
 password:

где asterisk2хост или ip адрес второго сервера.

asterisk2
[general]
tcpenable=yes
bindaddr=0.0.0.0
tlsenable=yes
tlsbindaddr=0.0.0.0:5066
tlscertfile=/etc/asterisk/keys/asterisk.pem
tlscafile=/etc/asterisk/keys/ca.crt
tlscipher=ALL
tlsclientmethod=tlsv1
tlsdontverifyserver=yes
[trunk_to_asterisk1]
type=friend
context=from-asterisk1
host=asterisk1
port=5061
secret=PASSWORD
dtmfmode=rfc2833
disallow=all
allow=alaw
fromdomain=asterisk1
insecure=port,invite
qualify=yes
canreinvite=no
encryption=yes
transport=tls

Теперь останется только настроить маршрутизацию и зарегистрировать SIPклиентов. Дополнительные сведения о настройке TLS SRTP в Asterisk вы может найти в материале см. также Asterisk настройка TLS SRTP для PJSIP

Тестирование

Хорошо бы еще убедиться, что сигнализация и голос зашифрованы. Это можно сделать при помощи приложения tcpdump

для сигнализации:

  tcpdump -nqt -s 0 -A -vvv -i eth0 port 5061

где eth0сетевой интерфейс.

Для голоса:

  tcpdump -nqt -s 0 -A -vvv -i eth0 portrange 10000-20000

Нажмите, чтобы отобразить

Нажмите, чтобы скрыть

IP (tos 0x20, ttl 48, id 41706, offset 0, flags [DF], proto UDP (17), length 100)
    176.57.4.1.41674 > 192.168.0.253.10026: [udp sum ok] UDP, length 72
E .d..@.0.[..;........'*.P;g.k...Nf.....{.5Ph.8_~v..P..L.r......y*.j...]..61...../.y...|u.^_5..h....
IP (tos 0x0, ttl 64, id 63106, offset 0, flags [DF], proto UDP (17), length 200)
    192.168.0.253.10062 > 192.168.0.231.19736: [udp sum ok] UDP, length 172
E.....@.@..l........'NM....f.....9.H....W...WV...VQ...QV...VW...WWU..UWW...WV...WW...WT...WT...WW...TT...TU....TTU..TTT.UTVT.TUVTT.TPPW.TVV....U........................U...TTTUVQQSVSR]RQR]_PPS]RWPWQVT

Как настроить Zoiper на Android по протоколу TLS SRTP.

Asterisk 14 + Ubuntu 16

$
0
0

Asterisk 14 + Ubuntu 16

Установка Asterisk 14 и FreePBX 13. Первоначальная настройка FreePBX с нуля. Кодек Opus. php5.6. Odbc. Тотальное руководство.

При установке системы, на стадии software selectionвыберите, как минимум openssh.ubuntu-16-software-selection Если выбран LAMP сервер, или позднее, при установке mysql-serverиз репозитория, вам будет предложено задать пароль root пользователя MySQL. Если оставить поле пустым, задать пароль можно будет после установки FreePBX 13 командой mysql:

 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('Password');

или утилитой проверки безопасности:

 mysql_secure_installation

Задайте пароль root пользователя системы

$ sudo passwd root
Enter new UNIX password:
Retype new UNIX password:
passwd: password update successfully

Получите права супер пользователя

 $ sudo -i

Сделайте апдейт системы

 # apt update && sudo apt upgrade -y

Установите требуемые зависимости

apt install -y build-essential linux-headers-`uname -r` openssh-server apache2 mysql-server\
 mysql-client bison flex sox libncurses5-dev libssl-dev libmysqlclient-dev mpg123 libxml2-dev\
 libnewt-dev sqlite3 libsqlite3-dev pkg-config automake libtool autoconf git subversion unixodbc-dev\
 uuid uuid-dev libasound2-dev libogg-dev libvorbis-dev libcurl4-openssl-dev libical-dev libneon27-dev\
 libsrtp0-dev libspandsp-dev libopus-dev opus-tools libiksemel-dev libiksemel-utils libiksemel3 xmlstarlet

Установка php5.6 вместо php7.0

Ubuntu 16 по умолчанию ставит из репозитория php7.0, а FreePBX с ним не дружит. Если вы планируете использовать не чистый Asterisk, надо установить php5.6.

 apt install -y software-properties-common python-software-properties
 add-apt-repository ppa:ondrej/php
 apt  update -y
 apt install -y php5.6 php5.6-curl php5.6-cli php5.6-mysql php5.6-odbc php5.6-db php5.6-gd php5.6-xml curl libapache2-mod-php5.6
 apt install -y php-pear

a2dismod php7.0

 a2enmod php5.6
 systemctl restart apache2

Перезагрузите сервер, чтобы загрузить свежую версию ядра после апдейта. Если вы уверены, что загружена последняя версия, можно не перезагружать.

 reboot

Убедитесь, что mod_rewrite включен, чтобы избежать возможных атак.

  a2enmod rewrite
  service apache2 restart

Поддержка Console_Getopt

 pear install Console_Getopt

Asterisk 14 установка

Как использовать данное руководство.

Блоки команд с ключом '&&' могут быть скопированы вместе и будут выполняться последовательно. '&&' выполняет переход к следующей команде, при условии успешного выполнения предыдущей. Если вы хотите полностью, по шагам, контролировать процесс установки, выполните каждую команду отдельно, без ввода '&&'.

Скачайте исходные файлы

cd /usr/src
wget http://sourceforge.net/projects/lame/files/lame/3.98.4/lame-3.98.4.tar.gz &&
wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz &&
wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-current.tar.gz &&
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-14-current.tar.gz &&
git clone https://github.com/akheron/jansson.git &&
wget http://www.pjsip.org/release/2.5.5/pjproject-2.5.5.tar.bz2 &&
echo " ¯\_(ツ)_/¯ "

Скомпилируйте и установите Lame (mp3)

 cd /usr/src &&
 tar zxvf lame-3.98.4.tar.gz &&
 cd lame-3.98.4 &&
 ./configure &&
 make &&
 make install  &&
 echo " ¯\_(ツ)_/¯ "

Скомпилируйте и установите DAHDI и LibPRI

cd /usr/src &&
tar xvfz dahdi-linux-complete-current.tar.gz &&
tar xvfz libpri-current.tar.gz &&
rm -f dahdi-linux-complete-current.tar.gz libpri-current.tar.gz &&
cd dahdi-linux-complete-* &&
make all &&
make install &&
make config &&
cd /usr/src/libpri-* &&
make &&
make install &&
echo " ¯\_(ツ)_/¯ "

Скомпилируйте и установите pjproject

(Требуется для поддержки драйвера SIPканала PjSIP)

cd /usr/src &&
tar -xjvf pjproject-2.*.*.tar.bz2 &&
cd pjproject-* &&
CFLAGS='-DPJ_HAS_IPV6=1' ./configure --prefix=/usr --enable-shared --disable-sound\
  --disable-resample --disable-video --disable-opencore-amr &&
make dep &&
make &&
make install &&
echo " ¯\_(ツ)_/¯ "

Скомпилируйте и установите jansson

cd /usr/src/jansson &&
autoreconf -i &&
./configure &&
make &&
make install &&
echo " ¯\_(ツ)_/¯ "

Скомпилируйте и установите Asterisk

cd /usr/src && 
tar xvfz asterisk-14-current.tar.gz &&
rm -f asterisk-14-current.tar.gz &&
cd asterisk-* &&
./configure &&
contrib/scripts/get_mp3_source.sh &&
make menuselect

После ввода команды make menuselect, вам будет предложено выбрать устанавливаемые модули. Большинство требуемых модулей выбираются автоматически. Для поддержки mp3 включите модуль 'format_mp3'. 'res_config_mysql' вынесено в addons по условиям лицензирования.

В разделе Core Sound Packagesвыберите поддержку русскоязычных файлов (если требуется) В разделе Extra Sound Packagesвыберите дополнительные звуковые файлы.

Asterisk 14 + OPUS

Asterisk 14 поддерживает Opus без дополнительных патчей. Зависимости (xmlstarlet) должны быть установлены до конфигурации. В разделе Codec Translatorsубедитесь, что модуль кодека доступен для компиляции и отметьте для установки.

opus install

opus install

Installing modules from codecs...
codec_opus: Remote package version 14.0_1.0.1 (262145)
codec_opus: Downloading http://downloads.digium.com/pub/telephony/codec_opus/asterisk-14.0/x86-64/codec_opus-14.0_1.0.1-x86_64.tar.gz
codec_opus: Installing.
codec_opus: Installed.

после установки asterisk:

 asterisk -rx 'core show translation recalc' | grep opus
           ulaw  alaw   gsm  g726 g726aal2 adpcm  slin  slin  slin  slin  slin  slin  slin  slin  slin lpc10  ilbc  g722 testlaw  opus  opus
     opus 23500 23500 23500 23500    23500 23500 17500 17500 17500 17500 17500 17500  9000 17000 17000 23500 23500 23500   23500     - 23500
     opus 15000 15000 15000 15000    15000 15000  9000 17000 17000 17000 17000 17000 17000 17000 17000 15000 15000 17250   15000 23000     -

Для сохранения нажмите Save & Exitи продолжите установку.

make &&
make install &&
make config &&
ldconfig

Если вы не планируете использовать FreePBX, команда make basic-pbxустановит минимальный начальный набор конфигов Asterisk.

Запуск от имени пользователя 'Asterisk'

Расcкомментируйте в /etc/default/asterisk

 AST_USER="asterisk"
 AST_GROUP="asterisk"
Создайте пользователя Asterisk и задайте права пользователя.
useradd -m asterisk &&
chown asterisk. /var/run/asterisk &&
chown -R asterisk. /etc/asterisk &&
chown -R asterisk. /var/{lib,log,spool}/asterisk &&
chown -R asterisk. /usr/lib/asterisk

Перезагрузите сервер и проверьте состояние Asterisk подключившись к консоли

 asterisk -vvvr
Asterisk 14.2.0, Copyright (C) 1999 - 2016, Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
Connected to Asterisk 14.2.0 currently running on ubuntu (pid = 1269)
ubuntu*CLI>
Убедитесь, что Asterisk запущен под своим пользователем:
  ps aux | grep asterisk
 asterisk  1269  4.7 11.4 1446068 57504 ?       Ssl  07:57   0:07 /usr/sbin/asterisk -U asterisk -G asterisk

FreePBX 13: установка и настройка с нуля

Настроим Apache

sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php/5.6/apache2/php.ini &&
sed -ie 's/\;date\.timezone\ \=/date\.timezone\ \=\ "Europe\/Moscow"/g' /etc/php/5.6/apache2/php.ini &&
cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf_orig &&
sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/apache2/apache2.conf &&
sed -i 's/AllowOverride None/AllowOverride All/'  /etc/apache2/apache2.conf &&
systemctl restart apache2

настроим ODBC

cat >> /etc/odbcinst.ini << EOF
[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so
FileUsage = 1
EOF
cat >> /etc/odbc.ini << EOF
[MySQL-asteriskcdrdb]
Description=MySQL connection to 'asteriskcdrdb' database
driver=MySQL
server=localhost
database=asteriskcdrdb
Port=3306
Socket=/var/run/mysqld/mysqld.sock
option=3
EOF

Скачайте FreePBX

cd /usr/src &&
wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-13.0-latest.tgz
Распакуйте и установите
tar vxfz freepbx-13.0-latest.tgz &&
cd /usr/src/freepbx &&
./install -n

Если при установке Ubuntu вы задали rootпароль MySQL
запустите скрипт установки без ключа -n.
Установка пройдет в интерактивном режиме,
во время которого вам будет предложено ввести пароль:

./install
Database engine [mysql]:
Database name [asterisk]:
CDR Database name [asteriskcdrdb]:
Database username [root]:
Database password:

install -h

install -h

/usr/src/freepbx# ./install -h
PHP Warning:  Declaration of FreePBX\Install\FreePBXHelpCommand::setCommand(FreePBX\Install\FreePBXInstallCommand $command) should be compatible with Symfony\Component\Console\Command\HelpCommand::setCommand(Symfony\Component\Console\Command\Command $command) in /usr/src/freepbx/installlib/installhelpcommand.class.php on line 15
 ______             _____  ______   __
|  ____|           |  __ \|  _ \ \ / /
| |__ _ __ ___  ___| |__) | |_) \ V /
|  __| '__/ _ \/ _ \  ___/|  _ < > <
| |  | | |  __/  __/ |    | |_) / . \
|_|  |_|  \___|\___|_|    |____/_/ \_\
Usage:
 install [--dbengine="..."] [--dbname="..."] [--cdrdbname="..."] [--dbuser="..."] 
[--dbpass="..."] [--user="..."] [--group="..."] [--dev-links] [--webroot="..."] 
[--astetcdir="..."] [--astmoddir="..."] [--astvarlibdir="..."] [--astagidir="..."] 
[--astspooldir="..."] [--astrundir="..."] [--astlogdir="..."] [--ampbin="..."] [--ampsbin="..."] 
[--ampcgibin="..."] [--ampplayback="..."] [-r|--rootdb] [-f|--force]

Options:
 --dbengine            Database engine (default: "mysql")
 --dbname              Database name (default: "asterisk")
 --cdrdbname           CDR Database name (default: "asteriskcdrdb")
 --dbuser              Database username (default: "root")
 --dbpass              Database password (default: "")
 --user                File owner user (default: "asterisk")
 --group               File owner group (default: "asterisk")
 --dev-links           Make links to files in the source directory instead of copying (developer option)
 --webroot             Filesystem location from which FreePBX files will be served (default: "/var/www/html")
 --astetcdir           Filesystem location from which Asterisk configuration files will be served (default: "/etc/asterisk")
 --astmoddir           Filesystem location for Asterisk modules (default: "/usr/lib/asterisk/modules")
 --astvarlibdir        Filesystem location for Asterisk lib files (default: "/var/lib/asterisk")
 --astagidir           Filesystem location for Asterisk agi files (default: "/var/lib/asterisk/agi-bin")
 --astspooldir         Location of the Asterisk spool directory (default: "/var/spool/asterisk")
 --astrundir           Location of the Asterisk run directory (default: "/var/run/asterisk")
 --astlogdir           Location of the Asterisk log files (default: "/var/log/asterisk")
 --ampbin              Location of the FreePBX command line scripts (default: "/var/lib/asterisk/bin")
 --ampsbin             Location of the FreePBX (root) command line scripts (default: "/usr/sbin")
 --ampcgibin           Location of the Apache cgi-bin executables (default: "/var/www/cgi-bin")
 --ampplayback         Directory for FreePBX html5 playback files (default: "/var/lib/asterisk/playback")
 --rootdb (-r)         Database Root Based Install. Will create the database user and password automatically along with the databases
 --force (-f)          Force an install. Rewriting all databases with default information
 --help (-h)           Display this help message
 --quiet (-q)          Do not output any message
 --verbose (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
 --version (-V)        Display this application version
 --ansi                Force ANSI output
 --no-ansi             Disable ANSI output
 --no-interaction (-n) Do not ask any interactive question

Подключимся к FreePBX

http://IP.Address.FreePBX.Server/admin

Первым делом, вам будет предложено задать имя пользователя и пароль FreePBX

ubuntu16-freepbx13-welcome

Первоначальная настройка FreePBX 13

Advanced Settings

Поддержка русского языка в интерфейсе

Чтобы отображался выбор локализаций FreePBX, включите данную опцию в Settings > Advanced Settings:

Show Language setting - YesNo

Если переключение на русский не работает, выполните следующие действия:

 echo "russian         ru_RU.UTF-8" >>  /etc/locale.alias
 locale-gen ru_RU
 systemctl restart apache2
Country Indications Tone

Выберите тоны КПВ, занято и тд в российском стандарте, если требуется:

Settings > Anvanced Settings - Dialplan and Operational

freepbx13-advanced-settings-country-indication-tones.png Обратите внимание на опцию CW Enabled by Default.
Можно отключить Call Waiting, по умолчанию, для вновь создаваемых екстеншенов.
По умолчанию включено.

Speaking Clock Time Format

Установите 24-х часовой формат времени. freepbx13-advanced-settings-speaking-clock-time-format

Ringtime default

Измените время вызова екстеншена по умолчанию, если требуется: freepbx13-advanced-settings-ringtime-default

SIP channel driverопределяет использование драйверов SIP. По умолчанию и chan_sipи res_pjsipвключены, но можно выбрать какой-то один из них.

Установка Asterisk

FreeSWITCH CDR MySQL

$
0
0

FreeSWITCH CDR MySQL

Сохранение CDRв mysql и просмотр данных о звонках FreeSWITCH при помощи веб интерфейса - CDR-Viewer.

Подготовим FreeSWITCH для работы с MySQL через ODBC

Предполагается, что сервер mysql (mariadb) установлен.

 yum install -y mysql-connector-odbc unixODBC unixODBC-devel

Проверим odbcinst.ini

# Driver from the mysql-connector-odbc package
# Setup from the unixODBC package
[MySQL]
Description     = ODBC for MySQL
Driver          = /usr/lib/libmyodbc5.so
Setup           = /usr/lib/libodbcmyS.so
Driver64        = /usr/lib64/libmyodbc5.so
Setup64         = /usr/lib64/libodbcmyS.so
FileUsage       = 1

Заполним odbc.ini

[freeswitch]
Driver=MySQL
SERVER=localhost
PORT=3306
DATABASE=freeswitchcdr
USER=DB_USER
PASSWORD=DB_PASSWORD

Проверим подключение к MySQL

 echo "select 1" | isql -v freeswitch
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select 1
+---------------------+
| 1                   |
+---------------------+
| 1                   |
+---------------------+
SQLRowCount returns 1
1 rows fetched

Создадим БД MySQL в формате asteriskcdrdb

Создайте файл, например:

 touch freeswitchcdr.sql

И скопируйте в него структуру таблицы БД:

CREATE TABLE cdr (
   calldate datetime NOT NULL default '0000-00-00 00:00:00',
   clid varchar(80) NOT NULL default '',
   src varchar(80) NOT NULL default '',
   dst varchar(80) NOT NULL default '',
   dcontext varchar(80) NOT NULL default '',
   channel varchar(80) NOT NULL default '',
   dstchannel varchar(80) NOT NULL default '',
   lastapp varchar(80) NOT NULL default '',
   lastdata varchar(80) NOT NULL default '',
   duration int(11) NOT NULL default '0',
   billsec int(11) NOT NULL default '0',
   disposition varchar(45) NOT NULL default '',
   amaflags int(11) NOT NULL default '0',
   accountcode varchar(20) NOT NULL default '',
   uniqueid varchar(32) NOT NULL default '',
   userfield varchar(255) NOT NULL default '',
   did varchar(50) NOT NULL default '',
   recordingfile varchar(255) NOT NULL default '',
   KEY `calldate` (`calldate`),
   KEY `dst` (`dst`),
   KEY `accountcode` (`accountcode`),
   KEY `uniqueid` (`uniqueid`)
);

Создаем БД: freeswitchcdr

 mysqladmin create freeswitchcdr

Создаем таблицу:cdr

 mysql asteriskcdrdb < freeswitchcdr.sql

Задаем права на БД с параметрами определенными в odbc.ini

 mysql> GRANT ALL PRIVILEGES ON freeswitchcdr.* TO DB_USER@localhost  IDENTIFIED BY 'DB_PASSWORD';
 flush privileges;
 \q

Подготовим FreeSWITCH

Расскомментируйте строку event_handlers/mod_odbc_cdrв файле исходников FS ../freeswitch/modules.conf

и выполните make && make install.

По окончании компиляции скопируйте файл odbc_cdr.conf.xml из исходников в директорию, где установлен FS.

В моем примере это /usr/local/src/freeswitchи /usr/local/freeswitchсоответственно

cp /usr/local/src/freeswitch/src/mod/event_handlers/mod_odbc_cdr/conf/autoload_configs/odbc_cdr.conf.xml /usr/local/freeswitch/conf/autoload_configs/odbc_cdr.conf.xml

И заполните файл следующим содержанием, где параметры БД (odbc-dsn), данные определенные нами в odbc.ini:

<configuration name="odbc_cdr.conf" description="ODBC CDR Configuration"><settings><!-- <param name="odbc-dsn" value="freeswitchcdr:DB_USER:DB_PASSWORD"/> --><param name="odbc-dsn" value="odbc://freeswitch"/><!-- global value can be "a-leg", "b-leg", "both" (default is "both") --><param name="log-leg" value="both"/><!-- value can be "always", "never", "on-db-fail" --><param name="write-csv" value="on-db-fail"/><!-- location to store csv copy of CDR --><param name="csv-path" value="/usr/local/freeswitch/log/odbc_cdr"/><!-- if "csv-path-on-fail" is set, failed INSERTs will be placed here as CSV files otherwise they will be placed in "csv-path" --><param name="csv-path-on-fail" value="/usr/local/freeswitch/log/odbc_cdr/failed"/><!-- dump SQL statement after leg ends --><param name="debug-sql" value="true"/></settings><tables><!-- only a-legs will be inserted into this table --><table name="cdr" log-leg="a-leg"><field name="calldate" chan-var-name="start_stamp"/><field name="clid" chan-var-name="caller_id_name"/><field name="src" chan-var-name="caller_id_number"/><field name="dst" chan-var-name="destination_number"/><field name="dcontext" chan-var-name=""/><field name="channel" chan-var-name="channel_name"/><field name="dstchannel" chan-var-name="bridge_channel"/><field name="lastapp" chan-var-name="hangup_cause"/><field name="lastdata" chan-var-name="sip_hangup_disposition"/><field name="duration" chan-var-name="duration"/><field name="billsec" chan-var-name="billsec"/><field name="disposition" chan-var-name="hangup_cause"/><field name="lastapp" chan-var-name="current_application"/><field name="amaflags" chan-var-name="amaflags"/><field name="uniqueid" chan-var-name="uuid"/><field name="recordingfile" chan-var-name="recordingfile"/><field name="userfield" chan-var-name=""/></table></tables></configuration>

Загрузим модуль mod_odbc_cdr

 fs_cli
 load mod_odbc_cdr

Если в дальнейшем вы будете вносить изменения в файл odbc_cdr.conf.xmlих можно применить командой:

 reload mod_odbc_cdr

reload mod_odbc_cdr

reload mod_odbc_cdr

freeswitch@internal> reload mod_odbc_cdr
+OK Reloading XML
+OK module unloaded
+OK module loaded

2016-07-21 18:58:05.585312 [CONSOLE] switch_loadable_module.c:2008 Stopping: mod_odbc_cdr
2016-07-21 18:58:05.585312 [DEBUG] mod_odbc_cdr.c:542 Destroying table cdr
2016-07-21 18:58:05.585312 [CONSOLE] switch_loadable_module.c:2028 mod_odbc_cdr unloaded.
2016-07-21 18:58:05.585312 [INFO] mod_enum.c:880 ENUM Reloaded
2016-07-21 18:58:05.585312 [DEBUG] mod_odbc_cdr.c:396 Set odbc-dsn [odbc://freeswitch]
2016-07-21 18:58:05.585312 [DEBUG] mod_odbc_cdr.c:405 Set debug-sql [true]
2016-07-21 18:58:05.585312 [DEBUG] mod_odbc_cdr.c:425 Set log-leg [both]
2016-07-21 18:58:05.585312 [DEBUG] mod_odbc_cdr.c:436 Set csv-path [/usr/local/freeswitch/log/odbc_cdr/]
2016-07-21 18:58:05.585312 [DEBUG] mod_odbc_cdr.c:437 Set csv-path-on-fail [/usr/local/freeswitch/log/odbc_cdr/failed/]
2016-07-21 18:58:05.585312 [INFO] mod_odbc_cdr.c:113 Found table [cdr]
2016-07-21 18:58:05.585312 [INFO] mod_odbc_cdr.c:117 Set table [cdr] to log A-legs only
2016-07-21 18:58:05.585312 [INFO] mod_odbc_cdr.c:128 Adding fields to table [cdr]
2016-07-21 18:58:05.585312 [INFO] mod_odbc_cdr.c:139 Field [calldate] (start_stamp) added to [cdr]
2016-07-21 18:58:05.585312 [INFO] mod_odbc_cdr.c:139 Field [clid] (caller_id_name) added to [cdr]
2016-07-21 18:58:05.585312 [INFO] mod_odbc_cdr.c:139 Field [src] (caller_id_number) added to [cdr]
2016-07-21 18:58:05.585312 [INFO] mod_odbc_cdr.c:139 Field [dst] (destination_number) added to [cdr]
2016-07-21 18:58:05.585312 [INFO] mod_odbc_cdr.c:139 Field [channel] (channel_name) added to [cdr]
2016-07-21 18:58:05.585312 [INFO] mod_odbc_cdr.c:139 Field [dstchannel] (bridge_channel) added to [cdr]
2016-07-21 18:58:05.585312 [INFO] mod_odbc_cdr.c:139 Field [lastapp] (hangup_cause) added to [cdr]
2016-07-21 18:58:05.585312 [INFO] mod_odbc_cdr.c:139 Field [lastdata] (sip_hangup_disposition) added to [cdr]
2016-07-21 18:58:05.585312 [INFO] mod_odbc_cdr.c:139 Field [duration] (duration) added to [cdr]
2016-07-21 18:58:05.585312 [INFO] mod_odbc_cdr.c:139 Field [billsec] (billsec) added to [cdr]
2016-07-21 18:58:05.585312 [INFO] mod_odbc_cdr.c:139 Field [disposition] (hangup_cause) added to [cdr]
2016-07-21 18:58:05.585312 [INFO] mod_odbc_cdr.c:139 Field [lastapp] (current_application) added to [cdr]
2016-07-21 18:58:05.585312 [INFO] mod_odbc_cdr.c:139 Field [amaflags] (amaflags) added to [cdr]
2016-07-21 18:58:05.585312 [INFO] mod_odbc_cdr.c:139 Field [uniqueid] (uuid) added to [cdr]
2016-07-21 18:58:05.585312 [INFO] mod_odbc_cdr.c:139 Field [recordingfile] (recordingfile) added to [cdr]
2016-07-21 18:58:05.585312 [INFO] mod_odbc_cdr.c:139 Field [userfield] (branch) added to [cdr]
2016-07-21 18:58:05.585312 [INFO] switch_time.c:1415 Timezone reloaded 1781 definitions
2016-07-21 18:58:05.595283 [CONSOLE] switch_loadable_module.c:1538 Successfully Loaded [mod_odbc_cdr]

Подготовим Asterisk CDR Viewer

 cd /var/www/html
 git clone https://github.com/g613/asterisk-cdr-viewer.git
 cd asterisk-cdr-viewer/include

Отредактируем файл config.inc.php

$db_type = 'mysql';
$db_host = 'localhost';
$db_port = '3306';
$db_user = 'DB_USER';
$db_pass = 'DB_PASSWORD';
$db_name = 'freeswitchcdrdb';
$db_table_name = 'cdr';
$db_options = array();

Если все сделано правильно в Asterisk-CDR-Viewer будут отображаться свежие данные о вызовах:

Для того, чтобы работала сортировка по статусу вызова надо отредактировать файл ../asterisk-cdr-viewer/templates/form.tpl.phpзаменив секцию:

<td nowrap=""nowrap><input <?php if ( isset($_REQUEST['disposition_neg'] ) && $_REQUEST['disposition_neg'] == 'true' ) { echo 'checked="checked"'; } ?> type="checkbox" name="disposition_neg" value="true" /> not<select name="disposition" id="disposition"><option <?php if (empty($_REQUEST['disposition']) || $_REQUEST['disposition'] == 'all') { echo 'selected="selected"'; } ?> value="all">All Dispositions</option><option <?php if (isset($_REQUEST['disposition']) && $_REQUEST['disposition'] == 'ANSWERED') { echo 'selected="selected"'; } ?> value="ANSWERED">Answered</option><option <?php if (isset($_REQUEST['disposition']) && $_REQUEST['disposition'] == 'BUSY') { echo 'selected="selected"'; } ?> value="BUSY">Busy</option><option <?php if (isset($_REQUEST['disposition']) && $_REQUEST['disposition'] == 'FAILED') { echo 'selected="selected"'; } ?> value="FAILED">Failed</option><option <?php if (isset($_REQUEST['disposition']) && $_REQUEST['disposition'] == 'NO ANSWER') { echo 'selected="selected"'; } ?> value="NO ANSWER">No Answer</option></select></td>

на следующий код:

<td nowrap=""nowrap><input <?php if ( isset($_REQUEST['disposition_neg'] ) && $_REQUEST['disposition_neg'] == 'true' ) { echo 'checked="checked"'; } ?> type="checkbox" name="disposition_neg" value="true" /> not<select name="disposition" id="disposition"><option <?php if (empty($_REQUEST['disposition']) || $_REQUEST['disposition'] == 'all') { echo 'selected="selected"'; } ?> value="all">All Dispositions</option><option <?php if (isset($_REQUEST['disposition']) && $_REQUEST['disposition'] == 'NORMAL_CLEARING') { echo 'selected="selected"'; } ?> value="NORMAL_CLEARING">Answer</option><option <?php if (isset($_REQUEST['disposition']) && $_REQUEST['disposition'] == 'USER_BUSY') { echo 'selected="selected"'; } ?> value="USER_BUSY">Busy</option><option <?php if (isset($_REQUEST['disposition']) && $_REQUEST['disposition'] == 'UNALLOCATED_NUMBER') { echo 'selected="selected"'; } ?> value="UNALLOCATED_NUMBER">No Number</option><option <?php if (isset($_REQUEST['disposition']) && $_REQUEST['disposition'] == 'NO_ROUTE_DESTINATION') { echo 'selected="selected"'; } ?> value="NO_ROUTE_DESTINATION">No Route</option><option <?php if (isset($_REQUEST['disposition']) && $_REQUEST['disposition'] == 'ORIGINATOR_CANCEL') { echo 'selected="selected"'; } ?> value="ORIGINATOR_CANCEL">No Answer</option></select></td>

FreeSWITCH

FreePBX 13 Bulk Handler

$
0
0

FreePBX 13 Bulk Handler

freepbx bulk handler icon Экспорт / Импорт Extensions и DIDs в/из CSV.
Модуль Bulk Handler управляет массовым импортом / экспортом екстеншенов, маршрутови пользователейпри помощи csv фалов. Для настройки систем с множеством пользователей и продвинутой маршрутизацией, данный модуль незаменимый помощник, сильно облегчающий жизнь администратору системы.

FreePBX > Admin > Bulk Handler

Структура модуля Bulk Handler

  • Export
  • Import
    • Extensions
    • DIDs
    • User Manager Users
    • User Manager Groups

bulk handler defaults

Экспорт / Импорт Extensions

Предположим вы настраиваете новую систему и требуется создать множество Extensions с единообразными свойствами.

  1. Создайте екстеншентребуемой вам технологии и настройте его свойства под ваши нужды
  2. В модуле Bulk hanler выполните Exportдля Extensions
  3. Откройте полученный файл в редакторе (Open Office Calc или MS Exel)
  4. Добавьте нужное количество строк, с новыми номерами. Параметры: extension,name,id,dial,user,description - уникальны для каждого екстеншена.
  5. Для автогенерации паролей в поле secretзадайте - REGEN.
  6. Остальные поля задайте, как у шаблонного екстеншена.
  7. Во вкладке Import выберете созданный файл и нажмите Submit

Если данные корректны появиться список номеров. Нажмите кнопку Import. Система начнет операцию записи в базу данных. В случае успешного добавления строки, она выделяется зеленым. В случае неудачи красным. Модуль немного капризней, чемBulk Extensionsво FreepBX 12.
Когда данные добавлены нажмите Finishedи Apply config

freepbx-13-bulk-extensions

Также вы можете самостоятельно создать csv файл с минимумом требуемых полей:

extension,name,voicemail,id,tech,dial,devicetype,user,description,secret,findmefollow_voicemail,findmefollow_enabled,voicemail_enabled
500,Phone 500,novm,500,pjsip,PJSIP/500,fixed,200,ph 200,REGEN,novm,,

Экспорт / Импорт DIDs

Для DIDs никаких особенных отличий нет, приведем только пример файла csv с разными destinations:

  1. ring group
  2. extension
  3. ivr
  4. queue
  5. trunk
  6. time condition

соответственно:

cidnum,extension,destination,faxexten,faxemail,answer,wait,privacyman,alertinfo,ringing,mohclass,description,grppre,delay_answer,pricid,pmmaxretries,pmminlength,reversal,rvolume
,8121234561,"ext-group,230,1",,,,,0,,,default,a-1234561,,0,,,,,0
,8121234562,"from-did-direct,200,1",,,,,0,,,default,a-1234562,,0,,,,,0
,8121234563,"ivr-1,s,1",,,,,0,,,default,a-1234563,,0,,,,,0
,8121234564,"ext-queues,666,1",,,,,0,,,default,a-1234564,,0,,,,,0
,8121234565,"ext-trunk,1,1",,,,,0,,,default,a-1234565,,0,,,,,0
,8121234566,"timeconditions,2,1",,,,,0,,,default,E1-1234566,,0,,3,10,,0

http://wiki.freepbx.org/display/FPG/Bulk+Handler+User+Guide

FreePBX


FreePBX 13 Extensions - Внутренние номера

$
0
0

FreePBX 13 Extensions - Внутренние номера

Настройка внутренних номеров FreePBX - это совокупность свойств диалплана и канала вызова устройства. Диалплан определяет набираемый номер. Канал - технологию (SIP, IAX, DAHDI…) для вызова устройства и его id. Набираемый номер и идентификатор канала не обязательно должны совпадать. Extensions может указывать, как на устройство зарегистрированное в Asterisk, так и на номер за его пределами.

Оперируя понятиями linux, можно сравнить extensionsс "мягкой ссылкой", которая указывает на файл в системе или в сети.

Сперва выберете технологию, которая будет использована для конфигурации номера:

freepbx13-extensions

Типы Екстеншенов:

  • Custom Extensions - Экстеншен неопределенной технологии, как правило используется для назначения внешнего номера, например, на дружественной АТСв сети. Технология (например: IAX2/iaxtrunk/<num>) задается параметром Dial, в настройках екстеншена.
  • DAHDI Extensions - Номер устройства DAHDI, например платы FXSили устройства TDM over IP типа Asteroid.
  • IAX2 Extensions - Номер подключаемый по протоколу Inter Asterisk Exchange (IAX).
  • PjSIP Extensions - SIPаккаунт с использованием драйвера res_pjsip.
  • chan_SIP - SIPаккаунт с использованием драйвера chan_sip.

После создания аккаунта по технологии chan_sip или res_pjsip, вы можете, после, изменить используемый драйвер в настройках екстеншена. FreePBX сгенерирует новый конфиг в соответствии с требованиями драйвера.

  • Virtial Extension - В отличии от Custom Extensions, не имеет опции Dial вообще. Можно использовать в качестве контейнера, каких-либо свойств, например виртуального факса или голосового почтового ящика, без привязки явного устройства.

Какая бы технология не использовалась, все екстеншены имеют ряд основныхпараметров, общих для всех, что хорошо видно на примере Virtual Extension:

Базовые параметры Extensions

Параметры общие для всех типов екстеншенов

General

- Add Extension

freepbx13-basic-extensions назначьте:

  • User Extension - используется для вызова екстеншена
  • Display Name - будет использовано в качестве CALLERID(name)
  • Outbound CallerID - используется в качестве CallerId для внешних вызовов, если это разрешено настройками исходящей маршрутизации
- User Manager Settings

freepbx13-extensions-user-manager User Managementмодуль управления пользователями FreePBX. Пользователь FreePBX (не путайте с администраторами, хотя этот пользователь может быть и администратором) назначается для доступа к User Control Panel, назначения виртуального факса для екстеншена и других очень полезных возможностей интерфейса FreePBX.
При создании екстеншена, вы можете не беспокоится о этих настройках. Если в дальнейшем понадобится что-то изменить, сделайте это через соответствующий модуль.

Advanced

-Assigned DID/CID

freepbx13-extensions-did-cid

DIDили Direct Inward Dialing - прямой входящий набор. По сути дополнительное расширение диалплана, сопоставленное данному екстеншену, которое будет добавлено в Inbound Routes.

  • DID description - описание для DID
  • Add Inbound DID - номер прямого входящего набора.
  • Add Inbound CID - CallerID вызывающего абонента, если задано, DIDбудет действовать только для звонков с этого номера.

Если вы назначите данные параметры, в модуле Inbound Routes появится соответствующее правило:

Если вы назначите данные параметры, в модуле Inbound Routes появится соответствующее правило:

freepbx13-extensions-did-cid-inbound-routes


Вы можете задать столько DIDдля одного екстеншена, сколько вам требуется. Назначенные маршруты отобразятся в настройках екстешена:

freepbx13-extensions-did-cid-inbound-routes-list

- Edit Extensions

freepbx13-edit-extensions

  • CID Num Alias - Псевдоним CID. Если не задано, для внутренних вызовов в качестве CALLERID(num) екстеншена используется его номер. Если задать здесь другое значение, то будет использоваться оно. Здесь можно задать номер Ринг группыили очереди, например, чтобы пользователи перенабирали не конкретный номер, а группу телефонов тех. поддержки. Не используется для внешних вызовов.
  • SIP Alias - если хотите использовать прямой (direct) sip набор, здесь можно задать псевдоним, для вызова данного екстеншена.
- Extension Options

freepbx13-extension-options

  • Asterisk Dial Options - опции команды Asterisk Dialдля внутренних исходящих вызовов с данного екстеншена. По умолчанию глобальные дефолтные значения заданные в Advanced Settings. Задайте override значения, если требуется. Подробнее о опциях команды Dial
  • Ring Time - Таймаут вызова екстеншена. По умолчанию дефолтное значение из Advanced Settings
  • Ringer Volume Override - Переназначение громкости (только Sangoma Phones)
  • Call Forward Ring Time - Время вызова в секундах при Call Forward, Call Forward Busy, по истечению которого вызов будет перенаправлен в голосовую почту или - Optional Destinations. Если ни то, ни другое не задано, будет звонить до упора.
  • Outbound Concurrency Limit - кол-во одновременных вызовов через данный пир.
  • Call Waiting - Включить службу ожидания вызова. Если включено и телефон занят, вызывающему абоненту подается сигнал вызова, в ожидании освобождения телефона. Если выключено, будет дан отбой. Выключите Call Waiting, если екстеншен обслуживает очередь.

Большинство пользователей привыкли, получать сигнал занято. Иначе они считают, что им просто не отвечают. Обратите внимание, что все IP телефоны, тоже имеют такую опцию. Отключите ожидающий вызов и на аппаратах, если требуется. В CW Enabled by Defaultможно выключить call waiting по умолчанию для новых екстеншенов.

  • Call Screening - Служба представления, требует от внешнего вызывающего абонента назвать свое имя и проигрывает записанное имя вызываемому, прежде чем соединить их, давая возможность отказаться от приема вызова.
  • Pinless Dialing - Включить Пин код для исходящих вызовов.
  • Emergency CID - CallerID для транка помеченного, как emergency (т.е. для экстренных вызовов)
  • Queue State Detection - Если данный екстеншен обслуживает очередь, когда оттуда приходит вызов, очередь пытается определить состояние екстеншена, доступен он или нет.

В некоторых случаях, когда установлено FollowMeили использован виртуальный екстеншен, очередь будет считать его недоступным и екстеншен не будет вызван, несмотря на то, что может ответить. Чтобы избежать подобных коллизий, используйте 'Ignore State'. Однако для большинства сценариев рекомендуется 'Use State'.

asterisk -rx 'database show'

asterisk -rx 'database show'

Ни Virtual, ни Custom Extensions не имеют собственных конфигов. Где же храняться эти многочисленные настройки? А хранятся они во внутренней базе данных Asterisk - astdb. Откуда диалплан сгенерированный FreePBX в extensions_additional.confи берет их, подставляя в макросы.

# asterisk -rx 'database show' | grep 667
/AMPUSER/667/answermode                           : disabled
/AMPUSER/667/cfringtimer                          : 0
/AMPUSER/667/cidname                              : test
/AMPUSER/667/cidnum                               : 667
/AMPUSER/667/concurrency_limit                    : 3
/AMPUSER/667/device                               : 667
/AMPUSER/667/dialopts                             : Ttr
/AMPUSER/667/hint                                 : ,CustomPresence:667
/AMPUSER/667/intercom                             : enabled
/AMPUSER/667/noanswer                             :
/AMPUSER/667/outboundcid                          :
/AMPUSER/667/password                             :
/AMPUSER/667/queues/qnostate                      : usestate
/AMPUSER/667/recording                            :
/AMPUSER/667/recording/in/external                : dontcare
/AMPUSER/667/recording/in/internal                : dontcare
/AMPUSER/667/recording/ondemand                   : disabled
/AMPUSER/667/recording/out/external               : dontcare
/AMPUSER/667/recording/out/internal               : dontcare
/AMPUSER/667/recording/priority                   : 10
/AMPUSER/667/ringtimer                            : 0
/AMPUSER/667/rvolume                              :
/AMPUSER/667/voicemail                            : novm
/CW/667                                           : ENABLED

Это касается и ектеншенов с технологиями, для опций диалплана, не предусмотренных их драйверами.

- Recording Options

freepbx13-extensions-recording-options

  • Inbound External Calls - Записывать входящие внешние вызова
    • Force - Всегда, даже если далее встретится Don't Careили No, но Neverотменит данную директиву.
    • Yes - Записывать.
    • Don't Care - Не записывать, но yes и forceзаставят.
    • No - Не записывать.
    • Never - Не записывать никогда. Но последующее «Force» пересилит данную установку.

(Force и Never всегда переопределяют установки заданные ранее.)

  • Outbound External Calls - Внешние исходящие вызовы
  • Inbound Internal Calls - Входящие внутренние вызовы
  • Outbound Internal Calls -Внутренние исходящие вызовы
  • On Demand Recording - Запись по запросу (абонентским кодом)
Record Priority Policy

Политики определяют записывать вызов или нет, если настройки двух ектеншенов вступают в противоречие друг с другом. Более высокий приоритет определяет политику. Если приоритеты равны, используется глобальная настройка Call Recording Policy - caller или callee (вызывающий или вызываемый) . По умолчанию выше вызывающий. Например:

  • Yesпротив Never - never победил
  • Yesпротив No - пошли меряться члприоритетами
    • приоритеты равны - Вызывающий победил (по умолчанию)
  • Forceпротив Never - - Вызывающий победил (по умолчанию)

FreePBX

Установка Asterisk 13 + FreePBX 12 Ubuntu 14

$
0
0

Установка Asterisk 13 + FreePBX 12 Ubuntu 14

Первоначальная настройка Ubuntu

При установке Ubuntu выберите обязательно OpenSSH server и LAMP сервер. Установите дополнительные пакеты на ваше усмотрение.

Ubuntu Software selection

В ходе установки системы вам будет предложено задать пароль root пользователя MySQL, если вы не уверены, можно отставить пустым. Если пароль задан, он потребуется в дальнейшем для работы с MySQL.

ubuntu root mysql password

Задайте пароль root пользователя системы

 $ sudo passwd root
 Enter new UNIX password:
 Retype new UNIX password:
 passwd: password update successfully

Переключитесь на root пользователя

 $ sudo -i

Сделайте апдейт системы

 # apt-get update && sudo apt-get upgrade -y

Установите требуемые зависимости

apt-get install -y build-essential linux-headers-`uname -r` openssh-server apache2 mysql-server\
  mysql-client bison flex php5 php5-curl php5-cli php5-mysql php-pear php-db php5-gd curl sox\
  libncurses5-dev libssl-dev libmysqlclient-dev mpg123 libxml2-dev libnewt-dev sqlite3\
  libsqlite3-dev pkg-config automake libtool autoconf git subversion unixodbc-dev uuid uuid-dev\
  libasound2-dev libogg-dev libvorbis-dev libcurl4-openssl-dev libical-dev libneon27-dev libsrtp0-dev\
  libspandsp-dev libiksemel-dev libiksemel-utils libiksemel3

Перезагрузите сервер

Это требуется чтобы загрузить свежую версию ядра после апгрейда. Если вы уверены что загруженная версия последняя, можно не перезагружаться.

 reboot

Установите PearDB

pear uninstall db
pear channel-update pear.php.net
pear install -Z db-1.7.14

Error: Error: cannot download &quot;pear/DB&quot;

Error: Error: cannot download &quot;pear/DB&quot;

Ошибка при установке DB (На данный момент, я не до разобрался в причине этой проблемы, но после танцев с бубном, все заработало.)

root@asterisk:/usr/src# pear install DB-1.7.14
WARNING: "pear/DB" is deprecated in favor of "pear/MDB2"
downloading DB-1.7.14.tgz ...
Starting to download DB-1.7.14.tgz (133,103 bytes)
.............................done: 133,103 bytes
could not extract the package.xml file from "/build/buildd/php5-5.5.9+dfsg/pear-build-download/DB-1.7.14.tgz"
Download of "pear/DB" succeeded, but it is not a valid package archive
Error: cannot download "pear/DB"
Download failed
install failed

Решение - установим вручную

Смотрим путь:

 pear config-get php_dir

В моем случае это:

/usr/share/php

Качаем DB 1.7.14

cd /usr/src/
wget   http://download.pear.php.net/package/DB-1.7.14.tgz
tar zvxf DB-1.7.14.tgz

Копируем вручную:

cp -R /usr/src/DB-1.7.14/DB  /usr/share/php/DB
cp /usr/src/DB-1.7.14/DB.php /usr/share/php/DB.php

Далее при вводе pear install db-1.7.14, получаем ответ что уже установлено.

root@asterisk:/usr/share/php# pear install db-1.7.14
pear/db is already installed and is the same as the released version 1.7.14
install failed

Установка Asterisk

Как использовать данное руководство.

Блоки команд с ключом '&&' могут быть скопированы вместе и будут выполняться последовательно. '&&' выполняет переход к следующей команде, при условии успешного выполнения предыдущей. Если вы хотите полностью, пошагово, контролировать процесс установки, выполните каждую команду отдельно, без ввода '&&'.

Скачайте исходные файлы

cd /usr/src
wget http://sourceforge.net/projects/lame/files/lame/3.98.4/lame-3.98.4.tar.gz &&
wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz &&
wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-1.4-current.tar.gz &&
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz &&
git clone https://github.com/akheron/jansson.git &&
wget http://www.pjsip.org/release/2.2.1/pjproject-2.2.1.tar.bz2

ls -la /usr/src

ls -la /usr/src

root@ubuntu:/usr/src# ls -la
total 47960
drwxr-xr-x  5 root root     4096 Dec  9 11:18 .
drwxr-xr-x 10 root root     4096 Dec  9 09:55 ..
-rw-r--r--  1 root root 31832204 Nov 20 23:55 asterisk-13-current.tar.gz
-rw-r--r--  1 root root  7630719 Sep 22 23:20 dahdi-linux-complete-current.tar.gz
drwxr-xr-x  8 root root     4096 Dec  9 11:18 jansson
-rw-r--r--  1 root root  1336025 Apr 14  2010 lame-3.98.4.tar.gz
-rw-r--r--  1 root root   338633 Jun 16 21:50 libpri-1.4-current.tar.gz
drwxr-xr-x 24 root root     4096 Dec  9 09:57 linux-headers-3.13.0-32
drwxr-xr-x  7 root root     4096 Dec  9 09:57 linux-headers-3.13.0-32-generic
-rw-r--r--  1 root root  4628649 Dec  9 11:18 pjproject-2.2.1.tar.bz2

Скомпилируйте и установите Lame (mp3)

 cd /usr/src &&
 tar zxvf lame-3.98.4.tar.gz &&
 cd lame-3.98.4 &&
 ./configure &&
 make &&
 make install 

Скомпилируйте и установите DAHDI и LibPRI

cd /usr/src &&
tar xvfz dahdi-linux-complete-current.tar.gz &&
tar xvfz libpri-1.4-current.tar.gz &&
rm -f dahdi-linux-complete-current.tar.gz libpri-1.4-current.tar.gz &&
cd dahdi-linux-complete-* &&
make all &&
make install &&
make config &&
cd /usr/src/libpri-1.4.* &&
make &&
make install

kernel error

kernel error

Ошибка - отсутствуют исходники ядра

/usr/src/dahdi-linux-complete-2.10.0.1+2.10.0.1# make all 
make -C linux all 
make[1]: Entering directory `/usr/src/dahdi-linux-complete-2.10.0.1+2.10.0.1/linux' 
make -C drivers/dahdi/firmware firmware-loaders 
make[2]: Entering directory `/usr/src/dahdi-linux-complete-2.10.0.1+2.10.0.1/linux/drivers/dahdi/firmware' 
make[2]: Leaving directory `/usr/src/dahdi-linux-complete-2.10.0.1+2.10.0.1/linux/drivers/dahdi/firmware' 
You do not appear to have the sources for the 3.2.0-4-amd64 kernel installed. 
make[1]: *** [modules] Error 1 
make[1]: Leaving directory `/usr/src/dahdi-linux-complete-2.10.0.1+2.10.0.1/linux' 
make: *** [all] Error 2 

Решение - установить исходники)

apt-get install linux-headers-`uname -r` 

Скомпилируйте и установите pjproject

(Требуется для поддержки драйвера SIPканала PjSIP)

cd /usr/src &&
tar -xjvf pjproject-2.2.1.tar.bz2 &&
cd pjproject-2.2.1 &&
CFLAGS='-DPJ_HAS_IPV6=1' ./configure --prefix=/usr --enable-shared --disable-sound\
  --disable-resample --disable-video --disable-opencore-amr &&
make dep &&
make &&
make install

Скомпилируйте и установите jansson

cd /usr/src/jansson &&
autoreconf -i &&
./configure &&
make &&
make install

Скомпилируйте и установите Asterisk

cd /usr/src && 
tar xvfz asterisk-13-current.tar.gz &&
rm -f asterisk-13-current.tar.gz &&
cd asterisk-* &&
./configure &&
contrib/scripts/get_mp3_source.sh &&
make menuselect

После ввода команды make menuselect, вам будет предложено выбрать устанавливаемые модули. Большинство требуемых модулей выбираются автоматически. Для поддержки mp3 включите модуль 'format_mp3'.

make menuselect format_mp3

В разделе Core Sound Packages выберете поддержку русскоязычных файлов (если требуется)

make menuselect ru sound

В разделе Extra Sound Packages выберете дополнительные звуковые файлы.

В завершении выберете Save & Exitи продолжите установку.

make &&
make install &&
make config &&
ldconfig

Установка и настройка FreePBX

Скачайте и распакуйте FreePBX.

cd /usr/src &&
wget http://mirror.freepbx.org/freepbx-12.0.43.tgz &&
tar zxvf freepbx-*.tgz &&
cd /usr/src/freepbx

при установке из гит репозитория возникает ошибка:missing modgettext.class.php

при установке из гит репозитория возникает ошибка:missing modgettext.class.php

при установке из гит репозитория возникает ошибка:missing modgettext.class.php (incomplete application of changeset 12995?) поэтому лучше скачивать архив.

export VER_FREEPBX=12.0 &&
cd /usr/src &&
git clone http://git.freepbx.org/scm/freepbx/framework.git freepbx &&
cd freepbx &&
git checkout release/${VER_FREEPBX}

Создайте пользователя Asterisk и задайте права пользователя.

useradd -m asterisk &&
chown asterisk. /var/run/asterisk &&
chown -R asterisk. /etc/asterisk &&
chown -R asterisk. /var/{lib,log,spool}/asterisk &&
chown -R asterisk. /usr/lib/asterisk

remove /var/www/html

remove /var/www/html

Далее в руководстве freepbx.org, предлагается удалить директорию веб сервера:
Удалять директорию /var/www/html может быть опасно для ваших данных.

 rm -rf /var/www/html

Это делается, т.к. при установке FreePBX скриптом, если папка существует, появляется сообщение о ошибке, что может быть исправлено, просто, повторным запуском скрипта установки.

Настроим Apache

sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php5/apache2/php.ini &&
sed -ie 's/\;date\.timezone\ \=/date\.timezone\ \=\ "Europe\/Moscow"/g' /etc/php5/apache2/php.ini &&
cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf_orig &&
sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/apache2/apache2.conf &&
sed -i 's/AllowOverride None/AllowOverride All/'  /etc/apache2/apache2.conf &&
service apache2 restart

AllowOverride All

AllowOverride All

root@aster:~# cat  /etc/apache2/apache2.conf | grep AllowOverride
        AllowOverride None
        AllowOverride None
        AllowOverride None
#       AllowOverride None
 root@aster:~# sed -i 's/AllowOverride None/AllowOverride All/'  /etc/apache2/apache2.conf
root@aster:~# cat  /etc/apache2/apache2.conf | grep AllowOverride
        AllowOverride All
        AllowOverride All
        AllowOverride All
#       AllowOverride All
# create the configuration file in the "available" section

echo "ServerName localhost" | sudo tee /etc/apache2/conf-available/servername.conf

# enable it by creating a symlink to it from the "enabled" section

a2enconf servername
# restart the server

service apache2 restart

Подготовим MySQL

Требуется создать безопасный пароль для связи FreePBX и MySQL

 export ASTERISK_DB_PW=`dd if=/dev/urandom bs=1 count=32 2>/dev/null | base64 - | cut -c2-18`

Эта команда сгенерирует 16-ти значный пароль и сохранит значение в переменной {ASTERISK_DB_PW}.

Подготовка базы данных Asterisk в MySQL.

Если вы задали 'root' пароль MySQL при установке, добавьте его после ключа -pyourpassword. (mysqladmin -u root -pYOURPASSWORD create asterisk)

 mysqladmin -u root create asterisk
 mysqladmin -u root create asteriskcdrdb

Зададим права на использование БД MySQL

Замените asteriskuserна имя пользователя, которое вам нравится. Например: YOURUSER@localhost. Можно оставить как есть.

 mysql -u root -e "GRANT ALL PRIVILEGES ON asterisk.* TO asteriskuser@localhost IDENTIFIED BY '${ASTERISK_DB_PW}';"
 mysql -u root -e "GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asteriskuser@localhost IDENTIFIED BY '${ASTERISK_DB_PW}';"
 mysql -u root -e "flush privileges;"

Запустим Asterisk и установим FreePBX.

Если в предыдущем пункте вы задали собственное имя пользователя, замените asteriskuserна него. Например: –username=YOURUSER

./start_asterisk start
./install_amp --installdb --username=asteriskuser --password=${ASTERISK_DB_PW}

Если выполнение скрипта прерывается и появилось сообщение о ошибке, попробуйте запустить установку ещё раз.

amportal

amportal

...
*************************************************************************
* Note: It's possible that if you click the red 'Update Now' bar BEFORE *
* updating your modules, your machine will start dropping calls. Ensure *
* that all modules are up to date BEFORE YOU CLICK THE RED BAR. As long *
* as this is observed, your machine will be fully functional whilst the *
* upgrade is in progress.                                               *
*************************************************************************
****************************************
* At This Time Please Restart Asterisk *
****************************************
amportal a ma download manager
amportal a ma install manager
amportal a ma installall
amportal a ma refreshsignatures
amportal a reload
amportal chown

В завершении настроим создадим ссылку на директорию Music On Hold формата mp3

 ln -s /var/lib/asterisk/moh /var/lib/asterisk/mohmp3

и запустим amportal

 amportal start

Поверим состояние Asterisk подключившись к консоли

 asterisk -vvr
Asterisk 13.0.1, Copyright (C) 1999 - 2014, Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
Connected to Asterisk 13.0.1 currently running on ubuntu (pid = 24513)
ubuntu*CLI>core restart now

Подключимся к FreePBX

http://IP.Address.FreePBX.Server/admin

Первым делом, вам будет предложено задать имя пользователя и пароль FreePBX

freepbx start set user login

Чтобы работало переключение на русский язык в панели управления, необходимо отредактировать файл /etc/locale.alias. Ищем строку russian ru_RU.ISO-8859-5 и правим ее.

nano +67 /etc/locale.alias

 russian ru_RU.UTF-8

или sed:

 sed -i 's/ru_RU.ISO-8859-5/ru_RU.UTF-8/g'   /etc/locale.alias
 locale-gen ru_RU
 service apache2 restart

См. также:
Установка Freepbx 13 и Asterisk 14 на Ubuntu 16

Установка Asterisk

Asterisk настройка очереди - queues.conf

$
0
0

Asterisk настройка очереди - queues.conf

Настройка очередей входящих вызовов Asterisk. Подробное описание стратегии вызовов. Penalty, timeout, member и все доступные параметры. Примеры.

Основы работы с очередями в Asterisk

Для создания статической очереди, достаточно определить её имя в квадратных скобках и стратегиювызова операторов. Остальные параметры будут назначены по умолчанию.

/etc/asterisk/queues.conf

[queue_01]
strategy = ringall

В дальнейшем имя очереди будет использовано для вызова ее в диалплане командой Queue.

 exten => s,1,Queue(queue_01)

Для применения параметров очередей и управления ими, могут быть использованы команды консоли Asterisk:

*CLI> queue
add   reload   remove   reset    set      show     pause    unpause

Asterisk queue reload

*CLI> queue reload
members     parameters  rules       all

Выполните queue reload allдля инициации новой очереди и queue show <имя очереди>для её отображения в консоли Asterisk:

Asterisk queue status

*CLI> queue show queue_01
queue_01 has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime, 0s talktime), W:0, C:0, A:0, SL:0.0% within 0s
   No Members
   No Callers

В данном случае очередь пуста, принимать вызовы некому. Агенты принимающие вызовы в очереди могут быть статическими, т.е. назначены в конфиге очереди - queues.conf:

/etc/asterisk/queues.conf

[queue_01]
strategy = ringall
member = PJSIP/2777

Теперь у очереди есть members, пользователи для обработки входящих вызовов:

*CLI> queue show queue_01
queue_01 has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime, 0s talktime), W:0, C:0, A:0, SL:0.0% within 0s
   Members:
      PJSIP/2777 (ringinuse enabled) (Not in use) has taken no calls yet
   No Callers

Или же, агенты могут быть динамическими, т.е. добавляться при помощи интерфейсов Asterisk - CLI, AMIили AGI.

Пример конфигурации очереди

Комментарии даны относительно заданного в примере значения.

  • [queue_01] ;имя очереди, все параметры заданные после него и до следующих […] скобок, будут относится к данной очереди.
  • announce-frequency=45 ;объявление каждые 45 секунд
  • announce-holdtime=yes ;объявлять среднее время ожидания
  • announce-position=yes ;объявлять позицию в очереди
  • autofill=yes ;включить автозаполнение очереди
  • autopause=no ;не вкл. автопаузу если оператор не ответил на вызов
  • autopausebusy=no ; не вкл. автопаузу, если оператор не ответил на вызов когда был занят.
  • autopausedelay=0 ; таймаут автопаузы =0 (выкл.)
  • autopauseunavail=yes ;вкл. автопаузу, если оператор недоступен.
  • joinempty=paused,penalty,inuse,ringing ;присоединиться к очереди, даже если все операторы имеет один из перечисленных статусов.
  • leavewhenempty=no ;не покидать очередь из-за если все недоступны
  • maxlen=11 ;максимально кол-во ожидающих в очереди = 11
  • memberdelay=0 ; пауза между перед соединением агента и вызывающего абонента = 0
  • monitor-type=mixmonitor ; приложение записи - mixmonitor
  • penaltymemberslimit=5 ;если очередь обслуживают 5 или меньше операторов, не использовать пенальти
  • periodic-announce-frequency=0 ;не делать объявление: все операторы заняты (по умолч.)
  • queue-callswaiting=queue-callswaiting ;файлы объявлений в очереди.
  • queue-thankyou=queue-thankyou
  • queue-thereare=queue-thereare
  • queue-youarenext=queue-youarenext
  • reportholdtime=no ; не объявлять агенту время, которое абонент провел в очереди
  • retry=5 ;пауза перед повторным вызовом оператора 5 секунд.
  • ringinuse=no ; не вызывать операторов со статусом 'in use' (вызывается очередью).
  • servicelevel=20 ; считать процент вызовов отвеченных в течении 20 секунд.
  • setqueuevar=yes ; задать переменные очереди
  • setinterfacevar=yes ;задать переменные интерфейсов (операторов очереди)
  • setqueueentryvar=yes ;задать переменные сред. время ожидания и позиция абонента.
  • strategy=ringall ; стратегия - звонят все операторы
  • timeout=15 ; время вызова операторов, перед retry
  • timeoutpriority=app ; приоритет таймаута приложения
  • timeoutrestart=yes ; сбросить таймаут оператора, если он CONGESTION
  • weight=0 ;вес очереди = 0
  • wrapuptime=0 ;время отдыха оператора после вызова = 0
  • member=PJSIP/2777 ;пользователь очереди.

[queue]

[queue]

[queue_01] ;имя очереди, все параметры заданные после него и до следующих […] скобок, будут относится к данной очереди.
announce-frequency=45 ;объявление каждые 45 секунд
announce-holdtime=yes ;объявлять среднее время ожидания
announce-position=yes ;объявлять позицию в очереди
autofill=yes ;включить автозаполнение очереди
autopause=no ;не вкл. автопаузу если оператор не ответил на вызов
autopausebusy=no ; не вкл. автопаузу, если оператор не ответил на вызов когда был занят.
autopausedelay=0 ; таймаут автопаузы =0 (выкл.)
autopauseunavail=yes ;вкл. автопаузу, если оператор недоступен.
joinempty=paused,penalty,inuse,ringing ;присоединиться к очереди, даже если все операторы имеет один из перечисленных статусов.
leavewhenempty=no ;не покидать очередь из-за если все недоступны
maxlen=11 ;максимально кол-во ожидающих в очереди = 11
memberdelay=0 ; пауза между перед соединением агента и вызывающего абонента = 0
monitor-type=mixmonitor ; приложение записи - mixmonitor
penaltymemberslimit=5 ;если очередь обслуживают 5 или меньше операторов, не использовать пенальти
periodic-announce-frequency=0 ;не делать объявление: все операторы заняты (по умолч.)
queue-callswaiting=queue-callswaiting ;файлы объявлений в очереди.
queue-thankyou=queue-thankyou
queue-thereare=queue-thereare
queue-youarenext=queue-youarenext
reportholdtime=no ; не объявлять агенту время, которое абонент провел в очереди
retry=5 ;пауза перед повторным вызовом оператора 5 секунд.
ringinuse=no ; не вызывать операторов со статусом 'in use' (вызывается очередью).
servicelevel=20 ; считать процент вызовов отвеченных в течении 20 секунд.
setqueuevar=yes ; задать переменные очереди
setinterfacevar=yes ;задать переменные интерфейсов (операторов очереди)
setqueueentryvar=yes ;задать переменные сред. время ожидания и позиция абонента.
strategy=ringall ; стратегия - звонят все операторы
timeout=15 ; время вызова операторов, перед retry
timeoutpriority=app ; приоритет таймаута приложения
timeoutrestart=yes ; сбросить таймаут оператора, если он CONGESTION
weight=0 ;вес очереди = 0
wrapuptime=0 ;время отдыха оператора после вызова = 0
member=PJSIP/2777 ;пользователь очереди.

Общие (глобальные) настройки очередей.

 [general]
Persistent Members (Постоянные пользователи )

Сохранять каждого динамического пользователя во внутренней БД Asterisk (astdb), чтобы после перезагрузки, все пользователи были восстановлены из записей очереди в astdb. см. также RemoveQueueMember По умолчанию:

 persistentmembers = no
AutoFill Behavior (Автозаполнение очереди)

Старое, по умолчанию, поведение очереди (autofill=no) подразумевало последовательный тип подключения, при котором ожидающий абонент, подключался к пользователю, только с первой позиции в очереди. Новое поведение по умолчанию, (autofill=yes) позволяет ожидающему абоненту, подключится к пользователю (агенту) очереди, с любой позиции, если есть свободные агенты, не дожидаясь, пока он займет головную позицию. Такое поведение позволяет быстрее обрабатывать вызовы и является предпочтительным.

 autofill = yes

Monitor Type (Приложение для записи разговоров )

Приложение MixMonitorзаписывает разговор непосредственно в один файл, в отличии от устаревшего Monitor, раздельно записывающего вх. исх. голосовые потоки.

 monitor-type = MixMonitor
UpdateCDR behavior(Изменить поведение CDR)

Записать в поле CDRdstchannelимя агента, которое вы можете установить во время входа в систему с параметром MemberName AddQueueMember.

 updatecdr = yes
shared_lastcall (общий последний вызов)

Если оператор (агент) обслуживает больше чем одну очередь, учитывать параметры, такие как wrapuptime (пауза после завершения разговора в течении которой на агента не поступают вызовы), для всех вызовов, из всех очередей.

 shared_lastcall=no
Negative_penalty_invalid

Рассматривать операторов с отрицательным пенальти, как неактивных (не подавать на них вызовы).

 negative_penalty_invalid = no
log_membername_as_agent

Регистрировать агентов с именем, а не номером интерфейса. параметр для обратной совместимости, поведение как при работе с модулем chan_agents.

 log_membername_as_agent = no

Параметры очередей Asterisk

 [queuename]
Musicclass

Устанавливает класс Музыки на Удержании (MOH) используемый данной очередью. Эта установка будет иметь приоритет над всеми, кроме переменной канала, заданной в диалплане: Set(CHANNEL(musicclass)=whatever)

 musicclass = default
announce

Сообщение пользователю обслуживающему очередь. Сообщение может быть проиграно пользователю (а не вызывающему абоненту) перед тем, как он примет вызов, например , для идентификации очереди, из которой поступил вызов, если агент обслуживает более одной очереди.

 announce = file_to_play

Asterisk queue strategy

Стратегия вызова операторов очереди.

Важнейший параметр, указывает как будет распределяться вызовы между агентами:

  1. ringall - вызываются все пользователи одновременно, пока кто-нибудь не ответит (по умолчанию)
  2. leastrecent - вызвать оператора дольше всех не принимавшего вызовы.
  3. fewestcalls - вызвать оператора принявшего меньше всего вызовов.
  4. random - распределить вызовы случайным образом.
  5. rrmemory - по кругу (round robin), после агента отвечавшего крайним.
  6. linear - вызывать начиная с первого в порядке перечисления. Динамические агенты, будут вызываться в порядке добавления.
  7. wrandom - звонит случайный интерфейс, но использует штраф этого участника в качестве веса (weight) при расчете метрики.

Таким образом, оператор с пенальти 0 будет иметь метрику в диапазоне от 0 до 1000,
оператор с пенальти 1 от 0 до 2000,
а оператор с пенальти 2 будет иметь метрику между 0 и 3000.
Обратите внимание, что при использовании этой стратегии, пенальти оператора не такой же,
как при использовании других стратегий очереди.
Он используется ТОЛЬКО в качестве весового коэффициента для вычисления метрики.

 strategy = ringall
servicelevel

Параметр статистики. Задает диапазон от 0 до servicelevel=в секундах. Приложение app_queueвысчитает процент вызовов, отвеченных за указанный период. Например, если servicelevel=30 ожидавших в очереди не более 30-ти секунд.

 servicelevel=30

Ниже приведен пример, где мы видим, что 89.4% процента вызовов в очереди q1были отвечены в течении 30 секунд (SL:89.4% within 30s).

*CLI> queue show q1
q1 has 0 calls (max unlimited) in 'leastrescent' strategy (6s holdtime, 120s talktime), W:0, C:5156, A:584, SL:89.4% within 30s
   Members:
      SIP/4886 (ringinuse disabled) (Not in use) has taken no calls yet
      SIP/4887 (ringinuse disabled) (Not in use) has taken no calls yet
      PJSIP/4889 (ringinuse disabled) (Unavailable) has taken no calls yet
   No Callers
context

Указывает на контекст диалплана, в который ожидающий в очереди абонент может попасть набором одной цифры в DTMF. В контексте должен быть определен екстеншен для обработки этой цифры. Например, можно использовать для интерактивного меню.

 context = context_name
penaltymemberslimit

не использовать penalty, если очередь обслуживают кол-во операторов меньшее или равное тому, что указано:

 penaltymemberslimit = 5

Asterisk queue Timeout

Примечание для рассматриваемых далее таймаутов очереди.
Таймаут выхода из очереди по не ответу, не является параметром очереди, а может быть назначен как опция вызова приложения Queue
Queue(queuename,[options],[optionalurl],[announceoverride],[timeout])
Пример:

 Queue(queuename,t,,,45)

Timeout

Очередь имеет два разных «таймаута» связанных с ней. Один из них назначается в queue.conf. Этот таймаут указывает в течении какого промежутка времени, в секундах, будет вызываться телефон пользователя, прежде чем будет считаться, что он не ответил. Второй таймаут, это аргумент приложения Queue(). Это абсолютный таймаут, по истечении которого, вызов выходит из очереди и переходит на следующий приоритет в контексте. В некоторых ситуациях, эти таймауты сталкиваются. Например, если таймаут в queue.confустановлен 5 секунд, retry = 4 секунды, а таймаут приложения Queue()задан 10 секунд
произойдет следующее:

  • вызов попадает в очередь
  • очередь выбирает оператора и вызывает его в течении 5 секунд
  • затем выдерживается время retry - 4 секунды
  • очередь выбирает второго оператора.

Как долго будет вызываться второй оператор? Осталась 1 секунда до истечения абсолютного таймаута приложения Queue(). Будет ли второй оператор вызываться 1 секунду или 5 как задано в таймауте queue.conf?

Эту коллизию призван разрешить параметр timeoutpriority: если timeoutpriority=conf, то второй оператор будет вызваться в течении 5-ти секунд. Если timeoutpriority=app, то в течении 1-й секунды.

Существуют и некоторые исключения и приведенных выше правил:
предположим timeoutpriority=app, в queues.confтаймаут равен 0, а аргумент приложения Queueзадан 10 сек.
Тогда timeoutpriorityигнорируется, а таймаут приложенияиспользуется как таймаут вызова операторов queues/conf.
И наоборот, если таймаут приложенияне задан, тогда timeoutpriorityигнорируется и таймаут конф. файлаqueues.confвсегда используется.

Несмотря на то, что timeoutpriority=confтаймаут конфигурационного файлаqueues.confимеет приоритет над таймаутом приложения,
если таймаут конф. файларавен 0, каждый участник очереди будет вызываться в течении неопределенного времени, а таймаут приложениябудет проверяться после этих попыток.

По умолчанию: timeoutpriority=app

timeout = 15
retry = 5
timeoutpriority = app|conf
weight

Чем выше вес (weight) очереди, тем выше приоритет для вызова оператора обслуживающего больше одной очереди.
по умолч. 0

 weight=0
wrapuptime

После завершения успешного вызова, время отдыха оператора, прежде чем он снова сможет принимать вызовы. по умолч. 0

 wrapuptime=0
autofill

Переопределяет глобальную установку autofill, рассмотренную выше, отдельно для каждой очереди.

 autofill=yes|no
autopause

Поставить оператора на паузу, если он не ответил на вызов. см. также PauseQueueMember

  • no: Не использовать автопаузу для данной очереди.
  • yes: Поставить на паузу, только в данной очереди.
  • all: Поставить на паузу во всех очередях, которые обслуживает оператор.
 autopause=no|yes|all
Autopausedelay

Отложить постановку на паузу оператора на время, с момента завершения последнего неудачного вызова.

 autopausedelay=60
Autopausebusy

Ставить или нет оператора на паузу, если он занят (BUSY).

autopausebusy=no
Autopauseunavail

Ставить или нет оператора на паузу, если он недоступен (UNAVAILABEL).

 autopauseunavail=no
maxlen

Максимально кол-во ожидающих в очереди. Если превышено, последующие вызовы будут отвергаться.
0 - неограниченно.

maxlen=0

Asterisk queue variables

variables

Примечание для рассматриваемых ниже параметров очереди - setinterfacevar, setqueueentryvar, setqueuevar. Если канал оператора (member channel) определен как Local, то для установки переменных он должен быть оптимизирован при помощи опции /n. Например:

 Local/2666@from-queue/n

Если setinterfacevar=yes, то следующие переменные будут назначены в каналах вызывающего абонента и оператора очереди:

  • MEMBERINTERFACE - наименование интерфейса оператора(например. Local/1234)
  • MEMBERNAME - имя оператора (например. O.Agentova)
  • MEMBERCALLS - кол-во вызовов принятых данным интерфейсом оператора.
  • MEMBERLASTCALL - Время последнего вызова (UNIX-time).
  • MEMBERPENALTY - штраф (penalty) оператора.
  • MEMBERDYNAMIC - указывает динамический пользователь или нет.
  • MEMBERREALTIME - указывает realtime конфигурация оператора или нет.
 setinterfacevar=no

пример

пример

мы видим что интерфейс SIP/4887 динамический и время последнего вызова в UNIX-time.

exten => s,1,Queue(q1,cF,,,30)
   same => n,verbose(${MEMBERLASTCALL})
   same => n,verbose(${MEMBERDYNAMIC})
   same => n,verbose(${MEMBERINTERFACE})
-- Executing [s@from-fs-pjsip:1] Queue("PJSIP/fs_pjsip-0000003b", "q1,cF,,,30")
-- Called SIP/4887
-- SIP/4887-00000041 is ringing
-- SIP/4887-00000041 answered PJSIP/fs_pjsip-0000003b
-- Stopped music on hold on PJSIP/fs_pjsip-0000003b
-- Executing [s@from-fs-pjsip:2] Verbose("PJSIP/fs_pjsip-0000003d", "1476870427") 
-- Executing [s@from-fs-pjsip:3] Verbose("PJSIP/fs_pjsip-0000003b", "1") 
-- Executing [s@from-fs-pjsip:4] Verbose("PJSIP/fs_pjsip-0000003b", "SIP/4887")
setqueueentryvar

Если setqueueentryvar=yes, то следующие переменные будут назначены в каналах вызывающего абонента и оператора очереди:

  • QEHOLDTIME - время ожидания вызывающего абонента.
  • QEORIGINALPOS - позиция в очереди.
 setqueueentryvar=no
setqueuevar

Если setqueuevar=yes, то следующие переменные будут назначены в каналах вызывающего абонента и оператора очереди, при соединении или когда вызывающий абонент покидает очередь:

  • QUEUENAME - имя очереди.
  • QUEUEMAX - максимальное кол-во вызовов разр. в очереди;
  • QUEUESTRATEGY - стратегия очереди;
  • QUEUECALLS - текущее кол-во вызовов в очереди;
  • QUEUEHOLDTIME - среднее время ожидания в очереди на данный момент;
  • QUEUECOMPLETED - кол-во обработанных вызовов;
  • QUEUEABANDONED - кол-во отвергнутых (неотвеченных) вызовов;
  • QUEUESRVLEVEL - уровень обслуживания очереди;
  • QUEUESRVLEVELPERF - процент вызовов отвечающих условию servicelevelна данный момент;
 setqueuevar=no
membermacro

Если установлено, выполнить Macro, когда соединение с оператором установлено.
Эта опция может быть перекрыта параметром macroприложения Queue()

 membermacro=macro_name[,arg1[,...][,argN]]
membergosub

Если установлено, выполнить GoSub, когда соединение с оператором установлено.
Эта опция может быть перекрыта параметром gosubприложения Queue()

 membergosub=gosub_context_name[,arg1[,...][,argN]]
announce-frequency

Как часто анонсировать позицию в очереди и среднее время ожидания. Если 0 то не анонсировать. Примечание: этот параметр игнорируется при изменении позиции абонента в очереди (см. min-announce-frequency)

 announce-frequency = 90
min-announce-frequency

Минимальный интервал между моментом перехода на следующую позицию и анонсом среднего времени удержания. Это полезно для избежания постоянных объявлений когда позиция в очереди абонента часто меняется. т.е., если позиция в очереди изменилась, то не оповещать, даже если подошло время announce-frequency. (см. announce-frequency)

 min-announce-frequency = 15
periodic-announce-frequency

Как часто делать periodic-announce.

 periodic-announce-frequency=60
random-periodic-announce

Производить периодическое оповещение в случайном порядке? По умолчанию - no.

 random-periodic-announce=no
relative-periodic-announce

Отсчитывать время для periodic-announceс момента завершения предыдущего анонса, а не от его начала. по умолчанию выключено.

 relative-periodic-announce=no
announce-holdtime

Включать объявление о среднем времени ожидания в объявление о позиции в очереди?
Можно указать yes, noили once (один раз).

 announce-holdtime = yes|no|once
announce-position

Объявлять позицию в очереди?
Возможные значения: «yes», «no», «limit», или «more».

  • yes - оповещать о позиции ожидающего абонента;
  • more - если кол-во ожидающих в очереди больше чем задано в announce-position-limit.

т.е., если announce-position-limit=5объявлять, что в очереди ожидают больше 5-ти абонентов.

  • limit - только ожидающие абоненты в пределах announce-position-limitуслышат объявление.
  • no - не объявлять позицию.
 announce-position = yes
announce-to-first-user

Если включено, то объявления будут проигрываться первому в очереди. Это может привести к ситуации, когда агент готов принять вызов, но соединени откладывается из-за объявления и приведет к задержкам в очереди. по умолчанию выключено.

 announce-to-first-user = no
announce-position-limit

Если назначено «limit» или «more» в announce-positionбудет задействован этот параметр.

 announce-position-limit = 5
announce-round-seconds

Округлять тайминги объявлений до заданного значения, если не = 0 Возможные значения 0, 5, 10, 15, 20, and 30.

announce-round-seconds = 10
Аудио файлы используемые для объявлений

Если не заданы другие, используются файлы перечисленные ниже:

queue-youarenext = queue-youarenext ;(«You are now first in line.»)

queue-thereare = queue-thereare ; («There are»)

queue-callswaiting = queue-callswaiting ; («calls waiting.»)

queue-holdtime = queue-holdtime ; («The current est. holdtime is»)

queue-minute = queue-minute ; («minute.»)

queue-minutes = queue-minutes ; («minutes.»)

queue-seconds = queue-seconds ; («seconds.»)

queue-thankyou = queue-thankyou ; («Thank you for your patience.»)

queue-reporthold = queue-reporthold ; («Hold time»)

periodic-announce = queue-periodic-announce ; («All reps busy / wait for next»)

queue-less-than

queue-quantity1

queue-quantity2

periodic-announce

Можно установить несколько звуковых файлов для основного объявления через запятую. Файлы будут воспроизведены в порядке перечисления.
Например:

 periodic-announce = queue-periodic-announce,your-call-is-important,please-wait
monitor-format

Для включения записи вызовов, требуется задать «monitor-format»,
если monitor-formatне задан, запись разговоров считается выключенной.
Вызовы будут записаны только с момента поднятию трубки оператором.

 monitor-format = gsm|wav|wav49
Queue Empty Options(параметры заполнения очереди)

Параметры очереди Asterisk «joinempty» и «leavewhenempty» регламентируют условия при которых абонент может встать в очередь и покинуть ее, соответственно.
Параметры «joinempty» и «leavewhenempty» могут принимать несколько значений, перечисленных через запятые.
Ниже приведем список факторов влияющих на эти параметры:

  • paused: считать недоступным, если оператор на паузе;
  • penalty: считать недоступным, если пенальти оператора меньше чем QUEUE_MAX_PENALTY;
  • inuse: считать недоступным, если телефон оператора в данный момент вызывается (звонит);
  • ringing: a member is not considered available if his phone is currently ringing
  • unavailable: Касается в основном каналов Agent (заданных в agents.conf). если агент назначен в agent.conf, но не зарегистрировался(каналы Agent можно считать устаревшими)
  • invalid: Интерфейсы имеющие статус «invalid».
  • unknown: Не имеющий явного статуса оператор.
  • wrapup: Оператор на таймауте wrapuptimeпосле вызова.

Пример, не подключаться к очереди,если все операторы имеют один из перечисленных статусов:

 joinempty = paused,inuse,invalid

Покинуть очередь, если все операторы имеют один из указанных статусов:

 leavewhenempty = inuse,ringing

; Устаревшие значения, могут быть указаны для обратной совместимости:

  • yes - (empty) for joinempty; penalty,paused,invalid for leavewhenempty
  • no - penalty,paused,invalid for joinempty; (empty) for leavewhenempty
  • strict - penalty,paused,invalid,unavailable
  • loose - penalty,invalid
reportholdtime

Если нужно оповестить оператора о том сколько абонент ожидал в очереди.

 reportholdtime = no
ringinuse

Чтобы избежать посылки вызова на оператора, чей интерфейс находится с состоянии 'in use', установите = no. Помимо общего значения очереди, можно установить этот параметр для отдельных пользователей очереди через команду QUEUE_MEMBER, поле 'ringinuse' реалтайм пользователей и CLI/AMI:

*CLI> queue set ringinuse no on SIP/4887 in queue1

 SIP/4887 (ringinuse disabled) (dynamic) (Not in use)

*CLI> queue set ringinuse yes on SIP/4887 in queue1

 SIP/4887 (ringinuse enabled) (dynamic) (Not in use)

только драйверы каналов SIPи PJSIP поддерживают в данный момент статус 'in use'

 ringinuse = no
memberdelay

Параметр устанавливает время задержки между моментом, когда агент отвечает на вызов и соединения его с вызывающим абонентом.

  memberdelay = 0
timeoutrestart

Если параметр «timeoutrestart» установлен в значение yes, тогда значение таймаута для агента будет сбрасываться, если от него будет получен сигнал BUSY или CONGESTION. Это бывает полезно, когда агент имеет возможность отметить вызов, отвергая его или, производя некоторые действия, которые имеют подобный эффект. (Обнаружено, что если вызов агента завершился со статусом NOANSWER (ring, no-answer), это так же заставляет вызов отправить к следующему агенту в очереди по алгоритму roundrobin).

 timeoutrestart = no
defaultrule

назначить правила по умолчанию. Конфигурация находится в queuerules.conf

 defaultrule = myrule

Asterisk queue Members

Каждый пользователь очереди перечисляется в отдельной строке
в виде технология/строка набора. Под пользователем понимается оператор очереди.
Дополнительный параметр penaltyможет быть задан после запятой.

Каждый оператор очереди Asteriskимеет параметр penalty.
Пенальти может быть определен в настройках пользователя очереди:

  member ⇒ interface[,penalty][,membername][,state_interface][,ringinuse]

или при добавлении динамического агента:

  queue add member <dial string> to <queue> [[[penalty <penalty>] as <membername>] state_interface <interface>] 

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

Предположим, очередь обслуживают 3 оператора с пенальти - 0,1 и 2 соответственно.
Первым будет вызван оператор с пенальти = 0 и только если он недоступен, оператор с пенальти = 1 и так далее.

Пенальти оператора может быть динамически изменен, например через CLI:

 queue set penalty <penalty> on <interface> [in <queue>]

или через AMI Actions QueuePenalty.

Пользователи с большим значением пенальти имеют, более низкий приоритет для вызовов.

После второй запятой назначается имя.
Использование имени может быть удобно для представления в логах очереди.
Разные интерфейсы могут использовать одно имя.

Дополнительное описание интерфейса указывается после третьей запятой.
На этот интерфейс будут посылаться уведомления app_queue,
но для вызова будет всегда использоваться указанный первым интерфейс.

 member => interface [,penalty][,membername][,state_interface][,ringinuse]
member => DAHDI/1
member => DAHDI/2,10
member => DAHDI/3,10,Stev Morrissev
member => Local/1000@default,0,Patty Smithoff,SIP/1000
member => Local/2000@default,0,Syd Buratinov,SIP/2000,no

Установка Asterisk

$
0
0

Установка Asterisk

Основные требования к системе

  • Для инсталляции и запуска Asterisk не требуется никакого специального оборудованиия.
  • Перед установкой Asterisk должны быть установлены программные пакеты:
    • Исходники ядра (kernel sources)
    • Заголовочные .h файлы для Вашего ядра (kernel headers)
    • bison (необходим для обработки выражений в файле extensions.conf)
    • Пакеты: openssl и openssl-dev или libssl-dev

Исходники Asterisk

Asterisk - ядро основной программы
Asterisk-addons - дополнительные файлы
Libpri - PRI - библиотеки
Dahdi (zaptel) - драйверы телефонии

cd /usr/src/

wget http://sourceforge.net/projects/lame/files/lame/3.98.4/lame-3.98.4.tar.gz
wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz
wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-1.4.15.tar.gz
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-12-current.tar.gz

Lame

   tar zxvf lame-3.98.4.tar.gz
   cd lame-3.98.4
   ./configure
   make
   make install
   cd ..

Компиляция Libpri

cd /usr/src/libpri-VERSION
make
make install

Компиляция DAHDI

cd /usr/src/dahdi-linux-complete-VERSION
make all
make install
make config

Компиляция Asterisk

cd /usr/src/asterisk-VERSION
./configure
make menuselect
make
make install
make samples
make progdocs
make config

Компиляция Asterisk-addons

Начиная с версии 1.8 Asterisk-addons входят в состав core не не требуют отдельной компиляции.

cd /usr/src/asterisk-addons-VERSION
./configure
make
make install

Запуск и остановка Asterisk

/usr/sbin/asterisk: Файл запускающий Asterisk
Если Вы установили Asterisk, можно запустить его командой:

 /usr/src/asterisk -vvvgc

Остановить Asterisk из CLIможно командой 'stop now'.
Командой без аргументов, Asterisk запускается как демон.

 /usr/sbin/asterisk 

Подключится к командному интерфейсу (CLI) можно используя аргумент 'r'.

 /usr/sbin/asterisk -r

Запуск Asterisk из под не - root пользователя. По умолчанию Asterisk запускается из под root, что может быть небезопасно. Для изменения пользователя раскомментируйте строки в файле /etc/init.d/asterisk.

AST_USER="asterisk"
AST_GROUP="asterisk"

Создайте группу и пользователя asterisk.

/usr/sbin/groupadd asterisk 
/usr/sbin/useradd -d /var/lib/asterisk -g asterisk asterisk 

Измените права на использование следующих файлов:

chown --recursive asterisk:asterisk /var/lib/asterisk
chown --recursive asterisk:asterisk /var/log/asterisk
chown --recursive asterisk:asterisk /var/run/asterisk
chown --recursive asterisk:asterisk /var/spool/asterisk
chown --recursive asterisk:asterisk /usr/lib/asterisk
## Если Вы используете Zaptel
chown --recursive asterisk:asterisk /dev/zap
## Если Вы используете DAHDI
chown --recursive asterisk:asterisk /dev/dahdi
#----------------------------------------------------
chmod --recursive u=rwX,g=rX,o= /var/lib/asterisk
chmod --recursive u=rwX,g=rX,o= /var/log/asterisk
chmod --recursive u=rwX,g=rX,o= /var/run/asterisk
chmod --recursive u=rwX,g=rX,o= /var/spool/asterisk
chmod --recursive u=rwX,g=rX,o= /usr/lib/asterisk
## Если Вы используете Zaptel
chmod --recursive u=rwX,g=rX,o= /dev/zap
##  Если Вы используете DAHDI
chmod --recursive u=rwX,g=rX,o= /dev/dahdi
#----------------------------------------------------
chown --recursive root:asterisk /etc/asterisk
chmod --recursive u=rwX,g=rX,o= /etc/asterisk 
/etc/init.d/asterisk restart 

Автозагрузка Asterisk

Различные операционные системы имеют разные способы запуска программ во время загрузки. В директории с исходниками /usr/src/asterisk-VERSION/contrib/init.dсодержатся скрипты для запуска в archlinux, debian, gentoo, mandriva, redhat, slackware, suse.

Для систем, которые все еще используют inittab, просто добавьте следующую строку в /etc/inittab:

as:2:respawn:/usr/sbin/asterisk -f 

Для Redhat окружения выполните

cd /usr/src/asterisk-VERSION
make config

Это скопирует скрипт из contrib/init.d/rc.redhat.asterisk в /etc/rc.d/init.d/asterisk и выполните команду:

/sbin/chkconfig --add asterisk 

Директории Asterisk

  • /usr/lib/asterisk/modules: Содержит бинарные файлы (модули. кодеки)
  • /var/lib/asterisk: Содержит переменные данные(звуки. скрипты и т.д.).
  • /var/spool/asterisk: Файлы создаваемые в процессе работы (голосовые сообщения, исходящие вызовы и т.д.)
  • /var/log/asterisk: Логи. информация о вызовах.
  • /etc/asterisk; Конфигурационные файлы Asterisk.

Настроим Asterisk, FreeSWITCH, IP АТС.

FreePBX Очереди - Queue

$
0
0

FreePBX Очереди - Queue

Подробное описание. Стратегии вызова. Политика записи. Таймауты агентов.
Очереди для эффективной обработки множества одновременных звонков, меньшим количеством операторов Call Центра.

Queue General Settings

Queue number

Используйте номер очереди для вызова и наведения входящих вызовов в модуле Inbound Routes.

Динамические Агенты (операторы Call центра) набирают код '*45' и номер очереди для подключения.

Queue Name

Имя очереди для идентификации в веб интерфейсе. Не используется для вызовов.

Queue Password

Можно ограничить доступ в очередь для операторов Call центра паролем. Эта опция необязательна.

Generate Device Hints

YesNo

Asterisk "Hints"

Тонкий намек, на толстые обстоятельства.

Asterisk реализует механизм SUBSCRIBE/NOTIFY для уведомления о событиях при помощи SIPсообщений. Asterisk осведомлен о состоянии различных объектов, находящихся в его ведении: телефонов, голосовой почты, очередей и др. Состояние расширения Asterisk это не тоже самое, что состояние устройства (device state). Протокол SIPрассылая сообщения SUBSCRIBE/NOTIFY информирует о состоянии устройства. Чтобы информировать о состояниях Extensions Asterisk, используется понятие «hint», которое при помощи диалплана сопоставляет устройство и расширение (extensions) Asterisk:
[hints]
exten ⇒ расширение,hint,устройство

[subscribers]
exten ⇒ 2777,hint,PJSIP/777

В примере, SIPустройство PJSIP/2777 сопоставляется с расширением 2777.

[subscribers]
exten ⇒ Таня,hint,PJSIP/2777

В примере, SIPустройство PJSIP/2666 сопоставляется с именем 'Таня'.

Если этот параметр включен, индивидуальные hints будут сгенерированы для каждого устройства, которое назначено для обслуживания очереди. Hints используются в сочетании с программируемыми BLF кнопками телефона, чтобы при входе или выходе из обслуживания очереди генерировать статус текущего состояния для BLF. Формат hints.

*45ddd*qqq

где *45 код переключения по умолчанию, ddd - номер устройства и qqqномер очереди.

Call confirm

Требовать подтверждения от оператора для приема вызова .
YesNo

Call Confirm Announce

Сообщение будет воспроизведено оператору очереди при поступлении вызова, для подтверждения приема перед ответом (если Call Confirm=yes ). По умолчанию воспроизводится стандартное сообщение подтверждения (если оператор доступен не через сервис Follow-Me) или альтернативное сообщение, если оператор доступен через Follow-Me. Установленное здесь сообщение переопределяет все остальные. Для добавления сообщений используйте модуль FreePBX 12 System Recordings.

CID name prefix

Добавляет префикс к callerid «name» поступившего вызова. Если, например, агент обслуживает несколько очередей, позволяет обозначить из какой очереди поступил вызов.

Wait Time Prefix

YesNo

Alert Info

Добавить информацию в Alert-Info SIP Header для Snom и других телефонов поддерживающих эту функцию.

Restrict Dynamic Agents

Ограничить регистрацию динамических агентов только списком Динамических агентов. Если установлено в 'yes', то динамические агенты не указанные списке не смогут подключится к обслуживанию очереди. YesNo

Agent Restrictions

Если установлено в значение 'Call as Dialed' то очередь совершает вызов, также, как и обычный внутренний вызов в системе. Но тогда, все установки 'FollowMe' и 'Call Forward' установленные для внутреннего номера, будут уводить вызовы из очереди согласно этим значениям. Это поведение по умолчанию для последних версий FreePBX. Если установлено в значение 'No Follow-Me or Call Forward' то вызовы агентов будут ограничены только внутренним номером. Установки 'FollowMe' и 'Call Forward' будут игнорироваться. Если установлено в значение 'Extensions Only' то вызовы из очереди будут проходить так же, как при значениях 'No Follow-Me or Call Forward'. Но будут вызываться, только екстеншены заданные в пределах системы (FreePBX).

Call as DialedNo Follow-Me or Call ForwardExtensions Only

Ring Strategy

  • ringall: вызывать всех агентов одновременно, пока кто-нибудь не ответит.
  • leastrecent: вызывать агента, который меньше всех вызывался в последнее время.
  • fewestcalls: вызвать агента с наименьшим количеством отвеченных вызовов.
  • random: случайный выбор агента
  • rrmemory: по кругу, начиная со следующего после ответившего последним.
  • rrordered: то же, что и rrmemory, только в порядке заданном в конфиге.
  • linear: взывать агентов в порядке перечисления, для динамических, в по времени регистрации.
  • wrandom: случайно, используя пенальти.

Autofill

Если авто-заполнение включено (Yes), звонок с любой позиции в очереди, пытается вызвать свободных агентов в порядке определенном заданной стратегией вызова.
Если выключено(No), только вызов находящийся на первом месте в очереди подается агентам, пока кто-то из них не ответит, остальные же, ожидают первой позиции в очереди и только тогда подаются на свободных операторов.
YesNo

Очевидно, что включение данной опции, позволит сократить время ожидания в очереди, за счет периода, с момента начала посылки первого вызова операторам и ответа на него.
В больших очередях, с множеством вызовов, это может быть очень существенно.

Skip Busy Agents

  • No: Вызывать даже если телефон оператора занят.
  • Yes: Пропускать агента, если телефон возвращает 'Busy'. Много-канальные телефоны и аппараты с включенной опцией 'Call Waitng' также будут пропущены. При стратегиях вызова hunt-* очередь попытается вызвать следующего агента.
  • Yes + (ringinuse=no): Дополнительно к описанному выше поведению, устанавливает опцию очереди ringinuse=no. При этом любой пользователь очереди находящийся в состоянии вызова или разговора имеющий статус 'inuse' пропускается.
  • Queue calls only (ringinuse=no): Принимаются во внимание состояния только для вызовов принятых в очереди. Если оператор совершает исходящий вызов, он будет считаться доступным. Однако, если оператор принял вызов из очереди и переадресовал его дальше, он будет считаться занятым, пока переадресованный вызов не будет завершен.

NoYesYes + (ringinuse=no)Queue calls only (ringinuse=no)

Queue Weight

Чем меньше число, тем выше приоритет очереди. Для агентов обслуживающих более одной очереди, это означает что вызов из такой очереди имеет больший приоритет. По умолчанию - 0, то есть не использовать вес очереди.

Music on Hold Class

Музыка на Удержании проигрывается ожидающему абоненту, пока он ожидает ответа оператора. Унаследованный (тот же, что на входящем маршруте), По Умолчанию (в системе) и Нет, выбор дефолтных значений. Если у вас настроены пользовательские классы MOH, они тоже появятся в списке.

  • MoH Only - воспроизводить музыку пока агент не ответит.
  • Agent Ringing - Музыка играет, пока вызов не подается на телефон агента, в этот момент абонент слышит гудки. Если агент не отвечает, снова проигрывается музыка.
  • Ring Only - всегда гудки.

MoH OnlyAgent RingingRing Only

Join Announcement

Объявление проигрывается перед попаданием абонента в очередь. Если есть свободные агенты, объявление может быть пропущено, если выбрать опцию 'When No Free Agents', т.е. проигрывать, только если нет свободных агентов. Записи объявлений можно добавить в модуле System Recordings.

AlwaysWhen No Free AgentsWhen No Ready Agents

Call Recording

Записывать входящие вызовы. Если выбрано 'never' запись по запросу (on demand) недоступна.

ForceYesDon't CareNoNever

  • Forceи Neverимеют приоритет над "Yes" или "No".
  • Yesи Noимеют равный приоритет.
    • Если несколько Yesили Noвстречаются на пути вызова, самая первая установка имеет приоритет над последующими.
    • Последующие Yesили Noне переопределяют заданные ранее "Yes" или "No".
  • Forceи Neverвсегда переопределяют установки заданные ранее.
    • Forceи Neverвсегда переопределяют друг друга. Т.е. если сначала было "Force", а затем "Never" вызов не будет записан.
    • Forceили Neverпереопределяют "Yes" или "No".
    • Yesи Noне переопределяют "Force" или "Never".
  • Don't Careне затрагивает заданные ранее установки.

см. также Extensions - Recording Options

Mark calls answered elsewhere

Помечать отклоненные вызовы, как отвеченные. (Чтобы на телефоне не было сообщений о пропущенных вызовах)

YesNo

Fail Over Destination

Назначение по неответу и истечению таймаута очереди, если задано.

Timing & Agent Options

Параметры времени и операторов

Max Wait Time

Максимальное время нахождения в очереди. По его истечению, будет выполнен пункт Fail Over Destinationпо умолчанию неограниченно.

Max Wait Time Mode

Параметры таймаута вызова в очереди. Определяет отношения абсолютного таймаута очереди и таймаута оператора.
Когда 'Max Wait Time' истекло, что делать:

  • В режиме 'Strict' (строгий) - когда истек интервал 'Max Wait Time', вызов будет сразу направлен в Fail Over Destination.
  • В режиме 'Loose' (мягкий) - текущий оператор будет вызываться, пока не истечет таймаут вызова оператора в очереди, после этого вызов покинет очередь.

Читайте подробнее о таймаутах в очереди Queues.conf - Timeout

StrictLoose

Agent Timeout

Время в секундах, в течение которого вызов будет поступать на телефон оператора, после которого наступит таймаут Retry, а затем вызов снова будет подан операторам в зависимости от заданной стратегииочереди.

Agent Timeout Restart

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

ДаНет

Retry

Через сколько секунд будет повторена попытка позвонить снова на все телефоны. Выбирая вариант «Без повторений» звонок будет направлен из очереди по назначению при неответе. Звонок перенаправится туда после тайм-аута у первого оператора, переход на второго оператора не произойдёт.

Wrap-Up-Time

Указывает сколько секунд агент останется свободным после окончания очередного вызова из очереди. Если используете Asterisk 1.6 и выше, Вы также можете установить параметр 'Применить передышку для всех очередей' на странице 'Дополнительные настройки' и операторы, работающие в нескольких очередях будут иметь перерыв после вызова в любой очереди.

Member Delay

Данный параметр позволяет установить задержку в секундах между ответом оператора и соединением с вызывающим абонентом (или оповещением).

Agent Announcement

Оповещение, воспроизводимое оператору, перед соединением с вызывающим абонентом

Для добавления оповещения используйте раздел FreePBX 12 System Recordings.

Report Hold Time

Если хотите сообщать позвонившему время ожидания прежде чем его соединят с оператором - установите Да.

ДаНет

Auto Pause

Поставить агента на паузу в данной очереди (или во всех очередях обслуживаемых оператором), если тот не ответил на вызов . Уточните данное поведение при помощи других настроек: Auto Pause Delay, Auto Pause Busy/Unavailable.

  • Yes in this queue only - только в данной очереди
  • Yes in all queues - во всех очередях
  • Нет - не использовать автопаузу

Yes in this queue onlyYes in all queuesНет

Auto Pause on Busy

Поставить агента на паузу в данной очереди если он занят.

ДаНет

Auto Pause on Unavailable

Поставить агента на паузу в данной очереди если он недоступен.

ДаНет

Auto Pause Delay

Отложить постановку на паузу на заданное время. Если за это время агент ответит на вызов, пауза отменяется, если нет, то применяется. По умолчанию 0

Capacity Options

Параметры емкости очередиfreepbx13-queue-capacity-options

Max Callers

Максимально число ожидающих в очереди (0 - неограниченно)

Join Empty

Если установлено Да, новый вызов поступает в очередь независимо, есть в ней пользователи способные принять вызов, если нет - сразу используется Fail Over Destination.
Возможные значения:

  • Yes - Вызов всегда поступает в очередь.
  • Strict - Такой же режим, но более строгий. Если нет операторов, которые могли бы обработать вызов, он не помещается в очередь. Если операторы имеются в очереди, то вызов поступает в очередь, даже если операторы заняты и не могут принять вызов непосредственно.
  • Ultra strict - В этом режиме звонок будет помещен в очередь, в случае есть непосредственно доступные операторы. Операторы, занятые другими вызовами, считаются недоступными. Если доступных операторов нет, звонок в очередь не поступает.
  • NoВызовы не будут поступать в очередь если все операторы приостановлены, находятся в недоступном режиме, или имеют доступность (penalty value) меньше, чем QUEUE_MAX_PENALTY. На текущий момент не устанавливается в номерном плане FreePBX. Подробнее о пенальтив Asterisk
  • LooseТоже самое, что и 'No', кроме наличия приостановленных операторов, которые могли бы стать активными.

YesStrictUltra StrictNoLoose

Leave Empty

Определяет, что вызов должен быть преждевременно удален из очереди, если не осталось свободных операторов, способных обработать звонок Параметр может принимать значения:

  • YesВызовы будут удаляться очереди если все операторы приостановлены, находятся в недоступном режиме, или имеют доступность (penalty value) меньше, чем QUEUE_MAX_PENALTY. На текущий момент не устанавливается в номерном плане FreePBX.
  • StrictТакой же режим, как 'Да', но более ограниченный. Если нет операторов, которые могли бы обработать вызов, он удаляется из очереди. Если операторы имеются в очереди, то вызов поступает в очередь, даже если операторы заняты и не могут принять вызов непосредственно.
  • Ultra StrictТакой же режим, как и 'Strict', но очередь должна иметь операторов, способных сразу обработать вызов. Операторы, занятые обработкой других вызовов считаются как недоступные.
  • LooseТакой же режим, как 'Yes', но вызовы будут оставаться в очереди, даже если все операторы приостановлены, но могут стать активными.
  • NoНикогда не удалять вызов из очереди до истечения максимального времени ожидания.

YesStrictUltra StrictNoloose

Penalty Members Limit

Если очередь обслуживают выбранное кол-во или меньше операторов, не использовать пенальти
Подробнее о пенальти: queues.conf

Caller Announcements

freepbx13-queues-caller-announcement

Frequency

Как часто объявляется позиция в очереди и приблизительное время ответа агента, Установите 0 для полного отключения этой функции.

Announce Position

Установите «yes» для объявления позиции.

YesNo

Announce Hold Time

Анонсировать время ожидания в очереди. Не объявляется если осталось менее минуты.

YesNoOnce

Periodic Announcements

Объявление в разрыв. Назначается в IVR

IVR Break Out Menu

Перенаправить вызов в заданный IVRс последующим возвращением в очередь, если абонент ничего не выбрал.

Repeat Frequency

Частота повторения IVR.

Advanced options

Service Level

Параметр статистики очереди. Например, если задано 20 секунд, очередь будет подсчитывать процент отвеченных за это время вызовов: SL: 45.8% within 20s.

Фильтр регулярных выражений для операторов

Agent Regex Filter Задайте регулярные выражения. Все что попадает в фильтр агенты смогут набирать, остальное нет.

Reset Queue Stats

Скачать FreePBX

Asterisk настройка TLS SRTP для PJSIP

$
0
0

Asterisk настройка TLS SRTP для PJSIP

asterisk-pjsip-tls-srtp Настроим защищенное подключение SIPклиентов к Asterisk 14 за NAT, используя драйвер PJSIP, транспорт TLS и шифрование голоса SRTP.

См. также SIP TLS SRTP Asterisk

На входе у нас Asterisk 14 скомпилированный с поддержкой srtp:

 yum install  libsrtp libsrtp-devel
 ./configure --libdir=/usr/lib64 --with-crypto --with-ssl=ssl --with-srtp

Transport Layer Security (TLS) обеспечивает шифрование сигнализации SIP. Это способ защитить информацию о вызовах от man in the middle. SRTP обеспечивает шифрование голоса. Для настройки TLS между Asterisk и SIPклиентом требуется:

  1. Создать ключи шифрования.
  2. Настроить транспорт драйвера PJSIP для использования TLS.
  3. Настроить PJSIP Endpoint и SIPклиент для использования TLS и SRTP.

Убедитесь что модуль res_srtp.soзагружен.

*CLI> module show like srtp
Module                         Description                              Use Count  Status      Support Level
res_srtp.so                    Secure RTP (SRTP)                        0          Running              core
1 modules loaded

Если нет, попытайтесь загрузить его:

*CLI> module load res_srtp.so
Loaded res_srtp.so
 Loaded res_srtp.so => (Secure RTP (SRTP))

Asterisk TLS keys

Сперва создадим само-подписанные сертификаты и ключи шифрования.

Создать директорию для ключей:

  mkdir /etc/asterisk/keys

С исходниками Asterisk поставляется скрипт для создания ключей:

  cd  /usr/src/asterisk-14*/contrib/scripts/

в моем случае, это Asterisk 14, но пойдет и 13, и м.б. 12. Выполните скрипт с тремя ключами:

./ast_tls_cert -C pbx.asterisk-pbx.ru -O "asterisk-pbx.ru" -d /etc/asterisk/keys
  • «-C» - укажите домен или ip адрес
  • «-O» - укажите имя
  • «-d» - директория для ключей

ast_tls_cert

ast_tls_cert

No config file specified, creating '/etc/asterisk/keys/tmp.cfg'
You can use this config file to create additional certs without
re-entering the information for the fields in the certificate
Creating CA key /etc/asterisk/keys/ca.key
Generating RSA private key, 4096 bit long modulus
..++
........................................................................................................................++
e is 65537 (0x10001)
Enter pass phrase for /etc/asterisk/keys/ca.key:
Verifying - Enter pass phrase for /etc/asterisk/keys/ca.key:
Creating CA certificate /etc/asterisk/keys/ca.crt
Enter pass phrase for /etc/asterisk/keys/ca.key:
Creating certificate /etc/asterisk/keys/asterisk.key
Generating RSA private key, 1024 bit long modulus
.++++++
.........++++++
e is 65537 (0x10001)
Creating signing request /etc/asterisk/keys/asterisk.csr
Creating certificate /etc/asterisk/keys/asterisk.crt
Signature ok
subject=/CN=pbx.asterisk-pbx.ru/O=asterisk-pbx.ru
Getting CA Private Key
Enter pass phrase for /etc/asterisk/keys/ca.key:
Combining key and crt into /etc/asterisk/keys/asterisk.pem

В ходе выполнения этой операции, вам будет предложено ввести секретную фразу и повторить ее два раза. Сохраните пароль, в дальнейшем он понадобится для генерации пользовательских сертификатов. В результате будут созданы следующие файлы и помещены в директорию заданную ключом 'd' :

  • asterisk.crt
  • asterisk.csr
  • asterisk.key
  • asterisk.pem
  • ca.cfg
  • ca.crt
  • ca.key
  • tmp.cfg

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

  ./ast_tls_cert -m client -c /etc/asterisk/keys/ca.crt -k /etc/asterisk/keys/ca.key -C pbx.asterisk-pbx.ru -O "asterisk-pbx.ru" -d /etc/asterisk/keys -o zvezdo4kin
  • «-m client» - получить клиентский сертификат.
  • «-c /etc/asterisk/keys/ca.crt» - указать наш же 'Certificate Authority'.
  • «-k /etc/asterisk/keys/ca.key» - указать ключ для 'Certificate Authority'.
  • «-C» - хост или ip адрес, те же, что и для сервера
  • «-O» - имя компании, то же что и для сервера.
  • «-d» - директория с ключами
  • «-o» - имя для клиентского сертификата.

В итоге получим такие файлы:

  • zvezdo4kin.crt
  • zvezdo4kin.csr
  • zvezdo4kin.key
  • zvezdo4kin.pem

Когда с сертификатами и ключами покончено, можно переходить к настройке Asterisk.

Asterisk TLS SRTP PJSIP

Создадим транспорт pjsip и пользовательcкий аккаунт.

/etc/asterisk/pjsip.conf

transport pjsip

[transport-tls]
type=transport
protocol=tls
bind=0.0.0.0:5066
cert_file=/etc/asterisk/keys/asterisk.crt
priv_key_file=/etc/asterisk/keys/asterisk.key
domain=pbx.asterisk-pbx.ru
external_media_address=123.123.123.111
external_signaling_address=123.123.123.111
local_net=192.168.0.0/16
method=tlsv1
allow_reload=true

Специфические настройки транспорта для TLS налицо:

  • protocol=tls
  • cert_file=/etc/asterisk/keys/asterisk.crt
  • priv_key_file=/etc/asterisk/keys/asterisk.key
  • method=tlsv1

Сервер находится за NAT, поэтому укажем внешний медиа и сигнальный адрес:

  • external_media_address=123.123.123.111
  • external_signaling_address=123.123.123.111

Будем работать по порту 5066

  • bind=0.0.0.0:5066

На шлюзе/роутере пробросьте диапазон портов RTP (tcp и udp) и сигнальный порт 5066 (tcp и udp)

pjsip endpoint, aor, auth

[zvezdo4kin]
type=aor
max_contacts=1
remove_existing=yes

[zvezdo4kin]
type=auth
auth_type=userpass
username=zvezdo4kin
password=mypassword

[zvezdo4kin]
type=endpoint
transport=transport-tls
direct_media=no
aors=zvezdo4kin
auth=zvezdo4kin
context=from-zvezdo4kin
dtls_cert_file=/etc/asterisk/keys/zvezdo4kin.crt
dtls_private_key=/etc/asterisk/keys/zvezdo4kin.key
disallow=all
allow=opus
allow=alaw
allow=ulaw

force_rport=yes
ice_support=yes
rewrite_contact=yes

dtmf_mode=rfc4733
media_encryption=sdes

В параметрах ENDPOINT пользовательского аккаунта зададим метод шифрования голоса:

  • media_encryption=sdes

Применим настройки рестартом asterisk (иначе транспорт не поднять) и убедимся, что он взлетел:

*CLI> pjsip show transport transport-tls

Transport:  <TransportId........>  <Type>  <cos>  <tos>  <BindAddress....................>
==========================================================================================

Transport:  transport-tls             tls      0      0  0.0.0.0:5066

 ParameterName              : ParameterValue
 ============================================================
 allow_reload               : false
 async_operations           : 1
 bind                       : 0.0.0.0:5066
 ca_list_file               :
 ca_list_path               :
 cert_file                  : /etc/asterisk/keys/asterisk.crt
 cipher                     :
 cos                        : 0
 domain                     : pbx.asterisk-pbx.ru
 external_media_address     : 123.123.123.111
 external_signaling_address : 123.123.123.111
 external_signaling_port    : 0
 local_net                  : 192.168.0.0/255.255.0.0
 method                     : tlsv1
 password                   :
 priv_key_file              : /etc/asterisk/keys/asterisk.key
 protocol                   : tls
 require_client_cert        : No
 tos                        : 0
 verify_client              : No
 verify_server              : No
 websocket_write_timeout    : 100

В дальнейшем, изменения в настройках транспорта, можно будет применять командой core reload, если при настройке транспорта указать allow_reload=true, иначе, по умолчанию, только рестартом.

Теперь осталось, только настроить SIPклиент.

Asterisk TLS SRTP SIP клиент

Софтфон Zoiper прекрасно работает с SRTP, как в десктопном, так и мобильном варианте на Android. Для iPhone хорошо себя зарекомендовала Bria.

Zoiper > Preference > Accounts > General
Стандартные настройки авторизации SIP

asterisk-pjsip-zoiper-tls-srtp

Zoiper > Preference > Accounts > Advanced

  • Use Rport - включить
  • Use Rport Media - включить
  • Use TLS Transport - выбрать
  • TLS with SDES SRTP - выбрать

Tls Client Certificate
Предварительно скопируйте сертификаты в доступную smb директорию

  • Certificate File - пользовательский сертификат 'user.pem'
  • Use sertificate As - Use Certificate

asterisk-pjsip-zoiper-tls-srtp-advanced

Zoiper > Preference > Advanced > Security
TLS options:

  • Extra CA Certificate (PEM) - пользовательский сертификат 'user.pem'
  • Local Domain Certificate - включить и загрузить 'asterisk.pem'
  • Disable Certificate Verification - включить

Страшная надпись предупреждает об опасности: DANGEROUS! DO NOT USE!
Но так как, мы используем само-подписанный сертификат, если не выключить верификацию, то ркгистрация не удастся. Нас предупреждают о опасности использования не удостоверенных доверенным издателем сертификатов, так же как браузер предупреждает, что сайт использует self-signedсертификат.

  • Protocol Suite - TLS v1

asterisk-pjsip-zoiper-tls-srtp-preference-advanced

Когда регистрация успешно завершена, сделаем звонок. Иконка с закрытым замком указывает на защищенное соединение.

zoiper call encrypted srtp tls

Тестирование

Хорошо бы еще убедиться, что сигнализация и голос зашифрованы. Это можно сделать при помощи приложения tcpdump

для сигнализации:

  tcpdump -nqt -s 0 -A -vvv -i eth0 port 5061

где eth0сетевой интерфейс.

Для голоса:

  tcpdump -nqt -s 0 -A -vvv -i eth0 portrange 10000-20000

Asterisk настройка


Установка Asterisk 13/14 + FreePBX 13 на CentOS 7

$
0
0

Установка Asterisk 13/14 + FreePBX 13 на CentOS 7

CentOS 7 64-bit Asterisk 13, FreePBX 13 , libpri, DAHDI, Mysql (mariadb), apache2, lame, php, httpd.conf, php.ini

Выключение SELinux

sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config

Зависимости

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install -y kernel-devel kernel-headers
yum install -y e2fsprogs-devel  keyutils-libs-devel krb5-devel libogg \
libselinux-devel libsepol-devel libxml2-devel libtiff-devel gmp php-pear \
php php-gd php-mysql php-pdo php-mbstring ncurses-devel \
mysql-connector-odbc unixODBC unixODBC-devel \
audiofile-devel libogg-devel openssl-devel zlib-devel  \
perl-DateManip sox git wget net-tools psmisc
yum install -y gcc gcc-c++ make gnutls-devel \
libxml2-devel ncurses-devel subversion doxygen \
texinfo curl-devel net-snmp-devel neon-devel  \
uuid-devel libuuid-devel sqlite-devel sqlite \
speex-devel gsm-devel libtool libtool-ltdl libtool-ltdl-devel \\
libsrtp libsrtp-devel xmlstarlet

Сделайте полный апдейт

 yum update -y

Перезагрузите компьютер

 reboot

Установка mysql (mariadb)

1: Установим mariadb (MySQL)

 yum -y install mariadb-server mariadb mariadb-devel

2: Запустим и включим автозагрузку mariadb (MySQL)

 systemctl start mariadb.service
 systemctl enable mariadb.service

3: Запустим интерактивный конфигуратор (будет предложено задать пароль пользователя root для mysql и др.)

 mysql_secure_installation

показать

показать

Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] n
 ... skipping.

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Установите PearDB

 pear uninstall db
 pear install db-1.7.14

SRTP

  cd /usr/src && wget http://srtp.sourceforge.net/srtp-1.4.2.tgz 
tar zxvf srtp-1.4.2.tgz && 
cd srtp && autoconf && 
./configure CFLAGS=-fPIC --prefix=/usr && 
make && 
make runtest && 
make install

Pjproject

 cd /usr/src && git clone https://github.com/asterisk/pjproject pjproject 
cd pjproject/ && 
./configure --libdir=/usr/lib64 --prefix=/usr --enable-shared --disable-sound --disable-resample --disable-video &&
make dep &&
make &&
make install &&
ldconfig &&
ldconfig -p | grep pj

Вывод ldconfig -p | grep pj

Вывод ldconfig -p | grep pj

        libpjsua.so (libc6,x86-64) => /usr/lib/libpjsua.so
        libpjsip.so (libc6,x86-64) => /usr/lib/libpjsip.so
        libpjsip-ua.so (libc6,x86-64) => /usr/lib/libpjsip-ua.so
        libpjsip-simple.so (libc6,x86-64) => /usr/lib/libpjsip-simple.so
        libpjnath.so (libc6,x86-64) => /usr/lib/libpjnath.so
        libpjmedia.so (libc6,x86-64) => /usr/lib/libpjmedia.so
        libpjmedia-videodev.so (libc6,x86-64) => /usr/lib/libpjmedia-videodev.so
        libpjmedia-codec.so (libc6,x86-64) => /usr/lib/libpjmedia-codec.so
        libpjmedia-audiodev.so (libc6,x86-64) => /usr/lib/libpjmedia-audiodev.so
        libpjlib-util.so (libc6,x86-64) => /usr/lib/libpjlib-util.so
        libpj.so (libc6,x86-64) => /usr/lib/libpj.so

libjansson

 cd /usr/src && wget http://www.digip.org/jansson/releases/jansson-2.5.tar.gz
tar zvxf jansson-2.5.tar.gz && 
cd jansson-2.5 && 
./configure --prefix=/usr/ && 
make clean && 
make && 
make install && 
ldconfig

Исходники

cd /usr/src &&  
wget http://sourceforge.net/projects/lame/files/lame/3.98.4/lame-3.98.4.tar.gz &&
wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz &&
wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-1.5.0.tar.gz &&
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz &&
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-14-current.tar.gz

Lame

cd /usr/src && 
tar zxvf lame-3.98.4.tar.gz && 
cd lame-3.98.4 && 
./configure && 
make && 
make install 

DAHDI & LibPRI

 yum install "kernel-devel-uname-r == $(uname -r)"
cd /usr/src && 
tar xvfz dahdi-linux-complete-current.tar.gz && 
cd dahdi-linux-complete-* && 
make all && 
make install && 
make config
cd /usr/src && 
tar xvfz libpri-1.5.*.tar.gz && 
cd /usr/src/libpri-1.5.* && 
make && 
make install

SpanDSP

cd /usr/src && wget http://soft-switch.org/downloads/spandsp/spandsp-0.0.6.tar.gz
tar zxvf spandsp-0.0.6.tar.gz && 
cd spandsp-0.0.6 && 
./configure && 
make && 
make install &&
ln -s /usr/local/lib/libspandsp.so.2 /usr/lib64/libspandsp.so.2

Asterisk 12/13/14

cd /usr/src && 
tar xvfz asterisk-14*.tar.gz &&
cd asterisk-14.* &&
./configure --libdir=/usr/lib64 --with-crypto --with-ssl=ssl --with-srtp &&
contrib/scripts/get_mp3_source.sh &&
make menuselect

Asterisk 13

Asterisk 13

cd /usr/src && 
tar xvfz asterisk-13*.tar.gz &&
cd asterisk-13.* &&
./configure --libdir=/usr/lib64 --with-crypto --with-ssl=ssl --with-srtp &&
contrib/scripts/get_mp3_source.sh &&
make menuselect

Asterisk 12

Asterisk 12

cd /usr/src && 
tar xvfz asterisk-12-current.tar.gz &&
cd asterisk-12.* &&
./configure --libdir=/usr/lib64 &&
contrib/scripts/get_mp3_source.sh &&
make menuselect

После ввода команды make menuselect, вам будет предложено выбрать устанавливаемые модули. Большинство требуемых модулей выбираются автоматически. Для поддержки mp3 включите модуль 'format_mp3'

 --->  Add-ons (See README-addons.txt)  
             --- extended ---
             XXX chan_mobile
             [*] chan_ooh323
             [*] format_mp3
             [*] res_config_mysql
             --- deprecated ---
             [*] app_mysql
             [*] app_saycountpl
             [*] cdr_mysql

  ---> Core Sound Packages
            [*] CORE-SOUNDS-RU-GSM
  --->  Extras Sound Packages
            [*] EXTRA-SOUNDS-EN-GSM  
make && make install && make config && ldconfig
 sed -i 's/ASTARGS=""/ASTARGS="-U asterisk"/g'  /usr/sbin/safe_asterisk

Создайте пользователя Asterisk и задайте права пользователя.

useradd -m asterisk &&
chown asterisk.asterisk /var/run/asterisk &&
chown -R asterisk.asterisk /etc/asterisk &&
chown -R asterisk.asterisk /var/{lib,log,spool}/asterisk &&
chown -R asterisk.asterisk /usr/lib64/asterisk 

Настроим httpd (Apache)

cp /etc/php.ini /etc/php.ini_orig &&
sed -ie 's/\;date\.timezone\ \=/date\.timezone\ \=\ "Europe\/Moscow"/g' /etc/php.ini &&
sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php.ini &&
cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf_orig &&
sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/httpd/conf/httpd.conf &&
sed -i 's/AllowOverride None/AllowOverride All/'  /etc/httpd/conf/httpd.conf &&
systemctl restart httpd &&
systemctl enable httpd

FreePBX

freepbx13

pear install Console_Getopt
cd /usr/src &&
wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-13.0-latest.tgz
tar zxvf freepbx-13.0-latest.tgz &&
cd freepbx &&
./start_asterisk start
 ./install -n

Подключимся к FreePBX

http://IP.Address.FreePBX.Server/admin

Первым делом, вам будет предложено задать имя пользователя и пароль FreePBX

freepbx start set user login

Can Not Connected To Asterisk

Если появится предупреждение Can Not Connected To Asterisk, а Asterisk точно запущен, закомментируйте инклюды в файле /etc/asterisk/manager.conf

;#include manager_additional.conf
;#include manager_custom.conf

Установка Asterisk

Asterisk PJSIP Realtime

$
0
0

Asterisk PJSIP Realtime

pjsip-realtime Настройка ODBCреалтайм хранилища для объектов PJSIP - AORs, AUTHs, ENDPOINTs.

Требуемые пакеты

 yum install mysql-connector-odbc unixODBC unixODBC-devel libmyodbc

Создадим базу данных MySQL

 mysqladmin -u root -p create realtimedb

Создайте пользователя и задайте права на БД:

 mysql -u root -p -e "grant all privileges on realtimedb.* to db_user@localhost identified by 'db_password';"
 mysql -u root -p -e "flush privileges;"

Импортируем схему базы данных

 wget https://asterisk-pbx.ru/downloads/schema/realtime.sql
 mysql -u root -p realtimedb < realtime.sql

Получим следующие таблицы:

Получим следующие таблицы:

MariaDB [(none)]> use realtimedb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [realtimedb]> show tables;
+-----------------------------+
| Tables_in_realtimedb        |
+-----------------------------+
| extensions                  |
| iaxfriends                  |
| meetme                      |
| musiconhold                 |
| ps_aors                     |
| ps_auths                    |
| ps_contacts                 |
| ps_domain_aliases           |
| ps_endpoint_id_ips          |
| ps_endpoints                |
| ps_globals                  |
| ps_registrations            |
| ps_subscription_persistence |
| ps_systems                  |
| ps_transports               |
| queue_members               |
| queue_rules                 |
| queues                      |
| sippeers                    |
| voicemail                   |
+-----------------------------+
20 rows in set (0.00 sec)

Настроим unixODBC

Файл odbcinst.ini создается при установке unixodbc и, как правило, не требует изменений:

# Driver from the mysql-connector-odbc package
# Setup from the unixODBC package
[MySQL]
Description     = ODBC for MySQL
Driver          = /usr/lib/libmyodbc5.so
Setup           = /usr/lib/libodbcmyS.so
Driver64        = /usr/lib64/libmyodbc5.so
Setup64         = /usr/lib64/libodbcmyS.so
FileUsage       = 1

В файле odbc.iniнастроим dsn:

nano /etc/odbc.ini

(файл odbc.ini по умолчанию не создан)

[asterisk]
Driver = MySQL
Description = MySQL connection to ‘asterisk’ database
Server = localhost
Port = 3306
Database = realtimedb
UserName = db_user
Password = db_password

Проверим подключение:

Проверим подключение:

 echo "select 1" | isql -v asterisk db_user  db_password
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select 1
+---------------------+
| 1                   |
+---------------------+
| 1                   |
+---------------------+
SQLRowCount returns 1
1 rows fetched

Настроим Asterisk res_odbc

/etc/asterisk/res_odbc.conf

[asterisk]
enabled => yes
dsn => asterisk
username => db_user
password => db_password
pre-connect => yes

В файле /etc/asterisk/modules.confвключите загрузку модулей odbc:

[modules]
preload => res_odbc.so
preload => res_config_odbc.so

Проверим подключение в Asterisk:

 asterisk -rx 'core reload' && asterisk -rx 'odbc show'
ODBC DSN Settings
-----------------

  Name:   asterisk
  DSN:    asterisk
    Number of active connections: 1 (out of 1)

Asterisk sorcery.conf

Sorcery определяет иерархию использования данных в Asterisk.
В данном случае мы укажем, что модуль res_pjsipхранит данные перечисленных объектов (aors, auths, endpoints, domain_alias и contact) в реалтайм хранилище:

/etc/asterisk/sorcery.conf
[res_pjsip] ; Realtime PJSIP configuration wizard
endpoint=realtime,ps_endpoints
auth=realtime,ps_auths
aor=realtime,ps_aors
domain_alias=realtime,ps_domain_aliases
contact=realtime,ps_contacts
[res_pjsip_endpoint_identifier_ip]
identify=realtime,ps_endpoint_id_ips

формат:
object type [/options] = wizard name, wizard configuration data

где, в данном примере wizard name - realtime, а wizard configuration data - имя объекта из /etc/asterisk/extconfig.conf.

Для использования смешанной конфигурации (реалтайм и статической), используется следующая схема:

endpoint=realtime,ps_endpoints
endpoint=config,pjsip.conf,criteria=type=endpoint

Asterisk Realtime extconfig.conf

Свяжем объекты pjsip с реалтайм коннектором res_odbc (asterisk) .
/etc/asterisk/extconfig.conf

[settings]
ps_endpoints => odbc,asterisk
ps_auths => odbc,asterisk
ps_aors => odbc,asterisk
ps_domain_aliases => odbc,asterisk
ps_endpoint_id_ips => odbc,asterisk
ps_contacts => odbc,asterisk

формат:
объект ⇒ драйвер, имя коннектора, <имя таблицы>
Если имя таблицы не задано, то по умолчанию назначается, как имя объекта. Подробнее о реалтайм конфигурации - Asterisk Realtime: extconfig.conf

Asterisk конфигурация PJSIP

Транспорт PJSIP лучше определить в текстовой конфигурации:

/etc/asterisk/pjsip.conf

[transport-udp]
type = transport
protocol = udp
bind = 0.0.0.0:5060
local_net = 192.168.0.0/24
external_media_address = extern ip address
external_signaling_address = extern ip address
allow_reload=true

Заполнение базы данных PJSIP

Для создания внутренних номеров, достаточно заполнить минимальными параметрами три ключевых таблицы:

  • ps_aors
 insert into ps_aors (id, max_contacts) values (1001, 1);
  • ps_auths
 insert into ps_auths (id, auth_type, password, username) values (1001, 'userpass', 'Pass', 1001);
  • ps_endpoints
 insert into ps_endpoints (id, transport, aors, auth, context, disallow, allow, direct_media) values (1001, 'transport-udp', '1001', '1001', 'testing', 'all', 'alaw,ulaw,opus', 'no');

tips&tricks: Импорт из csv файла

Для автоматизации наполнения таблиц MySQL удобно использовать csv файлы.
Создайте следующий csv файл, например при помощи приложения OpenOffice Calc:

1000,transport-udp,1000,1000,from-internal,all,"alaw,ulaw,opus","no",
1001,transport-udp,1001,1001,from-internal,all,"alaw,ulaw,opus","no",

где в каждой новой строке данные уникального номера.

Импортируйте данный в таблицу MySQL:

LOAD DATA INFILE '/usr/src/ps_endpoints.csv' 
INTO TABLE ps_endpoints 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

где /usr/src/ps_endpoints.csvпуть к csv файлу.

import csv to mysql

import csv to mysql

MariaDB [testalembic]> LOAD DATA INFILE '/usr/src/ps_endpoints.csv'
    -> INTO TABLE ps_endpoints
    -> FIELDS TERMINATED BY ','
    -> ENCLOSED BY '"'
    -> LINES TERMINATED BY '\n';
Query OK, 1 row affected, 99 warnings (0.01 sec)
Records: 1  Deleted: 0  Skipped: 0  Warnings: 99
MariaDB [realtimedb]> select id,transport,aors,auth,context,allow,disallow,direct_media  from ps_endpoints;
+------+---------------+------+------+---------------+----------------+----------+--------------+
| id   | transport     | aors | auth | context       | allow          | disallow | direct_media |
+------+---------------+------+------+---------------+----------------+----------+--------------+
| 1000 | transport-udp | 1000 | 1000 | from-internal | alaw,ulaw,opus | all      | no           |
+------+---------------+------+------+---------------+----------------+----------+--------------+
1 row in set (0.00 sec)

Обновление данных

Для обновления уже заполненyых строк, используйте команду UPDATE. Например добавим значение в колонку remove_existing:

  update ps_aors set remove_existing = 'yes';
MariaDB [realtimedb]> select id,max_contacts,remove_existing from ps_aors;
+------+--------------+-----------------+
| id   | max_contacts | remove_existing |
+------+--------------+-----------------+
| 1000 |            1 | yes             |
| 1001 |            1 | yes             |
+------+--------------+-----------------+

Asterisk 13 RealTime SIP

$
0
0

Asterisk 13 RealTime SIP

см также: Asterisk PJSIP Realtime

CREATE TABLE `sip_peers` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `accountcode` varchar(20) DEFAULT NULL,
  `directmedia` varchar(128) DEFAULT NULL,
  `disallow` varchar(100) DEFAULT 'all',
  `allow` varchar(100) DEFAULT 'alaw;ulaw;gsm;g729',
  `allowoverlap` enum('yes','no') DEFAULT 'yes',
  `allowsubscribe` enum('yes','no') DEFAULT 'yes',
  `allowtransfer` varchar(3) DEFAULT NULL,
  `amaflags` varchar(13) DEFAULT NULL,
  `autoframing` varchar(3) DEFAULT NULL,
  `auth` varchar(40) DEFAULT NULL,
  `buggymwi` enum('yes','no') DEFAULT 'no',
  `callgroup` varchar(10) DEFAULT NULL,
  `callerid` varchar(80) DEFAULT NULL,
  `cid_number` varchar(40) DEFAULT NULL,
  `fullname` varchar(40) DEFAULT NULL,
  `call-limit` int(8) DEFAULT '0',
  `callingpres` varchar(80) DEFAULT NULL,
  `canreinvite` char(6) DEFAULT 'yes',
  `context` varchar(80) DEFAULT NULL,
  `callbackextension` varchar(80) DEFAULT NULL,
  `defaultip` varchar(15) DEFAULT NULL,
  `defaultuser` varchar(128) DEFAULT NULL,
  `dtmfmode` varchar(7) DEFAULT NULL,
  `encryption` varchar(128) DEFAULT NULL,
  `fromuser` varchar(80) DEFAULT NULL,
  `fromdomain` varchar(80) DEFAULT NULL,
  `fullcontact` varchar(80) DEFAULT NULL,
  `g726nonstandard` enum('yes','no') DEFAULT 'no',
  `host` varchar(31) NOT NULL DEFAULT '',
  `insecure` varchar(20) DEFAULT NULL,
  `ipaddr` varchar(15) NOT NULL DEFAULT '',
  `language` char(2) DEFAULT NULL,
  `lastms` varchar(20) DEFAULT NULL,
  `mailbox` varchar(50) DEFAULT NULL,
  `maxcallbitrate` int(8) DEFAULT '384',
  `mohsuggest` varchar(80) DEFAULT NULL,
  `md5secret` varchar(80) DEFAULT NULL,
  `musiconhold` varchar(100) DEFAULT NULL,
  `name` varchar(80) NOT NULL DEFAULT '',
  `nat` varchar(128) DEFAULT NULL,
  `outboundproxy` varchar(80) DEFAULT NULL,
  `deny` varchar(95) DEFAULT NULL,
  `permit` varchar(95) DEFAULT NULL,
  `pickupgroup` varchar(10) DEFAULT NULL,
  `port` varchar(5) NOT NULL DEFAULT '',
  `progressinband` enum('yes','no','never') DEFAULT 'no',
  `promiscredir` enum('yes','no') DEFAULT 'no',
  `qualify` char(3) DEFAULT NULL,
  `regexten` varchar(80) NOT NULL DEFAULT '',
  `regseconds` int(11) NOT NULL DEFAULT '0',
  `rfc2833compensate` enum('yes','no') DEFAULT 'no',
  `rtptimeout` char(3) DEFAULT NULL,
  `rtpholdtimeout` char(3) DEFAULT NULL,
  `secret` varchar(80) DEFAULT NULL,
  `sendrpid` enum('yes','no') DEFAULT 'yes',
  `setvar` varchar(100) NOT NULL DEFAULT '',
  `subscribecontext` varchar(80) DEFAULT NULL,
  `subscribemwi` varchar(3) DEFAULT NULL,
  `t38pt_udptl` enum('yes','no') DEFAULT 'no',
  `transport` varchar(128) DEFAULT NULL,
  `trustrpid` enum('yes','no') DEFAULT 'no',
  `type` varchar(6) NOT NULL DEFAULT 'friend',
  `useclientcode` enum('yes','no') DEFAULT 'no',
  `usereqphone` varchar(3) NOT NULL DEFAULT 'no',
  `username` varchar(128) DEFAULT NULL,
  `videosupport` enum('yes','no') DEFAULT 'yes',
  `vmexten` varchar(80) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`),
  KEY `name_2` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=74 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;

/etc/odbcinst.ini

# Driver from the mysql-connector-odbc package
# Setup from the unixODBC package
[MySQL]
Description     = ODBC for MySQL
Driver          = /usr/lib/libmyodbc5.so
Setup           = /usr/lib/libodbcmyS.so
Driver64        = /usr/lib64/libmyodbc5.so
Setup64         = /usr/lib64/libodbcmyS.so
FileUsage       = 1

/etc/odbc.ini

[asterisk]
Driver=MySQL
SERVER=localhost
PORT=3306
DATABASE=asterisk
USER=asterisk
PASSWORD= PASSWORD

/etc/asterisk/res_odbc.conf

[sql]
enabled => yes
dsn => asterisk
username => asterisk
password => PASSWORD
pre-connect => yes

/etc/asterisk/extconfig.conf

[settings]
sipusers => odbc,sql,sip_peers
sippeers => odbc,sql,sip_peers

/etc/asterisk.modules.conf

load = res_odbc.so
load = res_config_odbc.so
CLI> module show like odbc
Module                         Description                              Use Count  Status      Support Level
res_config_odbc.so             Realtime ODBC configuration              0          Running              core
res_odbc.so                    ODBC resource                            0          Running              core
2 modules loaded
*CLI> odbc show all

ODBC DSN Settings
-----------------

  Name:   sql
  DSN:    asterisk
    Last connection attempt: 1970-01-01 03:00:00

/etc/asterisk/sip.conf

[general]
rtcachefriends=yes

Добавление данных

INSERT INTO asterisk.sip_peers ( NAME, username, secret, context, HOST, nat, qualify, TYPE) VALUES ('1001', '1001', 'USERPASSWORD', 'USERCONTEXT', 'dynamic', 'yes', 'no', 'friend'); 

http://vetal-daw.blogspot.ru/2015/08/realtime-config-sip-asterisk-13.html

Asterisk Realtime: extconfig.conf

$
0
0

Asterisk Realtime: extconfig.conf

Реалтайм Архитектура Asterisk - набор драйверов и функций для конфигурации в режиме реального времени. Существует два типаконфигурации - статический и динамический:

  1. Статический хранит конфигурации в БД, как конфигурационные файлы и также обновляет данные при перезагрузке модулей.
  2. Динамический используется для создания и обновления объектов в режиме реального времени, при совершении вызовов.

Оба режима могут использоваться одновременно.

Реалтайм архитектура поддерживает разные типы хранилищ. В данный момент, большинство драйверов основаны на SQL, но есть и поддержка других методов, например LDAPи CURL.

В данный момент поддерживаются следующие бэкенды:

  • ODBC: интегрированная в Asterisk UnixODBC подсистема поддерживает множество разных БД.
  • MySQL: нативная поддержка MySQL, интегрирована в Asterisk
  • PostgreSQL: нативная поддержка PostgreSQL, интегрирована в Asterisk
  • SQLite и SQLite3: для небольших БД можно использовать SQLite3.
  • LDAP: получайте учетные данные из LDAPдиректорий.
  • cURL: Получайте и отправляйте данные веб приложениям и связанным с ними БД.

Статическая конфигурация

Использует базы данных, как хранилище статических конфигураций. Конфигурации обновляются при загрузке модулей, как и в случае с конфигурационными файлами.

Все настройки записываются под одной категорией - [settings]

Конфиг ⇒ Драйвер БД, имя категории из конфига драйвера res_<driver>, таблица базы данных. Если таблица не указана, будет использовано имя конф. файла.

file.conf => driver,category DB res_....conf[,table[,priority]]

Пример записи для загрузки 'queues.conf' через ODBCи 'extensions.conf' из SQlite:

 queues.conf => odbc,asterisk,ast_config
 extensions.conf => sqlite,asterisk,ast_config

Следующие конфиги НЕ МОГУТбыть использованы в реалтайм хранилище:

  • asterisk.conf
  • extconfig.conf (данный файл)
  • logger.conf

Также, некоторые конфиги не загрузятся из Realtime хранилища, если драйвер БД (хранилища) не был, ранее, загружен оператором 'preload' в конфиге 'modules.conf':

  • manager.conf
  • cdr.conf
  • rtp.conf
  • features.conf
  • cel.conf
  • indications.conf

Списки контроля доступа (ACL) также не смогут быть использованы в manager.conf без предварительной загрузки драйвера хранилища. /etc/asterisk/modules.conf

[modules]
preload => res_odbc.so
preload => res_config_odbc.so

Структура таблицы статической базы данных

Структура статической таблицы БД реалтайм архитектуры Asterisk значительно отличается от, собственно, Realtimeтаблиц. Она предполагает единую схему для всех подключаемых конфигов.

static ast_config.sql

create table ast_config (
 id int(11) NOT NULL auto_increment,
 cat_metric int(11) NOT NULL default '0',
 var_metric int(11) NOT NULL default '0',
 commented int(11) NOT NULL default '0',
 filename varchar(128) NOT NULL default '',
 category varchar(128) NOT NULL default '',
 var_name varchar(128) NOT NULL default '',
 var_val varchar(128) NOT NULL default '',
 PRIMARY KEY (id),
 KEY `filename_comment` (`filename`,`commented`)
)ENGINE = InnoDB;
  • 'cat_metric' и 'var_metric' определяют порядок (очередность). 'cat_metric' во всей конфигурации, а 'var_metric', внутри категории. Метрика с меньшим значением представляется раньше, метрика с большим позднее. На примере порядка выбора кодеков в sip.conf, это будет работать так: 'disallow=all' - метрика 0 представляется 1-й, затем 'allow=alaw' - метрика 1 и далее 'allow=g729'
  • Если поле 'commented' не равно '0', строка считается закомметированной и игнорируется.
  • `filename` - Конфиг которому предназначены данные (например extensions.conf).
  • 'category' - контекст диалплана или категория конфига.
  • `var_name` - опция (параметр) конфига, напрмер extenв диалплане.
  • `var_val` - собственно данные, после знака '⇒' в конфиге.

Пример статической конфигурации extensions.conf

extconfig.conf

 extensions.conf => odbc,asterisk,ast_config

Опции и диалплан в extensions.conf:

[general]
static=yes

[globals]
RECDIR=/mnt/record	; Директория записи

[from-internal]
exten => _9X.,1,Dial(PJSIP/${EXTEN:1}@trunk,60,trU(sub-monitor,s,1)
exten => _9X.,n,Hangup
[sub-monitor]
exten => s,1,Noop(**rec to mount**)
exten => s,n,MixMonitor(${RECDIR}/${UNIQUEID}.wav)
exten => s,n,Return

В таблице ast_config будут представлены так:

MariaDB [asterisk]> select * from ast_config;
+----+------------+------------+-----------+-----------------+---------------+----------+--------------------------------------------------------------------+
| id | cat_metric | var_metric | commented | filename        | category      | var_name | var_val                                                            |
+----+------------+------------+-----------+-----------------+---------------+----------+--------------------------------------------------------------------+
|  1 |          0 |          0 |         0 | extensions.conf | general       | static   | yes                                                                |
|  2 |          1 |          0 |         0 | extensions.conf | globals       | RECDIR   | /mnt/record                                                        |
|  3 |          2 |          0 |         0 | extensions.conf | from-internal | exten    | _9X.,1,Dial(PJSIP/${EXTEN:1}@siptrunk,60,trU(sub-monitor,s,1) |
|  4 |          2 |          1 |         0 | extensions.conf | from-internal | exten    | _9X.,n,Hangup                                                 |
|  5 |          3 |          0 |         0 | extensions.conf | sub-monitor   | exten    | s,1,Noop(**rec to mount**)                                         |
|  6 |          3 |          1 |         0 | extensions.conf | sub-monitor   | exten    | s,n,MixMonitor(${RECDIR}/${UNIQUEID}.wav)                          |
|  7 |          3 |          2 |         0 | extensions.conf | sub-monitor   | exten    | s,n,Return                                                         |
+----+------------+------------+-----------+-----------------+---------------+----------+--------------------------------------------------------------------+
7 rows in set (0.00 sec)

Реалтайм конфигурация

Работа в режиме реального времени. Любые изменения в реалтайм хранилище, используются системой при новых вызовах, без перезагрузки модулей и применения настроек. Данные реалтайм хранилищ, могут модифицироваться во время выполнения диалплана, при помощи встроенных функций.

Конфигурация вызывает заданное семейство реалтайм в формате: драйвер базы данных, имя категории из конфига драйвера res_<driver>, таблица БД, приоритет (если таблица не задана, будет использовано имя семейства (family)): family => Driver DB,category DB res_...conf[,Table][,prioritet]

example => odbc,asterisk,alttable,1
example => mysql,asterisk,alttable,2
example2 => ldap,"dc=oxymium,dc=net",example2

Приоритет - необязательный параметр , применяется в случае ошибки получения данных. Если соединению с приоритетом 1 не удалось получить данные, будет произведена попытка получить данные через соединение с приоритетом 2. Приоритеты должны быть упорядочены: 1,2,3, но не 1,2,4

Доступные бакенды

  • odbc … res_config_odbc
  • sqlite … res_config_sqlite
  • sqlite3 … res_config_sqlite3
  • pgsql … res_config_pgsql
  • curl … res_config_curl
  • ldap … res_config_ldap
  • mysql … res_config_mysql (через add-ons в menuselect)

В конфигах res_pgsqlи res_config_sqliteБД назначаются в категории [general] и всегда используется эта БД. В res_config_mysqlБД тоже назначается в секции [general], но можно указать несколько баз данных (см. конфиг mysql)

Использование и подключение

Созданные семейства реалтайм можно подключать директивой switch ⇒ в диалплане, как в случае с extensions.conf:

 [default]
 switch => Realtime/mycontext@extensions 

или вызывать при помощи специальных функций диалплана (в описании функций, можно найти примеры):

пример extconfig.conf

Файлы конфигурации Asterisk

FreePBX Follow Me

$
0
0

FreePBX Follow Me

Следуй за мной. Предустановленный переход вызова на местный или внешний номер.

Edit Follow Me

  • Disable - Выключить Follow Me
  • Initial Ring Time - Время через которое будет вызван номер из списка Follow Me.
  • Ring Strategy - стратегия наведения вызова на несколько номеров.
    • ringallV2: Звонит первый в списке телефон в течении Initial Ring Time, по истечении этого времени звонят все телефоны из списка.
    • ringall - Звонят, одновременно, все телефоны из списка.
    • hunt - Звонит 1-й телефон из списка, если нет ответа в течении Ring Time, звонит следующий и так далее до конца списка.
    • memoryhunt - Звонит 1-й телефон из списка, затем 1-й и 2-й, затем 1-й, 2-й и 3-й и тд.
    • firstavaialbleЗвонит первый доступный из списка номер и Destination If No Answerпо неответу.
    • firstnotonphoneЗвонит первый доступный из списка номер и только он.
  • Ring Time - Время в течении которого будут вызываться номера из списка Follow Me.
  • Follow-Me List - список номеров для переадресации. Могут быть указаны как внутренние номера системы, так и внешние. Внешний номер должен заканчиваться #.

Пример списка:

2201 - Основной номер. 
4001 - Другой внутренний номер.
1234567890# - Внешний номер. Решетка символ конца номера. Используйте, также, префикс выхода на внешнюю линию.
  • Announcement - Здесь можно указать системное сообщение, которое прозвучит перед тем, как будут вызваны номера из списка Follow Me.
  • Play Music on Hold - Здесь можно выбрать музыку на удержании MOH, которая будет проигрываться вызывающему абоненту. Если указано Ring, абонент услышит КПВ.
  • CID Name Prefix - Здесь можно указать префикс CallerID отображаемого на местных телефонах, для указания что поступает переадресованный вызов. Т.к. префикс передается как CallerID NAME, на внешний номер, вероятнее всего, передаваться не будет.

Call Confirmation Configuration

  • Confirm Calls - Эта опция включает голосовое предупреждение о переадресации на внешний номер (отмеченный #). Для подтверждения надо нажать «1».
  • Remote Announce - Голосовое сообщение внешнему абоненту с запросом подтверждения о приеме вызова (нажмите 1)
  • To-Late Announce - Голосовое сообщение внешнему абоненту.

Change External CID Configuration

Модификация внешнего CallerID

  • Mode
    • Default - В этом режиме предается CallerID вызывающего абонента без изменений.
    • Fixed CID Value - Если вы выбрали этот режим будет передано CID назначенное в поле Fix CID Option
    • Outside Fixed CID Value - Тоже само, за исключением вызовов с внутренних номеров.
    • Use Dialed Number - Устанавливает в качестве CID входящий номер, на который пришел вызов.
    • Force Dialed Number - Тоже самое, только игнорирует опцию “Block Foreign Caller ID”, если таковая задана на транке, через который идет вызов.
  • Fixed CID Value - задайте CID если выбран режим Fixed CID Valueили Outside Fixed CID Value.

Destination if no answer

  • Destination if no answer - назначение вызова, если никто из списка Follow Me не ответил по истечении Ring Timeв соответствии со стратегией вызова. По умолчанию выполняется «Normal Extension Behavior» - нормальные условия для екстеншена, как если бы Follow Me не было задано.

см. также

FreePBX

Viewing all 1041 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>