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

SIP TLS SRTP Asterisk

$
0
0

SIP TLS SRTP Asterisk

  mkdir /etc/asterisk/keys
  cd  /usr/src/asterisk-13*/contrib/scripts/
  ./ast_tls_cert -C pbx.asterisk-pbx.ru -O "asterisk-pbx.ru" -d /etc/asterisk/keys
  • -C domain или IP адрес)
  • -O name
  • -d directory (/etc/asterisk/keys)
No config file specified, creating '/etc/asterisk/keys/tmp.cfg'
You can use this config file to create additional certs without
re-entering the information for the fields in the certificate
Creating CA key /etc/asterisk/keys/ca.key
Generating RSA private key, 4096 bit long modulus
..++
........................................................................................................................++
e is 65537 (0x10001)
Enter pass phrase for /etc/asterisk/keys/ca.key:
Verifying - Enter pass phrase for /etc/asterisk/keys/ca.key:
Creating CA certificate /etc/asterisk/keys/ca.crt
Enter pass phrase for /etc/asterisk/keys/ca.key:
Creating certificate /etc/asterisk/keys/asterisk.key
Generating RSA private key, 1024 bit long modulus
.++++++
.........++++++
e is 65537 (0x10001)
Creating signing request /etc/asterisk/keys/asterisk.csr
Creating certificate /etc/asterisk/keys/asterisk.crt
Signature ok
subject=/CN=192.168.251.253/O=bk
Getting CA Private Key
Enter pass phrase for /etc/asterisk/keys/ca.key:
Combining key and crt into /etc/asterisk/keys/asterisk.pem

Задать пароль и повторить три раза.

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

modules.conf

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

sip.conf

[general]
tcpenable=yes
bindaddr=0.0.0.0
tlsenable=yes
tlsbindaddr=0.0.0.0:5061
tlscertfile=/etc/asterisk/keys/asterisk.pem
tlscafile=/etc/asterisk/keys/ca.crt
tlscipher=ALL
tlsclientmethod=tlsv1
tlsdontverifyserver=yes
  • encryption=yes
  • transport=tls
[general]
register => tls://SIPTRUNK:PASSWORD@123.123.123.123:5061

[SIPTRUNK]
type=friend
context=from-TLSTRUNK
host=123.123.123.123
port=5061
secret=PASSWORD
dtmfmode=rfc2833
disallow=all
allow=alaw
fromdomain=123.123.123.123
insecure=port,invite
qualify=yes
canreinvite=no
encryption=yes
transport=tls

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


Настройка 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]

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

Строка регистрации имеет связанные параметры [general]:

  • registertimeout=20 - повторять попытки регистрации каждые 20 секунд (по умолчанию)
  • registerattempts=10 - кол-во неудачных попыток регистрации. По умолчанию - 0 (т.е. продолжать бесконечно)

Для контроля 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.

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

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

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

  • peer: SIP объект, через который совершаются исходящие вызовы.
  • user: SIP объект, через который принимаются входящие Asterisk .
  • friend: Запись, которая одновременно и userи peer. Этот тип, как правило, задается телефонам и другим оконечным устройствам. Для SIP пользователей этого типа Asterisk создаёт два объекта, один type=peerи один type=user, с одинаковыми именами.
[siptrunk]
host=sip.server.tld
port=5060
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

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

$
0
0

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

Patterns Примеры шаблонов Запись Force Never CallerID
Данный модуль управляет исходящей маршрутизацией FreePBX. На основании набранного номера выбирается направление (транк) для исходящего вызова. Набираемый номер делится на префикс и паттерн и может модифицироваться после набора.

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 CDR Stats

$
0
0

Asternic CDR Stats

 asternic cdr stats

Приложение устанавливается в три клика, как локальный модуль FreePBX.
В отличии от стандартного CDR группирует вызовы по внутренним абонентам,
а также по входящим и исходящим вызовам.
Скачать Asternic CDR Stats

Как установить

После загрузки модуля необходимо войти в FreePBX, выберите Admin - Module Admin, а затем выберите опцию «Upload module». Вы должны выбрать файл, который вы только что скачали с вашего жесткого диска и нажмите кнопку «Upload».

После загрузки, нажмите на ссылку Manage Local Modules, прокрутите страницу вниз до раздела Отчеты, а затем нажмите на кнопку Asternic CDR Reports. После этого установите переключатель Installи, наконец, нажмите кнопку Proceedв самом низу страницы.

FreePBX Call Recordings + Asternic CDR Stats 1.5.1

Данная модификация включает отображение записей разговоров FreePBX
в модуле Asterisk CDR Stats Скачать asternic_cdr-1.5.1.tgz исправленный Скачать asternic_cdr-1.5.1.tgz исправленный

Читать дальше...

Call Центр на Asterisk

$
0
0

Call Центр на Asterisk

Центр обработки входящих вызовов. Русскоязычный Веб-интерфейс. Статистика работы агентов и очередей в режиме реального времени. Недорогой, эффективный, легко настраиваемый call center.

Базовые функции:

  • голосовое меню (IVR);
  • маршрутизация вызовов по времени;
  • очередь центра обработки вызовов
  • группы приема вызовов;
  • переадресации на внутренних или внешних абонентов;
  • голосовые конференции;
  • запись переговоров;
  • статистика звонков (CDR);
  • статистика работы очереди;

ПО

  • Asterisk 14
  • FreePBX 13 - Русифицированный, интуитивно понятный веб-интерфейс для настройки Asterisk.
    • Asterisk CDR viewer - Детализированный отчет о звонках, прослушивание записанных разговоров
  • Call Center Stats - Статистика очередей колл-центра
  • FOP2 - Панель оператора

Работы:

  • Инсталляция и базовые наcтройки безопасности.
  • Настройка по согласованному ТЗ.

Колл Центр или Центр Обработки Вызовов (ЦОВ)

Asterisk прекрасно справляется с организацией как небольших колл центров, так и более мощных систем. Приложение queue обеспечивает постановку абонента в очередь по принципу FIFO (первый вошел, первый вышел). Агенты могут быть статическим (закрепленными за определенными очередями) и динамическими (подключатся к обслуживанию очереди набором сервис кода).

Реализацию функционала колл-центра в Asterisk можно условно разделить на уровень АТС, уровень приложений АТС и уровень приложений 3-й стороны (3rd party) :

Базовые функции маршрутизации и обработки вызовов реализованы непосредственно в Asterisk:

  • Организация очереди (обработка вызовов в порядке поступления).
  • Маршрутизация вызова по номеру абонента.
  • Интерактивные Голосовые Сообщения / IVR.
  • Распределение вызовов среди агентов по занятости или по порядку.

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

  • Звонят все агенты
  • Звонят наименее занятые
  • Вызываются по кругу с последнего ответившего.
  • Линейно (в порядке перечисления)
  • Случайным образом

asterisk freepbx queue strategy

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

Так же «очередь» имеет множество опций обработки вызова и работы агентов:

  • Приветствие оператору — проигрывается агенту прежде чем, тот соединиться с позвонившим из очереди

(например: «звонок из очереди «Продажи» - при обработке одним агентом звонков из нескольких очередей).

  • Приветствие позвонившему — проигрывается один раз при попадании в очередь.
  • Музыка на удержании — проигрывается при ожидании в очереди, можно заменить на рекламную информацию.
  • Максимальное время ожидания в очереди или неограниченно.
  • Максимальная длина очереди - максимальное количество позвонивших или неограниченно.
  • Стратегия дозвона (смотри выше: тип выбора свободного агента)
  • Таймаут — время вызова свободного оператора или неограниченно
  • Повтор — время повторения вызова операторов.
  • Передышка — пауза для оператора завершившего разговор вызов.
  • Сообщение о позиции в очереди
  • Сообщение о среднем времени ожидания в очереди.
  • Вставка сообщения авто-секретаря с возможностями прямого набора номера или системы голосовых меню.

asterisk freepbx timers

Рассчитывается среднее время ожидания в очереди и ожидающий абонент информируется о номере в очереди и оставшемся времени ожидания.

Параметры ёмкости очереди

Все разговоры могут быть записаны в формате wav или gsm, с возможностью последующего поиска и скачивания записи в детализированном отчете о звонках (CDR) Детализированный отчет о звонках (CDR) храниться в базе данных MySQL. Доступ к отчетам осуществляется через веб-интерфейс и предоставляет возможности для поиска, сортировки и сравнения вызовов за разные периоды времени.

В информации о входящем вызове сохраняются

  • Дата и время звонка
  • Продолжительность вызова
  • Номер позвонившего
  • Номер оператора или агента.
  • Номер очереди
  • Ссылка на запись разговора.

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

  • Регистрация всех входящих и исходящих вызовов
  • Запись переговоров
  • Статус оператора (свободен, занят, пауза)

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

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

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

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

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

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

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

Приложения использующие информацию о вызовах сохраненную в БД и логах (CDR статистика, Статистика очереди ):

  • Приложения для создания отчетов о входящих/исходящих вызовах и поиска записей.
  • Приложения для создания отчетов о качестве работы операторов(качество обслуживания.

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

  • Real Time статус операторов, очередей и каналов.

FOP2 - Flash Operator Panel

Приложения контроля интеллектуального набора. Хотя набор номеров и маршрутизацию осуществляет сам Asterisk, для интеллектуального дозвона требуется приложение которое инициировало бы вызовы по заданному списку и управляло алгоритмом набора.

  • Автоматизированный набор номера (predictive dialer)

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

  • Визуализация данных о клиенте (карточка клиента) на основании номера абонента (CallerID)
Свяжитесь с нами для получения подробной информации.
Колл Центр

Only edit this fieldset if “Функционал” is set to “Колл Центр”.

J N N E Y
IP АТС

Only edit this fieldset if “Функционал” is set to “IP АТС”.

Кастомные решения

Only edit this fieldset if “Функционал” is set to “Все сложно”.

IP АТС Asterisk и FreeSWITCH

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

AsteriskNOW установка и настройка с нуля

$
0
0

AsteriskNOW установка и настройка с нуля

Asterisk NOW FreePBX GUI CDR Distro

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

AsteriskNOW Установка

Запишите образ AsteriskNOW DVD на DVD диск, а затем загрузитесь с DVD, чтобы начать процесс установки. После загрузки с AsteriskNow DVD, вам будет представлен с следующего вида экран и варианты установки с веб-интерфейсом FreePBX или без. Это описание предполагает, что веб-интерфейс FreePBX будет установлен. Для этого, выберете опцию 1 и нажмите <ВВОД>:

Загрузочное меню

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

  • Выберите место, которое соответствует вашему часовому поясу и перейдите к следующему экрану.

Часовой пояс

  • Далее, вам будет предложено установить пароль администратора (root):

Пользователь 'root' полноправный хозяин Linux системы.
Большинство настроек требуют доступа с правами 'root'.
Рекомендуется использовать в пароле строчные и заглавные буквы, цифры и символы.

Пароль root

  • Далее выберете раздел жесткого диска.

Рекомендуется, выбрать «Use All Space»

hdd

и перейти к следующему экрану.

  • Подождите когда система будет установлена, это может занять 15-30 минут.

Установка пакетов

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

перезагрузка

  • После перезагрузки системы вы увидите этот экран:

Логин

Поздравляем! Вы успешно установили AsteriskNow.

  • Авторизуйтесь с логином 'root' и паролем заданным вами при установке.

Обратите внимание на текст, который говорит «Чтобы настроить AsteriskNow с FreePBX, введите в ​​браузере адрес HTTP: xx.xx.xx.xx » Это понадобится нам в следующем разделе.

  • Теперь, прежде чем двигаться дальше, важно обновить систему AsteriskNOW последними пакетами Linux.

Чтобы сделать это, используйте утилиту «Yum». Выполните «yum update»

  • Если новые пакеты доступны для установки, утилита просит разрешения на их установку - 'y'.
  • Также утилита может попросить разрешения принять ключ ним. Вы должны разрешить и это, для успешного обновления.

Обновление

FreePBX Настройка AsteriskNOW

Для настройки системы с помощью FreePBX, откройте ваш любимый веб-браузер на другом компьютере, Введите http адрес указанный во время загрузки: «To configure AsteriskNOW with FreePBX, point your web browser to http://xx.xx.xx.xx/.» (По умолчанию, сетевой интерфейс настроен для получения ip адреса по DHCP. Если в вашей сети настроен dhcp и вы подключили сетевой кабель, адрес будет отображен как указано на скриншоте загрузки.) Итак откроем указанный адрес в браузере, если все в порядке отобразится следующее:

freepbx старт

  • Отсюда, зайдем по «FreePBX Administration» ссылке. Нажмите ее, и вы увидите экран входа в FreePBX:

FreePBX Логин

  • Имя пользователя по умолчанию: admin
  • Пароль по умолчанию: admin

После успешного входа вы увидите панель FreePBX:

FreePBX Панель

Обратите внимание на красную кнопку Apply Config. Она будет появляться каждый раз, после внесения любых изменений на странице. Если вы видите это, она должна быть нажата, будут применены любые изменения сделанные в системе FreePBX. Это руководство предполагает, что всякий раз, когда вы видите Apply Config, вы нажимаете это.

Далее, поменяем пароль администратора по умолчанию. Это необходимо! Если этого не сделать может произойти неприятность. Важность этого нельзя недооценивать.

  • В первую очередь посетим инструмент Admin>Administrators

Администратор

  • Далее, выберите adminв правой колонке:

Администратор

  • И измените пароль администратора

Администратор пароль

Обновление модулей FreePBX

  • Наконец, следует обновить устаревшие модули в системе FreePBX.

Чтобы сделать это, посетим инструмент Admin>Module Asministration:

Модуль Администратор

Нажмите кнопку Check Online и вы увидите все доступные для обновления модули:

Модуль Администратор

  • Для обновления модуля, щелкните по нему, а затем выберите опцию загрузки

Модуль Администратор

  • Наконец, нажмите кнопку Process и следуйте инструкциям для завершения обновления модуля.

Обновление, Поиск и Удаление пакетов

После завершения установки AsteriskNOW, все пакеты для работы Asterisk установлены. Однако часто доступны системные обновления . AsteriskNOW содержит несколько Yum репозиториев в дополнение к тем, которые есть в CentOS. Это asterisk-current/asterisk-testedи digium-current/digium-tested. В asterisk- репозитории содержат пакеты для Digium- открытого программного обеспечения (например, Asterisk, libpri и DAHDI). В digium- репозитории содержится несвободное или коммерческое программное обеспечение (например, Digium Phone модуль для Asterisk, G.729 для Asterisk, Факс для Asterisk, и HPEC модуль эхоподавления). Это позволяет устанавливать дополнительное программное обеспечение, чтобы оставаться в курсе последних изменений. Пакеты могут быть установлены или удалены с помощью `yum install <package>` и`yum remove <package>` соответственно. Обновления рекомендуется регулярно устанавливать с помощью `yum update`. Для получения полного списка доступных и установленных пакетов, вы можете использовать `yum list | less`.

FreePBX

Asterisk pjsip.conf

$
0
0

Asterisk pjsip.conf

pjsip Описание параметров настройки 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 authenticationtype-- 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: настройка и установка

Asternic Call Center Stats LITE

$
0
0

Asternic Call Center Stats LITE

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

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


FreeSWITCH CDR MySQL

$
0
0

FreeSWITCH CDR MySQL

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

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

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

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

Проверим odbcinst.ini

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

Заполним odbc.ini

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

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

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

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

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

 touch freeswitchcdr.sql

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

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

Создаем БД: freeswitchcdr

 mysqladmin create freeswitchcdr

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

 mysql asteriskcdrdb < freeswitchcdr.sql

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

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

Подготовим FreeSWITCH

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

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

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

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

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

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

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

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

 fs_cli
 load mod_odbc_cdr

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

 reload mod_odbc_cdr

reload mod_odbc_cdr

reload mod_odbc_cdr

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

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

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

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

 cd asterisk-cdr-viewer/include

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

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

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

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

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

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

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

FreeSWITCH

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

$
0
0

FreePBX

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

Настройка FreePBX.

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

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

Admin modules

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

Applications

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

Connectivity

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

Settings Modules

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

UCP

Примеры

Уязвимости

Устаревшее

FreePBX 13 SIP Trunk

$
0
0

FreePBX 13 SIP Trunk

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

FreePBX: настройка 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 Очереди - 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: queues.conf

$
0
0

Asterisk: queues.conf

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

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

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

/etc/asterisk/queues.conf

[queue_01]
strategy = ringall

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

 exten => s,1,Queue(queue_01)

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

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

queue reload

*CLI> queue reload
members     parameters  rules       all

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

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

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

/etc/asterisk/queues.conf

[queue_01]
strategy = ringall
member = PJSIP/2777

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

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

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

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

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

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

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

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

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

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

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

 autofill = yes

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

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

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

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

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

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

 shared_lastcall=no
Negative_penalty_invalid

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

 negative_penalty_invalid = no
log_membername_as_agent

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

 log_membername_as_agent = no

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

 [queuename]
Musicclass

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

 musicclass = default
announce

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

 announce = file_to_play

strategy

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

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

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

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

 strategy = ringall
servicelevel

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

 servicelevel=30

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

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

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

 context = context_name
penaltymemberslimit

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

 penaltymemberslimit = 5

Timeout

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

 Queue(queuename,t,,,45)

queue timing options

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

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

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

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

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

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

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

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

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

 weight=0
wrapuptime

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

 wrapuptime=0
autofill

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

 autofill=yes|no
autopause

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

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

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

 autopausedelay=60
Autopausebusy

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

autopausebusy=no
Autopauseunavail

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

 autopauseunavail=no
maxlen

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

maxlen=0
variables

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

 Local/2666@from-queue/n

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

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

пример

пример

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

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

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

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

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

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

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

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

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

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

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

 announce-frequency = 90
min-announce-frequency

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

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

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

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

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

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

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

 relative-periodic-announce=no
announce-holdtime

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

queue-less-than

queue-quantity1

queue-quantity2

periodic-announce

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

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

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

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

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

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

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

 joinempty = paused,inuse,invalid

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

 leavewhenempty = inuse,ringing

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

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

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

 reportholdtime = no
ringinuse

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

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

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

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

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

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

 ringinuse = no
memberdelay

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

  memberdelay = 0
timeoutrestart

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

 timeoutrestart = no
defaultrule

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

 defaultrule = myrule

Members

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Asterisk 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 13 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

Asterisk настройка

$
0
0

Asterisk настройка

Подробные рувоводства и справочные материалы по настройке Asterisk. Документация постоянно обновляется и дополняется.

Установка

Asterisk работает под управлением операционных систем Linux и FreeBSD. Доступны установка из бинарных файлов и компиляция из исходного кода. Также существует множество дистрибьютивов Linux с уже готовым к работе предустановленным Asterisk и FreePBX.
Инструкции по установке Asterisk для различных дистрибьютивов Linux:

Конфигурационные файлы Asterisk

Большинство настроек Asterisk контролируются с помощью конфигурационных файлов, расположенных в директории /etc/asterisk. Синтаксис конфигурационных файлов Asterisk разработан для редактирования вручную и имеет простую и понятную структуру. Категории или по иному контексты группируют свойства объектов и отделяют их друг от друга именами в квадратных скобках по принципу наследования. Все, что записано после имени контекста относится к нему, пока не появится следующее имя контекста в квадратных скобках. Практически в каждом кофиге встречается категория [general], которая задает параметры для всех объектов конфигурационного файла. Параметры объектов имеют приоритет над глобальными параметрами, если одинаковый параметр, может быть назначен, как глобально, так и конкретному объекту. Некторые конфиги имеют только заранее определенные секции, например asterisk.confотвечающий за общие настройки pbx. Но в большинстве случаев, для назначения объектов, создаются контексты и задаются их имена. Приведенные ниже примеры конфигов Asterisk 14 с описанием параметров, переведены и дополнены авторами сайта.

Realtime архитектура Asterisk

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

Каналы связи в Asterisk

SIP

Под каналами связи в Asterisk подразумевается набор драйверов для взаимодействия с устройствами и протоколами связи. Так как Asterisk в первую очередь VoIP АТС ключевое значение имеют драйвера взаимодействия с VoIP протоколами, в частности с SIP протоколом. Изначально в Asterisk был один драйвер SIP протокола chan_sip. Но его реализация была неполной и в конкуренции с FreeSWITCH, который имел более продвинутый SIP драйвер, в Asterisk начиная с версии 12, был включен новый драйвер SIP - chan_pjsip.
Поддержка старого драйвера сохраняется и оба драйвера могут действовать совместно.
Однако предпочтительней использовать новый драйвер PJSIP.

IAX

Также в Asterisk реализован собственный VoIP протокол - IAX (Inter Asterisk Exchange). Как и следует из названия, он в первую очередь ориентирован на создание каналов связи между серверами Asterisk. IAX имеет упрощенную структуру, используя один и тот же порт для сигнализации и медиа, что в теории упрощает прохождение NAT и экономит трафик, однако в современных условиях и с появлением PJSIP его преимущества не завоевали ему популярности.

h323

Поддержка устаревшего VoIP протокола h323 может понадобиться для интеграции с устаревшими АТС, например Avaya CSI.

DAHDI

Драйвер DAHDI поддерживает большую линейку устройств, таких как платы потоков ISDN PRI E1, FXO, FXS и GSM интерфейсов.

Local

Прокси - псевдо канал Asterisk, позволяющий вызывать канал любой технологии без явного ее указания.

NAT SIP Asterisk

План набора Asterisk

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

Команды диалплана Asterisk

Функции диалплана Астериск

Asterisk Dialplan functions

Функции Asterisk используются в диалплане. Это не командыдиалпланаи не могут быть использованы прямо. Функции возвращают значение для дальнейшего использования в логике диалплана.

Очереди и Агенты Asterisk

Очередями в Asterisk называется механизм ACD (automated call distribution) для распределения входящих вызовов между агентами колл центра. Конфигурация очередей осуществляется в файле Asterisk: queues.conf, имена очередей вызовов используются в качестве аргумента команды Queueв файле конфигурации плана набора extensions.conf. Агенты, которые обрабатывают вызовы, поступающие в очередь, описываются в файле Asterisk: agents.conf.

Шифрование в Asterisk

Конференции Asterisk

Asterisk позволяет организовать телеконференции с неограниченным числом пользователей.

Абонентские функции Asterisk

В файле features.conf назначаются пользовательские коды абонентских функций Asterisk и опции абонентских функций, такие как:
Переадресация вызова(transfer), перехват вызова (pickup), запись по требованию (record on demand), таймауты между набора и переадресации (digit timeout), паркинг (park) и др.

Отчеты о звонках Asterisk

Детализированный отчет о звонках (CDR) backend для сохранения данных о входящих, исходящих и внутренних вызовах Asterisk. Полное описание на русском языке CDR, MySQL, ODBC etc.

Логи в Asterisk

CLI - интерфейс командной строки Asterisk.

Командная строка является мощным инструментом для мониторинга и управления работой Asterisk PBX

Asterisk AMI

Asterisk manager Interface - интерфейс управления.

Asterisk ARI

FreePBX 14 Beta

Viewing all 1135 articles
Browse latest View live


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