Показаны сообщения с ярлыком Asterisk. Показать все сообщения
Показаны сообщения с ярлыком Asterisk. Показать все сообщения

пятница, 29 марта 2013 г.

Детализация звонков в Asterisk

Детализация звонков очень важная возможность контроля в работе предприятия, уверен сомнений по этому поводу не возникает. Посмотрев готовые решения я с удивлением обнаружил что действительно хороших решений не так уж и много. Одни разработки явно перегружены избыточными функциями, делая уклон в сторону биллинг систем. Другие решения ужасны дизайном. Многие решения уже давно заброшены разработчиками и более не поддерживаются.
Взвесив все за и против я решил написать собственную разработку по детализации звонков, которая будет обладать рядом преимуществ по сравнению с теми предложениями что существуют на данный момент.
  • Приятный и удобный дизайн
  • Отсутствие проблем при миграции на новые версии Asterisk
  • Возможность получать детализацию с нескольких серверов Asterisk
Разработка будет разделена на две публикации:
В первой публикации разъясняется настройка Asterisk для сбора информации о детализации звонков в базу данных. Во второй публикации информация о детализации из базы данных будет показана при помощи web интерфейса ACViewer.

Модель работы
Для получения общей детализации сразу с нескольких серверов Asterisk будет задействован RADIUS сервер. Введение дополнительного звена такого как RADIUS сервер даёт также следующие преимущества:
  • Атрибуты RADIUS со временем не изменяются, что может гарантировать лёгкость миграции на новые версии Asterisk
  • Работа по UDP протоколу снижает нагрузку на сеть при размещении RADIUS сервера и Asterisk на разном оборудовании
Работа будет вестись на дистрибутиве CentOS 6.x, в случае использования иного дистрибутива, ознакомьтесь с соответствующим разделом документации по установке программного обеспечения.

Конфигурация ПО
Конфигурация сервера MySQL
Работу начинаем с установки и настройки сервера MySQL, далее подключаемся к консоли MySQL как пользователь root и создаём базу данных в которой будут храниться данные по детализации звонков с Asterisk.

$ mysql -u root -p
CREATE DATABASE radius;
GRANT ALL ON radius.* TO 'astradius'@'127.0.0.1' IDENTIFIED BY 'radpass';
GRANT ALL ON radius.* TO 'astradius'@'localhost' IDENTIFIED BY 'radpass';
FLUSH PRIVILEGES;
SQL схему показанную ниже сохраняем в файл "radius.sql" и импортируем в базу данных.
CREATE TABLE `radacct` (
    `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
    `clid` VARCHAR(80) NOT NULL DEFAULT '',
    `src` VARCHAR(80) NOT NULL DEFAULT '',
    `dst` VARCHAR(80) NOT NULL DEFAULT '',
    `dcontext` VARCHAR(80) NOT NULL DEFAULT '',
    `lastapp` VARCHAR(200) NOT NULL DEFAULT '',
    `lastdata` VARCHAR(200) NOT NULL DEFAULT '',
    `duration` FLOAT UNSIGNED NULL DEFAULT NULL,
    `billsec` FLOAT UNSIGNED NULL DEFAULT NULL,
    `disposition` ENUM('ANSWERED','BUSY','FAILED','NO ANSWER','CONGESTION') NULL DEFAULT NULL,
    `channel` VARCHAR(50) NULL DEFAULT NULL,
    `dstchannel` VARCHAR(50) NULL DEFAULT NULL,
    `amaflags` VARCHAR(50) NULL DEFAULT NULL,
    `accountcode` VARCHAR(20) NULL DEFAULT NULL,
    `uniqueid` VARCHAR(32) NOT NULL DEFAULT '',
    `userfield` FLOAT UNSIGNED NULL DEFAULT NULL,
    `start` DATETIME NOT NULL,
    `answer` DATETIME NOT NULL,
    `end` DATETIME NOT NULL,
    PRIMARY KEY (`id`),
    INDEX `clid` (`clid`),
    INDEX `src` (`src`),
    INDEX `dst` (`dst`),
    INDEX `start` (`start`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
$ mysql -u astradius -p radius < radius.sql

Конфигурация RADIUS
В работе будет использован сервер freeRADIUS, установим требуемые пакеты.
$ sudo yum install freeradius freeradius-mysql freeradius-utils radiusclient-ng
Конфигурация RADIUS делится на две части:
  • Конфигурация RADIUS клиента
  • Конфигурация RADIUS сервера

Конфигурация клиента radiusclient-ng
Клиент radiusclient-ng является связующим звеном между Asterisk (который является NAS в терминологии RADIUS) и сервером freeRADIUS. Следует отметить что изначально с сервером freeRADIUS поставлялся Radiusclient, но потом он оказался заброшен, новая функциональность перестала добавляться. Поэтому был сделан форк родного RADIUS клиента radiusclient-ng в который были добавлены новые возможности, его и будем использовать в работе.
Клиенту radiusclient-ng для работы с Asterisk требуется подключить файл словаря от компании Digium, находящийся в директории “contrib” архива исходных текстов Asterisk. Копируем файл словаря “asterisk.digium” и файл базового словаря который поставляется с “radiusclient-ng” в директорию с конфигурационными файлами “radiusclient-ng”
$ sudo cp /usr/share/radiusclient-ng/dictionary /etc/radiusclient-ng/
Подключаем в окончании файла “dictionary” словарь от компании Digium
$INCLUDE /usr/share/freeradius/dictionary.digium
В файле “servers” указываем учётные данные которые будут использоваться клиентом при обращении к серверу freeRADIUS. Файл “servers”:
127.0.0.1       myradiussecret
Файл “radiusclient.conf” приводим к следующему виду:
auth_order      radius
login_tries     4
login_timeout   60
nologin         /etc/nologin
issue           /etc/radiusclient-ng/issue
authserver      127.0.0.1:1812
acctserver      127.0.0.1:1813
servers         /etc/radiusclient-ng/servers
dictionary      /etc/radiusclient-ng/dictionary
login_radius    /usr/sbin/login.radius
seqfile         /var/run/radius.seq
mapfile         /etc/radiusclient-ng/port-id-map
default_realm
radius_timeout  10
radius_retries  3
login_local     /bin/login

Конфигурация сервера freeRADIUS
Файлы конфигурации сервера находятся в директории “/etc/raddb”, требуется отредактировать конфигурационные файлы находящиеся в указанной директории. Файл “clients.conf” содержит описание клиентов RADIUS которым позволено подключаться к серверу freeRADIUS. Для каждой клиентской записи требуется указать IP адрес с которого будет производиться подключение и пароль. Пароль должен соответствовать тому что указан в файле “servers” клиента “radiusclient-ng”
Файл “clients.conf”
client localhost {
        ipaddr = 127.0.0.1
        secret = myradiussecret
}
Файл “radiusd.conf” приводим к виду:
prefix = /usr
exec_prefix = /usr
sysconfdir = /etc
localstatedir = /var
sbindir = /usr/sbin
logdir = ${localstatedir}/log/radius
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct

name = radiusd

confdir = ${raddbdir}
run_dir = ${localstatedir}/run/${name}
db_dir = ${raddbdir}
libdir = /usr/lib64/freeradius
pidfile = ${run_dir}/${name}.pid

user = radiusd
group = radiusd

max_request_time = 30
cleanup_delay = 5
max_requests = 1024

listen {
        ipaddr = *
        port = 1812
        type = auth
}

listen {
        ipaddr = *
        port = 1813
        type = acct
}

hostname_lookups = no
allow_core_dumps = no

regular_expressions     = yes
extended_expressions    = yes

log {
        destination = files
        file = ${logdir}/radius.log
        stripped_names = no
        auth = no
        auth_badpass = no
        auth_goodpass = no
}

checkrad = ${sbindir}/checkrad

security {
        max_attributes = 200
        reject_delay = 1
        status_server = yes
}

proxy_requests  = no

$INCLUDE clients.conf

thread pool {
        start_servers = 5
        max_servers = 32
        min_spare_servers = 3
        max_spare_servers = 10
        max_requests_per_server = 0
}

modules {
        $INCLUDE ${confdir}/modules/
        $INCLUDE sql.conf
}

instantiate {
        exec
        expr
        expiration
        logintime
}

$INCLUDE policy.conf
$INCLUDE sites-enabled/
В штатной поставке freeRADIUS начиная с версии 1.1.2 уже идёт словарь от компании Digium, поэтому подключать дополнительный словарь к серверу RADIUS не требуется.
Файл “sql.conf” приводим к виду:
sql {
        database = "mysql"
        driver = "rlm_sql_${database}"
        server = "127.0.0.1"
        port = 3306
        login = "astradius"
        password = "radpass"
        radius_db = "radius"

        acct_table1 = "radacct"
        acct_table2 = "radacct"

        deletestalesessions = yes

        sqltrace = no
        sqltracefile = ${logdir}/sqltrace.sql

        num_sql_socks = 5
        connect_failure_retry_delay = 60
        lifetime = 0
        max_queries = 0
        nas_table = "nas"

        $INCLUDE sql/${database}/radcdr.conf
}
Файл "sites-enabled/default" приводим к виду:
authorize {
        preprocess
        sql
        expiration
        logintime
}

authenticate {

}

preacct {
        acct_unique
}

accounting {
        sql
        attr_filter.accounting_response
}

session {
        sql
}

post-auth {
        sql
        Post-Auth-Type REJECT {
                sql
                attr_filter.access_reject
        }
}
Символьную ссылку на файл “sites-enabled/inner-tunel” удаляем.
Создаём файл "sql/mysql/radcdr.conf" в котором описываем запрос к базе данных MySQL. При помощи указанного запроса данные детализации звонков полученные сервером freeRADIUS помещаются в MySQL таблицу.
accounting_stop_query = " \
    INSERT INTO ${acct_table2} \
        (accountcode, src, dst, dcontext, \
            clid, channel, dstchannel, lastapp, \
            lastdata, start, answer, end, duration, billsec, \
            disposition, amaflags, uniqueid, userfield) \
    VALUES \
        ('%{Asterisk-Acc-Code}', '%{Asterisk-Src}', '%{Asterisk-Dst}', '%{Asterisk-Dst-Ctx}', \
            '%{Asterisk-Clid}', '%{Asterisk-Chan}', '%{Asterisk-Dst-Chan}', '%{Asterisk-Last-App}', \
            '%{Asterisk-Last-Data}', '%{Asterisk-Start-Time}', '%{Asterisk-Answer-Time}', \
            '%{Asterisk-End-Time}', '%{Asterisk-Duration}', '%{Asterisk-Bill-Sec}', \
            '%{Asterisk-Disposition}', '%{Asterisk-AMA-Flags}', '%{Asterisk-Unique-ID}', \
            '%{Asterisk-User-Field}')"
Активируем запусе freeRADIUS сервера при загрузке системы.
$ sudo chkconfig radiusd on

Конфигурация Asterisk
Реализованная на данный момент модель работы Asterisk по протоколу RADIUS не предполагает аутентификации (Authentication) и авторизации (Authorization), пока возможен только сбор учётных данных об используемых ресурсах (Accounting). Для биллинг систем подобная модель работы конечно не годится, но для сбора детализации вполне подходит. Предполагается что сервер Asterisk уже установлен, поэтому потребуется установить лишь один пакет для работы Asterisk совместно с RADIUS сервером.
$ sudo yum install asterisk-radius
Для детализации звонков в Asterisk на имеется два модуля: RADIUS CDR Backend и RADIUS CEL Backend. Выбор пал на “CDR Backend”, поскольку модуль “CEL Backend” имеет незакрытый баг.
Всё что требуется сделать в Asterisk это привести файл конфигурации "cdr.conf" к следующему виду:
[general]

enable=yes
unanswered = yes

[radius]
usegmtime = yes    ; log date/time in GMT
loguniqueid = yes  ; log uniqueid
loguserfield = yes ; log user field
radiuscfg => /etc/radiusclient-ng/radiusclient.conf
После редактирования конфигурации подключимся к консоли Asterisk и перезагрузим модуль.
localhost*CLI> module unload cdr_radius.so
localhost*CLI> module load cdr_radius.so
Loaded cdr_radius.so
 == Parsing '/etc/asterisk/cdr.conf':   == Found
Loaded cdr_radius.so => (RADIUS CDR Backend)
Готово! Делаем звонок.
Подключаемся к MySQL серверу, и убеждаемся в корректной работе детализации.
mysql> use radius;
Database changed
mysql> SELECT src, dst, start, end, duration, answer  FROM radacct;
+-----+-----+---------------------+---------------------+----------+---------------------+
| src | dst | start               | end                 | duration | answer              |
+-----+-----+---------------------+---------------------+----------+---------------------+
| 100 | 500 | 2013-03-29 15:57:15 | 2013-03-29 15:57:22 |        7 | 2013-03-29 15:57:15 |
| 100 | 500 | 2013-03-29 16:13:31 | 2013-03-29 16:13:35 |        4 | 2013-03-29 16:13:31 |
+-----+-----+---------------------+---------------------+----------+---------------------+
2 rows in set (0.00 sec)
Получить детализацию с дополнительного сервера Asterisk достаточно просто, требуется лишь добавить секцию клиента в файле “clients.conf” и дать возможность серверу RADIUS слушать соединения на нужных сетевых интерфейсах. После этого можно переходить к настройке дополнительного сервера Asterisk с клиентом radiusclient-ng.

Отображение информации о детализации из базы данных при помощи WEB интерфейса описано в следующей публикации.

пятница, 18 января 2013 г.

Решение проблемы "unable to connect to remote asterisk"

Довольно часто, да что там, практически постоянно мы видим данную надпись после свежей установки Asterisk на сервер. Происходит подобная ошибка потому что Asterisk запускается сразу, без предварительной настройки сервиса. Как результат, попытка подключиться к Asterisk при помощи команды "asterisk -r" огорчает нас следующим сообщением:
Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)
Я опишу последовательность шагов которые позволят избежать появление данной ошибки. Asterisk запускаем на дистрибутивах CentOS 5 или CentOS 6, в других дистрибутивах содержание и местонахождение файлов может отличаться.
  1. Создаём пользователя. На сервере нам потребуется пользователь под которым будет запускаться Asterisk, заводим пользователя с командой “useradd asterisk”. Параметры по умолчанию заданные при создании пользователя можно посмотреть с помощью команды “useradd -D”. При создании пользователя будет также создана одноимённая группа.
  2. Настраиваем запуск Asterisk. Открываем на редактирование файл "/etc/sysconfig/asterisk" и выставляем переменные "AST_USER" и "AST_GROUP" в соответствии с созданным пользователем под которым должен быть запущен Asterisk. Если имя пользователя совпадает с именем группы то оставляем "AST_GROUP" закомментированным, в этой переменной будет использовано значение из "AST_USER". При отсутствии файла "/etc/sysconfig/asterisk" переменные "AST_USER" и "AST_GROUP" могут также выставляться в файле "/etc/rc.d/init.d/asterisk".
  3. Выставляем права на файл asterisk.ctl. Открываем на редактирование файл “/etc/asterisk/asterisk.conf” и в разделе [files] выставляем следующую конфигурацию:
[files]
astctlpermissions = 0660
astctlowner = asterisk
astctlgroup = asterisk
astctl = asterisk.ctl
Перезапускаем Asterisk и подключаемся с помощью команды
$ asterisk -r

воскресенье, 27 мая 2012 г.

Asterisk realtime queue_log

Продолжаем рассказ о подключении к Asterisk 1.8 архитектуры реального времени или как её иначе называют realtime. О получении с использованием realtime конфигурации musiconhold рассказано в предыдущей публикации, если realtime на Asterisk настраивается впервые, рекомендуется обратиться к этой статье для первоначальной настройки. 
На этот раз мы будем подключать queue_log. Как было замечено в предыдущей публикации одним из препятствий с которым приходится сталкиваться при подключении realtime является отсутствии структуры таблицы. Те таблицы что в обилии есть на просторах интернета уже давно не актуальны, а те что идут вместе с исходным кодом Asterisk приходится модифицировать. 

При создании структуры таблицы из поставляемого с исходным кодом Asterisk файла дампа queue_log.sql в лог файле Asterisk у нас появятся ошибки:

“Realtime table queue_log@general: Column time cannot be a datetime res_config_mysql.c: Table queue_log requires a column 'data' of size '0', but no such column exists.
res_config_mysql.c: MySQL RealTime: Failed to insert into database: Unknown column 'data' in 'field list'”

Нам требуется модифицированная SQL таблица которая представлена ниже

CREATE TABLE `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;

Рассмотрим по порядку назначение каждого поля.

time - Дата и время события. С некоторых пор к дате и времени через точку добавляются микросекунды, после этого поле таблицы по понятным причинам уже не может быть SQL формата datetime, меняем формат поля на varchar.
callid - "REALTIME", "NONE", или уникальный идентификатор канала.  
queuename - Имя затронутой очереди пока описанной в конфигурационном файле queues.conf
agent - Одно из значений ADDMEMBER, REMOVEMEMBER, RINGNOANSWER, EXITEMPTY, TRANSFER, AGENTDUMP, ABANDON, SYSCOMPAT, CONNECT, COMPLETECALLER, COMPLETEAGENT, AUSEALL, UNPAUSEALL, PAUSE, UNPAUSE, PENALTY, ENTERQUEUE, EXITWITHTIMEOUT, EXITEMPTY, EXITWITHKEY, или значение определённое пользователем.
data ... data5 - Аргументы связанные с событием описанном в поле event.

В конфигурационном файле логов Asterisk logger.conf по умолчанию идёт настройка таким образом, что как только для queue_log появляется возможность работы с realtime сразу начинается запись в базу данных. Поэтому теперь нам лишь требуется убрать комментарий перед надписью “queue_log => mysql,general” в конфигурационном файле extconfig.conf, выполнить команду из консоли Asterisk “module reload” и можно начинать смотреть данные которые начнут появляться в MySQL таблице queue_log. Файл queue_log находящийся в директории “/var/log/asterisk” нам больше не понадобится и его можно удалить.

суббота, 26 мая 2012 г.

Asterisk realtime

Что нам стоит “Asterisk realtime” построить!


Настройка Asterisk с использованием текстовых конфигурационных файлов приемлема на начальных этапах эксплуатации, но ещё более удобна настройка с использованием какой либо распространённой базы данных. В данной публикации будет рассмотрена работа с использованием архитектуры реального времени “Asterisk Realtime Architecture” или просто realtime.
Realtime существует в двух типах - статическом и динамическом. Статический тип похож на метод чтения из конфигурационного файла, только в данном случае все значения конфигурационного файла у нас находятся в базе данных. Чтобы заполучить изменённую конфигурацию при статическом типе realtime требуется перезагрузить модули командой “module reload” из консоли сервера Asterisk. Динамический же тип realtime, напротив, получает требуемую конфигурацию сразу по мере необходимости без какой либо перезагрузки модулей.

В интернете находится разрозненная информация о том как настроить realtime применительно к ранним версиям Asterisk. В открывающемся цикле статей я буду обобщать свой опыт настройки Asterisk realtime. Будет рассмотрено использование архитектуры реального времени на примере LTS версии Asterisk 1.8 с использованием дистрибутива CentOS 5.x при подключении к MySQL базе данных.

Настройка сервера Asterisk

Конфигурация Asterisk realtime находится в трёх файлах - extconfig.conf, res_config_mysql.conf и cdr_mysql.conf.

extconfig.conf отвечает за realtime конфигурацию iaxusers, iaxpeers, sippeers, sipregs, voicemail, extensions, meetme, queues, queue_members, musiconhold, queue_log и ряда файлов со статическим типом конфигурации. Все эти записи закрыты комментариями, мы будем убирать комментарии по ходу настройки и создания соответствующих таблиц в базе данных MySQL.
Надо заметить что изменился формат записей по отношению к предыдущим версиям Asterisk. Если в ранних версиях для настройки realtime формат записи был: “<family name> => <driver>,<database name> [,table_name]”, то теперь он стал “<family name> => <context> [,table_name]”. Как мы видим перечисления “driver” и “database name” представлены как отдельный “context”. Описание контекста находится в файле “res_config_mysql.conf”, при конфигурации по умолчанию контекстом у нас является “general”. Необязательное значение “[table_name]” не указывается в случае если “<family name>” совпадает с именем таблицы создаваемой в базе MySQL.

res_config_mysql.conf отвечает за подключение к MySQL базе данных. Разберём конфигурацию подключения. При просмотре файла мы видим следующие записи, практически все они закрыты комментариями.
[general]
;dbhost = 127.0.0.1
;dbname = asterisk
;dbuser = myuser
;dbpass = mypass
;dbport = 3306
;dbsock = /tmp/mysql.sock
;dbcharset = latin1
;requirements=warn ; or createclose or createchar
Требуется снять комментарии со всех вышеприведённых строчек, за исключением “dbsock = /tmp/mysql.sock” и изменить значения записей dbuser, dbpass и dbcharset на те значения что использовали при создании базы данных.

Предполагается что сервер MySQL у нас уже установлен, сконфигурирован под хранилище “InnoDB” и использует кодировку “utf8”. Поэтому подключившись пользователем root к серверу MySQL, создаём базу данных и пользователя.
CREATE DATABASE asteriskdb;
GRANT ALL PRIVILEGES ON asteriskdb.* TO 'asterisk'@'localhost' IDENTIFIED BY 'mypass' WITH GRANT OPTION;
flush privileges;
После подключения к консоли сервера Asterisk и применения новой конфигурации проверяем соединение с базой.
module reload
realtime mysql status
general connected to asteriskdb@127.0.0.1, port 3306 with username asterisk for 1 days, 1 hours.
cdr_mysql.conf отвечает за подключение к базе данных MySQL при использовании записи звонков (Call Detail Records). Используется для статистики звонков или основанного на CDR биллинга звонков. По умолчанию запись звонков ведётся в CSV файл “/var/log/asterisk/cdr-csv/Master.csv”. При просмотре файла мы видим записи похожие на те что были в конфигурационном файле res_config_mysql.conf.
;[global]
;hostname=database.host.name
;dbname=asteriskcdrdb
;table=cdr
;password=password
;user=asteriskcdruser
;port=3306
;sock=/tmp/mysql.sock
;timezone=UTC ; Previously called usegmtime
Теперь, так же как и ранее в файле res_config_mysql.conf нам требуется снять комментарии со всех вышеприведённых строчек, за исключением “sock = /tmp/mysql.sock” и изменить значения записей hostname, dbname, password и user на те значения что использовали при создании базы данных.

Перезагружаем сервер Asterisk и после подключения к консоли сервера проверяем соединение с базой.
cdr mysql status
Connected to asteriskdb@127.0.0.1, port 3306 using table cdr for 1 hours, 22 minutes, 39 seconds.”

Подготовка MySQL таблиц


Итак, настройка сервера произведена и теперь в базе данных MySQL создаём таблицы с требуемыми полями. К сожалению тут не всё так просто, дело в том что от версии к версии Asterisk поля меняются. Те MySQL таблицы которые можно найти в интернете от ранних версий Asterisk уже не подходят к современным версиям Asterisk и приходится их дорабатывать. Ситуация осложняется и тем что дорабатывать приходится даже те MySQL таблицы которые идут вместе с исходным кодом Asterisk и находятся в директории “asterisk-1.8.x.x/contrib/realtime/mysql”. Дело это поправимо, благо изменений в MySQL таблицах много не требуется и готовые к использованию таблицы будут представлены далее.

Asterisk musiconhold realtime


В качестве примера начнём с лёгкого на мой взгляд варианта, такого как перенос значений конфигурационного файла musiconhold.conf в базу данных MySQL. Чтобы создать требуемую таблицу воспользуемся следующей SQL командой:
CREATE TABLE musiconhold (
       name char(80) not null primary key,
       mode char(80) null,
       directory char(255) null,
       application char(255) null,
       digit char(1) null,
       sort char(10) null,
       format char(10) null,
       stamp timestamp
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Рассмотрим по порядку назначение каждого поля. Те значения которые указаны в конфигурационном файле musiconhold.conf будем указывать как значения по умолчанию.

name - имя MOH класса (‘default’ по умолчанию). 
mode - одно из значений “'custom', 'files', 'mp3nb', 'quietmp3nb' или 'quietmp3' (‘files’ по умолчанию)
directory - Указывается директория с файлами которые требуется проигрывать, возможно также указать поток или URL. Если значение mode установлено в ‘custom’ директория игнорируется. (‘/var/lib/asterisk/moh’ по умолчанию)
application - Запускается приложение которое предоставляет MOH в случае если значение mode установлено в ‘custom’. В противном случае игнорируется. (‘null’ по умолчанию)
digit - Цифра соответствующая классу MOH, в том случае если MOH возможно выбрать звонящему абоненту. (‘null’ по умолчанию)
sort - Порядок проигрывания файлов, одно из значений 'random' or 'alpha'. В случае если значение отсутствует устанавливается порядок в котором отображаются файлы в директории. (‘null’ по умолчанию)
format - Указывается формат воспроизводимого аудио файла в случае если значение mode установлено в ‘custom’. Форматом аудио файла по умолчанию является SLIN, “16 bit Signed Linear PCM” (‘null’ по умолчанию)
stamp - Временная метка модификации записи.

После этого в конфигурационном файле musicinhold.conf комментируем все записи, а в конфигурационном файле extconfig.conf напротив, убираем комментарий у записи “musiconhold => mysql,general”. Зайдя на консоль asterisk выполняем команду “module reload”. Перезагрузка модулей требуется для перемещения конфигурации из файла musiconhold.conf в базу данных MySQL.

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

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