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

FreeSWITCH + WebRTC + sipML5

$
0
0

FreeSWITCH + WebRTC + sipML5

webrtc WebRTC - открытая программная структура (framework) обеспечивающая коммуникации в реальном времени (Real Time Communications) в веб браузере, т.е. передавать аудио/видео данные в высоком качестве, между браузерами и другими приложениями в режиме точка-точка. Включает в себя компоненты, для создания веб-разработчиками приложений голосовой и видео связи, используя Javascript API. Поддерживается браузерами Chrome, Opera, Firefox. Проект WebRTC предлагает полный стек протоколов для голосовой связи. На данный момент поддерживаются G.711, G.722, iLBC и iSAC аудио кодеки, а также VP8 видео кодек. Имеется несколько SIP клиентов написанных на Javascript, такие как - SipML5, sip-js, jsSIP,SIPjs

С помощью транспорта Websocket (ws://) WebRTC SIP клиенты могут взаимодействовать с голосовыми серверными приложениями, такими как Asterisk, FreeSWITCH и др.

Рассмотрим пример подключения WebRTC софтфона sipML5 к FreeSWITCH, через WebSocket соответственно

Добавьте в файле /usr/local/freeswitch/sip_profiles/internal.xml в разделе <settings> следующую строку:

<param name="ws-binding"  value=":5066"/>

Где 5066 порт TCP WebSocket (ws).

В консоли FreeSWITCH примените настройки командой:

  #fs_cli
  freeswitch@internal> sofia profile internal rescan reload restart

затем командой sofia status profile internalпроверим статус websocket:

 freeswitch@internal> sofia status profile internal
=================================================================================================
Name                    internal
Domain Name             N/A
Auto-NAT                false
DBName                  sofia_reg_internal
Pres Hosts              123.123.123.0,192.168.0.231
Dialplan                XML
Context                 public
Challenge Realm         auto_from
RTP-IP                  192.168.0.231
Ext-RTP-IP              123.123.123.0
SIP-IP                  192.168.0.231
Ext-SIP-IP              123.123.123.0
URL                     sip:mod_sofia@123.123.123.0:5060
BIND-URL                sip:mod_sofia@123.123.123.0:5060;maddr=192.168.0.231;transport=udp,tcp
WS-BIND-URL             sip:mod_sofia@192.168.0.231:5066;transport=ws
HOLD-MUSIC              local_stream://default
OUTBOUND-PROXY          N/A
CODECS IN               G7221@32000h,G7221@16000h,G722,PCMU,PCMA,GSM
CODECS OUT              G7221@32000h,G7221@16000h,G722,PCMU,PCMA,GSM
TEL-EVENT               101
DTMF-MODE               rfc2833
CNG                     1300
SESSION-TO              450
MAX-DIALOG              340
NOMEDIA                 false
LATE-NEG                false
PROXY-MEDIA             false
ZRTP-PASSTHRU           false
AGGRESSIVENAT           false
CALLS-IN                7467
FAILED-CALLS-IN         43
CALLS-OUT               3050
FAILED-CALLS-OUT        65
REGISTRATIONS           247

Скачайте софтфони в директорию вашего веб сервера и задайте права пользователя:

 chown -R apache.apache sipML5

затем откройте страницу софтфона в веб браузере Chrome или Firefox последней версии.

sipml5 expert mode

в режиме expert задайте IP адрес сервера и порт WebSocket:

ws://123.123.123.0:5066

sipml5 registration

В режиме вызова задайте sip username, sip password. Звездочкой отмечены обязательные поля.

sipml5 call control (812) 3216111

Когда все готово можно звонить.

chrome setup

При совершении входящих и исходящих вызовов Chrome запросит разрешение на использование микрофона и камеры.

chrome setup allow exception

Настройки > Показать дополнительные настройки > Личные данные > Настройки контента > камера и микрофон >


Установка Asterisk 12 / 13 + FreepBX 12 на CentOS 7 64-bit

$
0
0

Установка Asterisk 12 / 13 + FreepBX 12 на CentOS 7 64-bit

CentOS 7 64-bit Asterisk 13, FreePBX 12 , libpri, DAHDI, Mysql (mariadb), apache2, lame, php, httpd.conf, php.ini
<fs xx-small>последняя редакция, июль 2015 года</fs>

Выключение SELinux

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

Зависимости

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 

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

 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

Установите 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 git://github.com/asterisk/pjproject pjproject 
cd pjproject/ && 
./configure --libdir=/usr/lib64 --prefix=/usr --enable-shared --disable-sound --disable-resample &&
make dep &&
make &&
make install &&
ldconfig &&
ldconfig -p | grep pj

<spoiler|Вывод 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

</spoiler>

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.4-current.tar.gz &&
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-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.4-*.tar.gz && 
cd /usr/src/libpri-1.4.* && 
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 13

cd /usr/src && 
tar xvfz asterisk-13-current.tar.gz &&
cd asterisk-13.* &&
./configure --libdir=/usr/lib64 &&
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

FreePBX

Скачаем FreePBX

cd /usr/src &&
wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-12.0-latest.tgz &&
tar zxvf freepbx-*.tgz &&
cd /usr/src/freepbx

<spoiler|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

</spoiler>

Создайте пользователя 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

Подготовим 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 при установке mariadb, добавьте его после ключа -pyourpassword. (mysqladmin -u root -pYOURPASSWORD create asterisk)
Выполните по очереди следующие команды:

mysqladmin -u root create asterisk
mysqladmin -u root create asteriskcdrdb
 cd /usr/src/freepbx
mysql asterisk < SQL/newinstall.sql
mysql asteriskcdrdb < SQL/cdr_mysql_table.sql

Зададим права на использование БД 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
cd /usr/src/freepbx && ./install_amp --installdb --username=asteriskuser --password=${ASTERISK_DB_PW}

Если появится ошибка:

Enter the path to use for your AMP web root:
 [/var/www/html]

PHP Warning:  mkdir(): File exists in /usr/src/freepbx/libfreepbx.install.php on line 199
[FATAL] Cannot create /var/www/html!

просто запустите установку ещё раз:

 ./install_amp --installdb --username=asteriskuser --password=${ASTERISK_DB_PW}
amportal a ma reload &&
amportal a ma refreshsignatures &&
amportal chown
ln -s /var/lib/asterisk/moh /var/lib/asterisk/mohmp3
amportal restart

<spoiler|Network Setup>

Network Setup

 yum install net-tools
 yum install NetworkManager
 systemctl enable NetworkManager
 systemctl start NetworkManager
 yum install NetworkManager-tui
 nmtui edit < ethernet_interface >

</spoiler>

В Centos7 вместо IPTables используется Firewalld. Порт 80 tcp (HTTP) по умолчанию закрыт. Так что вам надо либо отключить файервол (не рекомендуется), либо настроить его соответствующим образом

<spoiler| centos 7 firewalld >

1. Выключим Firewalld службу.

 systemctl mask firewalld

2. Остановим Firewalld Service.

 systemctl stop firewalld

3. Установим iptables.

 yum -y install iptables-services

4. Включим IPtables при загрузке системы:

 systemctl enable iptables
iptables -P INPUT ACCEPT &&
iptables -F &&
service iptables save &&
iptables -A INPUT -i lo -j ACCEPT &&
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT &&
iptables -A INPUT -p tcp --dport 22 -j ACCEPT &&
iptables -A INPUT -p tcp --dport 80 -j ACCEPT &&
iptables -P INPUT DROP &&
iptables -P FORWARD DROP &&
iptables -P OUTPUT ACCEPT &&
iptables -A INPUT -p udp -m udp --dport 5060 -j ACCEPT &&
iptables -A INPUT -p udp -m udp --dport 5061 -j ACCEPT &&
iptables -A INPUT -p tcp -m tcp --dport 5060 -j ACCEPT &&
iptables -A INPUT -p tcp -m tcp --dport 5061 -j ACCEPT &&
iptables -A INPUT -p udp -m udp --dport 10000:20000 -j ACCEPT &&
iptables -A INPUT -p udp -m udp --dport 4569 -j ACCEPT &&
iptables -A INPUT -p tcp -m tcp --dport 5038 -j ACCEPT &&
service iptables save &&
iptables -L

<spoiler>

iptables -L
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     udp  --  anywhere             anywhere             udp dpt:sip
ACCEPT     udp  --  anywhere             anywhere             udp dpt:sip-tls
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:sip
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:sip-tls
ACCEPT     udp  --  anywhere             anywhere             udp dpts:ndmp:dnp
ACCEPT     udp  --  anywhere             anywhere             udp dpt:iax
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:5038

Chain FORWARD (policy DROP)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

</spoiler>

Asterisk + IPTables

</spoiler>

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

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

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

freepbx start set user login

zend guard loader

zend guard loader

скачать и распаковать:

http://www.zend.com/products/guard/downloads

скопировать:

 cp ZendGuardLoader.so /usr/lib64/php/modules

Подключить раcширение php:

 ZendGuard.ini - /etc/php.d directory:
 nano /etc/php.d/ZendGuard.ini
## CentOS 64-bit ##
; Enable Zend Guard extension
zend_extension=/usr/lib64/php/modules/ZendGuardLoader.so
zend_loader.enable=1

systemctl restart httpd

Установка Asterisk

Asterisk: res_odbc.conf

$
0
0

Asterisk: res_odbc.conf

Файл настройки соединений c базами данных через unixODBC. MySQL, PostgreSQL, MSSQL, SQLite.

Параметры ODBC соединений

[ENV] - Глобальные переменные

В Секции с встроенным названием [ENV] назначаются глобальные переменные окружения, которые можно использовать для любых подключений, заданных в данном файле.

[ENV]
INFORMIXSERVER => my_special_database
INFORMIXDIR => /opt/informix
ORACLE_HOME => /home/oracle

Имена контекстов (подключений)

Остальные секции имеют произвольные имена. Эти имена, в дальнейшем, используются в других конфигах, таких как extconfig.confи func_odbc.confдля связи с этими соединениями.

 [asterisk]

enabled

Позволяет отключать секцию, без использования комментария:

 enabled => no

Если явно не выключено, категория (секция) считается включенной.

dsn

Это значение должно совпадать с записью в /etc/odbc.ini (или /usr/local/etc/odbc.ini во FreeBSD и подобных системах).

 dsn => asterisk

username

Имя пользователя базы данных. Если не задано, будет использовано имя контекста, по умолчанию

 username => myuser

password

Пароль для аутентификации в базе данных. По умолчанию не задан.

 password => mypass

pre-connect

Подключаться при старте Asterisk?

 pre-connect => yes

sanitysql

Как определить, что соединение живое? Должно возвращаться не нулевое значение в первом поле, первой записи. По умолчанию «select 1».

 sanitysql => select 1

max_connections

Максимальное кол-во подключений в момент времени. Значение по умолчанию =1 и очень хорошая идея увеличить это значение, если версия unuxODBC 2.3.1 и выше.

 max_connections => 20

forcecommit

Если канал закрыт, должны ли какие-либо незавершенные транзакции, продолжать выполнение.

 forcecommit => no

isolation

Отношения с другими транзакциями в базе данных.
Возможные значения: read_uncommitted, read_committed, repeatable_read и serializable. По умолчанию read_committed.

 isolation => repeatable_read

backslash_is_escape

Обратный слэш '/' знак комментария. По умолчанию = yes, но для MS SQL Server, установите = no.

  backslash_is_escape => yes

connect_timeout

Как долго (в секундах), пытаться подключиться, прежде чем считать соединение мертвым? Значение по умолчанию составляет 10 секунд, но можно уменьшить его, чтобы повысить скорость реакции.

 connect_timeout => 10

negative_connection_cache

Если соединение упало, как долго (в секундах), кэшировать информацию, прежде чем предпринять попытку нового соединения?

 negative_connection_cache => 300

примеры

MySQL, MS SQL и PostgreSQL

MySQL

[mysql2]
enabled => no
dsn => MySQL-asterisk
username => myuser
password => mypass
pre-connect => yes

MS SQL

Некоторые сервера, такие как MS SQL и Sybase использующие TDS, ограничивают кол-во запросов для одного подключения до 1. Если запретить общее использование соединений (share_connections ⇒ no) Asterisk может с ними работать.

[sqlserver]
enabled => no
dsn => mickeysoft
share_connections => no
limit => 5
username => oscar
password => thegrouch
pre-connect => yes
sanitysql => select count(*) from systables
; forcecommit => no            ; Default to committing uncommitted transactions?
                               ; Note:  this is NOT the autocommit flag; this
                               ; determines the end result of transactions which
                               ; are not explicitly committed or rolled back.  By
                               ; default, such transactions are rolled back if the
                               ; call ends without an explicit commit.
; isolation => read_committed  ; Isolation level; supported levels are:
                               ; read_uncommitted, read_committed, repeatable_read,
                               ; serializable.  Note that not all databases support
                               ; all isolation levels (e.g. Postgres only supports
                               ; repeatable_read and serializable).  See database
                               ; documentation for further information.
;
; Many databases have a default of '\' to escape special characters.  MS SQL
; Server does not.
backslash_is_escape => no

;
; If you are having problems with concurrency, please read this note from the
; mailing lists, regarding UnixODBC:
;
; http://lists.digium.com/pipermail/asterisk-dev/2009-February/036539.html
;
; In summary, try setting "Threading=2" in the relevant section within your
; odbcinst.ini.
;

pgsql

PostgreSQL

[postgres]
enabled => yes
dsn => testing
pre-connect => yes

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

Установка 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 АТС.

Настройка SIP в Asterisk 13 sip.conf

$
0
0

Настройка SIP в Asterisk 13 sip.conf

Конфиг Asterisk 'sip.conf' отвечает за настройку внутренних и внешних каналов SIP. Внешние SIP транки и аккаунты внутренних абонентов назначаются здесь. Конфиг делится на секции, обозначающиеся именами в [квадратных скобках]. Действует принцип наследования, как и в большинстве конфигов Asterisk: все что задано после имени в квадратных скобках, относится к этому объекту, пока не встретится следующая секция с именем в скобках.
Существует встроенная секция [general] определяющая глобальные настройкидрайвера SIP Asterisk. Остальные секции, транки и внутренние абоненты, определяются пользователем (администратором) системы.

Asterisk SIP trunk

SIP транк в Asterisk, это совокупность объектов для совершения исходящих и приема входящих вызовов, из-за пределов системы по SIP протоколу. Выделим три основных SIP объекта настроек транков в Asterisk:

  • register - формирует запрос SIP REGISTER для аутентификации на сервере провайдера.
  • peer - SIP объект, через который совершаются вызовы.
  • user - SIP объект для аутентификации и маршрутизации входящего вызова.

Asterisk Register String

Register string - строка регистрации определяющая параметры SIP запроса REGISTER.
В файле конфигурации sip.conf в секции [general] добавьте определение register:
register ⇒ user [:secret[:authuser]] @host [:port] [/extension]

Рассмотрим возможные параметры на следующем примере:

Зарегистрировать sip аккаунт useridна сервере sip провайдера, как контакт 1234567 на Asterisk.

register => userid:password@sip.server:5060/1234567
  • userid - идентификатор пользователя, используемый для SIP сервера (например, 3216111)
  • authuser - не обязательное имя пользователя для авторизации на SIP сервере
  • secret - пароль пользователя
  • host - имя домена или хоста SIP сервера. Этот SIP сервер должен быть определен в своей секции файла sip.conf, где должны быть заданы его параметры.
  • port - на какой порт посылать запросы регистрации на сервере host. Если не задано, то по умолчанию - 5060
  • /1234567 - номер екстеншена для приема вызовов в Вашем Asterisk. 1234567 - вставляется в SIP заголовок contact, SIP запроса на регистрацию. Этот екстеншен используется удаленным SIP сервером, когда ему необходимо совершить вызов в сторону Вашего Asterisk.
    • Если данный параметр не указан в строке регистрации, SIP сервер, вероятно, использует userid.
    • Если SIP транк обслуживает пул из нескольких номеров, в качестве контакта на стороне Asterisk, сервер SIP провайдера будет использовать вызываемый номер из пула, игнорируя extensionуказанный в register string.

Для контроля SIP сообщений, статуса пиров и регистраций удобно использовать команды Asterisk CLI.
Вот некоторые из них:

  • sip show peers - Отобразить все пиры и их статус.
  • sip show peer <имя пира> - Показать конфигурацию определенного пира.
  • sip show registry - Отобразить статус регистраций на удаленном UAS.
  • sip set debug on - Показывать все SIP сообщения.
  • sip reload - Перечитать конфигурационный файл.
  • sip show settings - Показать текущую конфигурацию chan_sip.

Для получения подробной информации о командах смотрите Asterisk CLI - интерфейс командной строки.

Пример вывода команды sip show registryв консоли Asterisk:

#asterisk -rx 'sip show registry'
Host                                dnsmgr   Username        Refresh       State                Reg.Time
sip.server:5060                      N          userid             105        Registered           Mon, 19 Dec 2016 11:48:03

Возможные состояния (state):

  • Registered - зарегистрирован.
  • Request Sent - запрос отправлен, ожидает ответа.
  • No Authentication - ответ отрицательный, регистрация отвергнута.

Пример SIP запроса REGISTER

Пример SIP запроса REGISTER

Reliably Transmitting (NAT) to sip.server:5060:
REGISTER sip:sip.server SIP/2.0
Via: SIP/2.0/UDP asterisk.externip:5060;branch=z9hG4bK6eec0290;rport
Max-Forwards: 70
From: <sip:userid@sip.server>;tag=as6e3f5edb
To: <sip:userid@sip.server>
Call-ID: 6c3aef7a75d50db930fae9040cef6cf0@192.168.0.231
CSeq: 102 REGISTER
Supported: replaces, timer
User-Agent: Asterisk 13.9.0
Expires: 120
Contact: <sip:extension@asterisk.externip:5060>
Content-Length: 0


Регистрация необходима, чтобы принимать входящие вызовы от провайдера, если используется SIP транк с аутентификацией. Как правило, это касается услуг связи предоставляемых через публичную сеть. Но могут быть и другие варианты SIP транков, без аутентификации, через серую сеть провайдера, например. Или для связи двух доверенных серверов Asterisk корпоративной сети. В этом случае не требуется регистрации, аутентификация, обычно происходит по ipадресу, выделенному провайдером. В этом случае, бывает достаточно создать SIP friend с минимальными параметрами. Например:

[siptrunk-no-auth]
host=172.16.0.21
type=friend
disallow=all
allow=alaw
context=from-trunk
qualify=yes

Asterisk SIP peer

Для совершения исходящих вызовов должен быть создан объект type=peer.

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

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

Asterisk не делает различий между внутренними и внешними линиями, любой вызов совершается через какой-либо канал. Когда SIP сервер провайдера, вызывает Asterisk, то он совершает вызов через peer, проходя аутентификацию у user.

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

[имя_пира]
type=peer, user или friend
параметр1=значение
параметр2=значение

Где имя_пира - это произвольное имя SIP устройства, на которое можно ссылаться из других конфигурационных файлов. Параметр type может принимать одно из трех значений: type = value

* peer: SIP объект, через который совершаются исходящие вызовы. * user: SIP объект, через который принимаются входящие Asterisk . * friend: Запись, которая одновременно и userи peer. Этот тип наиболее подходит для телефонов и других устройств. Для SIP пользователей этого типа Asterisk создаст два объекта, один типа peer и один типа user, с одинаковыми именами.

[siptrunk]
host=sip.server.tld
port=5061
transport=udp
defaultuser=userid
secret=password
fromuser=userid
fromdomain=sip.server.tld
type=friend
disallow=all
allow=alaw
allow=ulaw
allow=g729
nat=force_rport,comedia
directmedia=nonat
insecure=port,invite
dtmfmode=rfc2833
context=from-siptrunk

В диалплане (extensions.conf) можно использовать разнообразный синтаксис для вызова (набора) SIP устройств.

   * SIP/devicename
   * SIP/username@domain   (SIP uri)
   * SIP/username[:password[:md5secret[:authname[:transport]]]]@host[:port]
   * SIP/devicename/extension
   * SIP/devicename/extension/IPorHost
   * SIP/username@domain//IPorHost

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

exten => _9.,1,Dial(SIP/${EXTEN:1}@sipppnet-out,30,r)

Переменная ${EXTEN:1} получает номер екстеншена и удаляет первую цифру- '9'. Подробная информация приведена в Asterisk Dialplan - extensions.conf.

Пример контекста для входящих вызовов в файле 'extensions.conf':

[from-sipppnet]
exten => 3216111,1,Dial(SIP/100&SIP101,180,tr)

Настройка SIP пира для регистрации абонентов на Asterisk

Как уже отмечалось Asterisk не делает особых различий между транками и абонентами, поэтому конфиг телефона будет похож на SIP транк, но все же немного другой.

[777]
host=dynamic
type=friend
secret=**password**
qualify=yes
nat=no
port=5061
directmedia=no
context=from-internal
disallow=all
allow-alaw
allow=ulaw
alow=gsm
deny=0.0.0.0/0.0.0.0
permit=192.168.0.0/255.255.0.0
username=777
fromuser=777
dial=SIP/777
mailbox=777@device
call-limit=2
callcounter=yes
faxdetect=no
callgroup=1
pickupgroup=1

Рассмотрим некоторые опции:

  • host - dynamic или ip адрес с которого подключается абонент.
  • type - для абонентского пира это обычно friend
  • secret - пароль, использование сложных паролей убережет вас от многих неприятностей, даже если вы считаете сеть безопасной, в дальнейшем все может измениться и ваша предусмотрительность окажется очень кстати.
  • qualify - посылать SIP запросы OPTIONS для проверки доступности устройства (возможно это является избыточным, т.к. большинство устройств сами обновляют регистрацию, через заданный в настройках интервал)
  • nat - если телефон находится в локальной сети то 'no', если регистрируется из интернет или другой интра сети, то 'force_rport'
    • nat = no - без NAT RFC3581
    • nat = force_rport - использовать rport, даже если его нет
    • nat = comedia - отправить медиа поток на порт Asterisk 12, независимо от указаний SDP.
    • nat = auto_force_rport - установить 'force_rport' параметр если Asterisk обнаружил NAT (по умолчанию)
    • nat = auto_comedia - установить 'comedia' параметр если Asterisk обнаружил NAT
  • directmedia - направлять медиа поток (RTP трафик) через сервер или напрямую между каналами (пирами).

см. также по теме:NAT, SIP и Asterisk

  • port - порт SIP сигнализации устройства (не путайте c bindport asterisk, который для данного драйвера SIP в Asterisk может быть только один, 5060 по умолчанию, но для нового драйвера Asterisk pjsip.conf, может, или даже должен, быть назначен уникальный порт для каждого транспорта)
  • deny - сети из которых запрещено подключение
  • permit - сети из которых разрешено подключение (если абонент находится в локальной сети, назначьте ему параметр permit=192.168.1.0/255.255.255.0 и регистрация на этом пире будет разрешена только из этой подсети. ACLочень действенная мера безопасноcти. См. также Asterisk:acl.conf
  • call-limit -сколько одновременных вызовов (concurrent calls) может производится через данный канал. Хорошая идея, как для локальных так и для удаленных абонентов. Если пир взломан, злоумышленники не смогут пропустить через канал больше указанного кол-ва вызовов зараз(ы).

'call-limit' опция признана устаревшей и заменена на 'callcounter'. Установить ограничение одновременных вызовов теперь можно переменной канала function 'GROUP_COUNT'
пример использования данного метода можно помотреть здесь: Ограничение количества одновременных вызовов по набранному номеру.

Настройка нескольких SIP пиров по шаблону

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

[local_pattern](!)
host=dynamic
type=friend
context=from-internal
nat=no
disallow=all
allow=ulaw
allow=alaw

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

[776](local_pattern)
username=776
secret=super_puper_secret_1
callerid=8123216111
[777](local_pattern)
username=777
secret=super_puper_secret_2
callerid=8121234567

Asterisk sip.conf General SIP Options

Общие SIP Параметры

Следующие параметры используются в общей [general] секции sip.conf:

allowexternalinvites

Если установлено 'no', запрещает INVITE и REFER от внешних (не из localnet) доменов. См domain

 allowexternalinvites=yes|no
allowguest

Если 'no', запрещает гостевые(без аутентификации) подключения. По умолчанию sipguest подключения разрешены.

 allowguest=no|yes
allowoverlap

Вкл. или Выкл набор по одной цифре (т.е. каждая набранная цифра будет сразу отправляться в канал)

 allowoverlap=no|yes
allowsubscribe

Разрешить ли внешним устройствам подписку (SUBSCRIBE) на информацию о статусе екстеншена. По умолчанию - 'yes':

 allowsubscribe=yes|no
allowtransfers

Когда установлено 'no', запрещает любые трансферы, если не переопределено в настройках пира.

 allowtransfers=no|yes
alwaysauthreject

Если включено, всегда отвечает на INVITE и REGISTER, SIP сообщением 401 Unauthorized, вместо того чтобы сообщить вызывающему о существовании запрашиваемого user или peer. Важная настройка безопасности

alwaysauthreject=no|yes
autodomain

Установите эту опцию 'yes', чтобы добавить локальное HOSTNAME и локальный IP адрес в список доменов:

 autodomain=yes|no
bindaddr and bindport

Эти параметры определяют IP адрес и порт на которых Asterisk будет слушать SIP запросы. Для драйвера канала SIP Asterisk 'chan_sip' можно назначить только один адрес и порт для всех подключений для UDP и один порт для TCP транспорта, в отличии от нового драйвера PJSIP. По умолчанию адрес не задан и лучше так и оставить. Некоторые рекомендуют изменять порт по умолчанию 5060, на другой, в целях безопасности. Но помните, что это только одна из мер безопасности, не самая важная, и не гарантирует вам полной защиты от злоумышленников.

bindaddr=0.0.0.0
bindport=5060

Вы можете задать независимые для UDP, TCP и TLS транспорта значения udpbindadd, tcpbindaddrи tlsbindaddr

buggymwi

Вкл. эту опцию, чтобы избежать ошибок при сообщении с некоторыми ip телефонами при отправке MWI сообщений.

buggymwi=no|yes
callevents

Установите 'yes', если хотите генерировать информацию о SIP событиях для AMI (asterisk manager interface)

 callevents=yes
checkmwi

Время в секундах, между проверками голосовой почты :

 checkmwi=30
compactheaders

Использовать или нет компактные SIP заголовки.

 compactheaders=yes|no
defaultexpiry

Срок действия регистрации в секундах для входящих и исходящих регистраций. При входящей регистрации, этот параметр задается клиентской стороной, и заданное здесь значение используется, только если клиент не сообщил свое занчение. Для исходящих регистраций этот параметр сообщается удаленной стороне UAS (user agent server)

 defaultexpiry=300
directrtpsetup

Данная опция позволяет управлять RTP соединением между двумя оконечными точками без re-INVITE(экспериментальная опция, используйте на свой страх и риск).

 directrtpsetup=yes|no
domain

Задает имя домена сервера Asterisk по умолчанию. Командой CLI 'sip show domains' выводится список локальных доменов.

 domain=example.com
dumphistory

Вкл. или Выкл. отчет в завершении SIP диалога. SIP history выводится в DEBUG лог канала.

 dumphistory=yes|no
externhost

Когда Asterisk находится за NAT, SIP заголовок обычно использует IP адрес сервера. Если включить данную опцию, Asterisk будет производить периодические DNSопросы для определения имени хоста и заменять IP адрес на 'externhost'.

 externhost=my.hostname.tld

Используйте externip.

externip

externip содержит IP адрес в качестве аргумента. Если Asterisk находится за NAT, SIP заголовок Contact: содержит внутренний IP адрес сервера, тогда удаленная сторона не знает куда отправлять ответы. Параметр externip вкупе с параметром nat=force_rport модифицирует SIP заголовок, сообщая удаленному SIP серверу адрес на который надо слать ответы:

 externip=123.123.123.123
externrefresh

Если все же используется 'externhost', указывает промежуток времени в секундах между запросами DNS.

 externrefresh=30
g726nonstandard

Значения: yes/no, по умолчанию: no. Если клиент собирается для сеанса связи «договориться» использовать звуковой кодек G726-32, с использованием компрессии AAL2, вместо RFC3551 (что требуется для аппаратов фирмы Sipura и шлюзов от Grandstream, и может другим). То это противоречит спецификации RFC3551, клиент должен вместо этого «договориться» использовать AAL2-G726-32

 g726nonstandard=yes
ignoreregexpire (global)

Если ignoreregexpire установлен 'yes', Asterisk сделает одно из двух, в зависимости от настроек пиров: 1)Non-realtime peer Когда регистрация истекает, информация не удаляется из памяти или БД Asterisk и вызовы будут разрешены несмотря на то, что время регистрации истекло.

2)Realtime peers Когда peer сконфигурирован в режиме реального времени, информация о регистрации используется независимо от defaultexpiry

 ignoreregexpire=yes|no
jbenable

Вкл. поддержку RTP jitter buffer на принимающей стороне канала SIP. По умолчанию 'no'. Будет работать, только если удаленная сторона поддерживает эту функцию. подробнее о Джиттер

 jbenable=yes|no
jbforce

Принудительное использование jitter buffer принимающей стороной SIP канала.

 jbforce=yes|no
jbimpl

Использовать фиксированный или подстраиваемый (адаптивный) jitter buffer. fixed jitter buffer всегда использует значение из jbmaxsize adaptive может принимать значение больше jbmaxsize По умолчанию 'fixed':

 jbimpl=fixed|adaptive

Из личного опыта, вкл. 'adaptive' может приводить к весьма плачевным результатам.

jblog

Вкл./выкл jitter buffer frame лог. По умолчанию 'no':

 jblog=yes|no
jbmaxsize

Установите максимальную длину буфера в миллисекундах:

 jbmaxsize=200
jbresyncthreshold

Джиттер буфер порог синхронизации. По умолчанию 1000:

 jbresyncthreshold=1000
icesupport

Использовать Interactive Connectivity Establishment (ICE) в Asterisk

 icesupport=no
limitonpeers

Применять call-limit только для type=peer Это улучшит использование call-limit для устройств настроенных, как type=friend, отделив ограничение call-limit от входящих вызовов.

 limitonpeers=yes|no
localnet

укажет серверу Asterisk какие подсети являются локальными, прозрачными для использования IP адресов сервера, SIP запросы к которым не требуют модификации поля Contact: c использованием externipили externhost

 localnet=192.168.1.0/24
 localnet=172.16.0.0/16
matchexterniplocally

Сверять 'externip' с 'localnet' и производить подстановку, только если 'externip' из локальной подсети. Не совсем ясно, зачем это может понадобиться? Возможно при очень нестандартной топологии сети.

 matchexterniplocally=yes|no
maxexpiry

Максимальная продолжительность регистрации в секундах.

 maxexpiry=3600
minexpiry

Минимальная продолжительность регистрации в секундах.

 minexpiry=60
notifymimetype

Указывает MIME тип используемый для message-waiting indication (MWI) в SIP NOTIFY сообщении.

 notifymimetype=text/plain
notifyringing

Сообщать подписчикам о состоянии вызов (RINGING):

 notifyringing=yes|no
notifyhold

Сообщать подписчикам (subscribers) о состоянии удержание (HOLD):

 notifyhold=yes|no
pedantic

Скурпулезная проверка SIP сообщений. Устанавливает более строгую проверку по стандартам SIP RFC.

 pedantic=yes
realm

Данная установка используется для аутентификации в SIP. Задайте realm полное доменное имя вашего сервера. Имя должно быть совершенно уникальным.

 realm=mybox.example.com
recordhistory

Вкл. или Выкл историю sip для всех каналов.

 recordhistory=yes|no
registerattempts

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

 registerattempts=0
registertimeout

Таймаут между попытками регистрации на другом устройстве.

 registertimeout=30
relaxdtmf

Если плохо распознаются DTMF сигналы, включите данную опцию.

 relaxdtmf=yes|no
rtautoclear

(global)Конфигурация Realtime Peers Указывает должен ли Asterisk обнулять созданные на лету friends по истечении времени регистрации. Если установлено 'yes', по истечении срока регистрации, удалять friends до нового запроса. Если задано число, то оно используется вместо обычного времени регистрации.

rtautoclear=yes|no|seconds
rtcachefriends

(global)

Если rtcachefriends включен, Asterisk будет кэшировать friends(реалтайм пиры), которые приходят из realtime engine, так же, как если бы они сконфигурированы в «sip.conf».

 rtcachefriends=yes|no
rtsavesysname

(global) Определяет, должен ли Asterisk сохранить SystemName в базе данных в режиме реального времени во время регистрации:

 rtsavesysname=yes|no
rtupdate

(global) Если установлено 'yes' Asterisk будет обновлять IP-адрес, порт и период регистрации пиров при регистрации. По умолчанию 'yes':

 rtupdate=yes|no
sipdebug

Указывает, должен или нет Asterisk включать SIP debug сразу при загрузке драйвера канала SIP.

 sipdebug=yes|no
sendrpid

ОТправлять или нет Remote-Party-ID header:

 sendrpid=yes|no
srvlookup

Записи DNS SRV являются одним из способов указания адреса для связи сервером. Используя записи SRV, вы получаете многие преимущества DNS, в то время как отключения SRV DNSлишает вас возможности принимать SIP вызовы на основании доменных имен. В настоящее время поддержка записей SRV в Asterisk несколько хромает. Если несколько записей SRV возвращаются, Asterisk будет использовать только первую запись. Чтобы включить, установите srvlookup = yes в секции [general] файла sip.conf:

 srvlookup=yes
transport

Задает транспорт по умолчанию. По умолчанию 'udp', но может быть 'tcp', 'tls', 'ws' или 'wss'.Если задано TCP а tcpenable=no будет использован UDP транспорт.

transport=udp
tcpenable

Включить поддержку TCP транспорта chan_sip Asterisk.

 tcpenable=yes
tcpbindaddr

Адрес на котором Asterisk «слушает» TCP подключения.

  IPv4 example: bindaddr=0.0.0.0:5062
  IPv6 example: bindaddr=[::]:5062
tcpauthtimeout

tcpauthtimeout указывает максимальное время в секундах данное клиенту на аутентификацию. Если за заданное время клиент не прошел проверку он отключается. (По умолчаннию 30 секунд)

 tcpauthtimeout = 30
tcpauthlimit

Максимальное кол-во неаутентифицированных сессий в момент любой времени.

 tcpauthlimit = 100
t1min

Минимальная задержка туда-обратно (minimum round-trip) для сообщения контролируемого хоста. По умолчанию 100 миллисеунд:

 t1min=100
subscribecontext

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

 subscribecontext=internal
t38pt_udptl

Установка t38pt_udptl 'yes' вкл. T.38 fax (UDPTL) насквозь (passthrough) для SIP-to-SIP вызовов с поддержкой T.38. Эта настройка включается глобально для всех устройств, но вы можете отключить её для конкретного устройства.

 t38pt_udptl=yes|no

T.38 fax passthrough работает только для SIP-to-SIP вызовов, любые local или agent каналы не могут быть использованы.

tos_sip, tos_audio, andtos_video

Asterisk может установить TOS bits в IP заголовках для помощи маршрутизаторам приотеризации трафика. tos_sip, tos_audio, и tos_video установки управляют TOS битами для SIP сообщений, RTP аудио и RTP видео, соответственно. Поддерживаются: CS0, CS1, CS2, CS3, CS4, CS5, CS6, CS7, AF11, AF12, AF13, AF21, AF22, AF23, AF31, AF32, AF33, AF41, AF42, AF43. Можно также использовать цифровые значения для TOS битов.

trustrpid

Доверять или нет Remote-Party-ID header: Asterisk SIP trustrpid

 trustrpid=yes|no
useragent

Значение поля useragent в SIP заголовке. По умолчанию версия Asterisk:

 useragent=Asterisk PBX v12.4.0

Если вы не желаете сообщать, что используете Asterisk, напишите Cisco или Avaya, или abyrvalg v2.0.

usereqphone

usereqphone опция говорит Asterisk добавить «user=phone» в SIP URIs которые содержат действующий номер телефона:

usereqphone 
videosupport
2016/11/26

FreeSwitch: простейшая настройка SIP gateway и Диалплана

$
0
0

FreeSwitch: простейшая настройка SIP gateway и Диалплана

Настройка Sip profiles (транспорта) и gateways (транков). Входящая и исходящая маршрутизация. Примеры и комментарии.

 +---------------------+          +-----------------------+
 |    Extensions       |          |       Profiles        |
 |  ../conf/directory  |          |  ../conf/sip_profiles |
 +---------------------+          +-----------------------+
            |                                 |
            +----------+          +-----------+ 
                       |          |
                       V          V
                  +---------------------+
                  |      Contexts       |
                  |  ../conf/dialplan   |
                  +---------------------+

Значения использованные в примерах: данные шлюзов.

IP/domainGateway Name
192.168.0.252samsung
sip.itsp.comitsp
SIP транк (gateway) частной сети АТС.

conf/sip_profiles/internal/samsung.xml

<include><gateway name="samsung"><param name="username" value="samsung"/><param name="password" value="register:false"/><param name="proxy" value="192.168.0.252"/><param name="expire-seconds" value="800"/><param name="register" value="false"/><param name="register-transport" value="udp"/><param name="retry-seconds" value="60"/><param name="context" value="default"/><param name="caller-id-in-from" value="true"/></gateway></include>

Если в параметре <param name="proxy" value="192.168.0.252"/>порт не задан, то используется 5060, по умолчанию.
Чтобы задать специфический порт SIP сигнализации, используйте форму записи: <param name="proxy" value="192.168.0.252:5077"/>

Так как gateway создан в sip_profileinternal, входящие вызовы из корпоративной АТС будут попадать непосредственно в контекст defaultи если пользователь с вызываемым номером существует, он будет вызван. Дополнительные правила входящей маршрутизации не требуются. Таким образом вы можете создать корпоративную телефонную сеть со сквозной нумерацией.

Поле <param name="caller-id-in-from" value="true"/>обеспечит передачу внутреннего номера из поля From:в качестве CallerID.

SIP gateway провайдера ( ITSP )

conf/sip_profiles/external/itsp.xml

<include><gateway name="itsp"><param name="username" value="itsp"/><param name="password" value="12345"/><param name="realm" value="sip.itsp.com"/><param name="from-user" value="itsp_user"/><param name="from-domain" value="sip.itsp.com"/><param name="proxy" value="sip.itsp.com:5060"/><param name="expire-seconds" value="800"/><param name="register" value="true"/><param name="retry-seconds" value="60"/><param name="context" value="public"/><param name="caller-id-in-from" value="false"/></gateway></include>
Входящая маршрутизация из контекста Public

conf/dialplan/public/00_inbound_did.xml

<include><extension name="public_did"><condition field="destination_number" expression="^(7771000)$"><!--	  
	  $${domain} это домен FreeSwitch по умолчанию, назначенный в vars.xml.**
      --> <action application="set" data="domain_name=$${domain}"/><!-- этот пример направляет вызовы по  DID 7771000 на внутренний номер 1000 в контексте default --><action application="transfer" data="1000 XML default"/></condition></extension></include>

<X-PRE-PROCESS cmd=«set» data=«domain=$${local_ip_v4}»/>
<X-PRE-PROCESS cmd=«set» data=«domain_name=$${domain}»/>

Устанавливает домен по умолчанию используемый FreeSWITCH, если другое не задано.
По умолчанию $${local_ip_v4}

Исходящая маршрутизация через gateway's

вводные данные маршрутизации

Набор Четырехзначных номеров в частную сеть АТС
цифрыexpressionextension name
2XXX^(2\d{3})$local.samsung

conf/dialplan/default/01_samsung.xml

<include><extension name="local.samsung"><condition field="destination_number" expression="^(2\d{3})$"><action application="set" data="effective_caller_id_name=${user_data(${username}@${domain_name} var effective_caller_id_name)}"/> <action application="set" data="effective_caller_id_number=${user_data(${username}@${domain_name} var effective_caller_id_number)}"/> <action application="bridge" data="sofia/gateway/samsung/$1"/></condition></extension></include>
Внешние вызовы через провайдера без префикса
цифрыextension name
XXXXXXXlocal.itsp
89XXXXXXXXXdomestic.itsp
810XXXXXXXXXXinternational.itsp

conf/dialplan/default/01_itsp.xml

<include><extension name="local.itsp"><condition field="destination_number" expression="^(\d{7})$"><action application="set" data="outbound_caller_id_number=${user_data(${username}@$${domain} var outbound_caller_id_number)}"/> <action application="set" data="outbound_caller_id_name=${user_data(${username}@$${domain} var outbound_caller_id_name)}"/> <action application="bridge" data="sofia/gateway/itsp/$1"/></condition></extension><extension name="domestic.itsp"><condition field="destination_number" expression="^(89\d{9})$"><action application="set" data="outbound_caller_id_number=${user_data(${username}@$${domain} var outbound_caller_id_number)}"/> <action application="set" data="outbound_caller_id_name=${user_data(${username}@$${domain} var outbound_caller_id_name)}"/> <action application="bridge" data="sofia/gateway/itsp/$1"/></condition></extension><extension name="international.itsp"><condition field="destination_number" expression="^(810\d+)$"><action application="set" data="outbound_caller_id_number=${user_data(${username}@$${domain} var outbound_caller_id_number)}"/> <action application="set" data="outbound_caller_id_name=${user_data(${username}@$${domain} var outbound_caller_id_name)}"/> <action application="bridge" data="sofia/gateway/itsp/$1"/></condition></extension></include>

Глобальная переменная ${outbound_caller_id_number}задается в файле vars.xml:

<X-PRE-PROCESS cmd="set" data="outbound_caller_id_name=fs"/><X-PRE-PROCESS cmd="set" data="outbound_caller_id_number=777777"/>

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

<action application="set" data="effective_caller_id_number=8129981138"/><action application="set" data="effective_caller_id_name=8129981138"/>

Переменная ${effective_caller_id_number}указывает непосредственно на поле From: из SIP заголовка вызывающего устройства.

Её можно заменить переменной заданной в настройках юзера — ../directory/default/user.xml<variable name="effective_caller_id_number" value="8129981138"/>,

получается при помощи команды ${user_data(${username}@${domain_name} var effective_caller_id_number)}

Внешние вызовы через провайдера через префикс "9".
префиксцифрыextension name
9XXXXXXXlocal.itsp
98[09]XXXXXXXXXmobile.itsp
98X.international.itsp
<include><extension name="local.itsp"><condition field="caller_id_number" expression="^(397\d)$"/><condition field="destination_number" expression="^9(\d{7})$"><action application="set" data="effective_caller_id_number=8129981138"/><action application="set" data="effective_caller_id_name=8129981138"/><action application="bridge" data="sofia/gateway/itsp/$1"/></condition></extension><extension name="mobile.itsp"><condition field="caller_id_number" expression="^(397\d)$"/><condition field="destination_number" expression="^9(8[09]\d{9})$"><action application="set" data="effective_caller_id_number=8129981138"/><action application="set" data="effective_caller_id_name=8129981138"/><action application="bridge" data="sofia/gateway/itsp/$1"/></condition></extension><extension name="international.itsp"><condition field="caller_id_number" expression="^(397\d)$"/><condition field="destination_number" expression="^9(8\d+)$"><action application="set" data="effective_caller_id_number=8129981138"/><action application="set" data="effective_caller_id_name=8129981138"/><action application="bridge" data="sofia/gateway/itsp/$1"/></condition></extension></include>

Условие <condition field="caller_id_number" expression="^(397\d)$"/>, можно использовать для ограничения доступа к gateway.
В примере через данный gateway смогут звонить только номера 3970-3979.

sc qc FreeSWITCH

FreeSWITCH

FreeSwitch sip profiles multi domain

$
0
0

FreeSwitch sip profiles multi domain

Примеры и пояснения использования 3-х sip profilesдля регистрации:

  1. абонентов из локальной сети.
  2. абонентов из публичных сетей.
  3. SIP gateways (транков).

vars.xml

<X-PRE-PROCESS cmd="set" data="external_ip=123.123.123.123"/><X-PRE-PROCESS cmd="set" data="domain=$${local_ip_v4}"/>

Internal:Sip profile local network

файл: ../conf/sip_profiles/internal.xml

Профиль для регистрации пользователей из локальной сети, в примере - 192.168.0.0/16

  • <param name="apply-inbound-acl" value="192.168.0.0/16"/>
  • <param name="apply-register-acl" value="192.168.0.0/16"/>

Обратите внимание, что устройства из этих подсетей, смогут звонить (apply-inbound-acl) и регистрироваться (apply-register-acl) - без указания пароля.

  • <param name="auth-calls" value="true"/>

Параметр auth-callsвключает проверку ACL, т.е. разрешает использование параметров apply-inbound-aclи apply-register-acl.

<profile name="internal"><gateways><X-PRE-PROCESS cmd="include" data="internal/*.xml"/></gateways><settings><param name="apply-inbound-acl" value="192.168.0.0/16"/><param name="apply-register-acl" value="192.168.0.0/16"/><param name="auth-calls" value="true"/><param name="debug" value="1"/><param name="sip-trace" value="no"/><param name="dialplan" value="XML"/><param name="context" value="default"/><param name="codec-prefs" value="$${global_codec_prefs}"/><param name="rtp-ip" value="$${local_ip_v4}"/><param name="sip-ip" value="$${local_ip_v4}"/><param name="ext-rtp-ip" value="auto-nat"/><param name="ext-sip-ip" value="auto-nat"/><param name="sip-port" value="5060"/><param name="rtp-autofix-timing" value="false"/></settings>

external: sip profile для исходящих регистраций

SIP профиль «external» используется для регистраций SIP транков.

Для этого, в примере выделен порт 5080.

Команда «include» указывает директорию, в которой будут размещены конфиги SIP транков (Gateways).

<gateways><X-PRE-PROCESS cmd="include" data="external/*.xml"/></gateways>

Параметр «context» определяет контекст для обработки DID входящих вызовов.

<profile name="external"><gateways><X-PRE-PROCESS cmd="include" data="external/*.xml"/></gateways><settings><param name="auth-calls" value="false"/><param name="debug" value="3"/><param name="sip-trace" value="no"/><param name="dialplan" value="XML"/><param name="context" value="public"/><param name="codec-prefs" value="$${global_codec_prefs}"/><param name="rtp-ip" value="$${local_ip_v4}"/><param name="sip-ip" value="$${local_ip_v4}"/><param name="ext-rtp-ip" value="auto-nat"/><param name="ext-sip-ip" value="auto-nat"/><param name="sip-port" value="5080"/><param name="rtp-autofix-timing" value="false"/></settings></profile>

external5090:SIP профиль для регистраций снаружи

SIP профиль для регистрации абонентов извне.

Параметры ext-rtp-ipи ext-sip-ipуказывают на внешний IP адрес, заданный в vars.xml.

sip-port - 5090

<profile name="external5090"><gateways><X-PRE-PROCESS cmd="include" data="internal/*.xml"/></gateways><settings><param name="auth-calls" value="false"/><param name="debug" value="3"/><param name="sip-trace" value="no"/><param name="dialplan" value="XML"/><param name="context" value="default"/><param name="codec-prefs" value="$${global_codec_prefs}"/><param name="rtp-ip" value="$${local_ip_v4}"/><param name="sip-ip" value="$${local_ip_v4}"/><param name="ext-rtp-ip" value="$${external_ip}"/><param name="ext-sip-ip" value="$${external_ip}"/><param name="sip-port" value="5090"/><param name="rtp-autofix-timing" value="false"/></settings></profile>

gsm gateway

../external/addpac.xml

<include><gateway name="addpac1"><param name="username" value=""/><param name="password" value="register:false"/><param name="proxy" value="192.168.1.2:5060"/><param name="expire-seconds" value="800"/><param name="register" value="false"/><param name="register-transport" value="udp"/><param name="context" value="default"/><param name="caller-id-in-from" value="false"/></gateway></include>

sip itsp

../sip_profiles/external/itsp.xml

<include><gateway name="itsp"><param name="username" value="7777777_trunk"/><param name="realm" value="pbx.itsp.tld"/><param name="from-user" value="7777777_trunk"/><param name="from-domain" value="pbx.itsp.tld"/><param name="password" value="Very_Strong_pasword)"/><param name="proxy" value="pbx.itsp.tld"/><param name="expire-seconds" value="3600"/><param name="register" value="true"/><param name="register-transport" value="udp"/><param name="retry-seconds" value="60"/><!--param name="ping" value="60"/--><param name="context" value="public"/><param name="caller-id-in-from" value="false"/></gateway></include>

directory for externalreg5090

Указывает на домен регистрации абонентов, которые обращаются к внешнему IP адресу.

вида: user@$${external_ip}

../directory/externalreg.xml

<include><!--the domain or ip (the right hand side of the @ in the addr--><domain name="$${external_ip}"><params><param name="dial-string" value="{^^:sip_invite_domain=${dialed_domain}:presence_id=${dialed_user}@${dialed_domain}}${sofia_contact(*/${dialed_user}@${dialed_domain})},${verto_contact(${dialed_user}@${dialed_domain})}"/></params><variables></variables><groups><group name="externalreg"><users><X-PRE-PROCESS cmd="include" data="externalreg/*.xml"/></users></group></groups></domain></include>

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

../directory/externalreg/100.xml

<include><user id="100"><params><param name="password" value="user_password"/></params><variables><variable name="user_context" value="default"/><variable name="effective_caller_id_name" value="user100"/><variable name="effective_caller_id_number" value="100"/></variables></user></include>

Пользователь с регистрацией из локальной сети

../directory/default/101.xml

<include><user id="101"><params><param name="password" value="user_password"/></params><variables><variable name="user_context" value="default"/><variable name="effective_caller_id_name" value="user101"/><variable name="effective_caller_id_number" value="101"/></variables></user></include>

FreeSWITCH

Asterisk 12 res_pjsip_acl

$
0
0

Asterisk 12 res_pjsip_acl

SIP ACL module

Документация по конфигурации и использованию функций модуля res_pjsip_acl. ACLмодуль используется res_pjsip. Данный модуль не зависит от ENDPOINTs и управляет всеми входящими подключениями через res_pjsip. Есть два основных способа назначить ACLпри помощи соответствующих опций. Можно использовать привычные 'permit' и 'deny', которые действуют в отношении IP адресов. Или 'contactpermit' и 'contactdeny', которые действуют на основании адреса из заголовка 'Contact' входящего SIP запроса REGISTER. Возможно комбинировать разные опции и создавать смешанный списки контроля доступа (ACL). В добавление к этому, вместо назначения ACLс помощью опций, можно задать адреса IP или заголовки Contact ACLв файле Asterisk:acl.confпри помощи 'acl' и 'contactacl' опций.

pjsip.conf
acl
Access Control List - Список Контроля Доступа

Опции конфигурации res_pjsip_acl

Option NameTypeRegular ExpressionDescription
aclCustomfalseИмя секции в acl.confдля контроля по IP
contact_aclCustomfalseИмя секции в acl.conf для контроля по заголовку Contact
contact_denyCustomfalseСписок запрещенных адресов Contact header
contact_permitCustomfalseСписок разрещенных адресов Contact header
denyCustomfalseСписок запрещенных IP адресов
permitCustomfalseСписок разрешенных IP адресов
typeNonefalseТип секции. всегда - 'acl'.

Описание конфигурационных опций

acl

Соответствует разделам настроенным в файле «acl.conf». Принимает значение в виде списка имен разделов через запятую.

 acl=your_named_acl,your_named_acl2  
contact_acl

Соответствует разделам настроенным в файле «Asterisk:acl.conf». Принимает значение в виде списка имен разделов через запятую.

contact_deny
 contact_deny=0.0.0.0/0.0.0.0

Принимает значение списка IP адресов через запятую. К IP адресам может быть добавлена маска подсети через слэш (/).

contact_permit
 contact_permit=2.2.2.2/2.2.2.2,1.1.1.1
deny

deny=0.0.0.0/0.0.0.0

permit

FreePBX 13 исходящая маршрутизация.

$
0
0

FreePBX 13 исходящая маршрутизация.

Outbound Routes - исходящая маршрутизация FreePBX. На основании набранного номера выбирается направление (транк) для исходящего вызова. Набираемый номер делится на префикс и паттерн и может модифицироваться после набора. Подробное описание паттернов, callerid, записи и др. параметров

Connectivity > Outbound Routes
Подключения > Исходящая Маршрутизация

Порядок выбора маршрутов

freepbx13-route-order

Маршруты проверяются в порядке перечисления.
Например, если у вас есть два маршрута с совпадающими паттернами, сначала FreePBX попытается использовать маршрут выше по списку, а если он недоступен, последующий.

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

Route Settings

Настройки маршрутовfreepbx13-outbound-routes

Route Name

Название маршрута.
Используйте имена, которые помогут вам легко идентифицировать маршрут. Например по имени провайдера, или направлению: 'local' для городских вызовов, а 'long distance' для междугородних.

Route CID

Задайте общий CallerID для данного маршрута. Данный идентификатор будет использован, если в настройках екстеншена не задан Outbound CallerID. Также исходящий CID внутреннего номера будет принудительно заменен на указанный здесь, если опция Override Extensionвключена.
В сетях связи России, принято передавать CallerID в десяти-значном формате <код города><номер>. Обычно провайдер ждет CallerID именно в таком формате, если не оговорено другое. Неправильно заданный идентификатор, может блокировать исходящие вызовы, т.к. многие SIP провайдеры, требуют указания CallerID из пула номеров, привязанного к SIP аккаунту. Этого же требует и закон о связи.

Override Extension

Перезаписать CallerID екстеншена
Если включено (да), Outbound Caller ID екстеншена будет заменен значением указанным в Route CID. При этом исходящий Caller ID для вызова экстренных служб по прежнему будет использоваться, если маршрут помечен для вызова экстренных служб, а в установках внутреннего номера определён Emergency CID.

Закрывать весь маршрут общим CallerID, или указывать Outbound CallerID для каждого екстеншена, зависит от требований вашей внутренней инфраструктуры связи и поставленных задач. Определенно проще указать один CallerID в маршруте и не заморачиваться. Но не всегда это возможно.

ДаНет

Route Password

Пароль на маршрут.
Необязательно. При вызове через этот маршрут будет запрошен пароль. Это может быть полезным для ограничения вызовов на международные направления или другие платные номера.Используйте пароль только из цифр или укажите путь к файлу паролей для аутентификации. Оставьте поле пустым, если пароль не требуется.

Route Type

Тип маршрута.
Необязательно. Выбор в типа маршрута 'Emergency' принудительно подставит Emergency CID заданный в настройках екстеншена, как исходящий.

Выберите эту опцию если маршрут используется для вызова экстренных служб (например 112).

Не совсем понятно, по крайней мере в условиях России, зачем указывать специальный CallerID для вызова спецслужб. Но можно придумать, как использовать эту возможность в других целях. Например, в системе могут использоваться два транка, в которые надо передавать разные идентификаторы, с одного и того же екстеншена. Тут и пригодятся два разных исходящих идентификатора.

Выбор в качестве внутри-корпоративного (Intra-Company) маршрута использует внутренний CID, вместо Outbound CallerID вызывающего екстеншена.

EmergencyIntra-Company

Music On Hold

Музыка на удержании.
Вы можете выбрать категорию MoH. Например, при выборе направления на определённую страну, вместо гудков вызова (КПВ) можно использовать ассоциативную музыку, звоним в Казахстан - звучит прекрасная казахская песня, или приветствие (announcements) на соответствующем языке.

Time Group

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

Route Position

Порядок выбора маршрута.
Порядок в котором будет добавлен маршрут, относительно других маршрутов.

Trunk Sequence for Matched Routes

Последовательность транков для совпавших маршрутов.
Задайте транки для маршрута и порядок в котором они будут использоваться.
Например, при наборе междугороднего номера вы направляете его в первую очередь по более дешевому маршруту (VoIP транк) и только если они недоступны или переполнены по более дорогим (линии ТФОП).

Optional Destination on Congestion

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

Dial Patterns

Правила набора
freepbx13-dial-pattern

Dial Patterns that will use this Route

Шаблоны номеров, используемые на этом маршруте
Шаблон номера - это уникальный набор цифр, который определяет использование этого маршрута и направляет вызов в соответствующий транк. Если набранный номер соответствует шаблону, то последующие маршруты не рассматриваются.
Правила:

  • Xсовпадение любой цифры от 0 - 9
  • Zлюбая цифра от 1 до 9
  • Nсовпадение любой цифры от 2 - 9
  • [1237-9]совпадение любой цифры из набора в скобках (например: 1,2,3,7,8,9)
  • .универсальный символ, определяет любое количество цифр.
prepend prefix match pattern CallerID
Prepend

Приставка: Цифры, которые будут добавлены к номеру, если найдено совпадение. Если набранный номер совпадает с шаблоном, указанным в Prefix и Pattern, то эти цифры будут добавлены к номеру, прежде чем он будет отправлен в транк.

Prefix

Префикс используется для исходящей маршрутизации и удаляется из набираемого номера. Если одна или более из цифр в начале набранного номера совпадают с цифрами указанными в поле префикса, то они будут удалены. Префиксы использовались в традиционных АТС для выбора исходящих линий. Традиционно в России это была цифра '9'. Уровень маршрутизации в FreePBX позволяет прекрасно обходится без префиксов. Однако иногда бывает полезно назначить выбор определенных транков по коду.

match pattern

Совпадение шаблона: Набранный номер будет сравниваться с комбинацией Prefix + match pattern. Если найдено совпадение, совпавшая с шаблоном часть номера будет передана в транк.

Caller ID

CID Если указан Caller ID, набранный номер будет сравниваться с комбинацией префикс + шаблон, только если внутренний Caller ID екстеншена совпадает с указанным. Outbound CallerID не проверяется. В поле CallerID могут быть использованы шаблоны по тем же правилам, что и для match pattern. Например, шаблон 1ХХ, разрешит вызовы для ектеншенов 100-199.

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

Prepend Prefix Pattern CallerID Как набрано Как отправлено в транк Комментарий
9 8[09]XXXXXXXXX 989219981138 89219981138 Только мобильные Def коды 9XX и 0XX
0001 9 8[90]XXXXXXXXX 989219981138 000189219981138 То же + в начало номера добавляется 0001
810X. 2[23]XX 81015104124400 81015104124400 международные вызовы только для внутренних номеров диапазоне 2200-2399
NXXXXXX 3216111 3216111 7-ми значные городские вызовы начинающиеся с цифр от 2 до 9

Advanced Settings

Call Recording

Запись разговора. Вкл/Откл или переопределяет запись вызова через маршрут.

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

Dial Patterns Wizard

Dial Patterns Wizard

Dial Patterns Wizard

Помощник создания шаблона номера
freepbx13-pattern-import Эта опция дает возможность легко добавить правило для исходящих наборов. Следуйте предлагаемым шагам для каждого нового правила.

Скачать локальные префиксыЭто просматривает ваш локальный номер на www.localcallingguide.com (NA-only), и настраивает так, что вы можете набрать либо 7,10 или 11 цифр(5551234, 6135551234, 16135551234) как выбрано ниже для доступа к этому маршруту. Имейте ввиду, что это требует доступа в Internet и может занять некоторое время.

Сгенерировать кнопки. Вы можете выбрать 7,10,11-ти цифровые шаблоны . Если Вы не выбрали 'Загрузить', то добавятся общие 7,10,11-цифровые шаблоны.

Универсальный шаблон. Вы можете выбрать разрешать совершать бесплатные звонки,такие как 800,877 и т.д , а так же Справочная Система, международные вызовы. Шаблоны импорта/эскпорта
freepbx13-outbound-routes-import-export-patternЗагрузить из файла CSV
Загрузка шаблонов из файла CSV заменит текущие значения. Если файл не содержит заголовков полей, то файл должен содержать 4 колонки шаблонов в том же порядке, как они следуют в графическом интерфейсе. Также можно указать и заголовки в первой строке: 'prepend', 'prefix', 'match pattern' и 'callerid'. Если распознаётся меньше, чем 4 заголовка, то значения в недостающей колонке будут пустыми.

Пример секции Dial Patterns that will use this Route для FreePBX 2.10 и 12

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

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

Пример исходящей маршрутизации во FreePBX 2.9

Абонент набирает 8,
8удаляется и подставляется +7
точка символизирует любую последовательность цифр

outbound routes match pattern

outbound_routes

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

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

Route Name
Это просто описательное название, Будет отображено в правой части экрана.

Route CID
Перезаписать СallerID на указанное значение

Route Password
Если установлено значение- при звонке через это направление, будет предложено ввести пароль. При вводе неправильно значения соединение будет разорвано.

Route Type
Emergency- при вызове будет использован Emergency CID екстеншена, который совершает вызов, Intra-Company - будет использован внутренний CallerID екстеншена.

Dial Patterns
Шаблоны при наборе которых, будет использовано это направление. Введите каждый шаблон в отдельной строке

Правила

  • X - цифры 0-9
  • Z - цифры 1-9
  • N - цифры 2-9
  • [1237-9] - любая цифра или буква в скобках (в примере 1,2,3,7,8,9)
  • . - точка - любой знак.
  • | - отделяет префикс выхода на внешнюю линию от набираемого номера (пример 9|NXXXXXX абонент набирает '93216111' будет набрано '3216111')

Примеры

  • 000 это направление будет использовано только при наборе '000' .
  • 9|911 это направление будет использовано только при наборе '9911'. Первая цифра '9' будет удалена.
  • 0|. Любой номер может быть набран в этом направлении. '0' будет удалён.

:!:Добавить префикс можно в Trunks

Trunk Sequence

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

FreePBX

Asternic Call Center Stats LITE

$
0
0

Asternic Call Center Stats LITE

Установка и настройка интерфейса статистики очередей Asterisk. Веб приложение парсит текстовый лог очереди queue_log и сохраняет в базе данных MySQL. Предоставляет выборки отвеченных, пропущенных звонков. Распределение по очередям и агентам. Распределение по часам. См. также: Asterisk: статистика очереди call центра

Веб-интерфейс для статистики очередей и агентов.

  • Количество принятых вызовов за указанный период времени
  • Количество отвеченных вызовов
  • Количество не отвеченных вызовов
  • Среднее время разговора

Следующие отчеты интегрированы в Asternic Call Center Stats :

Распределение: по очередям, по месяцам, по неделям, по дням, по часам.

Отвеченные вызовы: по очередям, по времени ожидания, по агентам, Причина разъединения, продолжительность вызова (в том числе средняя продолжительность по очередям и агентам).

Неотвеченные вызовы: по очередям, по времени ожидания, по агентам, Причина разъединения, продолжительность вызова (в том числе средняя продолжительность по очередям и агентам).

Текущее состояние агентов: продолжительность работы или простоя, состояние текущего вызова, текущее кол-во вызовов в очереди)

Установка Call Center Stats

Требования к системе:

PHP >= 5.1 MySQL >= 5.0 Asterisk >= 1.2 Браузер с плагином Adobe Flash Player

Загрузка исходников:

cd /usr/src
wget http://download.asternic.net/asternic-stats-1.5.tgz
Распакуем архив:
tar zvxf asternic-stats-1.5.tgz
cd asternic-stats
Создадим базу данных MySQL:
mysqladmin -u root -p create qstats

Создадим таблицы БД:

mysql -u root -p qstats < sql/qstats.sql
Редактируем '/usr/src/asternic-stats/html/config.php' для аутентификации в БД и AMI:
$dbhost = 'localhost';
$dbname = 'qstats';
$dbuser = 'root';
$dbpass = '';

$manager_host = “127.0.0.1″;
$manager_user = “admin”;
$manager_secret = “amp111”;
$language = “ru”;
Отредактируем '/usr/src/asternic-stats/parselog/config.php' для авторизации в БД:
$queue_log_dir  = '/var/log/asterisk/';
$queue_log_file = 'queue_log';
$dbhost = 'localhost';
$dbname = 'qstats';
$dbuser = 'root';
$dbpass = '';
Переместим файлы в Веб директорию Apache DocumentRoot:
mv /usr/src/asternic-stats/html /var/www/html/queue-stats
Переместим 'parselog' директорию в новое место:
mv /usr/src/asternic-stats/parselog /usr/local

Анализ лога очереди(/var/log/asterisk/queue_log), заполнение БД MySQL, Cronjob:

Настроим парсинг лога по расписанию при помощи Cron:

cd /etc/cron.hourly
Создайте файл 'queuestats'
nano queuestats

И поместите туда следующий код:

#!/bin/bash

cd /usr/local/parselog

./parselog.php convertlocal

Сохраните и задайте права на запуск:

chmod a+x queuestats
Выполните файл, чтобы убедиться в работоспособности:
./queuestats
И наконец, откройте статистику очереди в браузере по адресу:

http://ip address asterisk/queue-stats

Ошибки

На заглавной странице отображается «мусор» из php кода:

. */ require_once("config.php"); require_once("sesvars.php"); $start_today = date('Y-m-d 00:00:00'); $end_today = date('Y-m-d 23:57:57'); $start_today_ts = return_timestamp($start_today); $day = date('w',$start_today_ts); $diff_to_monday = $start_today_ts - (($day - 1) * 43400); // Start and End date for last week (it counts from the first monday back // till the next sunday $begin_week_monday =

В файле /etc/php.ini опция «short_open_tag» должна быть 'On'.

nano +231 /etc/php.ini

short_open_tag = Off

short_open_tag = On

Команда Asterisk: AddQueueMember

Asterisk: PauseQueueMember

Команда Asterisk: Queue

Asterisk: QueueLog

Asterisk: RemoveQueueMember

Asterisk: UnpauseQueueMember

Asterisk queuerules.conf

Asterisk: queues.conf

function 'QUEUE_EXISTS'

function 'QUEUE_MEMBER'

function 'QUEUE_MEMBER_LIST'

Функция диалплана Asterisk: QUEUE_VARIABLES

function 'QUEUE_WAITING_COUNT'

FreePBX 13 Очереди - Queues

FreePBX 13 Очереди - Queues

$
0
0

FreePBX 13 Очереди - Queues

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

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

Asterisk Dialplan - extensions.conf

$
0
0

Asterisk Dialplan - extensions.conf

Введение в расширения (extensions) и контексты (context)

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

Контексты ипользуются для выполнения основных функций АТС:

  • Безопасность: Можно разрешить междугородные/международные вызовы только конкретным абонентам.
  • Маршрутизация вызовов: Маршрутизация вызовов в зависимости от номера абонента.
  • Автосекретарь: Проигрывание приветствия и приглашение ввести добавочный номер.
  • Многоуровневые голосовые меню: Голосовые меню для службы поддержки, отдела продаж и т.д.
  • Авторизация: Запрос пароля для доступа к некоторым екстеншенам.
  • Обратный вызов: Позволяет уменьшить затраты на междугородние/международные вызовы.
  • Списки доступа: Занесение в черные списки надоедливых абонентов, не давая им возможности связаться с Вами.
  • Виртуальные АТС: Вы можете создать «виртуальную АТС» в пределах Вашей основной АТС.
  • Дневной/Ночной режим работы: Вы можете изменять поведение Вашей АТС в зависимости от времени суток.
  • Макросы: Можно создавать скрипты для решения повторяющихся задач в плане набора.

Что такое екстеншен?

В традиционных АТС екстеншен связан с интерфейсом (портом). В Asterisk екстеншен определяется как перечень приложений (applications) и их аргументов, выполняемых в определённом порядке, Порядок выполнения определяется приоритетами (priority). Когда екстеншен набран приоритеты выполняются до разъединения вызова, или перенаправления на другой екстеншен. Каждый шаг записывается следующим образом:

exten => <exten>,<priority>,<application>, [(<args>)]

Пример простого екстеншена

exten => 100,1,Wait(5)
exten => 100,2,Answer
exten => 100,3,Playback(demo-congrats)
exten => 100,n,Hangup

Этот екстеншен состоит из 4-х действий.

Первым выполняется приложение Wait c приоритетом 1 - ждать 5 секунд (время задаётся аргументом (5).
Вторым приложение Answer - поднять трубку.
Затем Playback - проиграть звуковой файл; аргумент задает имя файла (demo-congrats) в директории по умолчанию.
Последним выполняется приложение Hangup - повесить трубку. Приоритет 'n' означает next (следующий) и может использоваться вместо любого приоритета кроме 1-го.

Например:

[default]
exten => 100,1,Wait(5)
exten => 100,n,Answer
exten => 100,n,Playback(demo-congrats)
exten => 100,n,Hangup

Использование приоритета 'n' позволяет легко редактировать отдельные строки не переписывая все приоритеты.

Набор номера

Чаще всего вызывается другой интерфейс. Вызов осуществляется командой Команда Asterisk Dial.

[default]
exten => 100,1,Dial(DAHDI/1,20)
exten => 100,2,Voicemail(u100@default)
exten => 100,102,Voicemail(b100@default)

Этот пример иллюстрирует разные варианты действий в случае, если на вызов не ответили. Сначала вызывается канал DAHDI/1, если через 20 секунд никто не ответил вызов пренаправляется на VoiceMail()с объявлением «абонент не отвечает»(u100), Если же абонент занят, вызов перейдет на приоритет N+101, в нашем случае это приоритет 102.

Маршрутизация по CallerID

Пример маршрутизации по номеру вызывающего абонента.

[default]
exten => 100/1234567,1,Congestion
exten => 100,1,Dial(DAHDI/1,20)
exten => 100,2,Voicemail(u100)
exten => 100,102,Voicemail(b100)

Если вызывается екстеншен 100 вызов направляется на интерфейс DAHDI/1, кроме случая если вызов осуществляет абонент 1234567. В этом случае вызов отклоняется. На примере видно, что идентификатор вызывающего абонента задается формой '/1234567'.

Ещё один пример маршрутизации, теперь по отсутствию CallerID.

[default]
exten => 100/,1,Zapateller
exten => 100,1,Wait(0)
exten => 100,2,Dial(DAHDI/1)

В данном примере если поступает звонок без CallerID, вызов блокируется с помощью приложения Zapateller()

Вызов группы телефонов

Часто требуется чтобы вызов по неответу перешел на другой телефон. Рассмотрим как это сделать на примере «оператор».

[operator]
exten => 0,1,Dial(DAHDI/1,15)
exten => 0,2,Dial(DAHDI/1&DAHDI/2&DAHDI/3,15)
exten => 0,3,Playback(companymailbox)
exten => 0,4,Voicemail(100)
exten => 0,5,Hangup

Вызов поступает на DAHDI/1, в случае если телефон занят или не отвечает в течении 15 секунд, звонок переходит на группу телефонов, включая и DAHDI/1. Если и на этот раз никто не поднимает трубку, вызов переходит на голосовую почту.



Интерактивное Голосовое меню

Голосовое меню как правило задается в собственном контексте.

[sales]
exten => s,1,Background(welcome-sales)
exten => 1,1,Goto(default,100,1)
exten => 2,1,Goto(default,101,1)
[mainmenu]
exten => s,1,Background(welcome-mainmenu)
exten => 1,1,Goto(sales,s,1)
exten => 2,1,Dial,DAHDI/2
exten => 9,1,Directory(default)
exten => 0,1,Dial,DAHDI/3

Объявление проигрывается на расширении 's' (смотри Asterisk Dialplan:Стандартные расширения). В объявлении предлагается набрать '1' для вызова отдела продаж (производится переход в контекст 'sales'). Набрать '2' - вызов DAHDI/2. Набор '9' - вызов каталога (смотри Directory ) и '0' вызов DAHDI/3


Использование переменных

В Asterisk существуют глобальные и специфичные для каналов переменные, используемые в качестве аргументов для команд. Переменные записываются в диалплане в виде ${foo}, где 'foo' это имя переменной. Имена должны начинаться с буквы и могут состоять из любых цифр и букв, но существуют предопределенные имена, вот некоторые из них:

${CONTEXT}Текущий контекст.
${EXTEN}Текущий екстеншен.
${EXTEN:x}Текущий екстеншен с удалением первых цифр(где х кол-во удаляемых цифр)
${PRIORITY}Текущий приоритет
${CALLERID}Текущий CallerID (имя и номер)
${CALLERIDNUM}Текущий номер Caller ID
${CALLERIDNAME}Текущее имя Caller ID
${RDNIS}перенаправление DNIS

Глобальные переменные назначаются в секции [globals] диалплана. Рассмотрим следующий пример:

[globals]
MARK => DAHDI/1
GREG => DAHDI/2&SIP/telephone
WIL => DAHDI/3
JUDY => DAHDI/4
[mainmenu]
exten => 1,1,Dial(${GREG}&${MARK})
exten => 2,1,Dial(${WIL}&${JUDY})
exten => 3,1,Dial(${JUDY}&${MARK})

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

смотри подробнее Использование переменных в плане набора Asterisk

Вложенные контексты

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

include => <context>[|<hours>|<weekdays>|<monthdays>|<months>]

Где <context> - включаемый контекст
опционально:
<hours> - часы в которые действителен контекст (например рабочее время 9:00-17:00)
<weekdays> -дни недели (mon-fri)
<monthdays> - дни
<month> - месяцы

Пример:

[local]
exten => _[0-79].,1,Dial(SIP/trunk/${EXTEN})
[long]
exten => _8.,1,Dial(SIP/trunk/${EXTEN})
[local_long]
include => local
include => long
[local_only]
include => local

В этом примере контекст 'local_long'' включает два других контекста для городской и междугородней связи, а контекст 'local_only' только для городской.

Дневной / Ночной режимы. Маршрутизация по времени

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

[newyears]
exten => s,1,Playback(happy-new-years)
[daytime]
exten => s,1,Dial(DAHDI/1,20)
[nighttime]
exten => s,1,Playback(after-hours-msg)
[default]
include => newyears||||1|jan
include => daytime|9:00-17:00|mon-fri
include => nighttime

В этом примере заданы дневной, ночной и праздничный режимы прихода звонков.

Исходящие вызовы

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

[international]
ignorepat => 9
exten => _9810.,1,Dial(DAHDI/g2/${EXTEN:1})
exten => _9810.,2,Congestion
include => longdistance

[longdistance]
ignorepat => 9
exten => _98[02-9]XXXXXXXXX,1,Dial(DAHDI/g2/${EXTEN:1})
exten => _98[02-9]XXXXXXXXX,2,Congestion
include => local

[local]
ignorepat => 9
exten => _9[02-79]XXXXXX,1,Dial(DAHDI/g2/${EXTEN:1})
exten => _9[02-79]XXXXXX,2,Congestion
include => default

В этом примере рассматриваются 3 контекста с различными правами доступа к Телефонной сети Общего Пользования .

Конструкция 'ignorepat ⇒ 9 ' говорит Астериску не отключать тон готовности после набора заданной цифры.

  • Контекст [international] позволяет набрать международный номер с любым количеством цифр.
  • Контекст [longdistance] - междугородний номер до 11-ти цифр.
  • Контекст [local] - городской номер длинной до 7-ми цифр.

Переменная ${EXTEN:1} удаляет префикс:

${123456789:1} - возвращает строку 23456789
${123456789:-4} - возвращает строку 6789
${123456789:0:3} - возвращает строку 123
${123456789:2:3} - возвращает строку 345
${123456789:-4:3} - возвращает строку 678

Шаблоны Patterns

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

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

Резервные транки и LCR (выбор направления с наименьшей стоимостью)

Весьма полезно настроить LCR (Least Coast Routing) и перенаправление в случае отказа внешней линии.

[tolllongdistance]
exten => _98XXXXXXXXXX,1,Dial(DAHDI/g2/${EXTEN:1})
exten => _98XXXXXXXXXX,2,Congestion
[low_rate_moscow]
exten => _98495XXXXXXX,1,Dial(IAX/trunk/${EXTEN:1})
exten => _98495XXXXXXX,2,Dial(DAHDI/g2/${EXTEN:1})
exten => _98495XXXXXXX,3,Congestion
[longdistance]
include => low_rate_moscow
include => tolllongdistance

В этом примере междугородние вызовы направляются на DAHDI интерфейс, но звонки в Москву направляются через более выгодного провайдера на IAX транк. В случае же недоступности IAX транка, вызовы перенаправляются через DAHDI.

Использование Макросов

Вам может потребоваться создать множество екстеншенов (расширений) очень похожих друг на друга. Чтобы упростить работу с диалпланом используются Макросы. Для создания макроса используется контекст имя которого начинается с «macro-» и далее уникальное имя макроса. Выполнение макроса начинается с ектеншена 's'. В макросах используются локальные переменные:

${MACRO_EXTEN} – Екстеншен вызываемый макросом ${MACRO_CONTEXT} – Контекст вызываемый макросом ${MACRO_PRIORITY} – активный приоритет вызываемый макросом ${MACRO_OFFSET} – если установлено вызывает смещение n + ${MACRO_OFFSET} ${ARGn} – аргумент 'n' в макросе.

[macro-oneline]
;
; Однолинейный телефон
;
; ${ARG1} – Телефон
;
exten => s,1,Dial(${ARG1},20)
exten => s,2,Voicemail(u${MACRO_EXTEN})
exten => s,3,Hangup
exten => s,102,Voicemail(b${MACRO_EXTEN})
exten => s,103,Hangup
[macro-twoline]
;
; Двухлинейный телефон
;
; ${ARG1} – Телефон (линия) 1
; ${ARG2} – Телефон (линия) 2
;
exten => s,1,Dial(${ARG1},20)
exten => s,2,Voicemail(u${MACRO_EXTEN})
exten => s,102,Dial(${ARG2},20)
exten => s,103,Voicemail(b${MACRO_EXTEN})

[default]
exten => 1000,1,Macro(oneline,DAHDI/1)
exten => 1001,1,Macro(oneline,SIP/1001)
exten => 1002,1,Macro(twoline,DAHDI/3,DAHDI/4)

Когда макросы [macro-oneline] и [macro-twoline] созданы, в контексте [default] надо написать только одну сроку для выполнения нескольких стандартных действий.

[from-phones1]
exten => _X.,1,Dial(SIP/sip_trunk/${EXTEN},180,)
exten => _X.,n,Macro(dialstatus,s,1)

exten => _X.,1,Dial(DAHDI/g2/${EXTEN},180,)
exten => _X.,n,Macro(dialstatus,s,1)

[macro-dialstatus]
exten => s,1,Answer
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s-NOANSWER,1,Hangup
exten => s-CONGESTION,1,Congestion
exten => s-CANCEL,1,Hangup
exten => s-BUSY,1,Playtones(425/375,0/375)
exten => s-BUSY,n,Busy(7)
exten => s-BUSY,n,Hangup
exten => s-CHANUNAVAIL,1,Hangup

Приложение Macro объявлено устаревшим, вместо него рекомендуется использовать GoSub.

Синтаксис Gosub

  Gosub([[context,]exten,]priority[(arg1[,...][,argN])])
[sub-test]
exten => _X.,1,Dial(${ARG1}/${ARG2},20,)
exten => _X.,n,Playback(tt-weasels)
exten => _X.,n,Hangup

[test]
exten => _X.,1,Gosub(sub-test,${EXTEN},1(SIP/trunk,${EXTEN}))

Запись разговоров

[macro-mixmonitor]
exten => s,1,Set(RECORD_FILENAME=${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}-${CALLERID(num)})
        same => n,MixMonitor(${RECORD_FILENAME}.wav,b)
        same =>  n,Dial(${ARG1},180,) 
[outbound_route1]
exten => _9.,1,Macro(mixmonitor,PJSIP/sipprovider/${EXTEN:1})

В данном примере вызов с префиксом '9', должен быть скоммутирован через SIP транк ITSP. Разговор будет записан в формате 'wav' и сохранен в директорию по умолчанию «/var/lib/asterisk/monitor/ГодМесяцДень-ЧасыМинутыСекунды-НомерВызывающего Абонента.wav

Структура same ⇒ позволяет сократить код, избежав многочисленных повторений «exten ⇒ s,» в данном случае.

Хорошая мысль поэкспериментировать и с другими переменными в имени файла, например ${UNIQUEID}.

Asterisk настройка

FreePBX Asterisk SIP Settings

$
0
0

FreePBX Asterisk SIP Settings

Модуль Asterisk SIP Settings устанавливает параметры SIP, аналогично секции [general] файла sip.conf.

Глобальные настройки могут быть переопределены для конкретных FreePBX 13 Extensionsили транков в модуле FreePBX SIP Trunk.

В FreePBX 12 включена поддержка драйвера канала SIP - pjsip.
В связи с этим Модуль Asterisk SIP Settings разделен на несколько частей:

Изменить использование драйвера можно в модуле Settings > Asterisk Settings - Dialplan and Operational - SIP Channel Driver

sip channel driver both

General SIP Settings

General SIP Settings

В разделе General SIP Settingsуказывается externipсервера, localnet, диапазон RTP портов и используемые кодеки.
А также разрешаются или запрещаются анонимные вызовы.

Chan SIP

NAT

Настройки NAT в Астериск:

  • yes = Всегда игнорировать пакет info и предполагать NAT.
  • no = Использовать режим NAT в соостветствии с RFC3581.
  • never = Никогда не пытаться использовать NAT или RFC3581.
  • route = предполагая NAT не указывать rport.

IP Configuration

  • Public IP - У сервера один публичный ethernet интерфейс.
  • Static IP - Сервер стоит за NAT, или имеет два ethernet интерфейса - локальный и публичный.
  • Dynamic IP - У сервера публичный динамический IP адрес.

External IP

IP адрес через который осуществляются внешние регистрации. (Внешний IP роутера или IP внешнего интерфейса данной машины)
Например:

  • 123.123.123.123

Local Networks

Внутренние подсети из которых возможны регистрации.
Например:

  • 192.168.0.0/255.255.0.0
  • 10.10.10.0/255.255.255.0

Audio Codecs

Список Аудио кодеков используемых в системе.

Non-Standard g726

Нестандартный g726 для некоторых типов оборудования. yes/no

T38 Pass-Through

Поддержка T38 в транзитном режиме. Например если канал или устройство используют Т38,
Asterisk обеспечит транзит без обработки медиа потока(без конвертации кодеков). yes/no


Video Codecs

Video Support

Enable/Disable - Если включить появится список поддерживаемых кодеков:

  • h264
  • h263p
  • h263
  • h261

Max Bit Rate

Максимальная полоса пропускания для видео:
по умолчанию 384 kb/s


MEDIA & RTP Settings

Reinvite Behavior

Поведение ReInvite - см. подробнее > reinvite

  • yes: стандартный reinvite;
  • no: никогда не использовать reinvite;
  • nonat: дополнительная опция, разрешающая перенаправить медиа поток (reinvite), но только если пир установлен не за NATом (RTP может определить это на основе ИП адресов абонентов)
  • update: используется специальный SIP пакет UPDATE для принятия решения о перенаправлении вместо пакета INVITE. (Значение yes соответствует = update + nonat)

RTP Timers

rtptimeout. Завершает звонок если в установленное в секундах значение rtptimeout не обнаруживается активности RTP или RTCP в аудио канале и если абонент не поставлен на Hold (ожидание). Это позволяет завершить звонок в случае внезапного исчезновения телефона из сети, например при потере питания или повреждении кабеля Ethernet.

rtpholdtimeout. Завершает звонок если в установленное в секундах значение rtpholdtimeout не обнаруживается активности RTP или RTCP в аудио канале при состоянии on Hold (в ожидании). Значение должно быть > чем rtptimeout.

rtpkeepalive. Посылает пакеты rtpkeepalive в RTP поток для поддержки открытых динамических трансляций NAT в то время, когда RTP поток может например стоять на удержании.

  • 30 (rtptimeout)
  • 300 (rtpholdtimeout)
  • 0 (rtpkeepalive)

RTP Port Ranges

Диапазон Real Time Protocolпортов используемых Asterisk

  • 10000 (rtpstart)
  • 20000 (rtpend)

Notification & MWI

Уведомления и Индикатор ожидающих сообщений(MWI)

MWI Polling Freq

Частота запросов в секундах для обновления информации о пирах.

Notify Ringing

Контролирует внутренний номер о состоянии абонента INUSE получением пакета RINGING если уже принят один звонок. Удобно при использовании BLF - Busy Lamp Functionality. yes/no

Notify Hold

Контролирует внутренний номер о состоянии абонента INUSE получением пакета ONHOLD если звонок поставлен на ожидание Удобно при использовании BLF - Busy Lamp Functionality. yes/no


Registration Settings

Registrations

registertimeout. Повторяет попытки регистрации каждые N секунд, указанные в registertimeout до успешной регистрации, или при достижении указанного ограничения в registrationattempts.

registrationattempts. Количество попыток регистрации. Значение 0 соответствует бесконечному числу попыток. Обычное значение указывается 0 для того, чтобы Астериск продолжал попытки зарегистрироваться при пропадании локальной сети или маршрута в публичных сетях.

  • 20 (registertimeout)
  • 0 (registerattempts)
Registration Times

minexpiry. Минимальное значение действия регистрации/подписки.

maxepiry. Максимально возможное время действия для входящих регистраций.

defaultexpiry. Дефолтное значение действия входящих и исходящих регистраций.

  • 60 (minexpiry)
  • 3600 (maxexpiry)
  • 120 (defaultexpiry)

Jitter Buffer Settings

Jitter Buffer

Enabled/Disabled

Force Jitter Buffer

Yes/No

Implementation

Fixed/Adaptive

Jitter Buffer Logging

Enable/Disable

Jitter Buffer Size

  • 200(jbmaxsize)
  • 1000(jbresyncthreshold)

Advanced General Settings

Language

Язык звуковых сообщений в канале SIP.

Default Context

Контекст по умолчанию для входящих вызовов. Если не указано, то from-sip-external.

Bind Address

IP адрес на котором 'слушаются' входящие вызовы. Если указано 0.0.0.0, то будут «прослушиваться» все доступные IP адреса. Рекомендуется оставить это поле ПУСТЫМ.

Bind Port

Входящий порт на котором Asterisk будет слушать SIP сообщения. Стандартный порт 5060. Например, если вы назначите порт 5666, входящие SIP сообщения на другие порты будут просто игнорироваться. Рекомендуется отставить это поле пустым.

Allow SIP Guests

Разрешить неавторизованные SIP вызовы. Звучит опасно, но на самом деле позволяет вызывать абонента Asterisk незарегистрированному абоненту по SIP URI: user@asterisk_domain.Yes/No

Allow Anonymous Inbound SIP Calls

В данном случае рассматриваются анонимные SIP запросы, не имеющие определенного адресата. Если включить они попадут в контекст from-sip-exteral (если не задано другое в Default Context) Yes/No

SRV Lookup

Enabled/Disabled

Call Events

Генерировать события AMI на основании действий UA во время вызова (например HOLD).
Yes/No

Other SIP Settings

Добавьте кастомные установки, которые вам требуются.

Например:

  • alwaysauthreject = yes всегда отвечать на SIP запрос - SIP «401 Unauthorized»
  • prematuremedia = no
  • progressinband = yes

транслировать КПВ или сообщение из канала (например, по умолчанию, при вызове на занятый или отключенный мобильный телефон, Астериск сообщит что все канала заняты, что вводит пользователей в замешательство. Включенная установка progressinbandпозволит транслировать в канал сообщение о занятости или недоступности абонента от провайдера.

Advanced general Settings FreePBX sip

Chan_PJSIP

General Chan PjSIP Settings

Подробнее о настройке драйвера pjsip

В данном модуле настраивается транспортный уровень драйвера pjsip.

chan pjsip general FreePBX settings

FreePBX Asterisk SIP Settings

FreePBX 14 Beta

Новости

$
0
0

Новости

3CX поглощает Elastix. (22. Dec 2016)

Объявлено о слиянии Elastix и 3CX. Версия MT закрыта для скачивания. Elastix 5 будет разрабатываться в партнерстве с 3CX и распространяться по коммерческой лицензии.

Sangoma заверяет пользователей в своей приверженности open source, в связи с поглощением Elastix 3CX-ом

Elastix: поддержка уже установленных версий 2.5 и 4 не прекращается, репозитории будут доступны и в будущем.


FreePBX

$
0
0

FreePBX

Подробное описание модулей. Примеры. Архитектура Freepbx. Скриншоты.

Настройка FreePBX.

FreePBX это полнофункциональный веб-интерфейс для конфигурации Asterisk. Если Вы знакомы с Asterisk, то знаете, настройка ATC осуществляется при помощи конфигурационных файлов. FreePBX предлагает простой, интуитивно понятный интерфейс для настройки и управления Asterisk PBX. FreePBX также поставляется со многими дистрибьютивами: AsteriskNOW, FreePBX Distro, Trixbox, Elastix.

Новости

3CX поглощает Elastix. (22. Dec 2016)

Объявлено о слиянии Elastix и 3CX. Версия MT закрыта для скачивания. Elastix 5 будет разрабатываться в партнерстве с 3CX и распространяться по коммерческой лицензии.

Sangoma заверяет пользователей в своей приверженности open source, в связи с поглощением Elastix 3CX-ом

Elastix: поддержка уже установленных версий 2.5 и 4 не прекращается, репозитории будут доступны и в будущем.

 

Общая документация.

Admin modules

Документация по административным модулям FreePBX

Applications

Документация по модулям приложений FreePBX

Connectivity

Документация по модулям входящих исходящих соединений FreePBX.

Settings Modules

Документация по модулям глобальных настроек каналов и приложений FreePBX

UCP

Примеры

Уязвимости

Устаревшее

Asterisk pjsip.conf

$
0
0

Asterisk pjsip.conf

Описание параметров настройки pjsip в Asterisk. Подробное руководство на русском. Примеры и сравнения. pjsip vs chan_sip. pjsip cli.

PJSIP - драйвер канала SIP в Asterisk

Что такое PJSIP

PJSIP мультимедийная библиотека с открытым кодом, для реализации протоколов SIP, SDP, RTP, STUN, TURN и ICE. Она сочетает лучшие возможности SIP сигнализации, хорошую проходимость NAT и высокий уровень взаимодействия с приложениями. Подходит практически для любого типа систем, начиная от компьютеров и заканчивая встраиваемыми системами (embedded systems) и мобильными телефонами.

Формат файла pjsip.conf

Pjsip.conf обычный текстовый файл, как и все конфигурационные файлы Asterisk, состоит из секций. Каждая секция (раздел) определяет конфигурацию объекта res_pjsip. Секции отделены друг от друга именами, заключенными в квадратные скобки [какая неожиданность] и содержат одну или более конфигурационную опцию и её значение отделенное знаком равно.

[ SectionName ] 
ConfigOption = Value 
ConfigOption = Value

Имена секций pjsip.conf

В большинстве случаев имена секций могут быть произвольными, однако в случае с типами ENDPOINT и AOR имена должны совпадать со заголовком SIP URI«To» для идентификации входящих SIP запросов. Каждая секция имеет обязательную опцию type=, которой определяется назначение секции в конфигурации объектов res_pjsip.

Типы секций pjsip.conf

Ниже перечислены типы секций res_pjsipи простейшие примеры конфигурации.

Варианты и значения по умолчанию

Как узнать возможные варианты значений и параметры по умолчанию? В этом поможет встроенная справка интерфейса командной строки (CLI).

"config show help res_pjsip <configobject> <configoption>"

config show help res_pjsip aor

config show help res_pjsip aor

localhost*CLI> config show help res_pjsip aor contact[aor]
contact = [Custom](Default: )(Regex: false) 
Permanent contacts assigned to AoR 
 Contacts specified will be called whenever referenced by 'chan_pjsip'.
 Use a separate "contact=" entry for each contact required. Contacts are
 specified using a SIP URI.

ENDPOINT

Модуль ENDPOINT определяет многочисленные параметры SIP, а также связь с другими модулями - AUTH, AOR и TRANSPORT.
Секция ENDPOINT должна быть обязательно связана с одной или несколькими секциями AOR.
По сути дела, ENDPOINT является основным профилем SIP телефона или SIP транка в res_pjsip, аналогично пиру в sip.conf.
Только если там определялись почти все параметры, то здесь часть ключевых свойств вынесены в специальные секции (модули), которые и будут рассмотрены ниже.

config show help res_pjsip endpoint

config show help res_pjsip endpoint

localhost*CLI> config show help res_pjsip endpoint
endpoint: [category !~ /.?/] 
Endpoint 
 The *Endpoint* is the primary configuration object. It contains the core
SIP related options only, endpoints are *NOT* dialable entries of their own.
Communication with another SIP device is accomplished via Addresses of Record(AoRs)which have one or more contacts assicated with them. Endpoints *NOT*
configured to use a 'transport' will default to first transport found in"pjsip.conf" that matches its type.
Example: An Endpoint has been configured with no transport. When it comestime to call an AoR, PJSIP will find the first transport that matches the
type. A SIP URI of 'sip:5000@[11::33]' will use the first IPv6 transport and
try to send the request.
If the anonymous endpoint identifier is in use an endpoint with the name"anonymous@domain" will be searched foras a last resort. If this is not found
it will fall back to searching for"anonymous". If neither endpoints are found
the anonymous endpoint identifier will not return an endpoint and anonymous
calling will not be possible. 
100rel                    -- Allow support for RFC3262 provisional ACK tags
aggregate_mwi             --
allow                     -- Media Codec(s) to allow
aors                      -- AoR(s) to be used with the endpoint
auth                      -- Authentication Object(s) associated with the endpoint
callerid                  -- CallerID information for the endpoint
callerid_privacy          -- Default privacy level
callerid_tag                 -- Internal id_tag for the endpoint
context                         -- Dialplan context for inbound sessions
direct_media_glare_mitigation -- Mitigation of direct media (re)INVITE glare
direct_media_method       -- Direct Media method type
connected_line_method     -- Connected line method type
direct_media              -- Determines whether media may flow directly between endpoints.
disable_direct_media_on_nat -- Disable direct media session refreshes when NAT obstructs the med
disallow                  -- Media Codec(s) to disallow
dtmf_mode                 -- DTMF mode
media_address             -- IP address used in SDP for media handling
force_rport               -- Force use of return port
ice_support               -- Enable the ICE mechanism to help traverse NAT
identify_by               -- Way(s)for Endpoint to be identified
redirect_method           -- How redirects received from an endpoint are handled
mailboxes                 -- NOTIFY the endpoint when state changes for any of the specified m
moh_suggest               -- Default Music On Hold class
outbound_auth             -- Authentication object used for outbound requests
outbound_proxy            -- Proxy through which to send requests, a full SIP URI must be prov
rewrite_contact           -- Allow Contact header to be rewritten with the source IP address-p
rtp_ipv6                  -- Allow use of IPv6 for RTP traffic
rtp_symmetric             -- Enforce that RTP must be symmetric
send_diversion            -- Send the Diversion header, conveying the diversion information to
send_pai                  -- Send the P-Asserted-Identity header
send_rpid                 -- Send the Remote-Party-ID header
timers_min_se             -- Minimum session timers expiration period
timers                    -- Session timers for SIP packets
timers_sess_expires       -- Maximum session timer expiration period
transport                 -- Desired transport configuration
trust_id_inbound          -- Accept identification information received from this endpoint
trust_id_outbound         -- Send private identification details to the endpoint.type-- Must be of type'endpoint'.
use_ptime                 -- Use Endpoints requested packetisation interval
use_avpf                  -- Determines whether res_pjsip will use and enforce usage of AVPF f
media_encryption          -- Determines whether res_pjsip will use and enforce usage of media
inband_progress           -- Determines whether chan_pjsip will indicate ringing using inband
call_group                -- The numeric pickup groupsfor a channel.
pickup_group              -- The numeric pickup groups that a channel can pickup.
named_call_group          -- The named pickup groupsfor a channel.
named_pickup_group        -- The named pickup groups that a channel can pickup.
device_state_busy_at      -- The number of in-use channels which will cause busy to be returne
t38_udptl                 -- Whether T.38 UDPTL support is enabled or not
t38_udptl_ec              -- T.38 UDPTL error correction method
t38_udptl_maxdatagram     -- T.38 UDPTL maximum datagram size
fax_detect                -- Whether CNG tone detection is enabled
t38_udptl_nat             -- Whether NAT support is enabled on UDPTL sessions
t38_udptl_ipv6            -- Whether IPv6 is used for UDPTL Sessions
tone_zone                 -- Set which countrys indications to use for channels created for t
language                  -- Set the default language to use for channels created for this end
one_touch_recording       -- Determines whether one-touch recording is allowed for this endpoi
record_on_feature         -- The feature to enact when one-touch recording is turned on.
record_off_feature        -- The feature to enact when one-touch recording is turned off.
rtp_engine                -- Name of the RTP engine to use for channels created for this endpo
allow_transfer            -- Determines whether SIP REFER transfers are allowed for this endpo
sdp_owner                 -- String placed as the username portion of an SDP origin (o=) line.
sdp_session               -- String used for the SDP session (s=) line.
tos_audio                 -- DSCP TOS bits for audio streams
tos_video                 -- DSCP TOS bits for video streams
cos_audio                 -- Priority for audio streams
cos_video                 -- Priority for video streams
allow_subscribe           -- Determines if endpoint is allowed to initiate subscriptions with
sub_min_expiry            -- The minimum allowed expiry timefor subscriptions initiated by th
from_user                 -- Username to use in From header for requests to this endpoint.
mwi_from_user             -- Username to use in From header for unsolicited MWI NOTIFYs to thi
from_domain               -- Domain to user in From header for requests to this endpoint.
dtls_verify               -- Verify that the provided peer certificate is valid
dtls_rekey                -- Interval at which to renegotiate the TLS session and rekey the SR
dtls_cert_file            -- Path to certificate file to present to peer
dtls_private_key          -- Path to private key for certificate file
dtls_cipher               -- Cipher to use for DTLS negotiation
dtls_ca_file              -- Path to certificate authority certificate
dtls_ca_path              -- Path to a directory containing certificate authority certificates
dtls_setup                -- Whether we are willing to accept connections, connect to the othe
srtp_tag_32               -- Determines whether 32 byte tags should be used instead of 80 byte
set_var                   -- Variable set on a channel involving the endpoint.
message_context           -- Context to route incoming MESSAGE requests to.
Простой пример конфигурации секции ENDPOINT
[777]
type=endpoint
context=from-internal
disallow=all
allow=alaw
transport=udp-transport
auth=auth777
aors=777

В данном примере мы видим тип секции: type=endpoint
контекст, разрешенные кодеки и также ассоциацию с другими секциями
transport=udp-transport, auth=auth777и aors=777.
Насколько я понимаю, опции typeи aorsявляются обязательными для работоспособности точки.
Для назначения Caller ID этому пиру(ENDPOINT), потребуется задать следующие параметры:

trust_id_outbound=yes
callerid=V Pupkin <777>

TRANSPORT

Настройка транспортного уровня res_pjsip. Используются протоколы UDP, TCP, WebSockets и методы шифрования TLS/SSL. Можно настроить одну транспортную секцию для использования множеством точек (ENDPOINT), или создать уникальный транспортный уровень для конкретной точки. Условно, можно сравнить TRANSPORT, с секцией [general] sip.conf.

config show help res_pjsip transport

config show help res_pjsip transport

localhost*CLI> config show help res_pjsip transport
transport: [category !~ /.?/] 
SIP Transport *Transports*
There are different transports and protocol derivatives supported by 're
s_pjsip'. They are in order of preference: UDP, TCP, and WebSocket (WS).
NOTE: Changes to transport configuration in pjsip.conf will only be effected
on a complete restart of Asterisk. A module reload will not suffice. 
async_operations          -- Number of simultaneous Asynchronous Operationsbind-- IP Address and optional port to bind to for this transport
ca_list_file              -- File containing a list of certificates to read(TLS ONLY)
cert_file                 -- Certificate filefor endpoint (TLS ONLY)
cipher                    -- Preferred Cryptography Cipher (TLS ONLY)
domain                    -- Domain the transport comes from
external_media_address    -- External IP address to use in RTP handling
external_signaling_address -- External address for SIP signalling
external_signaling_port   -- External port for SIP signalling
method                    -- Method of SSL transport (TLS ONLY)
local_net                 -- Network to consider local(used for NAT purposes).
password                  -- Password required for transport
priv_key_file             -- Private key file(TLS ONLY)
protocol                  -- Protocol to use for SIP traffic
require_client_cert       -- Require client certificate (TLS ONLY)type-- Must be of type'transport'.
verify_client             -- Require verification of client certificate (TLS ONLY)
verify_server             -- Require verification of server certificate (TLS ONLY)
tos                       -- Enable TOS for the signalling sent over this transport
cos                       -- Enable COS for the signalling sent over this transport

По умолчанию, для применения настроек транспортного уровня недостаточно перечитать конфиги. Потребуется рестартовать Asterisk, если не задано allow_reload=true (по умолчанию - false)

простой пример конфигурации секции TRANSPORT
[udp-transport]
type=transport
protocol=udp
bind=0.0.0.0

или TLS транспорт:

[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
external_media_address=123.123.123.1
external_signaling_address=123.123.123.1
local_net=10.10.0.0/16
method=tlsv1

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

localhost*CLI> pjsip show transports

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

Transport:  udp-transport             udp      0      0  0.0.0.0:5080
Transport:  udp-transport-infra       udp      0      0  192.168.1.110:5081
Transport:  udp-transport-megafon     udp      0      0  0.0.0.0:5060

AUTH

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

config show help res_pjsip auth

config show help res_pjsip auth

localhost*CLI> config show help res_pjsip auth
auth: [category !~ /.?/] 
Authentication type 
 Authentication objects hold the authentication information for use by other
objects such as'endpoints' or 'registrations'. This also allows for multiple
objects to use a single auth object. See the 'auth_type' config option for
password style choices. 
auth_type                    -- Authentication type
nonce_lifetime            -- Lifetime of a nonce associated with this authentication config.
md5_cred                    -- MD5 Hash used for authentication.
password                     -- PlainText password used for authentication.
realm                          -- SIP realm for endpointtype-- Must be 'auth'
username                    -- Username to use for account
Простой пример секции AUTH
[auth777]
type=auth
auth_type=userpass
password=password
username=777

с использованием MD5

[auth6001]
type=auth
auth_type=md5
md5_cred=5f4dcc3b5aa765d61d8327deb882cf99
username=777

AOR

Главная функция AoR (Address of Record) указать Asterisk, как связаться с ENDPOINT. Без соответствующей AOR секции, точка ENDPOINT будет недоступна для вызова. Здесь также задаются соответствия голосовой почте, MWI, продолжительность действия регистрации -expiration и настройки qualify (периодической отправки SIP сообщений OPTONS для мониторинга состояния устройств)

Когда Asterisk получает запрос на регистрацию от устройства, он в первую очередь ищет соответствующую SIP заголовку To: «777»<sip:777@192.168.1.21;transport=UDP> запись в именах секций AOR – в нашем прмере [777]

config show help res_pjsip aor

config show help res_pjsip aor

localhost*CLI> config show help res_pjsip aor
aor: [category !~ /.?/] 
The configuration for a location of an endpoint 
 An AoR is what allows Asterisk to contact an endpoint via res_pjsip. If no
AoRs are specified, an endpoint will not be reachable by Asterisk. Beyond
that, an AoR has other uses within Asterisk, such as inbound registration. 
 An 'AoR' is a way to allow dialing a group of 'Contacts' that all use the
 same 'endpoint'for calls.
 This can be used as another way of grouping a list of contacts to dial
 rather than specifing them each directly when dialing via the dialplan. This
 must be used in conjuction with the 'PJSIP_DIAL_CONTACTS'.
 Registrations: For Asterisk to match an inbound registration to an endpoint,
 the AoR object name must match the user portion of the SIP URI in the "To:"
 header of the inbound SIP registration. That will usually be equivalent to
 the "user name"setin your hard or soft phones configuration. 
contact                   -- Permanent contacts assigned to AoR
default_expiration        -- Default expiration timein seconds for contacts that are dynamica
mailboxes                 -- Allow subscriptions for the specified mailbox(es)
maximum_expiration        -- Maximum time to keep an AoR
max_contacts              -- Maximum number of contacts that can bind to an AoR
minimum_expiration        -- Minimum keep alive timefor an AoR
remove_existing           -- Determines whether new contacts replace existing ones.type-- Must be of type'aor'.
qualify_frequency         -- Interval at which to qualify an AoR
authenticate_qualify      -- Authenticates a qualify request if needed
outbound_proxy            -- Outbound proxy used when sending OPTIONS request
support_path              -- Enables Path support for REGISTER requests and Route support for
Простейший пример секции AOR
[777]
type=aor
max_contacts=1

Опция max_contact=1 значит, что только один SIP User Agent может быть одновременно зарегистрирован через эту запись AOR. Можно указать и 10, если потребуется.

[777]
type=aor
contact=sip:777@192.168.1.21:5060

Во втором примере мы не ожидаем запроса на регистрацию от SIP UA,
а указываем вручную постоянный контакт для этой записи.
Можно не беспокоится о кол-ве подключений, адрес все равно один.

[siptrunk]
type=aor
contact=sip:123.123.1.1:5060

В последнем примере пропущен username, что позволяет использовать данную запись для исходящей связи,
определяя вызываемый номер при помощи диалплана «Dial(PJSIP/${EXTEN}@siptrunk)».

REGISTRATION

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

config show help res_pjsip_outbound_registration registration

config show help res_pjsip_outbound_registration registration

localhost*CLI> config show help res_pjsip_outbound_registration  registration
registration: [category !~ /.?/] 
The configuration for outbound registration 
 Registration is *COMPLETELY* separate from the rest of 'pjsip.conf'. A minimal
configuration consists of setting a 'server_uri'        and a 'client_uri'. 
auth_rejection_permanent  -- Determines whether failed authentication challenges are treated a
client_uri                -- Client SIP URI used when attempting outbound registration
contact_user              -- Contact User to use in request                                                                                                             
expiration                -- Expiration timefor registrations in seconds                                                                                               
max_retries               -- Maximum number of registration attempts.                                                                                                   
outbound_auth             -- Authentication object to be used for outbound registrations.
outbound_proxy            -- Outbound Proxy used to send registrations                                                                                                  
retry_interval            -- Interval in seconds between retries if outbound registration is u
forbidden_retry_interval  -- Interval used when receiving a 403 Forbidden response.
server_uri                -- SIP URI of the server to register against                                                                                                  
transport                 -- Transport used for outbound authentication                                                                                                 type-- Must be of type'registration'.                                                                                                            
support_path              -- Enables Path support for outbound REGISTER requests  
Пример секции REGISTRATION
[siptrunk]
type=registration
transport=udp-transport
outbound_auth=siptrunk
server_uri=sip:123.123.1.1:5060
client_uri=sip:username@192.168.1.1:5060
retry_interval=60

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

[providertrunk]
type=registration
transport=udp-transport
outbound_auth=providertrunk
server_uri=sip:sip.example.com
client_uri=sip:1234567890@sip.example.com
retry_interval=60

Пример регистрации транка провайдера.

DOMAIN_ALIAS

Псевдоним домена. [Имя] данной секции является псевдонимом, а конфигурационная опция domain=, доменным именем, которому сопоставлен псевдоним.

config show help res_pjsip domain_alias

config show help res_pjsip domain_alias

localhost*CLI> config show help res_pjsip domain_alias
domain_alias: [category !~ /.?/] 
Domain Alias 
 Signifies that a domain is an alias. If the domain on a session is not found
to match an AoR then this object is used to see if we have an aliasfor the
AoR to which the endpoint is binding. This objects name as defined in
configuration should be the domain alias and a config option is provided to
specify the domain to be aliased. type-- Must be of type'domain_alias'.
domain                    -- Domain to be aliased
Пример секции DOMAIN_ALIAS
[example2.com]
type=domain_alias
domain=example.com

ACL

Модуль не привязан к какой-либо точке ENDPOINTs и управляет всеми входящими SIP коммуникациями с использованием res_pjsip. Установки ACl (Access Control Lis) могут быть назначены в самой секции, или в файле acl.confна который будет ссылаться секция.

config show help res_pjsip_acl acl

config show help res_pjsip_acl acl

localhost*CLI> config show help res_pjsip_acl  acl
acl: [category !~ /.?/] 
Access Control List 
acl                       -- List of IP ACL section names in acl.conf
contact_acl               -- List of Contact ACL section names in acl.conf
contact_deny              -- List of Contact header addresses to deny
contact_permit            -- List of Contact header addresses to permit
deny                      -- List of IP addresses to deny access from
permit                    -- List of IP addresses to permit access fromtype-- Must be of type'acl'.
Простые примеры ACL

Asterisk 12 res_pjsip_acl

Настройки берутся из файла acl.conf:

[acl]
type=acl
acl=example_named_acl1

Настройки непосредственно в секции:

[acl]
type=acl
deny=0.0.0.0/0.0.0.0
permit=123.12.123.0
permit=123.12.123.1

Конфиг разрешающий регистрацию на основе SIP заголовка, а не IP адреса.

[acl]
type=acl
contactdeny=0.0.0.0/0.0.0.0
contactpermit=123.12.123.0
contactpermit=123.12.123.1

IDENTIFY

Определяет конечные точки с помощью IP-адреса источника.

config show help res_pjsip_endpoint_identifier_ip identify

config show help res_pjsip_endpoint_identifier_ip identify

localhost*CLI> config show help res_pjsip_endpoint_identifier_ip identify
identify: [category !~ /.?/]

Identifies endpoints via source IP address

endpoint                  -- Name of Endpoint
match                     -- IP addresses or networks to match against
type                      -- Must be of type 'identify'.
Пример identity
[777]
type=identify
endpoint=777
match=123.0.112.1

CONTACT

Контакты являются одним из способов не указывать явно SIP URIв плане набора (диалплане).

config show help res_pjsip contact

config show help res_pjsip contact

localhost*CLI> config show help res_pjsip contact
contact: [category !~ /.?/]

A way of creating an aliased name to a SIP URI

 Contacts are a way to hide SIP URIs from the dialplan directly. They are
also used to make a group of contactable parties when in use with 'AoR' lists.


type                      -- Must be of type 'contact'.
uri                       -- SIP URI to contact peer
expiration_time           -- Time to keep alive a contact
qualify_frequency         -- Interval at which to qualify a contact
outbound_proxy            -- Outbound proxy used when sending OPTIONS request
path                      -- Stored Path vector for use in Route headers on outgoing requests.

Отношения объектов конфигурации pjsip.conf

ENDPOINT

  • Множество ENDPOINTs связываются с множеством AORs
  • Ноль или больше ENDPOINTs связаны с ноль или одной AUTHs
  • Ноль или больше ENDPOINTs связаны с как минимум одним TRANSPORT
  • Ноль или одна ENDPOINTs связана с определенной IDENTIFY

REGISTRATION

  • Ноль или больше REGISTRATIONs связаны с ноль или одной AUTHs
  • Ноль или больше REGISTRATIONs связаны с как минимум одним TRANSPORT

AOR

  • Множество ENDPOINTs связываются с множеством AORs
  • Множество AORs связаны с множеством CONTACTs

CONTACT

  • Множество CONTACTs связываются с множеством AORs

IDENTIFY

  • Ноль или больше ENDPOINTs связаны с определенным IDENTIFY объектом.

ACL, DOMAIN_ALIAS

  • Эти объекты не имеют направленных связей с другими объектами.

Примеры диалплана для вызова PJSIP пиров и екстеншенов.

 exten => _6XXX,1,Dial(PJSIP/${EXTEN})
 exten => _9NXXNXXXXXX,1,Dial(PJSIP/mytrunk/sip:${EXTEN:1}@203.0.113.1:5060)
 exten => _9NXXNXXXXXX,1,Dial(PJSIP/${EXTEN:1}@mytrunk)

Примеры

Пример ENDPOINT для одного SIP телефона с регистрацией на Asterisk.
;===============TRANSPORT
[udp-transport]
type=transport
protocol=udp
bind=0.0.0.0
;===============EXTENSION 777
[777]
type=endpoint
context=from-internal
disallow=all
allow=alaw
transport=udp-transport
auth=auth777
aors=777
[auth777]
type=auth
auth_type=userpass
password=777
username=777
[777]
type=aor
max_contacts=1
  • auth= используется для входящей аутентификации
  • max_contacts= установите кол-во регистраций, одну или более, разрешенных для этой учетной записи.
Пример SIP транка с исходящей регистрацией
;==============TRANSPORTS
[udp-transport]
type=transport
protocol=udp
bind=0.0.0.0
;===============TRUNK
[siptrunk]
type=registration
transport=udp-transport
outbound_auth=siptrunk
server_uri=sip:sip.example.com
client_uri=sip:1234567890@sip.example.com
retry_interval=60
[siptrunk]
type=auth
auth_type=userpass
password=1234567890
username=1234567890
[siptrunk]
type=aor
contact=sip:123.0.112.1:5060
[siptrunk]
type=endpoint
transport=udp-transport
context=from-trunk
disallow=all
allow=alaw,ulaw
outbound_auth=siptrunk
aors=siptrunk
[siptrunk]
type=identify
endpoint=siptrunk
match=123.0.112.1
Пример регистрации множественных ENDPOINTs с использованием шаблонов
;===============TRANSPORT
[udp-transport]
type=transport
protocol=udp
bind=0.0.0.0
;===============ENDPOINT TEMPLATES
[endpoint-basic](!)
type=endpoint
transport=udp-transport
context=from-internal
disallow=all
allow=alaw
[auth-userpass](!)
type=auth
auth_type=userpass
[aor-single-reg](!)
type=aor
max_contacts=1
;===============EXTENSION 777
[777](endpoint-basic)
auth=auth777
aors=777
[auth777](auth-userpass)
password=777
username=777
[777](aor-single-reg)
;===============EXTENSION 778
[778](endpoint-basic)
auth=auth778
aors=778
[auth778](auth-userpass)
password=778
username=778
[778](aor-single-reg)
;===============EXTENSION 779
[779](endpoint-basic)
auth=auth779
aors=779
[auth779](auth-userpass)
password=779
username=779
[779](aor-single-reg) 

От старого к новому - sip.conf к pjsip.conf сравнение примеров.

Сравнение конфигурации ENDPOINT

  • Два SIP телефона должны звонить и принимать вызовы через Asterisk.
  • В обоих случаях для аутентификации используются username и password.
  • 777 регистрируется с динамического IP, 778 со статического IP адреса.

1

sip.confpjsip.conf
[general]
udpbindaddr=0.0.0.0
[777]
type=friend
host=dynamic
disallow=all
allow=alaw
context=from-internal
secret=1234
[778]
type=friend
host=192.168.1.2
disallow=all
allow=alaw
context=from-internal
secret=1234
[udp-transport]
type=transport
protocol=udp
bind=0.0.0.0
[777]
type = endpoint
transport = udp-transport
context = from-internal
disallow = all
allow = alaw
aors = 777
auth = auth777
[777]
type = aor
max_contacts = 1
[auth777]
type=auth
auth_type=userpass
password=1234
username=777
[778]
type = endpoint
transport = udp-transport
context = from-internal
disallow = all
allow = alaw
aors = 778
auth = auth778
[778]
type = aor
contact = sip:778@192.168.1.2:5060
[auth778]
type=auth
auth_type=userpass
password=1234
username=778

Сравнение конфигурации trunk

sip.confpjsip.conf
[general]
udpbindaddr=0.0.0.0
register => myname:1234@203.0.113.1:5060

[mytrunk]
type=friend
secret=1234
username=myname
host=123.0.112.1
disallow=all
allow=alaw
context=from-trunk
[simpletrans]
type=transport
protocol=udp
bind=0.0.0.0 
[mytrunk]
type=registration
transport=simpletrans
outbound_auth=mytrunk
server_uri=sip:@123.0.112.1:5060
client_uri=sip:myname@123.0.112.1:5060
[mytrunk]
type=auth
auth_type=userpass
password=1234
username=myname
[mytrunk]
type=aor
contact=sip:123.0.112.1:5060
[mytrunk]
type=endpoint
transport=simpletrans
context=from-trunk
disallow=all
allow=alaw
outbound_auth=mytrunk
aors=mytrunk
[mytrunk]
type=identify
endpoint=mytrunk
match=123.0.112.1

PJSIP CLI

Connected to Asterisk 13.9.1 currently running on aster2 (pid = 17401)
asterisk*CLI> core show help pjsip
pjsip dump endpt               -- Dump the res_pjsip endpt internals
pjsip export config_wizard primitives [to] -- Export config wizard primitives
pjsip list aors                -- List PJSIP Aors
pjsip list auths               -- List PJSIP Auths
pjsip list channels            -- List PJSIP Channels
pjsip list ciphers             -- List available OpenSSL cipher names
pjsip list contacts            -- List PJSIP Contacts
pjsip list endpoints           -- List PJSIP Endpoints
pjsip list identifies          -- List PJSIP Identifies
pjsip list registrations       -- List PJSIP Registrations
pjsip list transports          -- List PJSIP Transports
pjsip qualify                  -- Send an OPTIONS request to a PJSIP endpoint
pjsip send register            -- Registers an outbound registration target
pjsip send unregister          -- Unregisters outbound registration target
pjsip set history {on|off|clear} -- Enable/Disable PJSIP History
pjsip set logger {on|off|host} -- Enable/Disable PJSIP Logger Output
pjsip show aors                -- Show PJSIP Aors
pjsip show aor                 -- Show PJSIP Aor
pjsip show auths               -- Show PJSIP Auths
pjsip show auth                -- Show PJSIP Auth
pjsip show channels            -- Show PJSIP Channels
pjsip show channel             -- Show PJSIP Channel
pjsip show channelstats        -- Show PJSIP Channel Stats
pjsip show contacts            -- Show PJSIP Contacts
pjsip show contact             -- Show PJSIP Contact
pjsip show endpoints           -- Show PJSIP Endpoints
pjsip show endpoint            -- Show PJSIP Endpoint
pjsip show history             -- Display PJSIP History
pjsip show identifiers         -- List registered endpoint identifiers
pjsip show identifies          -- Show PJSIP Identifies
pjsip show identify            -- Show PJSIP Identify
pjsip show registrations       -- Show PJSIP Registrations
pjsip show registration        -- Show PJSIP Registration
pjsip show settings            -- Show global and system configuration options
pjsip show transports          -- Show PJSIP Transports
pjsip show transport           -- Show PJSIP Transport
pjsip show version             -- Show the version of pjproject in use

Asterisk настройка

Пример настройки SIP транка для SIPNET.RU

$
0
0

Пример настройки SIP транка для SIPNET.RU

Trunk Name

sipnet

PEER Details

type=friend
secret=PASSWORD
qualify=yes
nat=force_rport,comedia
insecure=invite
host=sipnet.ru
fromuser=SIP_ID
fromdomain=sipnet.ru
dtmfmode=info
disallow=all
defaultuser=SIP_ID
allow=alaw
allow=ulaw
allow=g729

Register String

userID:PASSWORD@sipnet.ru

Скриншоты

FreePBX 12 PjSIP trunk SIPNET.RU

Connectivity > Add SIP (chan_pjsip) Trunk

sipnet pjsip trunk

pjsip.aor.conf

[sipnet.ru]
type=aor
qualify_frequency=60
contact=sip:SIP_ID@sipnet.ru:5060

pjsip.auth.conf

[sipnet.ru]
type=auth
auth_type=userpass
password=PASSWORD
username=SIP_ID

pjsip.endpoint_custom.conf

[sipnet.ru]
type=endpoint
transport=0.0.0.0-udp
context=from-pstn
disallow=all
allow=ulaw,alaw
outbound_auth=sipnet.ru
aors=sipnet.ru

pjsip.identify_custom.conf

[sipnet.ru]
type=identify
endpoint=sipnet.ru
match=sipnet.ru

pjsip.registration_custom.conf

[sipnet.ru]
type=registration
transport=0.0.0.0-udp
outbound_auth=sipnet.ru
retry_interval=60
expiration=3600
auth_rejection_permanent=yes
server_uri=sip:sipnet.ru:5060
client_uri=sip:SIP_ID@sipnet.ru:5060

pjsip.transports.conf

[0.0.0.0-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060
external_media_address=195.144.244.52
external_signaling_address=195.144.244.52
local_net=192.168.0.0/24
ubuntu*CLI> pjsip show endpoints

 Endpoint:  <Endpoint/CID.....................................>  <State.....>  <Channels.>
    I/OAuth:  <AuthId/UserName...........................................................>
        Aor:  <Aor............................................>  <MaxContact>
      Contact:  <Aor/ContactUri...............................>  <Status....>  <RTT(ms)..>
  Transport:  <TransportId........>  <Type>  <cos>  <tos>  <BindAddress..................>
   Identify:  <MatchList.................................................................>
    Channel:  <ChannelId......................................>  <State.....>  <Time(sec)>
        Exten: <DialedExten...........>  CLCID: <ConnectedLineCID.......>
 =========================================================================================

 Endpoint:  sipnet.ru                                            Not in use    0 of inf
    OutAuth:  sipnet.ru/SIP_ID
        Aor:  SIP_ID                                             0
      Contact:  sipnet.ru/sip:SIP_ID@sipnet.ru:5060             Avail              23.398
  Transport:  0.0.0.0-udp               udp      0      0  0.0.0.0:5060
   Identify:  212.53.40.40/32,2a02:2f8:2:3::40/128

Connectivity > Outbound Routes

FreePBX SIP Trunk

FreePBX 13 исходящая маршрутизация.

FreePBX

FreePBX SIP Trunk

$
0
0

FreePBX SIP Trunk

SIP транк определяет набор свойств, требуемых для совершения внешних вызовов по протоколу SIP. Таких как, аутентификация, callerid, кол-во каналов, наличие сетевых трансляций (NAT) и другие свойства для формирования правильных SIP запросов, используемые кодеки, контекст для обработки входящих вызовов и др..

FreePBX 13 - настройка SIP транка

Настройки поделены на три основных секции:

General

Определяет основные параметры SIP транка: freepbx13-sip-trunk-general

Trunk name

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

Hide CallerID

Не сообщать удаленной стороне исходящий CallerID.
В большинстве случаев требуется передавать CallerID, но если вдруг понадобиться…
YesNo

Outbound CallerID

Задайте исходящий CallerID для данного транка. Во FreePBX Outbound CallerIDможет быть задан или модифицирован, в нескольких местах по пути обработки исходящего вызова.

  1. Outbound CallerID екстеншена. Когда внутренний номер инициирует вызов, если задан параметр Outbound CallerID для этого екстеншена, он используется как исходящий CID.
  2. Далее вызов обрабатывается в Outbound Routes. Если параметр Override Extension = No (по умолчанию), исходящий CID ектеншена, используется и далее.
  3. Затем вызов попадает в транк, если CID Options = Allow Any CID, то Outbound CalleID екстеншена, используется для данного вызова, через транк.

CID Options

Но если выбрано другое значение CID Options, то Outbound CallerID внутреннего номера, или переназначенный в Outbound Routes, может быть модифицирован одним из перечисленных ниже значений в настройках транка.

  • Allow Any CID - пропускать любой CallerID
  • Block Foreign CIDs - блокировать любой внешний CallerID. Под внешним подразумевается пришедший извне, из-за пределов системы. Outbound CID абонентов это не затронет.
  • Remove CNAM - Удалять имена из CallerID, не трогая номер.
  • Force Trunk CID - Принудительно подставлять CallerID заданный в данном транке.

Maximum Channels

Максимальное количество одновременных соединений через данный транк.

Asterisk Trunk Dial Options

Опции команды Dialдля исходящих вызовов, через транк. По умолчанию, значение заданное в Asterisk Dial Options. Переопределяет системные опции, если выбрано overrideна заданные здесь.
OverrideSystem

Continue if Busy

Искать следующий доступный транк, если этот переполнен.
YesNo

Disable Trunk

Выключить, т.е. вывести транк из обслуживания. Обратите внимание, что на Register String этот триггер не распространяется.
YesNo

Dial Number Manipulation Rules

Преобразование набираемого номера
freepbx13-sip-trunk-dial-number-manipulation-rules Преобразование набираемого номера в транке, происходит по тем же правилам, что и в Dial Patternsисходящей маршрутизации. Сначала выполняется преобразование в Outbound Routes, затем вызов попадает в модуль транка и выполняется последнее преобразование, если задано. Рассмотрим пример использования двух-этапного преобразования: Задан маршрут с шаблоном _8[09]XXXXXXXXX, который обслуживают несколько транков от разных провайдеров.
Один требует набирать '8', а в другом надо отправлять '+7'.
Оставим транк требующий '8', без преобразования.
В транке же, требующем '+7', заменим 8-ку.

PrependPrefixMatch PatternCaller ID
+78[09]XXXXXXXXX

Вариантов может быть масса, но общий принцип, надеюсь ясен.

sip Settings

И, наконец, ключевые наcтройки sip пира. Во FreepBX они разделены на Outgoingи Incoming
Которые отвечают за исходящие type=peerи входящие вызовы type=user, соответственно.
Подробно с настройками sip.conf в Asterisk вы можете ознакомиться по ссылке
Здесь же рассмотрим основные параметры.

Outgoing

Большинство параметров указываются здесь. freepbx13-sip-trunk-sip-settings-outgoing

host

Хост или IP адрес SIP сервера, на котором мы хотим зарегистрироваться или завязать доверенные отношения. Если удаленная система сама регистрируется на нашем сервере, может принимать значение - dynamic. Но как правило, это адрес SIP сервера, которому мы будем отправлять Optionsи Invite. Адрес для Registerзадается отдельно, в разделе Incoming.

username и secret

Основные параметры sip аутентификации, имя пользователя и пароль, как правило сообщаются провайдером.

type

Предполагается, что здесь должно быть peer - набор свойств для исходящих вызовов.
Однако можно написать и friendи не назначать никакие параметры в секции Incoming (кроме register string, которая хоть и расположена во FreePBX в секции incomingнастроек транка, прямой связи с ним не имеет и может существовать вообще без sip пира, хоть и нуждается в нем, для аутентификации входящего вызова, как доверенного, а не анонимного).
Так тоже будет работать.

Также здесь могут быть заданы любые параметры, доступные SIP пиру:

context

- контекст обработки входящих вызовов. Стандартный контекст входящих вызовов Freepbx для цифровых транков- from-trunk. Вызовы из него обрабатываются в модуле FreePBX 13 входящая маршрутизация. Но вы можете указать собственный контекст и написать его в extensions_custom.conf. См. также FreePBX custom context

Для многих новичков значение контекста по отношению к транку и к внутреннему номеру вызывает некоторую путаницу. Для простоты можно сказать, что контекст транка определяет, как обрабатывать входящие вызовы, а контекст внутреннего номера - исходящие. Когда внутренний абонент куда-то звонит, в назначенном ему контексте определяется, через какие транки и на какие екстеншены он может позвонить. Исходящая связь через транк определяется в контекстах внутренних номеров и никак не упоминается в контексте, назначенном непосредственно транку. Напротив, когда внешняя система, связанная с транком, вызывает некий екстеншен (расширение), тогда и используется контекст, назначенный транку.

Но если несколько углубиться в данный вопрос, можно вспомнить, что для Asterisk, по сути, нет разницы между внутренним номером и транком. Когда внешняя система вызывает некий номер, она является sip устройством, которое совершает исходящий вызов через контекст, назначенный транку, так же, как телефон совершает исходящий вызов через контекст, назначенный пиру. Поэтому, как нет разницы между sip транком и внутренним номером, так нет разницы и между использованием контекстов, им назначенных.

insecure

- параметры аутентификации

  • insecure=port - Проверять совпадение IP адреса, но не порта
  • insecure=invite - Не требовать аутентификации в инвайте (INVITE)
  • insecure=port,invite - И то, и другое.

insecure=invite - практически обязательное условие, для приема входящих вызовов.

disallow

- запретить использование кодеков, чтобы назначить разрешенные в параметром allow.

allow

- разрешить перечисленные через запятую кодеки.

  • allow=alaw,ulaw,g729
nat

- задать свойства использования rport , mediaпри работе за nat. Если не указано, будут использованы настройки из модуля FreePBX Asterisk SIP Settings.

  • nat = no - без NAT RFC3581
  • nat = force_rport - использовать rport, даже если его нет
  • nat = comedia - отправить медиа поток на порт Asterisk, независимо от указаний SDP.
  • nat = auto_force_rport - установить 'force_rport' параметр если Asterisk обнаружил NAT.
  • nat = auto_comedia - установить 'comedia' параметр если Asterisk обнаружил NAT
qualify

- Посылать запросы Options = yes/no

qualifyfreq

- частота запросов в секундах. и тд.

Incoming

Данная секция должна иметь уникальное название, т.к. является, в некотором роде, независимым объектом, не пиром, но часовым пира, который требует пароль (secret) и указывает путь (context), если проверка пройдена. Не отображается в консоли, при вводе команды sip show peers, так как type=user. Как и следует из названия, отвечает за входящие вызовы. Основные параметры: contextи secretте же, что указаны в outgoing.

Здесь же задается строка регистрации, которая в чистом Asterisk, вынесена в категорию sip.conf - [general].
Это очень важный параметр, отвечающий за посылку Register SIP серверу регистраций. Если вы подключаетесь к SIP серверу провайдера и требуется получать входящие вызовы, в большинстве случаев, надо посылать Register. freepbx13-sip-trunk-sip-settings-incoming.png

Register String

user[:authuser]:secret@host:port/extension

 sip_user_name[:authuser]:sip_password@sip.itsp.tld:5060/1234567
  • user - идентификатор пользователя, используемый для SIP сервера.
  • authuser - необязательное имя пользователя для авторизации на SIP сервере (authuser). Обычно то же, что и 'user'.
  • secret - пароль пользователя
  • host - имя домена или хоста SIP сервера.
  • port - номер порта на сервере hostдля запросов регисрации. Если не указано, то по умолчанию - 5060.
  • /extension - Расширение для приема вызовов в Вашем Asterisk (extension). 'extension' - вставляется в SIP заголовок contact запроса на регистрацию. Этот екстеншен используется удаленным SIP сервером, когда ему необходимо совершить вызов в сторону вашего Asterisk. Данный екстеншен (расширение) будет вызван Asterisk в контексте транка ( в модуле Inbound Routes, например). Если не указывать расширение, SIP сервер провайдера сам определит вызываемый номер, обычно это значение 'user'. Если Asterisk не найдет вызываемый екстеншен в контексте транка, то будет искать раширение 'i' (invalid). К транку могут быть привязаны несколько номеров. В таком случае, лучше не указывать этот параметр. Возможно также, что SIP сервер провайдера вообще проигнорирует указанное здесь значение.

Скрин Outgoing и Incoming Settings FreePBX12

FreePBX 13 PJSIP Trunk

$
0
0

FreePBX 13 PJSIP Trunk

Пример данных провайдера

  • SIP user - 1234567
  • SIP password - secret
  • SIP server - sip.sprovider.ru

Asterisk 13.4.0 / FreePBX 13 (FreePBX Framework 13.0.1beta3.54)

  • Trunk Name - pjsip_test

PJSIP trunk general

freepbx13 pjsip trunk general

PJSIP Settings

freepbx13 pjsip trunk settings

freepbx13 pjsip trunk advanced

pjsip show registrations
asterisk*CLI> pjsip show registrations<Registration/ServerURI..............................>  <Auth..........>  <Status.......>
 =========================================================================================

 pjsip_test/sip:sip.sprovider.ru:5060                      pjsip_test        Registered
pjsip show endpoint <name>
asterisk*CLI> pjsip show endpoint pjsip_test

 Endpoint:  <Endpoint/CID.....................................>  <State.....>  <Channels.>
    I/OAuth:  <AuthId/UserName...........................................................>
        Aor:  <Aor............................................>  <MaxContact>
      Contact:  <Aor/ContactUri...............................>  <Status....>  <RTT(ms)..>
  Transport:  <TransportId........>  <Type>  <cos>  <tos>  <BindAddress..................>
   Identify:  <Identify/Endpoint.........................................................>
        Match:  <ip/cidr.........................>
    Channel:  <ChannelId......................................>  <State.....>  <Time(sec)>
        Exten: <DialedExten...........>  CLCID: <ConnectedLineCID.......>
 =========================================================================================

 Endpoint:  pjsip_test                                            Not in use    0 of inf
    OutAuth:  pjsip_test/1234567
        Aor:  pjsip_test                                          0
      Contact:  pjsip_test/sip:12345670@sip.sprovider.ru:5060     Avail            78.715
  Transport:  0.0.0.0-udp               udp      0      0  0.0.0.0:5077
   Identify:  pjsip_test/pjsip_test
        Match: 123.123.123.123/32


 ParameterName                 : ParameterValue
 =====================================================
 100rel                        : yes
 accountcode                   :
 aggregate_mwi                 : true
 allow                         : (g729|alaw|ulaw|g726)
 allow_subscribe               : true
 allow_transfer                : true
 aors                          : pjsip_test
 auth                          :
 call_group                    :
 callerid                      : <unknown>
 callerid_privacy              : allowed_not_screened
 callerid_tag                  :
 connected_line_method         : invite
 context                       : from-sprovider
......

<spoiler>

Configuration Mode:

Simple/Advanced

Permanent Auth Rejection:

v

Retry Interval:

60

Expiration:

3600

Forbidden Retry Interval:

10

Max Retries:

10

Qualify Frequency:

60

Username:

Secret:

SIP Server:

SIP Server Port:

Advanced options

Client URI:

Server URI:

AOR Contact:


Outbound Proxy:

Contact User:

Context:

Transport:

0.0.0.0-udp

Codecs:

ulaw
alaw
g722

Пример настройки SIP транка chan_pjsip для соединения с другим сервером Asterisk

Viewing all 1041 articles
Browse latest View live


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