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 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
Конфиг 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:
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 секунд (по умолчанию)
Регистрация необходима, чтобы принимать входящие вызовы от провайдера, если используется SIP транк с аутентификацией. Как правило, это касается услуг связи предоставляемых через публичную сеть.
Но могут быть и другие варианты SIP транков, без аутентификации, через серую сеть провайдера, например. Или для связи двух доверенных серверов Asterisk корпоративной сети.
В этом случае не требуется регистрации, аутентификация, обычно происходит по ipадресу, выделенному провайдером. В этом случае, бывает достаточно создать SIP friend с минимальными параметрами.
Например:
Для совершения исходящих вызовов должен быть создан объект 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, с одинаковыми именами.
Настройка SIP пира для регистрации абонентов на Asterisk
Как уже отмечалось Asterisk не делает особых различий между транками и абонентами, поэтому конфиг телефона будет похож на SIP транк, но все же немного другой.
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 трафик) через сервер или напрямую между каналами (пирами).
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) может производится через данный канал. Хорошая идея, как для локальных так и для удаленных абонентов. Если пир взломан, злоумышленники не смогут пропустить через канал больше указанного кол-ва вызовов зараз(ы).
Если у вас множество SIP пиров, которые имеют общие настройки и отличаются например, только 'username' и 'secret', можно создать шаблон.
Для этого надо создать шаблонный пир, а рядом с его именем в квадратных скобках, написать восклицательный знак в круглых скобках и задать общие настройки:
Следующие параметры используются в общей [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, на другой, в целях безопасности.
Но помните, что это только одна из мер безопасности, не самая важная, и не гарантирует вам полной защиты от злоумышленников.
Вкл. эту опцию, чтобы избежать ошибок при сообщении с некоторыми 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'.
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:
Применять 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 подключения.
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 битов.
Patterns Примеры шаблонов Запись Force Never CallerID
Данный модуль управляет исходящей маршрутизацией FreePBX. На основании набранного номера выбирается направление (транк) для исходящего вызова.
Набираемый номер делится на префикс и паттерн и может модифицироваться после набора.
Маршруты проверяются в порядке перечисления.
Например, если у вас есть два маршрута с совпадающими паттернами, сначала FreePBX попытается использовать маршрут выше по списку, а если он недоступен, последующий.
Вы можете изменять порядок использования маршрута перетаскивая мышью на другую позицию.
Маршруты проверяются по порядку - сверху вниз. Если найдено совпадение, дальнейшая проверка прекращается.
Route Settings
Настройки маршрутов
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
Правила набора
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не затрагивает заданные ранее установки.
Помощник создания шаблона номера
Эта опция дает возможность легко добавить правило для исходящих наборов. Следуйте предлагаемым шагам для каждого нового правила.
Скачать локальные префиксыЭто просматривает ваш локальный номер на www.localcallingguide.com (NA-only), и настраивает так, что вы можете набрать либо 7,10 или 11 цифр(5551234, 6135551234, 16135551234) как выбрано ниже для доступа к этому маршруту. Имейте ввиду, что это требует доступа в Internet и может занять некоторое время.
Сгенерировать кнопки. Вы можете выбрать 7,10,11-ти цифровые шаблоны . Если Вы не выбрали 'Загрузить', то добавятся общие 7,10,11-цифровые шаблоны.
Универсальный шаблон. Вы можете выбрать разрешать совершать бесплатные звонки,такие как 800,877 и т.д , а так же Справочная Система, международные вызовы.
Шаблоны импорта/эскпорта Загрузить из файла 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
точка символизирует любую последовательность цифр
Нажмите, чтобы отобразить
Нажмите, чтобы скрыть
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' будет удалён.
Приложение устанавливается в три клика, как локальный модуль FreePBX.
В отличии от стандартного CDR группирует вызовы по внутренним абонентам,
а также по входящим и исходящим вызовам. Скачать Asternic CDR Stats
Как установить
После загрузки модуля необходимо войти в FreePBX, выберите Admin - Module Admin, а затем выберите опцию «Upload module». Вы должны выбрать файл, который вы только что скачали с вашего жесткого диска и нажмите кнопку «Upload».
После загрузки, нажмите на ссылку Manage Local Modules, прокрутите страницу вниз до раздела Отчеты, а затем нажмите на кнопку Asternic CDR Reports. После этого установите переключатель Installи, наконец, нажмите кнопку Proceedв самом низу страницы.
Центр обработки входящих вызовов. Русскоязычный Веб-интерфейс. Статистика работы агентов и очередей в режиме реального времени. Недорогой, эффективный, легко настраиваемый call center.
Базовые функции:
голосовое меню (IVR);
маршрутизация вызовов по времени;
очередь центра обработки вызовов
группы приема вызовов;
переадресации на внутренних или внешних абонентов;
голосовые конференции;
запись переговоров;
статистика звонков (CDR);
статистика работы очереди;
ПО
Asterisk 14
FreePBX 13 - Русифицированный, интуитивно понятный веб-интерфейс для настройки Asterisk.
Call Center Stats - Статистика очередей колл-центра
FOP2 - Панель оператора
Работы:
Инсталляция и базовые наcтройки безопасности.
Настройка по согласованному ТЗ.
Колл Центр или Центр Обработки Вызовов (ЦОВ)
Asterisk прекрасно справляется с организацией как небольших колл центров, так и более мощных систем.
Приложение queue обеспечивает постановку абонента в очередь по принципу FIFO (первый вошел, первый вышел).
Агенты могут быть статическим (закрепленными за определенными очередями) и динамическими (подключатся к обслуживанию очереди набором сервис кода).
Реализацию функционала колл-центра в Asterisk можно условно разделить на уровень АТС, уровень приложений АТС и уровень приложений 3-й стороны (3rd party) :
Базовые функции маршрутизации и обработки вызовов реализованы непосредственно в Asterisk:
Организация очереди (обработка вызовов в порядке поступления).
Маршрутизация вызова по номеру абонента.
Интерактивные Голосовые Сообщения / IVR.
Распределение вызовов среди агентов по занятости или по порядку.
Гибкое распределение вызовов между агентами колл центра в соответствии с заданной политикой.
Звонят все агенты
Звонят наименее занятые
Вызываются по кругу с последнего ответившего.
Линейно (в порядке перечисления)
Случайным образом
Параметры времени и операторов
Так же «очередь» имеет множество опций обработки вызова и работы агентов:
Приветствие оператору — проигрывается агенту прежде чем, тот соединиться с позвонившим из очереди
(например: «звонок из очереди «Продажи» - при обработке одним агентом звонков из нескольких очередей).
Приветствие позвонившему — проигрывается один раз при попадании в очередь.
Музыка на удержании — проигрывается при ожидании в очереди, можно заменить на рекламную информацию.
Максимальное время ожидания в очереди или неограниченно.
Максимальная длина очереди - максимальное количество позвонивших или неограниченно.
Стратегия дозвона (смотри выше: тип выбора свободного агента)
Таймаут — время вызова свободного оператора или неограниченно
Повтор — время повторения вызова операторов.
Передышка — пауза для оператора завершившего разговор вызов.
Сообщение о позиции в очереди
Сообщение о среднем времени ожидания в очереди.
Вставка сообщения авто-секретаря с возможностями прямого набора номера или системы голосовых меню.
Рассчитывается среднее время ожидания в очереди и ожидающий абонент информируется о номере в очереди и оставшемся времени ожидания.
Параметры ёмкости очереди
Все разговоры могут быть записаны в формате wav или gsm, с возможностью последующего поиска и скачивания записи в детализированном отчете о звонках (CDR)
Детализированный отчет о звонках (CDR) храниться в базе данных MySQL.
Доступ к отчетам осуществляется через веб-интерфейс и предоставляет возможности для поиска,
сортировки и сравнения вызовов за разные периоды времени.
В информации о входящем вызове сохраняются
Дата и время звонка
Продолжительность вызова
Номер позвонившего
Номер оператора или агента.
Номер очереди
Ссылка на запись разговора.
Функции регистрации вызовов, информации о состоянии вызовов и агентов и запись переговоров, также реализованы средствами АТС, но требуют взаимодействия базами данных для хранения информации и последующего извлечения для создания отчетов:
Регистрация всех входящих и исходящих вызовов
Запись переговоров
Статус оператора (свободен, занят, пауза)
Веб-интерфейс для статистики очередей и агентов.
Количество принятых вызовов за указанный период времени
Количество отвеченных вызовов
Количество не отвеченных вызовов
Среднее время разговора
Следующие отчеты интегрированы в Asternic Call Center Stats :
Распределение: по очередям, по месяцам, по неделям, по дням, по часам.
Отвеченные вызовы: по очередям, по времени ожидания, по агентам, Причина разъединения, продолжительность вызова (в том числе средняя продолжительность по очередям и агентам).
Неотвеченные вызовы: по очередям, по времени ожидания, по агентам, Причина разъединения, продолжительность вызова (в том числе средняя продолжительность по очередям и агентам).
Текущее состояние агентов: продолжительность работы или простоя, состояние текущего вызова, текущее кол-во вызовов в очереди)
Приложения использующие информацию о вызовах сохраненную в БД и логах (CDR статистика, Статистика очереди ):
Приложения для создания отчетов о входящих/исходящих вызовах и поиска записей.
Приложения для создания отчетов о качестве работы операторов(качество обслуживания.
Приложения в режиме реального времени получающие информацию о статусе агентов, длине очередей и загруженности каналов.
Real Time статус операторов, очередей и каналов.
FOP2 - Flash Operator Panel
Приложения контроля интеллектуального набора. Хотя набор номеров и маршрутизацию осуществляет сам Asterisk, для интеллектуального дозвона требуется приложение которое инициировало бы вызовы по заданному списку и управляло алгоритмом набора.
Автоматизированный набор номера (predictive dialer)
Приложения визуализации данных о клиенте, только получают данные о номере вызывающего абонента от Asterisk и далее, сверяя поступившую информацию с собственной БД открывают существующую или предлагают агенту создать новую карточку клиента. Таким образом эти приложения являются по сути обособленными системами, использующими Asterisk только для получении информации о номере вызывающего абонента.
Визуализация данных о клиенте (карточка клиента) на основании номера абонента (CallerID)
Данный дистрибьютив Linux настроен и протестирован для Asterisk.
Он устанавливает все пакеты, необходимые для использования Asterisk.
AsteriskNOW официально рекомендуемая сборка, как для Asterisk,так и для Digium аппаратного обеспечения, включая Digium телефоны.
Это руководство дает краткий обзор установки, настройки и обслуживания системы.
AsteriskNOW Установка
Запишите образ AsteriskNOW DVD на DVD диск, а затем загрузитесь с DVD, чтобы начать процесс установки.
После загрузки с AsteriskNow DVD, вам будет представлен с следующего вида экран и варианты установки с веб-интерфейсом FreePBX или без.
Это описание предполагает, что веб-интерфейс FreePBX будет установлен. Для этого, выберете опцию 1 и нажмите <ВВОД>:
Запустится автоматизированный графический вариант установки.
Во время установки,
во первых вам будет представлен экран с возможностью выбора Часового пояса:
Выберите место, которое соответствует вашему часовому поясу и перейдите к следующему экрану.
Далее, вам будет предложено установить пароль администратора (root):
Пользователь 'root' полноправный хозяин Linux системы.
Большинство настроек требуют доступа с правами 'root'.
Рекомендуется использовать в пароле строчные и заглавные буквы, цифры и символы.
Далее выберете раздел жесткого диска.
Рекомендуется, выбрать «Use All Space»
и перейти к следующему экрану.
Подождите когда система будет установлена, это может занять 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 Administration» ссылке. Нажмите ее, и вы увидите экран входа в FreePBX:
Имя пользователя по умолчанию: admin
Пароль по умолчанию: admin
После успешного входа вы увидите панель 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`.
Описание параметров настройки 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.
В данном примере мы видим тип секции: 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)
Секция аутентификации содержит опции и полномочия для входящих и исходящих регистраций.
С этой секцией ассоциируются такие секции как 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
Главная функция 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
Для регистрации понадобится определить используемый транспорт и секцию аутентификации.
Помимо этого, наверняка, потребуется указать контакт для входящих вызовов.
Псевдоним домена. [Имя] данной секции является псевдонимом, а конфигурационная опция 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
Модуль не привязан к какой-либо точке 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'.
Определяет конечные точки с помощью 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'.
Контакты являются одним из способов не указывать явно 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 пиров и екстеншенов.
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. Веб приложение парсит текстовый лог очереди 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:
Анализ лога очереди(/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'.
И заполните файл следующим содержанием, где параметры БД (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
Если в параметре <param name="proxy" value="192.168.0.252"/>порт не задан, то используется 5060, по умолчанию.
Чтобы задать специфический порт SIP сигнализации, используйте форму записи: <param name="proxy" value="192.168.0.252:5077"/>
Так как gateway создан в sip_profile— internal, входящие вызовы из корпоративной АТС будут попадать непосредственно в контекст defaultи если пользователь с вызываемым номером существует, он будет вызван. Дополнительные правила входящей маршрутизации не требуются. Таким образом вы можете создать корпоративную телефонную сеть со сквозной нумерацией.
Поле <param name="caller-id-in-from" value="true"/>обеспечит передачу внутреннего номера из поля From:в качестве CallerID.
<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>
Переменная ${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".
Условие <condition field="caller_id_number" expression="^(397\d)$"/>, можно использовать для ограничения доступа к gateway.
В примере через данный gateway смогут звонить только номера 3970-3979.
Указывает на домен регистрации абонентов, которые обращаются к внешнему 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>
Документация по конфигурации и использованию функций модуля 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' опций.
Подробное описание модулей. Примеры. Архитектура Freepbx. Скриншоты.
Настройка FreePBX.
FreePBX это полнофункциональный веб-интерфейс для конфигурации Asterisk.
Если Вы знакомы с Asterisk, то знаете, настройка ATC осуществляется при помощи конфигурационных файлов.
FreePBX предлагает простой, интуитивно понятный интерфейс для настройки и управления Asterisk PBX.
FreePBX также поставляется со многими дистрибьютивами: AsteriskNOW, FreePBX Distro, Trixbox, Elastix.
SIP транк определяет набор свойств, требуемых для совершения внешних вызовов по протоколу SIP.
Таких как, аутентификация, callerid, кол-во каналов, наличие сетевых трансляций (NAT)
и другие свойства для формирования правильных SIP запросов, используемые кодеки,
контекст для обработки входящих вызовов и др..
FreePBX: настройка SIP транка
Настройки поделены на три основных секции:
General
Определяет основные параметры SIP транка:
Trunk name
Имя транка для веб интерфейса. Сугубо описательное значение, для идентификации транка в веб интерфейсе FreePBX. Не используется непосредственно для вызовов. Назначьте удобное для вас имя, для легкого распознавания среди других транков.
Hide CallerID
Не сообщать удаленной стороне исходящий CallerID.
В большинстве случаев требуется передавать CallerID, но если вдруг понадобиться… YesNo
Outbound CallerID
Задайте исходящий CallerID для данного транка. Во FreePBX Outbound CallerIDможет быть задан или модифицирован, в нескольких местах по пути обработки исходящего вызова.
Outbound CallerID екстеншена. Когда внутренний номер инициирует вызов, если задан параметр Outbound CallerID для этого екстеншена, он используется как исходящий CID.
Далее вызов обрабатывается в Outbound Routes. Если параметр Override Extension = No (по умолчанию), исходящий CID ектеншена, используется и далее.
Затем вызов попадает в транк, если 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
Преобразование набираемого номера
Преобразование набираемого номера в транке, происходит по тем же правилам, что и в Dial Patternsисходящей маршрутизации. Сначала выполняется преобразование в Outbound Routes,
затем вызов попадает в модуль транка и выполняется последнее преобразование, если задано.
Рассмотрим пример использования двух-этапного преобразования:
Задан маршрут с шаблоном _8[09]XXXXXXXXX, который обслуживают несколько транков от разных провайдеров.
Один требует набирать '8', а в другом надо отправлять '+7'.
Оставим транк требующий '8', без преобразования.
В транке же, требующем '+7', заменим 8-ку.
Prepend
Prefix
Match Pattern
Caller ID
+7
8
[09]XXXXXXXXX
Вариантов может быть масса, но общий принцип, надеюсь ясен.
sip Settings
И, наконец, ключевые наcтройки sip пира. Во FreepBX они разделены на Outgoingи Incoming
Которые отвечают за исходящие type=peerи входящие вызовы type=user, соответственно.
Подробно с настройками sip.conf в Asterisk вы можете ознакомиться по ссылке
Здесь же рассмотрим основные параметры.
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.
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 сервер провайдера вообще проигнорирует указанное здесь значение.
Подробное описание. Стратегии вызова. Политика записи. Таймауты агентов.
Очереди для эффективной обработки множества одновременных звонков, меньшим количеством операторов 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: взывать агентов в порядке перечисления, для динамических, в по времени регистрации.
Если авто-заполнение включено (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не затрагивает заданные ранее установки.
Помечать отклоненные вызовы, как отвеченные. (Чтобы на телефоне не было сообщений о пропущенных вызовах)
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' (мягкий) - текущий оператор будет вызываться, пока не истечет таймаут вызова оператора в очереди, после этого вызов покинет очередь.
Время в секундах, в течение которого вызов будет поступать на телефон оператора, после которого наступит таймаут Retry, а затем вызов снова будет подан операторам в зависимости от заданной стратегииочереди.
Agent Timeout Restart
Этот параметр устанавливает время повторного вызова оператора, который оказался принять звонок из очереди. Это может быть полезно, если операторы очереди имеют возможность отказа приема вызова из очереди.
ДаНет
Retry
Через сколько секунд будет повторена попытка позвонить снова на все телефоны. Выбирая вариант «Без повторений» звонок будет направлен из очереди по назначению при неответе. Звонок перенаправится туда после тайм-аута у первого оператора, переход на второго оператора не произойдёт.
Wrap-Up-Time
Указывает сколько секунд агент останется свободным после окончания очередного вызова из очереди. Если используете Asterisk 1.6 и выше, Вы также можете установить параметр 'Применить передышку для всех очередей' на странице 'Дополнительные настройки' и операторы, работающие в нескольких очередях будут иметь перерыв после вызова в любой очереди.
Member Delay
Данный параметр позволяет установить задержку в секундах между ответом оператора и соединением с вызывающим абонентом (или оповещением).
Agent Announcement
Оповещение, воспроизводимое оператору, перед соединением с вызывающим абонентом
Если хотите сообщать позвонившему время ожидания прежде чем его соединят с оператором - установите Да.
ДаНет
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
Параметры емкости очереди
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
Frequency
Как часто объявляется позиция в очереди и приблизительное время ответа агента,
Установите 0 для полного отключения этой функции.
Announce Position
Установите «yes» для объявления позиции.
YesNo
Announce Hold Time
Анонсировать время ожидания в очереди. Не объявляется если осталось менее минуты.
Перенаправить вызов в заданный IVRс последующим возвращением в очередь, если абонент ничего не выбрал.
Repeat Frequency
Частота повторения IVR.
Advanced options
Service Level
Параметр статистики очереди. Например, если задано 20 секунд, очередь будет подсчитывать процент отвеченных за это время вызовов: SL: 45.8% within 20s.
Фильтр регулярных выражений для операторов
Agent Regex Filter
Задайте регулярные выражения.
Все что попадает в фильтр агенты смогут набирать, остальное нет.
Настройка очереди входящих вызовов 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] ;имя очереди, все параметры заданные после него и до следующих […] скобок, будут относится к данной очереди.
Сохранять каждого динамического пользователя во внутренней БД 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 - среднее время ожидания в очереди на данный момент;
Как часто анонсировать позицию в очереди и среднее время ожидания.
Если 0 то не анонсировать.
Примечание: этот параметр игнорируется при изменении позиции абонента в очереди (см. min-announce-frequency)
announce-frequency = 90
min-announce-frequency
Минимальный интервал между моментом перехода на следующую позицию и анонсом среднего времени удержания.
Это полезно для избежания постоянных объявлений когда позиция в очереди абонента часто меняется.
т.е., если позиция в очереди изменилась, то не оповещать, даже если подошло время announce-frequency.
(см. announce-frequency)
Если включено, то объявления будут проигрываться первому в очереди. Это может привести к ситуации, когда агент готов принять вызов, но соединени откладывается из-за объявления и приведет к задержкам в очереди. по умолчанию выключено.
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.»)
Для включения записи вызовов, требуется задать «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>]
Пользователи с большим значением пенальти имеют, более низкий приоритет для вызовов.
После второй запятой назначается имя.
Использование имени может быть удобно для представления в логах очереди.
Разные интерфейсы могут использовать одно имя.
Дополнительное описание интерфейса указывается после третьей запятой.
На этот интерфейс будут посылаться уведомления 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).
Все вызовы, будь-то очередь, конференция, меню автосекретаря или вызов телефона, определяются логикой и концепцией диалплана.
Диалплан создается в файле /etc/asterisk/extensions.conf .
Введение в расширения (extensions) и контексты (context)
Каналам назначаются контексты. Контексты определяют правила набора для каналов
План набора состоит из одного или нескольких контекстов. Каждый контекст это просто набор расширений (екстеншенов). Каждый екстеншен в контексте имеет уникальное имя.
Контексты ипользуются для выполнения основных функций АТС:
Безопасность: Можно разрешить междугородные/международные вызовы только конкретным абонентам.
Маршрутизация вызовов: Маршрутизация вызовов в зависимости от номера абонента.
Автосекретарь: Проигрывание приветствия и приглашение ввести добавочный номер.
Многоуровневые голосовые меню: Голосовые меню для службы поддержки, отдела продаж и т.д.
Авторизация: Запрос пароля для доступа к некоторым екстеншенам.
Обратный вызов: Позволяет уменьшить затраты на междугородние/международные вызовы.
Списки доступа: Занесение в черные списки надоедливых абонентов, не давая им возможности связаться с Вами.
Виртуальные АТС: Вы можете создать «виртуальную АТС» в пределах Вашей основной АТС.
Дневной/Ночной режим работы: Вы можете изменять поведение Вашей АТС в зависимости от времени суток.
Макросы: Можно создавать скрипты для решения повторяющихся задач в плане набора.
Что такое екстеншен?
В традиционных АТС екстеншен связан с интерфейсом (портом).
В Asterisk екстеншен определяется как перечень приложений (applications) и их аргументов,
выполняемых в определённом порядке, Порядок выполнения определяется приоритетами (priority). Когда екстеншен набран приоритеты выполняются до разъединения вызова, или перенаправления на другой екстеншен.
Каждый шаг записывается следующим образом:
Первым выполняется приложение Wait c приоритетом 1 - ждать 5 секунд (время задаётся аргументом (5).
Вторым приложение Answer - поднять трубку.
Затем Playback - проиграть звуковой файл; аргумент задает имя файла (demo-congrats) в директории по умолчанию.
Последним выполняется приложение Hangup - повесить трубку. Приоритет 'n' означает next (следующий) и может использоваться вместо любого приоритета кроме 1-го.
Этот пример иллюстрирует разные варианты действий в случае, если на вызов не ответили.
Сначала вызывается канал DAHDI/1, если через 20 секунд никто не ответил вызов пренаправляется на VoiceMail()с объявлением «абонент не отвечает»(u100), Если же абонент занят, вызов перейдет на приоритет N+101, в нашем случае это приоритет 102.
Маршрутизация по CallerID
Пример маршрутизации по номеру вызывающего абонента.
Если вызывается екстеншен 100 вызов направляется на интерфейс DAHDI/1, кроме случая если вызов осуществляет абонент 1234567. В этом случае вызов отклоняется. На примере видно, что идентификатор вызывающего абонента задается формой '/1234567'.
Ещё один пример маршрутизации, теперь по отсутствию CallerID.
Вызов поступает на DAHDI/1, в случае если телефон занят или не отвечает в течении 15 секунд, звонок переходит на группу телефонов, включая и DAHDI/1. Если и на этот раз никто не поднимает трубку, вызов переходит на голосовую почту.
Интерактивное Голосовое меню
Голосовое меню как правило задается в собственном контексте.
Объявление проигрывается на расширении '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] диалплана.
Рассмотрим следующий пример:
Организуя диалплан таким образом, можно быстро и легко переназначать физические интерфейсы для конкретных пользователей, часто используемых в контекстах.
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-ми цифр.
Екстеншены могут сопоставляться шаблону, вместо однозначно заданных цифр.
Шаблон должен начинаться с символа подчеркивания ( _ ) и может использовать любой из следующих символов:
X– любая цифра от 0-9
Z– любая цифра от 1-9
N– любая цифра от 2-9
[14-6]– цифры 1,4, 5 и 6
.– любые возможные символы.
Резервные транки и LCR (выбор направления с наименьшей стоимостью)
Весьма полезно настроить LCR (Least Coast Routing) и перенаправление в случае отказа внешней линии.
В этом примере междугородние вызовы направляются на DAHDI интерфейс,
но звонки в Москву направляются через более выгодного провайдера на IAX транк.
В случае же недоступности IAX транка, вызовы перенаправляются через DAHDI.
Использование Макросов
Вам может потребоваться создать множество екстеншенов (расширений) очень похожих друг на друга. Чтобы упростить работу с диалпланом используются Макросы.
Для создания макроса используется контекст имя которого начинается с «macro-»
и далее уникальное имя макроса. Выполнение макроса начинается с ектеншена 's'.
В макросах используются локальные переменные:
${MACRO_EXTEN} – Екстеншен вызываемый макросом
${MACRO_CONTEXT} – Контекст вызываемый макросом
${MACRO_PRIORITY} – активный приоритет вызываемый макросом
${MACRO_OFFSET} – если установлено вызывает смещение n + ${MACRO_OFFSET}
${ARGn} – аргумент 'n' в макросе.
Когда макросы [macro-oneline] и [macro-twoline] созданы, в контексте [default]
надо написать только одну сроку для выполнения нескольких стандартных действий.
[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}.
Изменить использование драйвера можно в модуле Settings > Asterisk Settings - Dialplan and Operational - SIP Channel Driver
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
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позволит транслировать в канал сообщение о занятости или недоступности абонента от провайдера.
Подробные рувоводства и справочные материалы по настройке Asterisk. Документация постоянно обновляется и дополняется.
Установка
Asterisk работает под управлением операционных систем Linux и FreeBSD.
Доступны установка из бинарных файлов и компиляция из исходного кода.
Также существует множество дистрибьютивов Linux с уже готовым к работе предустановленным Asterisk и FreePBX.
Инструкции по установке Asterisk для различных дистрибьютивов Linux:
Большинство настроек Asterisk контролируются с помощью конфигурационных файлов, расположенных в директории /etc/asterisk. Синтаксис конфигурационных файлов Asterisk разработан для редактирования вручную и имеет простую и понятную структуру. Категории или по иному контексты группируют свойства объектов и отделяют их друг от друга именами в квадратных скобках по принципу наследования. Все, что записано после имени контекста относится к нему, пока не появится следующее имя контекста в квадратных скобках. Практически в каждом кофиге встречается категория [general], которая задает параметры для всех объектов конфигурационного файла. Параметры объектов имеют приоритет над глобальными параметрами, если одинаковый параметр, может быть назначен, как глобально, так и конкретному объекту. Некторые конфиги имеют только заранее определенные секции, например asterisk.confотвечающий за общие настройки pbx. Но в большинстве случаев, для назначения объектов, создаются контексты и задаются их имена.
Приведенные ниже примеры конфигов Asterisk 14 с описанием параметров, переведены и дополнены авторами сайта.
Реалтайм Архитектура Asterisk - набор драйверов и функций для конфигурации в режиме реального времени.
Существует два типа конфигурации - статический и динамический:
- Статический хранит конфигурации в БД, как конфигурационные файлы и также обновляет данные при перезагрузке модулей.
- Динамический используется для создания и обновления объектов в режиме реального времени, при совершении вызовов
Под каналами связи в Asterisk подразумевается набор драйверов для взаимодействия с устройствами и протоколами связи.
Так как Asterisk в первую очередь VoIP АТС ключевое значение имеют драйвера взаимодействия с VoIP протоколами, в частности с SIP протоколом.
Изначально в Asterisk был один драйвер SIP протокола chan_sip. Но его реализация была неполной и в конкуренции с FreeSWITCH, который имел более продвинутый SIP драйвер, в Asterisk начиная с версии 12, был включен новый драйвер SIP - chan_pjsip.
Поддержка старого драйвера сохраняется и оба драйвера могут действовать совместно.
Однако предпочтительней использовать новый драйвер PJSIP.
Также в Asterisk реализован собственный VoIP протокол - IAX (Inter Asterisk Exchange). Как и следует из названия, он в первую очередь ориентирован на создание каналов связи между серверами Asterisk. IAX имеет упрощенную структуру, используя один и тот же порт для сигнализации и медиа, что в теории упрощает прохождение NAT и экономит трафик, однако в современных условиях и с появлением PJSIP его преимущества не завоевали ему популярности.
Для понимания Asterisk очень важен - диалплан (dialplan).
Диалплан направляет каждый звонок от его источника, с помощью различных приложений,
в пункт назначения. Все вызовы, будь-то голосовая почта, конференция, меню автосекретаря
или вызов телефона, определяются логикой и концепцией диалплана.
Русская документация мануал по dialplan Asterisk
Функции Asterisk используются в диалплане. Это не командыдиалпланаи не могут быть использованы прямо.
Функции возвращают значение для дальнейшего использования в логике диалплана.
Очередями в Asterisk называется механизм ACD (automated call distribution) для распределения входящих вызовов между агентами колл центра.
Конфигурация очередей осуществляется в файле Asterisk: queues.conf, имена очередей вызовов используются в качестве аргумента команды Queueв файле конфигурации плана набора extensions.conf. Агенты, которые обрабатывают вызовы, поступающие в очередь, описываются в файле Asterisk: agents.conf.
В файле features.conf назначаются пользовательские коды абонентских функций Asterisk и опции абонентских функций, такие как:
Переадресация вызова(transfer), перехват вызова (pickup), запись по требованию (record on demand), таймауты между набора и переадресации (digit timeout), паркинг (park) и др.
Детализированный отчет о звонках (CDR) backend для сохранения данных о входящих, исходящих и внутренних вызовах Asterisk. Полное описание на русском языке CDR, MySQL, ODBC etc.