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

Контакты


sidebar

$
0
0

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

$
0
0

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

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

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

Ubuntu Software selection

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

ubuntu root mysql password

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

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

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

 $ sudo -i

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

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

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

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

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

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

 reboot

Установите PearDB

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

Error: Error: cannot download "pear/DB"

Error: Error: cannot download "pear/DB"

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

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

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

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

 pear config-get php_dir

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

/usr/share/php

Качаем DB 1.7.14

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

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

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

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

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

Установка Asterisk

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

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

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

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

ls -la /usr/src

ls -la /usr/src

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

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

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

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

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

kernel error

kernel error

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

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

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

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

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

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

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

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

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

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

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

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

make menuselect format_mp3

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

make menuselect ru sound

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

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

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

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

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

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

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

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

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

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

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

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

remove /var/www/html

remove /var/www/html

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

 rm -rf /var/www/html

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

Настроим Apache

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

AllowOverride All

AllowOverride All

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

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

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

a2enconf servername
# restart the server

service apache2 restart

Подготовим MySQL

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

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

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

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

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

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

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

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

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

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

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

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

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

<spoiler>

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

</spoiler>

amportal a ma refreshsignatures
amportal a reload
amportal chown

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

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

и запустим amportal

 amportal start

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

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

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

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

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

freepbx start set user login

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

nano +67 /etc/locale.alias

 russian ru_RU.UTF-8

или sed:

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

Установка Asterisk

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

$
0
0

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

Установка, настройка Asterisk и FreeSWITCH. Неограниченное количество VoIP абонентов. IP АТС корпоративного уровня. Реализуем сложные ТЗ. Удаленно, в любой точке мира.

Установка IP АТС на открытом программном обеспечении включает в себя следующие этапы:

  1. Разработка технического задания с учетом требований заказчика и возможностей IP АТС.
  2. Подготовка договора на установку и настройку и, если требуется, поставку оборудования.
  3. Подготовка счета на оплату с учетом технического задания, согласование сроков и порядка оплаты.
  4. Удаленная установка IP АТС в любой точке мира.
  5. Установка IP АТС с выездом на объект (Санкт Петербург).
  6. Предварительная настройка оборудования в нашем сервисном центре.
  7. Сдача проекта. Проверка работоспособности всех компонентов и алгоритмов работы IP АТС.
  8. Обучение для дальнейшей эксплуатации IP АТС сотрудниками заказчика.
  9. Бесплатная техническая поддержка в течении месяца с момента запуска в эксплуатацию.

Решения

VoIP АТС

  • Неограниченное количество VoIP абонентов и транков.
  • Запись разговоров и детализированный отчет о звонках.
  • Факс на e-mail.
  • Русскоязычный интерфейс.
  • CTI - Интеграция со сторонними приложениями.

Колл Центр

Дополнительно

  • Аудит и обслуживание уже установленных систем Asterisk, FreeSWITCH.
  • Написание кастомизированного диаплана под любые нужды.
  • Интеграция с TDM АТС Avaya, NEC, Nortel, Samsung, Panasonic, LG.
  • Аудит и настройки безопасности VoIP систем.
  • Биллинг. Многопользовательские системы.
  • SIP proxy, SBC.

Напишите нам!

Свяжитесь с нами для получения подробной информации.
IP АТС

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

Колл Центр

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

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

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

Asterisk: настройка

$
0
0

Asterisk: настройка

Документация по установке и настройке Asterisk. Dialplan Realtime CDR Queue Agents SIP PJSIP DAHDI MySQL ODBC Features LDAP ConfBridge AMI ARI.

Asterisk: установка

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

На нашем сайте собрано множество справочных материалов и руководств по настройке Asterisk. Документация постоянно обновляется и дополняется. Рассмотрим разные аспекты настройки программного комплекса Asterisk, сгруппированные по основным темам.

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

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

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

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

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

SIP

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

IAX

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

h323

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

DAHDI

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

Local

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

Asterisk: Диалплан

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

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

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

Asterisk Dialplan functions

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

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

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

NAT

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

Конференции

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

Коды Asterisk - Абонентские функции и их свойства - feartures.conf

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

CDR

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

logger

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

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

Asterisk AMI

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

Asterisk ARI

Последние изменения

FreeSWITCH

$
0
0

FreeSWITCH

FreeSWITCH - настройка и установка. Документация и руководства на русском языке.

FreeSWITCH

  • Сервер маршрутизации.
  • Сервер B2BUA.
  • Сервер IVR
  • Сервер Конференций
  • Сервер Голосовой почты
  • SBC Сервер
  • Fax сервер
  • И, конечно, АТС!

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

Установка FreeSWITCH

Настройка FreeSWITCH

FusionPBX

Услуги по настройке IP АТС Asterisk и FreeSWITCH

$
0
0

Услуги по настройке IP АТС Asterisk и FreeSWITCH

Установка, настройка и обслуживание IP АТС Asterisk и FreeSWITCH.

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

Базовая настройка IP АТС Asterisk

Для внедрения IP АТС небольшой емкости (до 100 абонентов), прекрасно подходит программная АТС Asterisk с веб интерфейсом FreePBX. Русскоязычный, простой и интуитивно понятный веб интерфейс позволит вам, в дальнейшем, обслуживать АТС без дополнительных затрат. Все используемое ПО является свободно распространяемым и вы платите только за пусконаладку. Приобретая базовую установку Asterisk вы гарантировано получаете:

Программное обеспечение и функционал:

  • Asterisk 13
  • FreePBX 13 - веб интерфейс настройки Asterisk
  • CDR-viewer - веб интерфейс записи и детализации вызовов
  • ARI (RESTful) и AMI - интерфейсы приложений.
  • Протоколы связи: SIP, IAX2, h323, DAHDI
  • Функции: Очереди
    • Группы приема вызовов
    • Телеконференции
    • Автосекретарь
    • Маршрутизация вызовов
    • Переадресация вызовов
    • Факс-на-Емайл.
  • Операционная система: Centos 7 (Centos 6, Ubuntu или Debian - по требованию)

Базовую настройку IP АТС Asterisk:

  • Создание требуемого кол-ва IP абонентов
  • Подключение требуемого кол-ва SIP (или h323) транков к провайдеру IP телефонии.
  • Подключение потоков ISDN PRI E1.
  • Настройку входящей/исходящей маршрутизации по вашему ТЗ.
  • Настройку дневного/ночного режима
  • Настройка голосового меню (IVR)
  • Настройка групп приема вызовов.
  • Базовые настройки безопасности (IPtables и fail2ban)
  • Настройка приобретенного у нас оборудования (VoIP шлюзов, IP телефонов).
  • Консультации по настройке вашего оборудования.
  • Базовое обучение использования FreePBX для настройки Asterisk (Подключение IP абонентов, IP транков; создание очередей, телеконференций, голосовых меню, групп приема вызовов; использование сервисных кодов и отчетов о звонках.)
  • Бесплатную тех. поддержку в течении месяца с момента ввода в эксплуатацию.

Варианты установки:

  1. Продажа сервера с установкой и настройкой системы.
  2. Установка на сервере заказчика.
  3. Удаленная установка/настройка на сервере заказчика.
  4. Установка на VPS хостинге
  5. Установка на embedded устройства (например роутеры поддерживающие работу с OpenWRT, функционал может быть ограничен)

Расширенная настройка IP АТС Asterisk.

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

Реализация реалтайм архитектуры.

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

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

Поддерживаются следующие типы хранилищ: MySQL, PostgreSQL, SQLite, LDAP, нативно и через ODBC, а также прием и передача данных при помощи cURL. Предлагаем любые реализации реалтайм архитектуры Asterisk.

Взаимодействие со сторонними приложениями

Asterisk имеет три интерфейса (4-ре вместе Command Line Interface) для взаимодействия с другими приложениями:

  • AMI - Asterisk manager Interface
  • ARI - Asterisk RESTful Interface
  • AGI - Asterisk Gateway Interface

Сами по себе интерфейсы в установленном Asterisk готовы к работе и не требуют серьезной настройки. Предлагаем консультации по работе с APIи ПО под нужды клиентов.

Шифрование голосового трафика по SRTP протоколу

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

Построение корпоративной телефонной сети АТС

Предлагаем построение распределенных телефонных систем, интеграцию с другими АТС через VoIP и ISDN протоколы связи, с единым номерным планом и централизованным управлением. Построение VPN сетей под нужды телефонии. На нашем счету проекты объединяющие по 50 филиалов в единую телефонную сеть. Наши специалисты подберут оптимальное оборудование, зарекомендовавшее себя в других проектах.

Настройка IP АТС FreeSWITCH

«Там, где пехота не пройдет…»
Кросс-платформенная много-пользовательская программная АТС FreeSWITCH зарекомендовала себя системой повышенной производительности. Более сложный в настройке и обслуживании, чем Asterisk, тем не менее, FS показывает вчетверо большую производительность, при потреблении равных ресурсов. Если абонентская емкость превышает 200 номеров, имеет смысл рассмотреть FreeSWITCH в качестве альтернативы.

  • IP АТС большой емкости.
  • Много-пользовательские системы с распределенными ресурсами.
  • Виртуальные и облачные АТС.
  • Сервер широкополосных телеконференций.
  • Session Border Controller.
  • Сервер маршрутизации и биллинга.
  • Системы автоматического оповещения абонентов.

Мы предлагаем установку и настройку IP АТС FreeSWITCH в любой из указанных ролей. В базовую настройку входит установка и настройка отказоустойчивой системы FreeSWITCH,
с использованием СУБД PostgreSQL в качестве базы данных ядра и регистраций,
а также MySQL - для отчетов о звонках, с веб-интерфейсом поиска и прослушивания записей.
Диалплан - XML .
Для систем автообзвона, предлагаем установку и настройку Newfies-diаler + FreeSWITCH на Debian 8.
Для систем биллинга и маршрутизации - ASTPP billing.


Свяжитесь с нами для получения подробной информации.
Asterisk

Only edit this fieldset if “IP ATC” is set to “Asterisk”.

FreeSWITCH

Only edit this fieldset if “IP ATC” is set to “FreeSWITCH”.

Asterisk 13 + Opus VP8

$
0
0

Asterisk 13 + Opus VP8

Codec OPUS

 apt-get install -y libopus-dev opus-tools
wget https://github.com/seanbright/asterisk-opus/archive/asterisk-13.3.zip -O opus-asterisk13.zip &&
unzip opus-asterisk13.zip &&
rm -f opus-asterisk13.zip &&
cp asterisk-opus-asterisk*/codecs/* asterisk-13*/codecs/ &&
cp asterisk-opus-asterisk*/formats/* asterisk-13*/formats/ &&
cp asterisk-opus-asterisk*/asterisk.patch asterisk-13*/ &&
cd asterisk-13* &&
patch -p1 < ./asterisk.patch &&
./bootstrap.sh &&
cd /usr/src
2016/11/26

Установка Asterisk + Opus

https://github.com/seanbright/asterisk-opus

Начиная с версии Asterisk 14 OPUS входит в стандартную поставку Asterisk.
http://blogs.digium.com/2016/09/30/opus-in-asterisk/


FreeSWITCH Command Line Interface (CLI) команды

$
0
0

FreeSWITCH Command Line Interface (CLI) команды

...Shutdownmod_commands
acl<ip> <list_name>Compare an ip to an acl listmod_commands
alias[add|stickyadd] <alias> <command> | del [<alias>|*]Aliasmod_commands
bannerReturn the system bannermod_commands
bg_system<command>Execute a system command in the backgroundmod_commands
bgapi<command>[ <arg>]Execute an api command in a threadmod_commands
break<uuid> [all]uuid_breakmod_commands
cdr_csvparameterscdr_csv controlsmod_cdr_csv
chat<proto>|<from>|<to>|<message>|[<content-type>]chatmod_dptools
coalesce[^^<delim>]<value1><value2>...
completeadd <word>|del [<word>|*]Completemod_commands
cond<expr> ? <true val> : <false val>Evaluate a conditionalmod_commands
conferenceConference module commandsmod_conference
consoleloglevel [level]|colorize [on|toggle|off]Consolemod_console
console_complete<line>mod_commands
console_complete_xml<line>mod_commands
create_uuid<uuid> <other_uuid>Create a uuidmod_commands
db[insert|delete|select|exists|count|list]/<realm>/<key>/<value>db get/setmod_db
db_cachestatusManage db cachemod_commands
domain_exists<domain>Check if a domain existsmod_commands
echo<data>Echomod_commands
enumENUMmod_enum
enum_autoENUMmod_enum
escape<data>Escape a stringmod_commands
eval[uuid:<uuid> ]<expression>eval (noop)mod_commands
event_sink<web data>event_sinkmod_event_socket
expand[uuid:<uuid> ]<cmd> <args>Execute an api with variable expansionmod_commands
expr<expr>Eval an expressionmod_expr
fifolist|list_verbose|count|debug|status|has_outbound|importance [<fifo name>]|reparse [del_all]Return data about a fifomod_fifo
fifo_add_outbound<node> <url> [<priority>]Add outbound members to a fifomod_fifo
fifo_check_bridge<uuid>|<outbound_id>check if uuid is in a bridgemod_fifo
fifo_member[add <fifo_name> <originate_string> [<simo_count>] [<timeout>] [<lag>] [<expires>] [<taking_calls>] | del <fifo_name> <originate_string>]Add members to a fifomod_fifo
file_exists<file>Check if a file exists on servermod_commands
find_user_xml<key> <user> <domain>Find a usermod_commands
fsctl[recover|send_sighup|hupall|pause [inbound|outbound]|resume [inbound|outbound]|shutdown [cancel|elegant|asap|now|restart]|sps|sps_peak_reset|sync_clock|sync_clock_when_idle|reclaim_mem|max_sessions|min_dtmf_duration [num]|max_dtmf_duration [num]|default_dtmf_duration [num]|min_idle_cpu|loglevel [level]|debug_level [level]]FS control messagesmod_commands
getcputime[reset]Gets CPU time in milliseconds (userkernel)
getenv<name>getenvmod_commands
gethostgethostbynamemod_commands
global_getvar<var>Get global varmod_commands
global_setvar<var>=<value> [=<value2>]Set global varmod_commands
group[insert|delete|call]:<group name>:<url>group [insert|delete|call]mod_db
group_call<group>[@<domain>]Generate a dial string to call a groupmod_commands
hash[insert|delete|select]/<realm>/<key>/<value>hash get/setmod_hash
hash_dumpall|limit|db [<realm>]dump hash/limit_hash data (used for synchronization)mod_hash
hash_remotelist|kill [name]|rescanhash remotemod_hash
helpShow help for all the api commandsmod_commands
host_lookup<hostname>Lookup hostmod_commands
hostnameReturn the system hostnamemod_commands
httapi[debug_on|debug_off]HT-TAPI Hypertext Telephony APImod_httapi
hup_local_stream<local_stream_name>Skip to next file in local_streammod_local_stream
hupall<cause> [<var> <value>]hupallmod_commands
in_group<user>[@<domain>] <group_name>Determine if a user is in a groupmod_commands
interface_ip[auto|ipv4|ipv6] <ifname>Return the primary IP of an interfacemod_commands
is_lan_addr<ip>See if an ip is a lan addrmod_commands
jsonJSONJSON APImod_commands
limit_hash_usage<realm> <id>Deprecated: gets the usage count of a limited resourcemod_commands
limit_interval_reset<backend> <realm> <resource>Reset the interval counter for a limited resourcemod_commands
limit_reset<backend>Reset the counters of a limit backendmod_commands
limit_status<backend>Get the status of a limit backendmod_commands
limit_usage<backend> <realm> <id>Get the usage count of a limited resourcemod_commands
list_users[group <group>] [domain <domain>] [user <user>] [context <context>]List Users configured in Directorymod_commands
load<mod_name>Load Modulemod_commands
log<level> <message>Logmod_commands
lua<script>run a script as an api functionmod_lua
luarun<script>run a scriptmod_lua
md5<data>Return md5 hashmod_commands
module_exists<module>Check if module existsmod_commands
msleep<milliseconds>Sleep N millisecondsmod_commands
nat_map[status|republish|reinit] | [add|del] <port> [tcp|udp] [static]Manage NATmod_commands
opus_debug<on|off>Set OPUS Debugmod_opus
originate<call url> <exten>|&<application_name>(<app_args>) [<dialplan>] [<context>] [<cid_name>] [<cid_num>] [<timeout_sec>]Originate a callmod_commands
page(var1=val1var2=val2)<var1=val1var2=val2><chan1>[:_:<chanN>]
pause<uuid> <on|off>Pause media on a channelmod_commands
presence[in|out] <user> <rpid> <message>presencemod_dptools
quote_shell_arg<data>Quote/escape a string for use on shell command linemod_commands
reg_url<user>@<realm>mod_commands
regex<data>|<pattern>[|<subst string>][n|b]Evaluate a regexmod_commands
reload[-f] <mod_name>Reload modulemod_commands
reload_local_stream<local_stream_name>Reloads a local_streammod_local_stream
reloadaclReload XMLmod_commands
reloadxmlReload XMLmod_commands
replace<data>|<string1>|<string2>Replace a stringmod_commands
say_string<module_name>[.<ext>] <lang>[.<ext>] <say_type> <say_method> [<say_gender>] <text>mod_commands
sched_api[+@]<time> <group_name> <command_string>[&]Schedule an api commandmod_commands
sched_broadcast[[+]<time>|@time] <uuid> <path> [aleg|bleg|both]Schedule a broadcast event to a running callmod_commands
sched_del<task_id>|<group_id>Delete a scheduled taskmod_commands
sched_hangup[+]<time> <uuid> [<cause>]Schedule a running call to hangupmod_commands
sched_transfer[+]<time> <uuid> <extension> [<dialplan>] [<context>]Schedule a transfer for a running callmod_commands
showcodec|endpoint|application|api|dialplan|file|timer|calls [count]|channels [count|like <match string>]|calls|detailed_calls|bridged_calls|detailed_bridged_calls|aliases|complete|chat|management|modules|nat_map|say|interfaces|interface_types|tasks|limits|statusShow various reportsmod_commands
show_local_stream[local_stream_name [xml]]Shows a local streammod_local_stream
shutdownShutdownmod_commands
sofia<cmd> <args>Sofia Controlsmod_sofia
sofia_contact[profile/]<user>@<domain>Sofia Contactsmod_sofia
sofia_count_reg[profile/]<user>@<domain>Count Sofia registrationmod_sofia
sofia_dig<url>SIP DIGmod_sofia
sofia_gateway_data<gateway_name> [ivar|ovar|var] <name>Get data from a sofia gatewaymod_sofia
sofia_presence_data[list|status|rpid|user_agent] [profile/]<user>@domainSofia Presence Datamod_sofia
sofia_username_of[profile/]<user>@<domain>Sofia Username Lookupmod_sofia
spandsp_start_tone_detect<uuid> <name>Start background tone detection with cadencemod_spandsp
spandsp_stop_tone_detect<uuid>Stop background tone detection with cadencemod_spandsp
sql_escape<string>Escape a string to prevent sql injectionmod_commands
start_local_stream<local_stream_name>Starts a new local_streammod_local_stream
start_tdd_detect<uuid>Start background tdd detectionmod_spandsp
statusShow current statusmod_commands
stop_local_stream<local_stream_name>Stops and unloads a local_streammod_local_stream
stop_tdd_detect<uuid>Stop background tdd detectionmod_spandsp
strepoch<string>Convert a date string into epoch timemod_dptools
strftime<format_string>strftimemod_dptools
strftime_tz<timezone_name> [<epoch>|][format string]Display formatted time of timezonemod_commands
strmicroepoch<string>Convert a date string into micoepoch timemod_dptools
stun<stun_server>[:port] [<source_ip>[:<source_port]]Execute STUN lookupmod_commands
switchnameReturn the switch namemod_commands
system<command>Execute a system commandmod_commands
time_test<mss> [count]Show time jittermod_commands
timer_test<10|20|40|60|120> [<1..200>] [<timer_name>]Exercise FS timermod_commands
tone_detect<uuid> <key> <tone_spec> [<flags> <timeout> <app> <args> <hits>]Start tone detection on a channelmod_commands
unload[-f] <mod_name>Unload modulemod_commands
unsched_api<task_id>Unschedule an api commandmod_commands
uptime[us|ms|s|m|h|d|microseconds|milliseconds|seconds|minutes|hours|days]Show uptimemod_commands
url_decode<string>Url decode a stringmod_commands
url_encode<string>Url encode a stringmod_commands
user_data<user>@<domain> [var|param|attr] <name>Find user datamod_commands
user_exists<key> <user> <domain>Find a usermod_commands
uuid_answer<uuid>answermod_commands
uuid_audio<uuid> [start [read|write] [mute|level <level>]|stop]uuid_audiomod_commands
uuid_break<uuid> [all]Break out of media sent to channelmod_commands
uuid_bridgeBridge call legsmod_commands
uuid_broadcast<uuid> <path> [aleg|bleg|holdb|both]Execute dialplan applicationmod_commands
uuid_buglist<uuid>List media bugs on a sessionmod_commands
uuid_chat<uuid> <text>Send a chat messagemod_commands
uuid_codec_debug<uuid> audio|video <level>Send codec a debug messagemod_commands
uuid_codec_param<uuid> audio|video read|write <param> <val>Send codec a parammod_commands
uuid_debug_media<uuid> <read|write|both|vread|vwrite|vboth|all> <on|off>Debug mediamod_commands
uuid_deflect<uuid> <uri>Send a deflectmod_commands
uuid_displace<uuid> [start|stop] <path> [<limit>] [mux]Displace audiomod_commands
uuid_display<uuid> <display>Update phone displaymod_commands
uuid_drop_dtmf<uuid> [on | off ] [ mask_digits <digits> | mask_file <file>]Drop all DTMF or replace it with a maskmod_commands
uuid_dual_transfer<uuid> <A-dest-exten>[/<A-dialplan>][/<A-context>] <B-dest-exten>[/<B-dialplan>][/<B-context>]Transfer a session and its partnermod_commands
uuid_dump<uuid> [format]Dump session varsmod_commands
uuid_early_ok<uuid>stop ignoring early mediamod_commands
uuid_exists<uuid>Check if a uuid existsmod_commands
uuid_fileman<uuid> <cmd>:<val>Manage session audiomod_commands
uuid_flush_dtmf<uuid>Flush dtmf on a given uuidmod_commands
uuid_getvar<uuid> <var>Get a variable from a channelmod_commands
uuid_hold[off|toggle] <uuid> [<display>]Place call on holdmod_commands
uuid_jitterbuffer<uuid> [0|<min_msec>[:<max_msec>]]uuid_jitterbuffermod_commands
uuid_kill<uuid> [cause]Kill channelmod_commands
uuid_limit<uuid> <backend> <realm> <resource> [<max>[/interval]] [number [dialplan [context]]]Increase limit resourcemod_commands
uuid_limit_release<uuid> <backend> [realm] [resource]Release limit resourcemod_commands
uuid_limit_release<uuid> <backend> [realm] [resource]Release limit resourcemod_commands
uuid_loglevel<uuid> <level>Set loglevel on sessionmod_commands
uuid_media[off] <uuid>Reinvite FS in or out of media pathmod_commands
uuid_media_3p[off] <uuid>Reinvite FS in or out of media path using 3pccmod_commands
uuid_media_reneg<uuid>[ <codec_string>]Media negotiationmod_commands
uuid_outgoing_answer<uuid>Answer outgoing channelmod_commands
uuid_park<uuid>Park channelmod_commands
uuid_pause<uuid> <on|off>Pause media on a channelmod_commands
uuid_phone_event<uuid>Send an event to the phonemod_commands
uuid_pre_answer<uuid>pre_answermod_commands
uuid_preprocess<>Pre-process Channelmod_commands
uuid_record<uuid> [start|stop|mask|unmask] <path> [<limit>]Record session audiomod_commands
uuid_recovery_refresh<uuid> <uri>Send a recovery_refreshmod_commands
uuid_recv_dtmf<uuid> <dtmf_data>Receive dtmf digitsmod_commands
uuid_redirect<uuid> <uri>Send a redirectmod_commands
uuid_ring_ready<uuid> [queued]Sending ringing to a channelmod_commands
uuid_send_dtmf<uuid> <dtmf_data>Send dtmf digitsmod_commands
uuid_send_info<uuid> [<mime_type> <mime_subtype>] <message>Send info to the endpointmod_commands
uuid_send_message<uuid> <message>Send MESSAGE to the endpointmod_commands
uuid_send_tdd<uuid> <text>send tdd data to a uuidmod_spandsp
uuid_session_heartbeat<uuid> [sched] [0|<seconds>]uuid_session_heartbeatmod_commands
uuid_set_media_stats<uuid>Set media statsmod_commands
uuid_setvar<uuid> <var> [value]Set a variablemod_commands
uuid_setvar_multi<uuid> <var>=<value>;<var>=<value>...Set multiple variablesmod_commands
uuid_simplify<uuid>Try to cut out of a call path / attended xfermod_commands
uuid_transfer<uuid> [-bleg|-both] <dest-exten> [<dialplan>] [<context>]Transfer a sessionmod_commands
uuid_video_bitrate<uuid> <bitrate>Send video bitrate req.mod_commands
uuid_video_refresh<uuid>Send video refresh.mod_commands
uuid_write_pnggrab an image from a callmod_png
uuid_zombie_exec<uuid>Set zombie_exec flag on the specified uuidmod_commands
valet_info[<lot name>]Valet Parking Infomod_valet_parking
version[short]Versionmod_commands
vertosyntaxVerto APImod_verto
verto_contactuser@domainGenerate a verto endpoint dialstringmod_verto
vm_boxcount[profile/]<user>@<domain>[|[new|saved|new-urgent|saved-urgent|all]]vm_boxcountmod_voicemail
vm_delete<id>@<domain>[/profile] [<uuid>]vm_deletemod_voicemail
vm_fsdb_auth_login<profile> <domain> <user> <password>vm_fsdb_auth_loginmod_voicemail
vm_fsdb_msg_count<format> <profile> <domain> <user> <folder>vm_fsdb_msg_countmod_voicemail
vm_fsdb_msg_delete<profile> <domain> <user> <uuid>vm_fsdb_msg_deletemod_voicemail
vm_fsdb_msg_email<profile> <domain> <user> <uuid> <email>vm_fsdb_msg_emailmod_voicemail
vm_fsdb_msg_forward<profile> <domain> <user> <uuid> <dst_domain> <dst_user> [prepend_file_location]vm_fsdb_msg_forwardmod_voicemail
vm_fsdb_msg_get<format> <profile> <domain> <user> <uuid>vm_fsdb_msg_getmod_voicemail
vm_fsdb_msg_list<format> <profile> <domain> <user> <folder> <filter> [msg-order = ASC | DESC]vm_fsdb_msg_listmod_voicemail
vm_fsdb_msg_purge<profile> <domain> <user>vm_fsdb_msg_purgemod_voicemail
vm_fsdb_msg_save<profile> <domain> <user> <uuid>vm_fsdb_msg_savemod_voicemail
vm_fsdb_msg_undelete<profile> <domain> <user> <uuid>vm_fsdb_msg_undeletemod_voicemail
vm_fsdb_pref_greeting_get<format> <profile> <domain> <user> [slot]vm_fsdb_pref_greeting_getmod_voicemail
vm_fsdb_pref_greeting_set<profile> <domain> <user> <slot> [file-path]vm_fsdb_pref_greeting_setmod_voicemail
vm_fsdb_pref_password_set<profile> <domain> <user> <password>vm_fsdb_pref_password_setmod_voicemail
vm_fsdb_pref_recname_set<profile> <domain> <user> <file-path>vm_fsdb_pref_recname_setmod_voicemail
vm_inject[group=<group>[@domain]|domain=<domain>|<box>[@<domain>]] <sound_file> [<cid_num>] [<cid_name>]vm_injectmod_voicemail
vm_list<id>@<domain>[/profile] [xml]vm_listmod_voicemail
vm_prefs[profile/]<user>@<domain>[|[name_path|greeting_path|password]]vm_prefsmod_voicemail
vm_read<id>@<domain>[/profile] <read|unread> [<uuid>]vm_readmod_voicemail
voicemailrss [<host> <port> <uri> <user> <domain>] | [load|unload|reload] <profile> [reloadxml]voicemailmod_voicemail
voicemail_inject[group=<group>[@domain]|domain=<domain>|<box>[@<domain>]] <sound_file> [<cid_num>] [<cid_name>]voicemail_injectmod_voicemail
xml_flush_cache<id> <key> <val>Clear xml cachemod_commands
xml_locate[root | <section> <tag> <tag_attr_name> <tag_attr_val>]Find some xmlmod_commands
xml_wrap<command> <args>Wrap another api command in xmlmod_commands

FreePBX 13 установка

$
0
0

FreePBX 13 установка

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

FreePBX

$
0
0

FreePBX

Настройка Asterisk FreePBX. Подробное описание модулей. Скриншоты.

Настройка FreePBX

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

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

Admin modules

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

Applications

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

Connectivity

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

  • Inbound Routes - Наведение входящих вызовов , DID.
  • Outbound Routes - Маршрутизирует исходящие вызовы по требуемым транкам.
  • Zap Channel DIDs - Назначение DID для конкретных ZAP каналов.
  • Trunks - Управляет ZAP (Dahdi), SIP протокол, IAX каналами для выхода в общую телефонную сеть, или соединения АТС.

Settings Modules

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

UCP

Примеры

Уязвимости

Устаревшее

Asterisk-cdr-viewer

$
0
0

Asterisk-cdr-viewer

Веб интерфейс статистики вызовов Asterisk (Call Detail Recordings). Используется, также, в модуле статистики FreePBX. Прекрасное приложение, для просмотра статистики и прослушивания записей.

Установка Asterisk Cdr Veiwer

Страница программы на Google Code

На Github

Скачайте исходный код в директорию веб сервера:

cd /var/www/html
wget https://github.com/g613/asterisk-cdr-viewer/raw/master/asterisk-cdr-viewer-latest.tgz

Распакуйте архив:

  tar -xzvf asterisk-cdr-viewer-*.tgz 

Скопируйте конфиг в директорию настроек веб вервера:

cp asterisk-cdr-viewer/contrib/httpd/asterisk-cdr-viewer.conf /etc/httpd/conf.d/
//asterisk-cdr-viewer.conf//

Настройте алиас acdr для директории asterisk-cdr-veiwer:

Если аутентификация не требуется, можно пропустить этот пункт.

Alias /acdr/ "/var/www/html/asterisk-cdr-viewer/"<Location "/acdr/">
        AuthName "Asterisk-CDR-Stat"
        AuthType Basic
        AuthUserFile /var/www/html/asterisk-cdr-viewer/.htpasswd
        AuthGroupFile /dev/null
        require valid-user</Location>

Вернитесь в директорию программы:

  cd /var/www/html/asterisk-cdr-viewer

При помощи команды htpasswd задайте имя пользователя и пароль для аутентификации в интерфейсе.

  htpasswd -b .htpasswd user password

Перезапустите httpd:

  service restart httpd 

config.inc.php

Настройка подключения к базе данных и настройки веб интерфейса производятся в файле /var/www/asterisk-cdr-viewer/include/config.inc.php

Откройте интерфейс в вашем любимом браузере:
http://your_ip/acdr/index.php

Asterisk CDR MySQL

Создание таблицы MySQL для данных и конфигурация Asterisk.

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

touch asteriskcdrdb.sql

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

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

Создайте базу данных:

 mysqladmin create asteriskcdrdb

Создайте таблицу cdr при помощи файла asteriskcdrdb:

 mysql asteriskcdrdb < asteriskcdrdb.sql

Задайте привилегии для БД, где dbuser - ваш пользователь, а DB_PASSWORD - пароль.

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

Настройка Asterisk cdr_mysql.conf

Нативный драйвер MySQL в Asterisk. Также вы можете использовать ODBC.или adaptive ODBC.

Подробнее о настройке cdr в Asterisk.

Отредактируйте файл /etc/asterisk/cdr_mysql.conf в соответствии с заданным логином и паролем бд.

[global]
hostname=localhost
dbname=asteriskcdrdb
table=cdr
password=DB_PASSWORD
user=dbuser
;port=3306
;sock=/tmp/mysql.sock
;timezone=UTC ; Previously called usegmtime

Убедитесь что модули cdr_mysql загружены:

localhost*CLI> module show like mysql
Module                         Description                              Use Count
cdr_mysql.so                   MySQL CDR Backend                        0
res_config_mysql.so            MySQL RealTime Configuration Driver      0
app_mysql.so                   Simple Mysql Interface                   0
3 modules loaded

Настройка записи разговоров

Чтобы ссылки на файлы отображались в интерфейсе, укажите директорию записи и формат файла в конфиге config.inc.php

  • $system_monitor_dir = '/var/spool/asterisk/monitor'
  • $system_audio_format = 'wav'

В диалплане Asterisk, запись производится при помощи команды MixMonitor

[macro-monitor]
exten => s,1,Set(MONITOR_FILE=/var/spool/asterisk/monitor/${UNIQUEID})
exten => s,n,MixMonitor(${MONITOR_FILE}.wav,b)

Проверка. Выберете 5 последних строк из таблицы cdr:

  select * from cdr ORDER BY calldate DESC LIMIT 5;

Модификация Asterisk-CDR-Viewer

Простейшая настройка

..viewer/inc/config.inc.php

 $system_column_name = 'recordingfile';
 $system_storage_format = 0;
 $system_monitor_dir = '/var/spool/asterisk/monitor/mp3';

recordingfile

recordingfile

mysql> select recordingfile  from cdr ORDER BY calldate DESC LIMIT 1;
+--------------------+
| recordingfile      |
+--------------------+
| 1466591784.246.mp3 |
+--------------------+
1 rows in set (0.00 sec)

Запись вызовов в mp3

[from-om]
exten => _X.,1,GoSub(sub-monitor,s,1(${EXTEN}))
exten => _X.,n,Dial(PJSIP/${EXTEN}@sip_trunk,,)
[sub-monitor]
exten => s,1,Set(WAV=/var/spool/asterisk/monitor/${UNIQUEID})
exten => s,n,Set(MP3=/var/spool/asterisk/monitor/mp3/${UNIQUEID})
exten => s,n,Set(monopt=nice -n 19 /usr/local/bin/lame -b 32  --silent "${WAV}.wav"  "${MP3}.mp3" && rm -f "${WAV}.wav" && chmod o+r "${MP3}.mp3")
exten => s,n,Set(CDR(recordingfile)=${UNIQUEID}.mp3)
exten => s,n,Set(CDR(userfield)=${ARG1})
exten => s,n,MixMonitor(${WAV}.wav,b,${monopt})  
exten => s,n,return

директория /var/spool/asterisk/monitor/mp3 должна быть создана.

Установлен ли Lame? Проверить:

  which lame
 /usr/local/bin/lame

Tips&Tricks

Asterisk: queues.conf

$
0
0

Asterisk: queues.conf

Настройка очереди входящих вызовов колл центра. Конфигурация очереди осуществляется в файле /etc/asterisk/queues.conf.

Базовые настройки и операции очереди

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

/etc/asterisk/queues.conf

[queue_01]
strategy = ringall

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

 exten => s,1,Queue(queue_01)

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

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

queue reload

*CLI> queue reload
members     parameters  rules       all

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

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

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

/etc/asterisk/queues.conf

[queue_01]
strategy = ringall
member = PJSIP/2777

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

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

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

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

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

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

Рассмотрим подробно параметры очередей (queues) Asterisk

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

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

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

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

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

 autofill = yes

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

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

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

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

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

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

 shared_lastcall=no
Negative_penalty_invalid

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

 negative_penalty_invalid = no
log_membername_as_agent

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

 log_membername_as_agent = no

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

 [queuename]
Musicclass

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

 musicclass = default
announce

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

 announce = file_to_play
strategy

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

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

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

 strategy = ringall
servicelevel

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

 servicelevel=30

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

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

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

 context = context_name
penaltymemberslimit

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

 penaltymemberslimit = 5

Timeout

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

 Queue(queuename,t,,,45)

queue timing options

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

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

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

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

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

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

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

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

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

 weight=0
wrapuptime

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

 wrapuptime=0
autofill

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

 autofill=yes|no
autopause

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

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

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

 autopausedelay=60
Autopausebusy

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

autopausebusy=no
Autopauseunavail

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

 autopauseunavail=no
maxlen

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

maxlen=0
variables

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

 Local/2666@from-queue/n

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

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

пример

пример

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

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

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

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

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

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

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

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

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

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

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

 announce-frequency = 90
min-announce-frequency

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

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

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

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

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

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

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

 relative-periodic-announce=no
announce-holdtime

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

queue-less-than

queue-quantity1

queue-quantity2

periodic-announce

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

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

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

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

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

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

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

 joinempty = paused,inuse,invalid

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

 leavewhenempty = inuse,ringing

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

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

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

 reportholdtime = no
ringinuse

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

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

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

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

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

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

 ringinuse = no
memberdelay

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

  memberdelay = 0
timeoutrestart

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

 timeoutrestart = no
defaultrule

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

 defaultrule = myrule
Members

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Страницы с тегом 'queue':

Команда Asterisk: AddQueueMember

Asterisk: PauseQueueMember

Команда Asterisk: Queue

Asterisk: QueueLog

Asterisk: RemoveQueueMember

Asterisk: UnpauseQueueMember

Asterisk queuerules.conf

function 'QUEUE_EXISTS'

function 'QUEUE_MEMBER'

function 'QUEUE_MEMBER_LIST'

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

function 'QUEUE_WAITING_COUNT'

Asterisk: queue_log в MySQL через unixODBC

FreePBX Queues

Asterisk Call Center Stats

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

$
0
0

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

asterisk -vvvvvv

Командная строка является мощным инструментом для мониторинга и управления работой Asterisk PBX. При запуске asterisk с флагом -r или -c, появиться следующие приглашение:

# asterisk   -vvvr
*CLI> 

Количество 'v' в параметрах задает порог отображаемой информации в консоли для данного подключения. Комбинация -vvvr задаст verbose level 8. Интерфейс командной строки Asterisk имеет свой конфиг - cli.conf

Введите core show helpи нажмите enter для получения полного списка команд:

Командная строка поддерживает вывод доступных команд по неполному вводу нажатием 'Tab':

Для получения дополнительной информации о конкретной команде, вы можете ввести core show help<command>. Например:

*CLI> core show help manager
                manager reload Reload manager configurations
    manager set debug [on|off] Show, enable, disable debugging of the manager code
          manager show command Show a manager interface command
         manager show commands List manager interface commands
        manager show connected List connected manager interface users
           manager show eventq List manager interface queued events
         manager show settings Show manager global settings
            manager show users List configured manager users
             manager show user Display information on a specific manager user
*CLI> 

Вот некоторые полезные команды:

Core

  • core set verbose <0-9> - порог отображаемой информации.
  • core reload - перечитать все конфиги
  • core restart gracefullyперезагрузить Asterisk по завершению всех текущих вызовов (свободные каналы закрываются)
  • core restart now Restart перезагрузить Asterisk немедленно
  • core restart when convenientперезагрузить Asterisk если нет разговоров

SIP

  • sip show peersпоказать существующие SIP екстеншены и их статус
  • sip show peer 100 отображает информацию о конкретном SIP екстеншене
  • sip show registryотображает состояние зарегистрированных транков

PJSIP

  • pjsip set logger {on|off|host} – Enable/Disable PJSIP Logger Output
  • pjsip show aors– Show PJSIP Aors
   Aor:  <Aor..............................................>  <MaxContact>
    Contact:  <Aor/ContactUri.................................>  <Status....>  <RTT(ms)..>
 =========================================================================================

      Aor:  1000                                                 1
    Contact:  1000/sip:1000@192.168.1.32:5060;transport=UDP;rin  Avail               9.645

      Aor:  1001                                                 1
  • pjsip show aor– Show PJSIP Aor
localhost*CLI> pjsip show aor 1000

      Aor:  <Aor..............................................>  <MaxContact>
    Contact:  <Aor/ContactUri.................................>  <Status....>  <RTT(ms)..>
 =========================================================================================

      Aor:  1000                                                 1
    Contact:  1000/sip:1000@192.168.1.32:5060;transport=UDP;rin  Avail              13.017


 ParameterName        : ParameterValue
 ==========================================================================================
 authenticate_qualify : false
 contact              : sip:1000@192.168.1.32:5060;transport=UDP;rinstance=56471484e9cd2c68
 default_expiration   : 3600
 mailboxes            :
 max_contacts         : 1
 maximum_expiration   : 7200
 minimum_expiration   : 60
 outbound_proxy       :
 qualify_frequency    : 60
 remove_existing      : true
 support_path         : false

DAHDI

  • dahdi show statusсостояние портов dahdi
  • dahdi show channelsпоказать существующие каналы
    • pri show spansотобразить объекты pri и их статус.

Кодеки

  • core show translation recalcрасчет перекодировки кодеков

core show translation recalc

core show translation recalc

*CLI> core show translation recalc
         Recalculating Codec Translation (number of sample seconds: 1)

         Translation times between formats (in microseconds) for one second of data
          Source Format (Rows) Destination Format (Columns)

            gsm  ulaw  alaw  g726 adpcm  slin lpc10  ilbc g726aal2  g722 slin16 testlaw slin12 slin24 slin32 slin44 slin48 slin96 slin192
      gsm     - 15000 15000 15000 15000  9000 15000 15000    15000 17250  17000   15000  17000  17000  17000  17000  17000  17000   17000
     ulaw 15000     -  9150 15000 15000  9000 15000 15000    15000 17250  17000   15000  17000  17000  17000  17000  17000  17000   17000
     alaw 15000  9150     - 15000 15000  9000 15000 15000    15000 17250  17000   15000  17000  17000  17000  17000  17000  17000   17000
     g726 15000 15000 15000     - 15000  9000 15000 15000    15000 17250  17000   15000  17000  17000  17000  17000  17000  17000   17000
    adpcm 15000 15000 15000 15000     -  9000 15000 15000    15000 17250  17000   15000  17000  17000  17000  17000  17000  17000   17000
     slin  6000  6000  6000  6000  6000     -  6000  6000     6000  8250   8000    6000   8000   8000   8000   8000   8000   8000    8000
    lpc10 15000 15000 15000 15000 15000  9000     - 15000    15000 17250  17000   15000  17000  17000  17000  17000  17000  17000   17000
     ilbc 15000 15000 15000 15000 15000  9000 15000     -    15000 17250  17000   15000  17000  17000  17000  17000  17000  17000   17000
 g726aal2 15000 15000 15000 15000 15000  9000 15000 15000        - 17250  17000   15000  17000  17000  17000  17000  17000  17000   17000
     g722 15600 15600 15600 15600 15600  9600 15600 15600    15600     -   9000   15600  17500  17000  17000  17000  17000  17000   17000
   slin16 14500 14500 14500 14500 14500  8500 14500 14500    14500  6000      -   14500   8500   8000   8000   8000   8000   8000    8000
  testlaw 15000 15000 15000 15000 15000  9000 15000 15000    15000 17250  17000       -  17000  17000  17000  17000  17000  17000   17000
   slin12 14500 14500 14500 14500 14500  8500 14500 14500    14500 14000   8000   14500      -   8000   8000   8000   8000   8000    8000
   slin24 14500 14500 14500 14500 14500  8500 14500 14500    14500 14500   8500   14500   8500      -   8000   8000   8000   8000    8000
   slin32 14500 14500 14500 14500 14500  8500 14500 14500    14500 14500   8500   14500   8500   8500      -   8000   8000   8000    8000
   slin44 14500 14500 14500 14500 14500  8500 14500 14500    14500 14500   8500   14500   8500   8500   8500      -   8000   8000    8000
   slin48 14500 14500 14500 14500 14500  8500 14500 14500    14500 14500   8500   14500   8500   8500   8500   8500      -   8000    8000
   slin96 14500 14500 14500 14500 14500  8500 14500 14500    14500 14500   8500   14500   8500   8500   8500   8500   8500      -    8000
  slin192 14500 14500 14500 14500 14500  8500 14500 14500    14500 14500   8500   14500   8500   8500   8500   8500   8500   8500       -

ещё

  • module show like mysqlотобразить загруженные модули содержащие в названии mysql
  • pri set debug {on|off} span 1 Enables PRI debugging on a span
  • rtp set debug {on|off|ip} Enable/Disable RTP debugging

Простые CLI приемы

Есть несколько трюков, которые помогут вам в интерфейсе командной строки Asterisk. Очень удобно завершение неполного ввода клавишей TAB. Если вы введете начало команды и нажмите клавишу Tab, Asterisk попытается завершить имя команды, или покажет возможные команды, которые начинаются с буквы, которые Вы ввели. Например, введите 'co', а затем нажмите клавишу Tab.

 localhost*CLI> co
 confbridge  config      core
 localhost*CLI> co

Теперь наберите 'cor', и нажмите TAB снова. На этот раз Asterisk завершит слово, т.к. 'core' является единственной командой, которая начинается с 'cor'. Этот трюк также работает с под-командами. Например, наберите 'core show' и нажмите TAB. (Возможно, вам придется дважды нажать вкладку, если вы не поставили пробел после слова 'show'.) Asterisk покажет вам все под-команды.

localhost*CLI> core show [Tab]
application     applications    calls           channel         channels
channeltype     channeltypes    codec           codecs          config
file            function        functions       hanguphandlers  help
hint            hints           image           license         profile
settings        sound           sounds          switches        sysinfo
taskprocessors  threads         translation     uptime          version
warranty
localhost*CLI> core show

Повторение предыдущих команд.

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

Run Linux Shell Commands from The Asterisk CLI

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

 localhost*CLI> !whoami
 root
 localhost*CLI>

Asterisk -rx

Иногда удобно дать команду, или получить информацию, не подключаясь непосредственно к консоли. Для этого используется ключ '-x'.
Например, получить список sip пиров:

# asterisk -rx 'sip show peers'

Команда может заключаться, как в одинарные, так и в двойные кавычки.

Также можно отфильтровать полученные данные командой grep:

 # asterisk -rx "sip show peers" | grep unreachebale

logger.conf

Консоль является объектом модуля логов в Asterisk. Что должно отображаться в консоли при подключении, настраивается в конфиге logger.conf

Asterisk: настройка и установка

Asterisk logger.conf

$
0
0

Asterisk logger.conf

Настройка логов Asterisk. В данном файле настраивается журналирование событий Asterisk в файлы, консоль и syslog linux. Для применения настроек выполните команду «logger reload» в консоли (CLI) Asterisk.

Глобальные настройки логов

[general]

dateformat

настройка отображения даты и времени в сообщениях отладки (debug) в данном примере использован ISO 8601 формат даты (yyyy-mm-dd HH:MM:SS) См. также strftime(3) Linux спецификацию формата.
Секундные доли могут быть использованы в данном поле. Используйте %1qдля отображения десятых или %2qдля отображения сотых долей и тд.

 dateformat=%F %T       ; ISO 8601 
 dateformat=%F %T.%3q   ; с миллисекундами
use_callids

Сохранять Asterisk Unique Call-Id (по умолчанию yes)

 use_callids = no
appendhostname

Добавить имя хоста к имени лог файла.

 appendhostname = yes
queue_log

Регистрировать события очереди. (по умолчанию yes).

 queue_log = no
queue_log_to_file

Регистрировать события очереди в файл (по умолчанию no). События очереди могут сохраняться в реалтайм хранилище (базе данных). Сохранять события и в файл тоже, несмотря на то, что в extconfig.confсуществует конфигурация типа: queue_log ⇒ odbc,asterisk

 queue_log_to_file = yes
queue_log_name

Задайте имя файла лога очереди (по умолчанию queue_log)

 queue_log_name = queue_log
queue_log_realtime_use_gmt

Когда используется Realtime лог очереди (а вы замечали, что queue в русской ракладке - «йгугу»?)
сохранять GMT дату, а не локальное время. По умолчанию 'no'.

  queue_log_realtime_use_gmt = yes

Ротация логов Asterisk

  • none: Не применять ротацию вообще. Заметьте, логи Asterisk могут расти очень быстро.
  • sequential: Переименовать архивные логи таким образом, чтобы новые нумеровались по возрастающей. Это поведение по умолчанию.
  • rotate: Перемешивать файлы таким образом, чтобы старые имели более высокий порядковый номер.
  • timestamp: Переименовать логфайл в соответствии с датой, вместо порядкового номера.
 rotatestrategy = rotate

Выполнить команду Linux после ротации. В примере, предпоследний файл с порядковым номером 2 (стратегия rotate) будет заархивирован.

 exec_after_rotate=gzip -9 ${filename}.2
;
; 
;
; In this file, you configure logging to files or to
; the syslog system.
;
; "logger reload" at the CLI will reload configuration
; of the logging system.

[general]
;
; Customize the display of debug message time stamps
; this example is the ISO 8601 date format (yyyy-mm-dd HH:MM:SS)
;
; see strftime(3) Linux manual for format specifiers.  Note that there is also
; a fractional second parameter which may be used in this field.  Use %1q
; for tenths, %2q for hundredths, etc.
;
;dateformat=%F %T       ; ISO 8601 date format
;dateformat=%F %T.%3q   ; with milliseconds
;
;
; This makes Asterisk write callids to log messages
; (defaults to yes)
;use_callids = no
;
; This appends the hostname to the name of the log files.
;appendhostname = yes
;
; This determines whether or not we log queue events to a file
; (defaults to yes).
;queue_log = no
;
; Determines whether the queue_log always goes to a file, even
; when a realtime backend is present (defaults to no).
;queue_log_to_file = yes
;
; Set the queue_log filename
; (defaults to queue_log)
;queue_log_name = queue_log
;
; When using realtime for the queue log, use GMT for the timestamp
; instead of localtime.  The default of this option is 'no'.
;queue_log_realtime_use_gmt = yes
;
; Log rotation strategy:
; none:  Do not perform any logrotation at all.  You should make
;        very sure to set up some external logrotate mechanism
;        as the asterisk logs can get very large, very quickly.
; sequential:  Rename archived logs in order, such that the newest
;              has the highest sequence number [default].  When
;              exec_after_rotate is set, ${filename} will specify
;              the new archived logfile.
; rotate:  Rotate all the old files, such that the oldest has the
;          highest sequence number [this is the expected behavior
;          for Unix administrators].  When exec_after_rotate is
;          set, ${filename} will specify the original root filename.
; timestamp:  Rename the logfiles using a timestamp instead of a
;             sequence number when "logger rotate" is executed.
;             When exec_after_rotate is set, ${filename} will
;             specify the new archived logfile.
;rotatestrategy = rotate
;
; Run a system command after rotating the files.  This is mainly
; useful for rotatestrategy=rotate. The example allows the last
; two archive files to remain uncompressed, but after that point,
; they are compressed on disk.
;
; exec_after_rotate=gzip -9 ${filename}.2
;
;
; For each file, specify what to log.
;
; For console logging, you set options at start of
; Asterisk with -v for verbose and -d for debug
; See 'asterisk -h' for more information.
;
; Directory for log files is configures in asterisk.conf
; option astlogdir
;
[logfiles]
;
; Format is:
;
; logger_name => [formatter]levels
;
; The name of the logger dictates not only the name of the logging
; channel, but also its type. Valid types are:
;   - 'console'  - The root console of Asterisk
;   - 'syslog'   - Linux syslog, with facilities specified afterwards with
;                  a period delimiter, e.g., 'syslog.local0'
;   - 'filename' - The name of the log file to create. This is the default
;                  for log channels.
;
; Filenames can either be relative to the standard Asterisk log directory
; (see 'astlogdir' in asterisk.conf), or absolute paths that begin with
; '/'.
;
; An optional formatter can be specified prior to the log levels sent
; to the log channel. The formatter is defined immediately preceeding the
; levels, and is enclosed in square brackets. Valid formatters are:
;   - [default] - The default formatter, this outputs log messages using a
;                 human readable format.
;   - [json]    - Log the output in JSON. Note that JSON formatted log entries,
;                 if specified for a logger type of 'console', will be formatted
;                 per the 'default' formatter for log messages of type VERBOSE.
;                 This is due to the remote consoles intepreting verbosity
;                 outside of the logging subsystem.
;
; Log levels include the following, and are specified in a comma delineated
; list:
;    debug
;    notice
;    warning
;    error
;    verbose(<level>)
;    dtmf
;    fax
;    security
;
; Verbose takes an optional argument, in the form of an integer level.
; Verbose messages with higher levels will not be logged to the file.  If
; the verbose level is not specified, it will log verbose messages following
; the current level of the root console.
;
; Special level name "*" means all levels, even dynamic levels registered
; by modules after the logger has been initialized (this means that loading
; and unloading modules that create/remove dynamic logger levels will result
; in these levels being included on filenames that have a level name of "*",
; without any need to perform a 'logger reload' or similar operation).
; Note that there is no value in specifying both "*" and specific level names
; for a filename; the "*" level means all levels.  The only exception is if
; you need to specify a specific verbose level. e.g, "verbose(3),*".
;
; We highly recommend that you DO NOT turn on debug mode if you are simply
; running a production system.  Debug mode turns on a LOT of extra messages,
; most of which you are unlikely to understand without an understanding of
; the underlying code.  Do NOT report debug messages as code issues, unless
; you have a specific issue that you are attempting to debug.  They are
; messages for just that -- debugging -- and do not rise to the level of
; something that merit your attention as an Asterisk administrator.  Debug
; messages are also very verbose and can and do fill up logfiles quickly;
; this is another reason not to have debug mode on a production system unless
; you are in the process of debugging a specific issue.
;
;debug => debug
;security => security
console => notice,warning,error
;console => notice,warning,error,debug
messages => notice,warning,error
;full => notice,warning,error,debug,verbose,dtmf,fax
;
;full-json => [json]debug,verbose,notice,warning,error,dtmf,fax
;
;syslog keyword : This special keyword logs to syslog facility
;
;syslog.local0 => notice,warning,error
;

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

$
0
0

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

Функция Asterisk QUEUE_VARIABLESвозвращает предустановленные переменные с информацией о состоянии очереди.

Описание

Доступны перечисленные ниже переменные.
Возвращает '0' если очередь найдена и setqueuevar определена, '-1' в противном случае.

Синтаксис

QUEUE_VARIABLES(queuename)

Аргументы

  • queuename
  • variables:
    • QUEUEMAX - Максимально разрешенное кол-во вызовов в очереди.
    • QUEUESTRATEGY - Стратегия очереди.
    • QUEUECALLS - Кол-во вызовов в очереди в данный момент.
    • QUEUEHOLDTIME - Среднее время ожидания в очереди на данный момент.
    • QUEUECOMPLETED - Кол-во отвеченных вызовов.
    • QUEUEABANDONED - Кол-во отвергнутых (неотвеченных) вызовов.
    • QUEUESRVLEVEL - Заданный уровень обслуживания очереди.
    • QUEUESRVLEVELPERF - Текущий уровень обслуживания очереди.
Пример:

Запишем в БД текущее состояние очереди при поступлении нового вызова в очередь.
Ключи Fcкоманды QUEUEвелят продолжить выполнения диалплана, если вызывающий или вызываемый, соответственно, завершают вызов.

exten => _488X,1,Queue(${EXTEN},Fc)
   same => n,set(QUEUE_VARIABLES(${EXTEN})) 
   same => n,Goto(queue-variables,s,1)

[queue-variables]     
exten => s,1,Noop()    
   same => n,set(REALTIME(queue_adv,queue,${queue},queuesrvlevelperf)=${QUEUESRVLEVELPERF})
   same => n,set(REALTIME(queue_adv,queue,${queue},queueabandoned)=${QUEUEABANDONED})
   same => n,set(REALTIME(queue_adv,queue,${queue},queuecompleted)=${QUEUECOMPLETED})
   same => n,set(REALTIME(queue_adv,queue,${queue},queueholdtime)=${QUEUEHOLDTIME})
   same => n,set(REALTIME(queue_adv,queue,${queue},queuecalls)=${QUEUECALLS})
   same => n,hangup

вывод консоли

вывод консоли

    -- Executing [4884@from-fs-pjsip:2] Set("PJSIP/fs_pjsip-00000028", "QUEUE_VARIABLES(4884)") in new stack
[2016-10-13 15:38:25] WARNING[30354][C-00000029]: pbx_variables.c:1096 pbx_builtin_setvar: Set requires an '=' to be a valid assignment.
    -- Executing [4884@from-fs-pjsip:3] Set("PJSIP/fs_pjsip-00000028", "ARRAY(_queue,queuecalls,queueholdtime,queuecompleted,queueabandoned,queuesrvlevelperf)=4884,0,8,12,1,33.3") in new stack
    -- Executing [4884@from-fs-pjsip:4] Goto("PJSIP/fs_pjsip-00000028", "queue-variables,s,1") in new stack
    -- Goto (queue-variables,s,1)
    -- Executing [s@queue-variables:1] NoOp("PJSIP/fs_pjsip-00000028", "") in new stack
    -- Executing [s@queue-variables:2] Set("PJSIP/fs_pjsip-00000028", "REALTIME(queue_adv,queue,4884,queuesrvlevelperf)=33.3") in new stack
    -- Executing [s@queue-variables:3] Set("PJSIP/fs_pjsip-00000028", "REALTIME(queue_adv,queue,4884,queueabandoned)=1") in new stack
    -- Executing [s@queue-variables:4] Set("PJSIP/fs_pjsip-00000028", "REALTIME(queue_adv,queue,4884,queuecompleted)=12") in new stack
    -- Executing [s@queue-variables:5] Set("PJSIP/fs_pjsip-00000028", "REALTIME(queue_adv,queue,4884,queueholdtime)=8") in new stack
    -- Executing [s@queue-variables:6] Set("PJSIP/fs_pjsip-00000028", "REALTIME(queue_adv,queue,4884,queuecalls)=0") in new stack
    -- Executing [s@queue-variables:7] Hangup("PJSIP/fs_pjsip-00000028", "") in new stack
  == Spawn extension (queue-variables, s, 7) exited non-zero on 'PJSIP/fs_pjsip-00000028'

запись в БД

 select * from queuelog_adv;
+-------+------------+---------------+----------------+----------------+-------------------+
| queue | queuecalls | queueholdtime | queuecompleted | queueabandoned | queuesrvlevelperf |
+-------+------------+---------------+----------------+----------------+-------------------+
| 4884  | 0          | 8             | 12             | 1              | 33.3              |
+-------+------------+---------------+----------------+----------------+-------------------+
1 row in set (0.00 sec)

Asterisk: функции диалплана

Asterisk CDR - Статистика звонков

$
0
0

Asterisk CDR - Статистика звонков

CDR - детализированный отчет вызовов. Лог вызовов через ODBC: MySQL, PostgreSQL, TDS и др. Детализированные отчеты о звонках используются для выставления счетов (биллинг), анализа объемов голосового трафика или для отладки Asterisk.

Call Detail Records

Поля CDR записей

  • R/O - поле только для чтения, нет записи функцией CDR
Option Value/Example Notes
accountcode 54321 Код аккаунта присвоенный абоненту, для биллинга например. По умолчанию не задан.
src 8129981138 Идентификатор вызывающего абонента(Caller ID). Источник вызова, сохраняется автоматически. R/O
dst 111 Пункт назначения вызова.Вызываемое расширение диалплана.
dcontext from-internal Контекст назначения обработки вызова. auto, R/O
clid "Olegus" <81239981138> Caller ID вызывающего абонента в полном формате - "name" <number>. auto, R/O
channel SIP/0004F2040808-a1bc23ef Канал инициатор вызова. A-leg(side).auto, R/O
dstchannel SIP/0004F2046969-9786b0b0 Канал назначения вызова. B-Leg(side).auto, R/O
lastapp Dial Приложениеобработки вызова выполненное последним в канале. auto, R/O
lastdata SIP/0004F2046969,30,tT Данные (например 'Dial(данные)') приложения выполненного последним.auto, R/O
start 2016-05-27 12:02:00 Время поступления вызова вызова. auto, R/O
answer 2016-05-27 12:02:15 Время ответа на вызов абонентом или ответ приложения. auto, R/O
end 2016-05-27 12:08:15 Время окончания соединения.Hangup. auto, R/O
duration 195 Общая продолжительность вызова в секундах.auto, R/O
billsec 180 Продолжительность соединения в секундах с момента ответа(снятия трубки или выполнения команды Answerв диалплане).auto, R/O
disposition ANSWERED Состояние обработки вызова. Может быть: NO ANSWER, FAILED, BUSY, ANSWEREDили UNKNOWN.
amaflags DOCUMENTATION Automatic Message Accounting (AMA) flag. значения: OMIT, BILLING, DOCUMENTATION или Unknown.
userfield custom Пользовательское поле. Пусто по умолчанию, назначается в диалплане. set(CDR(userfield)=<value>). R/W
uniqueid 1288332400.1 Уникальный идентификатор канала. R/O

Помимо поля userfieldвы можете создавать собственные CDR переменные или модифицировать стандартные.

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

 exten => 177,1,Verbose(Call start time: ${CDR(start)})
       same => n,Set(CDR(userfield)=red_eyes)

Также можно добавить собственные поля:

   exten => 177,1,NoOp()
       same => n,Set(CDR(mycustomfield)=greentea)
       same => n,Verbose(I need some more ${CDR(mycustomfield)})

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

Приложения и функции CDR

Команды и функции диалплана для работы с CDR.

  • ForkCDR: Разделить запись CDR текущего канала .
  • NoCDR: Не сохранять CDR для текущего вызова.
  • ResetCDR: Сбросить CDR для текущего канала.
  • function 'CDR': Задать пользовательское значение CDR в канале. Не работает для Read Onlyполей CDR.

cdr.conf

Содержит общие (глобальные) параметры CDR и конфигурацию бакендов cdr_scvи cdr_radius.
Файл конфигурации cdr.conf

Option Value/Example Notes
enable yes Включить лог CDR. По умолчанию включено.
unanswered no Сохранять или нет информацию о неотвеченных вызовах. Не касается внешних вызовов. О них сохраняется полная информация, независимо от значения данной опции.
endbeforehexten no Закрыть и сохранить запись CDR до выполнения расширения 'h' (hangup). Если значение - 'no', закрытие CDR произойдет, только по завершению всех шагов диалплана. Если - 'yes', при завершении вызова, независимо от того продолжается выполнение диалплана в контексте или нет
initiatedseconds no По умолчанию 'billsec' вычисляется, просто как разница 'end' минус 'answer' в секундах. Включение опции initiatedseconds=yes, укажет Asterisk использовать точные значения до микросекунд
batch no Записывать CDR группой, вместо записи каждого вызова отдельно. Снижает нагрузку на Asterisk. Зависит от перечисленных ниже опций.
size 100 Кол-во строк CDR в буфере, при достижении которого, будет произведена запись.
time 300 Предел времени хранения данных в буфере. Запись будет произведена, независимо от порога строк в буфере, заданного параметром size.
scheduleronly no Set whether CDR batch processing should be done by spawning a new thread, or within the context of the CDR batch scheduler. The default value is no, and we recommend not changing it.
safeshutdown yes Блокировать остановку Asterisk, пока буфер не очищен (данные сохранены).Предотвращает потерю данных, при корректномвыключении Asterisk.

backends

Модули баз данных предоставляют различные бакенды для записи CDR. Все они требуют специфических настроек.

Проверка подключенных backends: CLI>cdr show status

Call Detail Record (CDR) settings
----------------------------------
  Logging:                    Enabled
  Mode:                       Simple
  Log unanswered calls:       No
  Log congestion:             No

* Registered Backends
  -------------------
    mysql
    Adaptive ODBC
    cdr-custom

cdr_adaptive_odbc

Как следует из названия, модуль cdr_adaptive_odbc сохраняет CDR в базу данных через ODBC.
«adaptive» в данном случае означает, что она пытается приспособиться к структуре таблицы: нет статической структуры таблиц, которые должны быть использованы с этим модулем.
Когда модуль загружен (или при перезагрузке), он читает структуру таблицы. Он ищет имя столбца, которому соответствует переменная CDR.
Это относится как к встроенным CDR переменным, так и к пользовательским переменным.
Например, чтобы передавать данные из встроенной переменной CDR channel, в таблице базы данных должен быть столбец channel.

пример:

Добавим в кастомную CDR переменную useragentзначение равное номеру SIP телефона.

exten ⇒ 177,n,Set(CDR(useragent)=${CHANNEL(useragent)})

Чтобы данные переменной useragentбыли занесены через cdr_adaptive_odbc, надо создать столбец useragentв БД.

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

[mytable]
connection = asterisk
table = asterisk_cdr
Option Value/Example Notes
connection asterisk База данных. Параметры соединения настраиваются в Asterisk: res_odbc.conf. Обязательный параметр.
table asterisk_cdr Имя таблицы БД. Обязательное поле.
usegmtime no Использовать время GMT вместо локального времени. По умолчанию -'no'.

В дополнение к вышеперечисленным опциям cdr_adaptive_odbc.conf, можно задать ещё несколько.

Обычно, CDR ищет столбец соответствующий имени переменной. Параметр aliasпозволяет соотнести имя переменной с отличным от него именем столбца.

 alias <CDR variable> => <column name>

Например:

 alias src => source

Также, можно отфильтровать определенное содержимое.

  filter <CDR variable> => <content>

Например:

  filter accountcode => 321

И наконец, можно добавить статические данные, дополнительно к поступающим из CDR.

 static <"Static Content Goes Here"> => <column name>

Например:

static "My Data" => my_id

cdr_csv

Модуль cdr_csvпростейший бакенд, сохраняющий CDR данные в CSVфайл, разделяя запятой.
Конфигурация находится в файле cdr.conf

Для работы не требует конфигурации, тем не менее есть несколько параметров:

Option defaultNotes
usegmtime no Сохранять время GMT вместо локального. По умолчанию - no.
loguniqueid no Сохранять uniqueid переменную CDR. По умолчанию - no
loguserfield no Сохранять userfield CDR переменную . По умолчанию - 'no'.
accountlogs yes Создавать отдельный csv файл для каждой переменной accountcode. По умолчанию - yes.

Порядок CDR переменных в CSV файле созданном модулем CDR_CSV:

<accountcode>,<src>,<dst>,<dcontext>,<clid>,<channel>,<dstchannel>,<lastapp>, <lastadata>,<start>,<answer>,<end>,<duration>,<billsec>,<disposition>, <amaflags>[,<uniqueid>][,<userfield>]
cdr_custom

Данный модуль используется для создания пользовательского (custom) CSV файла.
Конфигурационный файл модуля cdr_custom.conf.
Единственная секция [mappings] может быть использована в этом файле. Шаблон задается с помощью функций диалплана Asterisk.

В следующем примере cdr_customсоздает файл /var/log/asterisk/cdr-custom/Master.csv. Шаблон использует функции function 'CDR'() для извлечения значений и function 'CSV_QUOTE'() обеспечивающую правильное форматирование CSV файла (${CSV_QUOTE(${CDR(lastdata)})}).

[mappings]

Master.csv => ${CSV_QUOTE(${CDR(clid)})},${CSV_QUOTE(${CDR(src)})},
   ${CSV_QUOTE(${CDR(dst)})},${CSV_QUOTE(${CDR(dcontext)})},
   ${CSV_QUOTE(${CDR(channel)})},${CSV_QUOTE(${CDR(dstchannel)})},
   ${CSV_QUOTE(${CDR(lastapp)})},${CSV_QUOTE(${CDR(lastdata)})},
   ${CSV_QUOTE(${CDR(start)})},${CSV_QUOTE(${CDR(answer)})},
   ${CSV_QUOTE(${CDR(end)})},${CSV_QUOTE(${CDR(duration)})},
   ${CSV_QUOTE(${CDR(billsec)})},${CSV_QUOTE(${CDR(disposition)})},
   ${CSV_QUOTE(${CDR(amaflags)})},${CSV_QUOTE(${CDR(accountcode)})},
   ${CSV_QUOTE(${CDR(uniqueid)})},${CSV_QUOTE(${CDR(userfield)})}

cdr_manager

Модуль cdr_manager интерпретирует данные CDR, как события Asterisk Manager Interface (AMI).
Конфигурационный файл - cdr_manager.conf.

Первая секция [general] содержит единственную опцию enabled, по умолчанию = no.

[general]
enabled = yes

Следующая секция cdr_manager.confэто [mappings]. Здесь назначается пользовательская CDR переменная передаваемая менеджеру Asterisk.

<CDR variable> => <Header name>

пример:

 [mappings]
 rate => Rate
 carrier => Carrier

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

 exten => 177,1,Answer()
     same => n,Set(CDR(rate)=0.03)
     same => n,Set(CDR(carrier)=BВ&С)
     same => n,Hangup()

Следующая команда инициирует вызов:

*CLI> console dial 177@test

asterisk:alsa.conf

В итоге, следующее событие отобразится в Asterisk Call ManagerFinally:

Event: Cdr
Privilege: cdr,all
AccountCode: 
Source: 
Destination: 177
DestinationContext: test
CallerID: 
Channel: Console/dsp
DestinationChannel: 
LastApplication: Hangup
LastData: 
StartTime: 2016-05-23 08:29:21
AnswerTime: 2016-05-23 08:29:22
EndTime: 2016-05-23 08:29:23
Duration: 0
BillableSeconds: 0
Disposition: ANSWERED
AMAFlags: DOCUMENTATION
UniqueID: 1383680051.3
UserField: 
Rate: 0.03
Carrier: BВ&С

cdr_mysql

Файл конфигурации - cdr_mysql.conf
Данный модуль для сохранения CDR в MySQL. В новых системах рекомендуется, по возможности, использовать модуль cdr_adaptive_odbc.

cdr_odbc

Файл конфигурации - cdr_odbc.conf
Модуль для сохранения CDR через ODBC драйвер. В новых системах рекомендуется, по возможности, использовать модуль cdr_adaptive_odbc.

cdr_pgsql

Файл конфигурации - cdr_pgsql.conf
Модуль для сохранения CDR в базу данных PostgreSQL. В новых системах рекомендуется, по возможности, использовать модуль cdr_adaptive_odbc.

cdr_radius

cdr_radiusбакенд связывает CDR с Radius сервером.
Используется конфигурационный файл cdr.confв секции [radius].

Option Value/Default Notes
usegmtimeyesСохранять время GMT вместо локального.
loguniqueidyesСохранять uniqueid переменную CDR.
loguserfieldyesСохранять userfield CDR переменную.
radiuscfg/etc/radiusclient-ng/radiusclient .confМестоположение конфигурационного файла radiusclient-ng.

cdr_sqlite

Устарело. Используйте cdr_sqlite3_custom.

cdr_sqlite3_custom

CDR бакенд для сохранения данных в SQLite БД версии 3. База данных создается модулем, как /var/log/asterisk/master.db
Данный модуль использует конфигурационный файл cdr_sqlite3_custom.conf.
Конфигурация указывает имя таблицы CDR и пользовательские переменные, если требуется. <spoiler>

[master]

table = cdr

;
; List the column names to use when inserting CDRs.
;
columns => calldate, clid, dcontext, channel, dstchannel, lastapp, lastdata,
    duration, billsec, disposition, amaflags, accountcode, uniqueid, userfield, 
    test


;
; Map CDR contents to the previously specified columns.
;
values => '${CDR(start)}','${CDR(clid)}','${CDR(dcontext)}','${CDR(channel)}','${CDR(dstchannel)}','${CDR(lastapp)}','${CDR(lastdata)}','${CDR(duration)}','${CDR(billsec)}','${CDR(disposition)}','${CDR(amaflags)}','${CDR(accountcode)}','${CDR(uniqueid)}','${CDR(userfield)}','${CDR(test)}'
In the cdr_sqlite3_custom.conf file, the contents of the columns and values options must each be on a single line.

</spoiler>

cdr_syslog

Сохраняет CDR используя syslog linux. Чтобы включить данную возможность, сперва добавьте запись в конфиг syslog, /etc/syslog.conf.
Например:

local.*      /var/log/asterisk/asterisk-cdr.log

Конфигурационный файл Asterisk - cdr_syslog.conf:

[cdr]

facility = local
priority = info
template = "Вызов от ${CDR(src)}"

пример записи syslog, для приведенной конфигурации:

 cat /var/log/asterisk/asterisk-cdr.log

Sep 17 18:15:57 pbx cdr: «Вызов от 8129981138»

cdr_tds

Конфигурационный файл - cdr_tds.conf

cdr_tdsмодуль использует FreeTDS библиотеку для отправки CDR Microsoft SQL Server или Sybase БД.
FreeTDS возможно использовать с unixODBC, так что конфигурация может быть сделана и в cdr_adaptive_odbc.

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

Asterisk: настройка и установка

Asterisk: extconfig.conf - Realtime

$
0
0

Asterisk: extconfig.conf - Realtime

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

static ast_config.sql

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

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

extconfig.conf

 extensions.conf => odbc,asterisk,ast_config

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

[general]
static=yes

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 [default]
 switch => Realtime/mycontext@extensions 

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

пример extconfig.conf
  • iaxusers ⇒ odbc,asterisk
  • iaxpeers ⇒ odbc,asterisk
  • sippeers ⇒ odbc,asterisk - Asterisk 13 RealTime SIP
  • sipregs ⇒ odbc,asterisk ; (avoid sipregs if possible, e.g. by using a view)
  • ps_endpoints ⇒ odbc,asterisk
  • ps_auths ⇒ odbc,asterisk
  • ps_aors ⇒ odbc,asterisk
  • ps_domain_aliases ⇒ odbc,asterisk
  • ps_endpoint_id_ips ⇒ odbc,asterisk
  • voicemail ⇒ odbc,asterisk
  • extensions ⇒ odbc,asterisk
  • extensions ⇒ mysql,general,extensions - Asterisk Realtime Extensions with MySQL
  • meetme ⇒ mysql,general
  • queues ⇒ odbc,asterisk
  • queue_members ⇒ odbc,asterisk
  • queue_rules ⇒ odbc,asterisk
  • acls ⇒ odbc,asterisk
  • musiconhold ⇒ mysql,general
  • queue_log ⇒ mysql,general
  • queue_log ⇒ odbc,asterisk,queue_log - Asterisk: queue_log в MySQL через unixODBC

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

Asterisk: cdr.conf

$
0
0

Asterisk: cdr.conf

cdr.conf - Общие (глобальные) настройки детализированного отчета о звонках и выбора бэкендов.

Asterisk Call Detail Record engine configuration

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

[general]

Использовать или нет сохранение CDR. Если установлено 'no', перекрывает любые параметры загрузки CDR модулей. По умолчанию 'yes

 enable=yes

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

 unanswered = no

Сохранять или нет информацию о вызовах отвергнутых из-за перегрузки каналов (congestion). по умолчанию 'no'

 congestion = no

Обычно запись не сохраняется пока все расширения канала не будут выполнены. Включение данной опции позволит закрыть CDR до выполнения расширения 'h', и момента когда положили трубку. Однако параметры CDR - 'end' и 'billsec' будут заданы на момент выполнения расширения 'h' (требует уточнения) По умолчанию 'no'.

 endbeforehexten=no

По умолчанию 'billsec' вычисляется, просто как разница 'end' минус 'answer' в секундах. Включение опции initiatedseconds=yes, укажет Asterisk использовать точные значения до микросекунд. В случае если часть в микросекундах 'end', больше чем часть в микросекундах 'answer', разница округлится до секунды в большую сторону и наоборот. По умолчанию «no».

 initiatedseconds=no

Групповой режим CDR сохраняет данные в буфер, чтобы потом залить в хранилище группой, что уменьшает нагрузку на сервер. Но может привести к потере данных при внезапной перезагрузке. По умолчанию «no».

 batch=no

Укажите максимальное кол-во значений в буфере, прежде чем данные будут залиты в хранилище. Работает если 'batch=yes'. По умолчанию 100.

 size=100

Укажите максимальную продолжительность времени, в миллисекундах, до освобождения буфера. Будет выполнено по истечению заданного времени, несмотря на значение 'size'. По умолчанию 300 (5 минут).

 time=300

Постить все в едином потоке планировщика Asterisk (scheduleronly=yes) или для каждой партии создавать новый поток (scheduleronly=no). Для небольших партий (до size=10) используйте только планировщик. Для больших новые потоки - scheduleronly=no. По умолчанию 'no'.

 scheduleronly=no

Блокировать выключение Asterisk до освобождения буфера. По умолчанию «yes».

  safeshutdown=yes

CDR "BACKEND"

Вы можете выбрать любой из нескольких бакендов для соранения данных. Возможно, также использовать все бакенды одновременно. В конфигурационных файлах, поставляемых с Asterisk для примера, выбран только cdr-csv формат.

Бакенды:

  • cdr_custom.conf - Настройка полей и схемы для файла csv CDR/
  • cdr_odbc.conf - Соединение черед ODBC драйвер.
  • cdr_pgsql.conf - Соединения с PostrgreSQL.
  • cdr_sqlite3_custom.conf - Соединение с sqlite3.
  • cdr_tds.conf - Соединение с Microsoft SQL при помощи библиотеки FreeTDS.
  • cdr_mysql.conf - Нативное соединение с БД MySQL.
  • cdr_syslog.conf - Лог при помощи службы журналирования linux.
  • radius настраивается в этом же файле (cdr.conf) - Сохранение данных через radius-server

Вспомогательные модули, кастомизация полей:

Для компиляции модулей, требуется чтобы их зависимости были установлены до выполнения команды configure. Воспользуйтесь командой make menuselect и в разделе «Call Detail Recording» убедитесь, что требуемые вам модули имеют свои зависимости и будут скомпилированы. В приведенном ниже примере видно, что для cdr_pgsql условия не выполнены, и модуль не может быть установлен.

        **************************************************
           Asterisk Module and Build Option Selection
        **************************************************

                      Press 'h' for help.
                        --- Core ---
                     [*] cdr_adaptive_odbc
                     [*] cdr_custom
                     [*] cdr_manager
                     [*] cdr_syslog
                       --- Extended ---
                     [*] cdr_csv
                     [*] cdr_odbc
                     XXX cdr_pgsql
                     XXX cdr_radius
                     [*] cdr_sqlite3_custom
                     XXX cdr_tds
                      --- Deprecated ---
                     XXX cdr_sqlite

Модуль cdr_mysql поставляется как «Add-ons» согласно требованиям лицензии, к тому же объявлен устаревшим и вместо него рекомендуется использовать cdr_odbc, что однако не мешает им пользоваться при надобности или из лени.

        **************************************************
           Asterisk Module and Build Option Selection
        **************************************************
                    --- Extended ---
                    XXX chan_mobile
                    [*] chan_ooh323
                    [*] format_mp3
                    [*] res_config_mysql
                   --- Deprecated ---
                    [ ] app_mysql
                    [*] cdr_mysql

Кроме общих (глобальных) настроек в файле cdr.conf конфигурируются сохранение записей CDR в csv и radius:

[csv]
usegmtime=yes     ; лог дата/время in GMT. по умолчанию "no"
loguniqueid=yes   ; лог uniqueid.  по умолчанию "no"
loguserfield=yes  ; лог user field.  по умолчанию "no"
accountlogs=yes   ; create separate log file for each account code. Default is "yes"
newcdrcolumns=yes ; Enable logging of post-1.8 CDR columns (peeraccount, linkedid, sequence).
                  ; Default is "no".

[radius]
usegmtime=yes     ;log date/time in GMT
loguniqueid=yes   ;log uniqueid
loguserfield=yes  ;log user field
                  ;Set this to the location of the radiusclient-ng configuration file
                  ;The default is /etc/radiusclient-ng/radiusclient.conf
radiuscfg => /usr/local/etc/radiusclient-ng/radiusclient.conf

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

Asterisk: queue_log в MySQL через unixODBC

$
0
0

Asterisk: queue_log в MySQL через unixODBC

Realtime лог очереди в нативную базу данных Asterisk.

SQL таблица лога очереди

Создадим таблицу в БД asterisk.

CREATE TABLE IF NOT EXISTS `queue_log` (
`time` varchar(32) DEFAULT NULL,
`callid` char(64) DEFAULT NULL,
`queuename` char(64) DEFAULT NULL,
`agent` char(64) DEFAULT NULL,
`event` char(32) DEFAULT NULL,
`data` char(64) DEFAULT NULL,
`data1` char(64) DEFAULT NULL,
`data2` char(64) DEFAULT NULL,
`data3` char(64) DEFAULT NULL,
`data4` char(64) DEFAULT NULL,
`data5` char(64) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Выключение текстового лога

Если используется стандартное имя queue_logреалтайм семейства (realtime family)
и настроено соединение с базой данных, Asterisk сам создаст таблицу queue_log,
при отключении текстового лога и перезагрузке модуля logger:

*CLI> module reload logger
Module 'logger' reloaded successfully.
 Asterisk Queue Logger restarted

в файле /etc/asterisk/logger.confвыключите лог в файл:

 queue_log_to_file = no

в файле /etc/asterisk/asterisk.conf*

 [options]
 queue_adaptive_realtime = yes

* - спорная опция

Конфигурация realtime family

в файле /etc/asterisk/extconfig.conf

 queue_log => odbc,asterisk,queue_log

где 'asterisk' ваш db конфиг в /etc/asterisk/res_odbc.conf:

[asterisk]
enabled => yes
dsn => asterisk
username => dbuser
password => dbpass
pre-connect => yes

Расшифровка событий очереди (queue) в логе.

eventdata1data2data3
ABANDONpositionorigpositionwaittime
AGENTDUMP
AGENTLOGINchannel
AGENTCALLBACKLOGINexten@context
AGENTLOGOFFchannellogintime
AGENTCALLBACKLOGOFFexten@contextlogintimereason
COMPLETEAGENTholdtimecalltimeorigposition
COMPLETECALLERholdtimecalltimeorigposition
CONFIGRELOAD
CONNECTholdtimeuniqueid
ENTERQUEUEurlcalleridenterposition
EXITWITHKEYkeyposition
EXITWITHTIMEOUTposition
QUEUESTART
SYSCOMPAT
TRANSFERextension,context
Другие страницы с тегом 'queue':
Viewing all 1041 articles
Browse latest View live


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