Контакты
sidebar
Установка Asterisk 13 + FreePBX 12 Ubuntu 14
Установка Asterisk 13 + FreePBX 12 Ubuntu 14
Первоначальная настройка Ubuntu
При установке Ubuntu выберите обязательно OpenSSH server и LAMP сервер. Установите дополнительные пакеты на ваше усмотрение.
В ходе установки системы вам будет предложено задать пароль root пользователя MySQL, если вы не уверены, можно отставить пустым. если пароль задан, он потребуется в дальнейшем для работы с MySQL.
Задайте пароль 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
Установка 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
Скомпилируйте и установите 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
Скомпилируйте и установите 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'.
В разделе Core Sound Packages выберете поддержку русскоязычных файлов (если требуется)
В разделе 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
Создайте пользователя 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
Настроим 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
Подготовим 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
Чтобы работало переключение на русский язык в панели управления, необходимо отредактировать файл /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, FreeSWITCH, IP АТС.
Настроим Asterisk, FreeSWITCH, IP АТС.
Установка, настройка Asterisk и FreeSWITCH. Неограниченное количество VoIP абонентов. IP АТС корпоративного уровня. Реализуем сложные ТЗ. Удаленно, в любой точке мира.
Установка IP АТС на открытом программном обеспечении включает в себя следующие этапы:
- Разработка технического задания с учетом требований заказчика и возможностей IP АТС.
- Подготовка договора на установку и настройку и, если требуется, поставку оборудования.
- Подготовка счета на оплату с учетом технического задания, согласование сроков и порядка оплаты.
- Удаленная установка IP АТС в любой точке мира.
- Установка IP АТС с выездом на объект (Санкт Петербург).
- Предварительная настройка оборудования в нашем сервисном центре.
- Сдача проекта. Проверка работоспособности всех компонентов и алгоритмов работы IP АТС.
- Обучение для дальнейшей эксплуатации IP АТС сотрудниками заказчика.
- Бесплатная техническая поддержка в течении месяца с момента запуска в эксплуатацию.
Решения
VoIP АТС
- Неограниченное количество VoIP абонентов и транков.
- Запись разговоров и детализированный отчет о звонках.
- Факс на e-mail.
- Русскоязычный интерфейс.
- CTI - Интеграция со сторонними приложениями.
Колл Центр
- Включает в себя все функции VoIP АТС.
- Очереди. Статические и динамические агенты.
- Интеграция с CRM. AMI. ARI(Restful).
- Администрирование очередей и агентов с помощью веб-интерфейса.
- Real-time маршрутизация.
Дополнительно
- Аудит и обслуживание уже установленных систем Asterisk, FreeSWITCH.
- Написание кастомизированного диаплана под любые нужды.
- Интеграция с TDM АТС Avaya, NEC, Nortel, Samsung, Panasonic, LG.
- Аудит и настройки безопасности VoIP систем.
- Биллинг. Многопользовательские системы.
- SIP proxy, SBC.
Напишите нам!
Asterisk: настройка
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 для работы за 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
Последние изменения
- Услуги по настройке IP АТС Asterisk и FreeSWITCH (2016/12/03)
- Asterisk: res_odbc.conf (2016/12/03)
- FreeSWITCH (2016/12/03)
- Asterisk: настройка (2016/12/03)
- Настроим Asterisk, FreeSWITCH, IP АТС. (2016/12/03)
- Установка Asterisk 13 + FreePBX 12 Ubuntu 14 (2016/12/03)
- Call Center на Asterisk (2016/12/02)
- sidebar (2016/12/02)
- Контакты (2016/12/02)
FreeSWITCH
FreeSWITCH
FreeSWITCH - настройка и установка. Документация и руководства на русском языке.
- Сервер маршрутизации.
- Сервер B2BUA.
- Сервер IVR
- Сервер Конференций
- Сервер Голосовой почты
- SBC Сервер
- Fax сервер
- И, конечно, АТС!
FreeSWITCH это open source, масштабируемая, кросс-платформенная, телефонная система. Предназначена для маршрутизации и коммутации между большинством современных протоколов передачи аудио, видео, текстовых и других форм медиа данных. В данном разделе собрана русскоязычная документация по установке, настройке и использованию FreeSWITCH и сопутствующих приложений.
Установка FreeSWITCH
Настройка FreeSWITCH
FusionPBX
Услуги по настройке IP АТС Asterisk и FreeSWITCH
Услуги по настройке 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 транков; создание очередей, телеконференций, голосовых меню, групп приема вызовов; использование сервисных кодов и отчетов о звонках.)
- Бесплатную тех. поддержку в течении месяца с момента ввода в эксплуатацию.
Варианты установки:
- Продажа сервера с установкой и настройкой системы.
- Установка на сервере заказчика.
- Удаленная установка/настройка на сервере заказчика.
- Установка на VPS хостинге
- Установка на 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 13 + Opus VP8
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
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) команды
FreeSWITCH Command Line Interface (CLI) команды
... | Shutdown | mod_commands | |
---|---|---|---|
acl | <ip> <list_name> | Compare an ip to an acl list | mod_commands |
alias | [add|stickyadd] <alias> <command> | del [<alias>|*] | Alias | mod_commands |
banner | Return the system banner | mod_commands | |
bg_system | <command> | Execute a system command in the background | mod_commands |
bgapi | <command>[ <arg>] | Execute an api command in a thread | mod_commands |
break | <uuid> [all] | uuid_break | mod_commands |
cdr_csv | parameters | cdr_csv controls | mod_cdr_csv |
chat | <proto>|<from>|<to>|<message>|[<content-type>] | chat | mod_dptools |
coalesce | [^^<delim>]<value1> | <value2> | ... |
complete | add <word>|del [<word>|*] | Complete | mod_commands |
cond | <expr> ? <true val> : <false val> | Evaluate a conditional | mod_commands |
conference | Conference module commands | mod_conference | |
console | loglevel [level]|colorize [on|toggle|off] | Console | mod_console |
console_complete | <line> | mod_commands | |
console_complete_xml | <line> | mod_commands | |
create_uuid | <uuid> <other_uuid> | Create a uuid | mod_commands |
db | [insert|delete|select|exists|count|list]/<realm>/<key>/<value> | db get/set | mod_db |
db_cache | status | Manage db cache | mod_commands |
domain_exists | <domain> | Check if a domain exists | mod_commands |
echo | <data> | Echo | mod_commands |
enum | ENUM | mod_enum | |
enum_auto | ENUM | mod_enum | |
escape | <data> | Escape a string | mod_commands |
eval | [uuid:<uuid> ]<expression> | eval (noop) | mod_commands |
event_sink | <web data> | event_sink | mod_event_socket |
expand | [uuid:<uuid> ]<cmd> <args> | Execute an api with variable expansion | mod_commands |
expr | <expr> | Eval an expression | mod_expr |
fifo | list|list_verbose|count|debug|status|has_outbound|importance [<fifo name>]|reparse [del_all] | Return data about a fifo | mod_fifo |
fifo_add_outbound | <node> <url> [<priority>] | Add outbound members to a fifo | mod_fifo |
fifo_check_bridge | <uuid>|<outbound_id> | check if uuid is in a bridge | mod_fifo |
fifo_member | [add <fifo_name> <originate_string> [<simo_count>] [<timeout>] [<lag>] [<expires>] [<taking_calls>] | del <fifo_name> <originate_string>] | Add members to a fifo | mod_fifo |
file_exists | <file> | Check if a file exists on server | mod_commands |
find_user_xml | <key> <user> <domain> | Find a user | mod_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 messages | mod_commands |
getcputime | [reset] | Gets CPU time in milliseconds (user | kernel) |
getenv | <name> | getenv | mod_commands |
gethost | gethostbyname | mod_commands | |
global_getvar | <var> | Get global var | mod_commands |
global_setvar | <var>=<value> [=<value2>] | Set global var | mod_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 group | mod_commands |
hash | [insert|delete|select]/<realm>/<key>/<value> | hash get/set | mod_hash |
hash_dump | all|limit|db [<realm>] | dump hash/limit_hash data (used for synchronization) | mod_hash |
hash_remote | list|kill [name]|rescan | hash remote | mod_hash |
help | Show help for all the api commands | mod_commands | |
host_lookup | <hostname> | Lookup host | mod_commands |
hostname | Return the system hostname | mod_commands | |
httapi | [debug_on|debug_off] | HT-TAPI Hypertext Telephony API | mod_httapi |
hup_local_stream | <local_stream_name> | Skip to next file in local_stream | mod_local_stream |
hupall | <cause> [<var> <value>] | hupall | mod_commands |
in_group | <user>[@<domain>] <group_name> | Determine if a user is in a group | mod_commands |
interface_ip | [auto|ipv4|ipv6] <ifname> | Return the primary IP of an interface | mod_commands |
is_lan_addr | <ip> | See if an ip is a lan addr | mod_commands |
json | JSON | JSON API | mod_commands |
limit_hash_usage | <realm> <id> | Deprecated: gets the usage count of a limited resource | mod_commands |
limit_interval_reset | <backend> <realm> <resource> | Reset the interval counter for a limited resource | mod_commands |
limit_reset | <backend> | Reset the counters of a limit backend | mod_commands |
limit_status | <backend> | Get the status of a limit backend | mod_commands |
limit_usage | <backend> <realm> <id> | Get the usage count of a limited resource | mod_commands |
list_users | [group <group>] [domain <domain>] [user <user>] [context <context>] | List Users configured in Directory | mod_commands |
load | <mod_name> | Load Module | mod_commands |
log | <level> <message> | Log | mod_commands |
lua | <script> | run a script as an api function | mod_lua |
luarun | <script> | run a script | mod_lua |
md5 | <data> | Return md5 hash | mod_commands |
module_exists | <module> | Check if module exists | mod_commands |
msleep | <milliseconds> | Sleep N milliseconds | mod_commands |
nat_map | [status|republish|reinit] | [add|del] <port> [tcp|udp] [static] | Manage NAT | mod_commands |
opus_debug | <on|off> | Set OPUS Debug | mod_opus |
originate | <call url> <exten>|&<application_name>(<app_args>) [<dialplan>] [<context>] [<cid_name>] [<cid_num>] [<timeout_sec>] | Originate a call | mod_commands |
page | (var1=val1 | var2=val2)<var1=val1 | var2=val2><chan1>[:_:<chanN>] |
pause | <uuid> <on|off> | Pause media on a channel | mod_commands |
presence | [in|out] <user> <rpid> <message> | presence | mod_dptools |
quote_shell_arg | <data> | Quote/escape a string for use on shell command line | mod_commands |
reg_url | <user>@<realm> | mod_commands | |
regex | <data>|<pattern>[|<subst string>][n|b] | Evaluate a regex | mod_commands |
reload | [-f] <mod_name> | Reload module | mod_commands |
reload_local_stream | <local_stream_name> | Reloads a local_stream | mod_local_stream |
reloadacl | Reload XML | mod_commands | |
reloadxml | Reload XML | mod_commands | |
replace | <data>|<string1>|<string2> | Replace a string | mod_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 command | mod_commands |
sched_broadcast | [[+]<time>|@time] <uuid> <path> [aleg|bleg|both] | Schedule a broadcast event to a running call | mod_commands |
sched_del | <task_id>|<group_id> | Delete a scheduled task | mod_commands |
sched_hangup | [+]<time> <uuid> [<cause>] | Schedule a running call to hangup | mod_commands |
sched_transfer | [+]<time> <uuid> <extension> [<dialplan>] [<context>] | Schedule a transfer for a running call | mod_commands |
show | codec|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|status | Show various reports | mod_commands |
show_local_stream | [local_stream_name [xml]] | Shows a local stream | mod_local_stream |
shutdown | Shutdown | mod_commands | |
sofia | <cmd> <args> | Sofia Controls | mod_sofia |
sofia_contact | [profile/]<user>@<domain> | Sofia Contacts | mod_sofia |
sofia_count_reg | [profile/]<user>@<domain> | Count Sofia registration | mod_sofia |
sofia_dig | <url> | SIP DIG | mod_sofia |
sofia_gateway_data | <gateway_name> [ivar|ovar|var] <name> | Get data from a sofia gateway | mod_sofia |
sofia_presence_data | [list|status|rpid|user_agent] [profile/]<user>@domain | Sofia Presence Data | mod_sofia |
sofia_username_of | [profile/]<user>@<domain> | Sofia Username Lookup | mod_sofia |
spandsp_start_tone_detect | <uuid> <name> | Start background tone detection with cadence | mod_spandsp |
spandsp_stop_tone_detect | <uuid> | Stop background tone detection with cadence | mod_spandsp |
sql_escape | <string> | Escape a string to prevent sql injection | mod_commands |
start_local_stream | <local_stream_name> | Starts a new local_stream | mod_local_stream |
start_tdd_detect | <uuid> | Start background tdd detection | mod_spandsp |
status | Show current status | mod_commands | |
stop_local_stream | <local_stream_name> | Stops and unloads a local_stream | mod_local_stream |
stop_tdd_detect | <uuid> | Stop background tdd detection | mod_spandsp |
strepoch | <string> | Convert a date string into epoch time | mod_dptools |
strftime | <format_string> | strftime | mod_dptools |
strftime_tz | <timezone_name> [<epoch>|][format string] | Display formatted time of timezone | mod_commands |
strmicroepoch | <string> | Convert a date string into micoepoch time | mod_dptools |
stun | <stun_server>[:port] [<source_ip>[:<source_port]] | Execute STUN lookup | mod_commands |
switchname | Return the switch name | mod_commands | |
system | <command> | Execute a system command | mod_commands |
time_test | <mss> [count] | Show time jitter | mod_commands |
timer_test | <10|20|40|60|120> [<1..200>] [<timer_name>] | Exercise FS timer | mod_commands |
tone_detect | <uuid> <key> <tone_spec> [<flags> <timeout> <app> <args> <hits>] | Start tone detection on a channel | mod_commands |
unload | [-f] <mod_name> | Unload module | mod_commands |
unsched_api | <task_id> | Unschedule an api command | mod_commands |
uptime | [us|ms|s|m|h|d|microseconds|milliseconds|seconds|minutes|hours|days] | Show uptime | mod_commands |
url_decode | <string> | Url decode a string | mod_commands |
url_encode | <string> | Url encode a string | mod_commands |
user_data | <user>@<domain> [var|param|attr] <name> | Find user data | mod_commands |
user_exists | <key> <user> <domain> | Find a user | mod_commands |
uuid_answer | <uuid> | answer | mod_commands |
uuid_audio | <uuid> [start [read|write] [mute|level <level>]|stop] | uuid_audio | mod_commands |
uuid_break | <uuid> [all] | Break out of media sent to channel | mod_commands |
uuid_bridge | Bridge call legs | mod_commands | |
uuid_broadcast | <uuid> <path> [aleg|bleg|holdb|both] | Execute dialplan application | mod_commands |
uuid_buglist | <uuid> | List media bugs on a session | mod_commands |
uuid_chat | <uuid> <text> | Send a chat message | mod_commands |
uuid_codec_debug | <uuid> audio|video <level> | Send codec a debug message | mod_commands |
uuid_codec_param | <uuid> audio|video read|write <param> <val> | Send codec a param | mod_commands |
uuid_debug_media | <uuid> <read|write|both|vread|vwrite|vboth|all> <on|off> | Debug media | mod_commands |
uuid_deflect | <uuid> <uri> | Send a deflect | mod_commands |
uuid_displace | <uuid> [start|stop] <path> [<limit>] [mux] | Displace audio | mod_commands |
uuid_display | <uuid> <display> | Update phone display | mod_commands |
uuid_drop_dtmf | <uuid> [on | off ] [ mask_digits <digits> | mask_file <file>] | Drop all DTMF or replace it with a mask | mod_commands |
uuid_dual_transfer | <uuid> <A-dest-exten>[/<A-dialplan>][/<A-context>] <B-dest-exten>[/<B-dialplan>][/<B-context>] | Transfer a session and its partner | mod_commands |
uuid_dump | <uuid> [format] | Dump session vars | mod_commands |
uuid_early_ok | <uuid> | stop ignoring early media | mod_commands |
uuid_exists | <uuid> | Check if a uuid exists | mod_commands |
uuid_fileman | <uuid> <cmd>:<val> | Manage session audio | mod_commands |
uuid_flush_dtmf | <uuid> | Flush dtmf on a given uuid | mod_commands |
uuid_getvar | <uuid> <var> | Get a variable from a channel | mod_commands |
uuid_hold | [off|toggle] <uuid> [<display>] | Place call on hold | mod_commands |
uuid_jitterbuffer | <uuid> [0|<min_msec>[:<max_msec>]] | uuid_jitterbuffer | mod_commands |
uuid_kill | <uuid> [cause] | Kill channel | mod_commands |
uuid_limit | <uuid> <backend> <realm> <resource> [<max>[/interval]] [number [dialplan [context]]] | Increase limit resource | mod_commands |
uuid_limit_release | <uuid> <backend> [realm] [resource] | Release limit resource | mod_commands |
uuid_limit_release | <uuid> <backend> [realm] [resource] | Release limit resource | mod_commands |
uuid_loglevel | <uuid> <level> | Set loglevel on session | mod_commands |
uuid_media | [off] <uuid> | Reinvite FS in or out of media path | mod_commands |
uuid_media_3p | [off] <uuid> | Reinvite FS in or out of media path using 3pcc | mod_commands |
uuid_media_reneg | <uuid>[ <codec_string>] | Media negotiation | mod_commands |
uuid_outgoing_answer | <uuid> | Answer outgoing channel | mod_commands |
uuid_park | <uuid> | Park channel | mod_commands |
uuid_pause | <uuid> <on|off> | Pause media on a channel | mod_commands |
uuid_phone_event | <uuid> | Send an event to the phone | mod_commands |
uuid_pre_answer | <uuid> | pre_answer | mod_commands |
uuid_preprocess | <> | Pre-process Channel | mod_commands |
uuid_record | <uuid> [start|stop|mask|unmask] <path> [<limit>] | Record session audio | mod_commands |
uuid_recovery_refresh | <uuid> <uri> | Send a recovery_refresh | mod_commands |
uuid_recv_dtmf | <uuid> <dtmf_data> | Receive dtmf digits | mod_commands |
uuid_redirect | <uuid> <uri> | Send a redirect | mod_commands |
uuid_ring_ready | <uuid> [queued] | Sending ringing to a channel | mod_commands |
uuid_send_dtmf | <uuid> <dtmf_data> | Send dtmf digits | mod_commands |
uuid_send_info | <uuid> [<mime_type> <mime_subtype>] <message> | Send info to the endpoint | mod_commands |
uuid_send_message | <uuid> <message> | Send MESSAGE to the endpoint | mod_commands |
uuid_send_tdd | <uuid> <text> | send tdd data to a uuid | mod_spandsp |
uuid_session_heartbeat | <uuid> [sched] [0|<seconds>] | uuid_session_heartbeat | mod_commands |
uuid_set_media_stats | <uuid> | Set media stats | mod_commands |
uuid_setvar | <uuid> <var> [value] | Set a variable | mod_commands |
uuid_setvar_multi | <uuid> <var>=<value>;<var>=<value>... | Set multiple variables | mod_commands |
uuid_simplify | <uuid> | Try to cut out of a call path / attended xfer | mod_commands |
uuid_transfer | <uuid> [-bleg|-both] <dest-exten> [<dialplan>] [<context>] | Transfer a session | mod_commands |
uuid_video_bitrate | <uuid> <bitrate> | Send video bitrate req. | mod_commands |
uuid_video_refresh | <uuid> | Send video refresh. | mod_commands |
uuid_write_png | grab an image from a call | mod_png | |
uuid_zombie_exec | <uuid> | Set zombie_exec flag on the specified uuid | mod_commands |
valet_info | [<lot name>] | Valet Parking Info | mod_valet_parking |
version | [short] | Version | mod_commands |
verto | syntax | Verto API | mod_verto |
verto_contact | user@domain | Generate a verto endpoint dialstring | mod_verto |
vm_boxcount | [profile/]<user>@<domain>[|[new|saved|new-urgent|saved-urgent|all]] | vm_boxcount | mod_voicemail |
vm_delete | <id>@<domain>[/profile] [<uuid>] | vm_delete | mod_voicemail |
vm_fsdb_auth_login | <profile> <domain> <user> <password> | vm_fsdb_auth_login | mod_voicemail |
vm_fsdb_msg_count | <format> <profile> <domain> <user> <folder> | vm_fsdb_msg_count | mod_voicemail |
vm_fsdb_msg_delete | <profile> <domain> <user> <uuid> | vm_fsdb_msg_delete | mod_voicemail |
vm_fsdb_msg_email | <profile> <domain> <user> <uuid> <email> | vm_fsdb_msg_email | mod_voicemail |
vm_fsdb_msg_forward | <profile> <domain> <user> <uuid> <dst_domain> <dst_user> [prepend_file_location] | vm_fsdb_msg_forward | mod_voicemail |
vm_fsdb_msg_get | <format> <profile> <domain> <user> <uuid> | vm_fsdb_msg_get | mod_voicemail |
vm_fsdb_msg_list | <format> <profile> <domain> <user> <folder> <filter> [msg-order = ASC | DESC] | vm_fsdb_msg_list | mod_voicemail |
vm_fsdb_msg_purge | <profile> <domain> <user> | vm_fsdb_msg_purge | mod_voicemail |
vm_fsdb_msg_save | <profile> <domain> <user> <uuid> | vm_fsdb_msg_save | mod_voicemail |
vm_fsdb_msg_undelete | <profile> <domain> <user> <uuid> | vm_fsdb_msg_undelete | mod_voicemail |
vm_fsdb_pref_greeting_get | <format> <profile> <domain> <user> [slot] | vm_fsdb_pref_greeting_get | mod_voicemail |
vm_fsdb_pref_greeting_set | <profile> <domain> <user> <slot> [file-path] | vm_fsdb_pref_greeting_set | mod_voicemail |
vm_fsdb_pref_password_set | <profile> <domain> <user> <password> | vm_fsdb_pref_password_set | mod_voicemail |
vm_fsdb_pref_recname_set | <profile> <domain> <user> <file-path> | vm_fsdb_pref_recname_set | mod_voicemail |
vm_inject | [group=<group>[@domain]|domain=<domain>|<box>[@<domain>]] <sound_file> [<cid_num>] [<cid_name>] | vm_inject | mod_voicemail |
vm_list | <id>@<domain>[/profile] [xml] | vm_list | mod_voicemail |
vm_prefs | [profile/]<user>@<domain>[|[name_path|greeting_path|password]] | vm_prefs | mod_voicemail |
vm_read | <id>@<domain>[/profile] <read|unread> [<uuid>] | vm_read | mod_voicemail |
voicemail | rss [<host> <port> <uri> <user> <domain>] | [load|unload|reload] <profile> [reloadxml] | voicemail | mod_voicemail |
voicemail_inject | [group=<group>[@domain]|domain=<domain>|<box>[@<domain>]] <sound_file> [<cid_num>] [<cid_name>] | voicemail_inject | mod_voicemail |
xml_flush_cache | <id> <key> <val> | Clear xml cache | mod_commands |
xml_locate | [root | <section> <tag> <tag_attr_name> <tag_attr_val>] | Find some xml | mod_commands |
xml_wrap | <command> <args> | Wrap another api command in xml | mod_commands |
FreePBX 13 установка
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
FreePBX
Настройка Asterisk FreePBX. Подробное описание модулей. Скриншоты.
Настройка FreePBX
FreePBX это полнофункциональный веб-интерфейс для конфигурации Asterisk PBX. Если Вы знакомы с Asterisk, то знаете, настройка ATC осуществляется при помощи конфигурационных файлов. FreePBX предлагает простой, интуитивно понятный интерфейс для настройки и управления Asterisk PBX. FreePBX также поставляется со многими дистрибьютивами: AsteriskNOW, FreePBX Distro, Trixbox, Elastix.
Общая документация.
Руководства по установке и настройке FreePBX.
- Установка FreePBX - Как установить FreePBX и Asterisk из исходников.
- Файлы и стандартные контексты FreePBX - Структура конфигурационных файлов используемых FreePBX.
- Asterisk FreePBX Fax-to-EmailПрием факсов на емайл во FreePBX
Admin modules
Документация по административным модулям FreePBX
- Administrators - Используется для назначения администраторов системы.
- Backup & Restore - Резервные копии и восстановление.
- Feature Codes - Коды абонентских функций.
- System Recordings - Запись системных голосовых сообщений.
- Custom Destinations - Кастомный контекст, как модуль FreePBX.
- Freepbx - User management - Управление правами пользователей.
Applications
Документация по модулям приложений FreePBX
- Announcements - Объявление без интерактивных функций.
- Bulk Extensions - Импорт экстеншенов из CSV файла.
- Extensions - Используется для создания экстеншенов.
- Follow Me - Следуй за мной - Follow Me - Следуй за мной
- IVR - Интерактивное голосовое меню.
- FreePBX Queues - Очереди обработки вызовов.
- Ring Groups - Группы приема вызовов
- Time Conditions - Условия обработки вызовов в зависимости от текущего времени.
- Time Groups - Временные периоды.
Connectivity
Документация по модулям входящих исходящих соединений FreePBX.
- Inbound Routes - Наведение входящих вызовов , DID.
- Outbound Routes - Маршрутизирует исходящие вызовы по требуемым транкам.
- Zap Channel DIDs - Назначение DID для конкретных ZAP каналов.
- Trunks - Управляет ZAP (Dahdi), SIP протокол, IAX каналами для выхода в общую телефонную сеть, или соединения АТС.
Settings Modules
Документация по модулям глобальных настроек каналов и приложений FreePBX
- FreePBX Advanced Settings - Глобальные настройки
- advanced_settings_details - Параметры отображение настроек.
- asterisk_manager - Настройки AMI.
- dahdi_configuration_module - Конфигурация DAHDI.
- device_settings - Настройки устройств.
- dialplan_and_operational - План набора и операции.
- Asterisk SIP Settings - Настройки SIP [general]
UCP
Примеры
Уязвимости
Устаревшее
- General Settings - Основные системные установки.
- Day/Night Control - Дневной / Ночной режимы.
Asterisk-cdr-viewer
Asterisk-cdr-viewer
Веб интерфейс статистики вызовов Asterisk (Call Detail Recordings). Используется, также, в модуле статистики FreePBX. Прекрасное приложение, для просмотра статистики и прослушивания записей.
Установка Asterisk Cdr Veiwer
Страница программы на Google Code
Скачайте исходный код в директорию веб сервера:
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
Asterisk CDR Viewer Mod v2.2.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';
Запись вызовов в 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
Чтобы начать запись, только когда абонент поднял трубку, используйте опцию U( ) команды Dial
Dial(PJSIP/${EXTEN},,trU(sub-monitor^s^1))
Страницы с тегом cdr:
Asterisk: настройка и установка
Asterisk CDR - Статистика звонков
FreePBX Call Recordings + Asternic CDR Stats 1.5.1
Asterisk: queues.conf
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
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: QUEUE_VARIABLES
function 'QUEUE_WAITING_COUNT'
Asterisk CLI - интерфейс командной строки
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расчет перекодировки кодеков
ещё
- 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 logger.conf
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
Функция диалплана 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
запись в БД
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 CDR - Статистика звонков
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 | default | Notes |
---|---|---|
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 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 |
---|---|---|
usegmtime | yes | Сохранять время GMT вместо локального. |
loguniqueid | yes | Сохранять uniqueid переменную CDR. |
loguserfield | yes | Сохранять 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: extconfig.conf - Realtime
Asterisk: extconfig.conf - Realtime
Реалтайм Архитектура Asterisk - набор драйверов и функций для конфигурации в режиме реального времени. Существует два типаконфигурации - статический и динамический:
- Статический хранит конфигурации в БД, как конфигурационные файлы и также обновляет данные при перезагрузке модулей.
- Динамический используется для создания и обновления объектов в режиме реального времени, при совершении вызовов.
Оба режима могут использоваться одновременно.
Реалтайм архитектура поддерживает разные типы хранилищ. В данный момент, большинство драйверов основаны на 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: cdr.conf
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
Вспомогательные модули, кастомизация полей:
- cdr_manager.conf - Настройки отображения событий Asterisk Call Manager в CDR.
- cdr_adaptive_odbc.conf - Добвить собственные поля в CDR
Для компиляции модулей, требуется чтобы их зависимости были установлены до выполнения команды 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: queue_log в MySQL через unixODBC
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) в логе.
event | data1 | data2 | data3 |
---|---|---|---|
ABANDON | position | origposition | waittime |
AGENTDUMP | |||
AGENTLOGIN | channel | ||
AGENTCALLBACKLOGIN | exten@context | ||
AGENTLOGOFF | channel | logintime | |
AGENTCALLBACKLOGOFF | exten@context | logintime | reason |
COMPLETEAGENT | holdtime | calltime | origposition |
COMPLETECALLER | holdtime | calltime | origposition |
CONFIGRELOAD | |||
CONNECT | holdtime | uniqueid | |
ENTERQUEUE | url | callerid | enterposition |
EXITWITHKEY | key | position | |
EXITWITHTIMEOUT | position | ||
QUEUESTART | |||
SYSCOMPAT | |||
TRANSFER | extension,context |
Другие страницы с тегом 'queue':
Команда Asterisk: AddQueueMember
Функция диалплана Asterisk: QUEUE_VARIABLES