; ; Asterisk CLI configuration ; [startup_commands] ; ; Any commands listed in this section will get automatically executed ; when Asterisk starts as a daemon or foreground process (-c). ; ;sip set debug on = yes ;core set verbose 3 = yes ;core set debug 1 = yes
asterisk:cf:cli.conf
Временный сброс пароля FreePBX
Временный сброс пароля FreePBX
Эта возможность работает, если опция Asterisk Advanced Settings - Enable Remote Unlocking (REMOTEUNLOCK) = true.
В версии FreePBX 2.11 - true по умолчанию.
Начиная с версии FreePBX 12 - по умолчанию - false
При помощи команды amportal a u xxxxxxxxxxxxxxxx-можно войти во FreePBX без ввода имени пользователя и пароля.
xxxxxxxxxxxxxxxx-требуется заменить на PHP ID сессии. Выполните следующие действия:
Откройте веб интерфейс FreePBX в вашем браузере - http://ip_address/admin
и нажмите ctrl-A:
Слева вы увидите уникальный id php сессии. Скопируйте его и вставьте вместо xxxxxxxxxxxxxxxx-:
amportal a u cl1q3tp4tsaccit6pbl2vispp0
[root@localhost ~]# amportal a u cl1q3tp4tsaccit6pbl2vispp0 Please wait... session unlocked!
После ввода этой команды, вы сможете зайти в веб интерфейс без ввода логина/пароля.
Разблокировка действует только для текущей php сессии и после обновления страницы, id сменится, и снова потребуется ввести пароль.
Соединение двух FreePBX
Соединение двух FreePBX
Существуют две точки входа в Диалплан FreePBX.
Это контексты [from-trunk] и [from-internal].
Когда вызов направляется в контекст [from-trunk],
он обрабатывается как DIDи рассматривается как внешний вызов.
Если же вызов направляется в контекст [from-internal] он рассматривается
как внутренний вызов от SIP, IAXили DAHDIекстеншена Вашей АТС.
Далее будет рассмотрен пример объединения двух FreePBX с созданием общего
Диалплана, так, чтобы для конечного пользователя две машины работали как одна.
FreePBX «офис1» выходит через '9' на внешние линии и имеет внутреннюю нумерацию от 110 до 149.
FreePBX «офис2» выходит через '0' на внешние линии и имеет внутреннюю нумерацию в диапазоне от 200 до 249.
Первым делом создадим IAXтранк между двумя сторонами.
Для FreePBX «офис1»
Trunks
Trunk Name
office2PEER Details
deny=all запрещает использование всех аудио кодеков. allow=g729&alaw разрешает использование кодеков g729 и g711 alaw. type=friend может совершать и принимать звонки host=IP'office2' может совершать и принимать звонки с хоста 'office2'. qualify=yes регулярно поддерживать связь с удаленной машиной. context=from-internal обрабатывать входящие звонки из 'office2'в контексте [from-internal]
Для FreePBX «офис2» создается такой же транк. Только изменяем host на IP'office1'. Trunk Name
office1PEER Details
deny=all allow=g729&alaw type=friend host=IP 'office1' qualify=yes context=from-internal
Вот и все с транками. Теперь создадим исходящую маршрутизацию.
Для FreePBX «офис1»
Outbound Routes
Route Name
tooffice2Dial Patterns
2[0-4]XTrunk Sequence
IAX/office2
Для FreePBX «офис»
Route Name
tooffice1Dial Patterns
1[1-4]XTrunk Sequence
IAX/office1
Asterisk: cdr.conf
Asterisk: cdr.conf
cdr.conf - Общие (глобальные) настройки детализированного отчета о звонках и настройки cdr-csv и radius бэкендов.
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 формат.
Бакенды:
- radius настраивается в этом же файле (cdr.conf)
Вспомогательные модули, кастомизация полей:
Для компиляции модулей, требуется чтобы их зависимости были установлены до выполнения команды configure. Воспользуйтесь командой make menuselectи в разделе «2. 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
To get CDRs to be logged to the plain-jane /var/log/asterisk/cdr-csv/Master.csv file, define the [csv] category in this file. No database necessary. The example config files are set up to provide this kind of output by default.
To get custom csv CDR records, make sure the cdr_custom.conf file is present, and contains the proper [mappings] section. The advantage to using this backend, is that you can define which fields to output, and in what order. By default, the example configs are set up to mimic the cdr-csv output. If you don't make any changes to the mappings, you are basically generating the same thing as cdr-csv, but expending more CPU cycles to do so!
To get manager events generated, make sure the cdr_manager.conf file exists, and the [general] section is defined, with the single variable 'enabled = yes'.
For odbc, make sure all the proper libs are installed, that «make menuselect» shows that the modules are available, and the cdr_odbc.conf file exists, and has a [global] section with the proper variables defined.
For pgsql, make sure all the proper libs are installed, that «make menuselect» shows that the modules are available, and the cdr_pgsql.conf file exists, and has a [global] section with the proper variables defined.
For logging to radius databases, make sure all the proper libs are installed, that «make menuselect» shows that the modules are available, and the [radius] category is defined in this file, and in that section, make sure the 'radiuscfg' variable is properly pointing to an existing radiusclient.conf file.
For logging to sqlite databases, make sure the 'cdr.db' file exists in the log directory, which is usually /var/log/asterisk. Of course, the proper libraries should be available during the 'configure' operation.
For tds logging, make sure the proper libraries are available during the 'configure' phase, and that cdr_tds.conf exists and is properly set up with a [global] category.
Also, remember, that if you wish to log CDR info to a database, you will have to define a specific table in that databse to make things work! See the doc directory for more details on how to create this table in each database.
[csv] usegmtime=yes log date/time in GMT. Default is "no" loguniqueid=yes log uniqueid. Default is "no" loguserfield=yes log user field. Default is "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:cdr_custom.conf
Asterisk:cdr_custom.conf
cdr_custom.conf - тонкая настройка вывода полей CDRв csv файл. Обычно находится в директории /var/log/asterisk/cdr-custom/…)
; ; Mappings for custom config file ; ; To get your CSV output in a format tailored to your liking, uncomment the ; following lines and look for the output in the cdr-custom directory (usually ; in /var/log/asterisk). Depending on which mapping you uncomment, you may see ; Master.csv, Simple.csv, or both. ; ;[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(sequence)} ; ; High Resolution Time for billsec and duration fields ;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,f)})},${CSV_QUOTE(${CDR(billsec,f)})},${CSV_QUOTE(${CDR(disposition)})},${CSV_QUOTE(${CDR(amaflags)})},${CSV_QUOTE(${CDR(accountcode)})},${CSV_QUOTE(${CDR(uniqueid)})},${CSV_QUOTE(${CDR(userfield)})},${CDR(sequence)} ;Simple.csv => ${CSV_QUOTE(${EPOCH})},${CSV_QUOTE(${CDR(src)})},${CSV_QUOTE(${CDR(dst)})}
Файлы конфигурации Asterisk
Файлы конфигурации Asterisk
Конфигурационные файлы Asterisk отвечают за настройку модулей, приложений, пиров, практически, всех аспектов работы программного комплекса IP АТС Asterisk.
- Asterisk:acl.conf - Access Control List - Списки контроля доступа. Используется для создания списков ip адресов или подсетей, для разрешения или запрещения SIPрегистраций.
- Asterisk: agents.conf - Конфигурация агентов очередей Asterisk.
- alarmreceiver.conf - Настройка модуля взаимодействия с охранными системами по протоколу Ademco.
- asterisk:alsa.conf - Модуль захвата аудио с внутренней звуковой карты.
- Asterisk:amd.conf - Настройка приложения для распознавания автоотвечиков на линии.
- Asterisk: app_mysql.conf - Дополнительный свойства соединения с mysql.
- Asterisk:app_skel.conf - Вспомогательный модуль для отладки новых приложений Asterisk. Для разработчиков.
- Asterisk: ari.conf - Интерфейс RESTful Asterisk.
- asterisk.conf - Общие (глобальные) настройки Asterisk
- Asterisk:calendar.conf - Взаимодействие с серверами календарей.
- ccss.conf - Служба отложенного вызова.
- Asterisk: cdr.conf - Детализированный отчет о звонках - CDR.
- cdr_adaptive_odbc.conf - Позволяет изменять имена полей CDR, на нужные вам имена переменных.
- Asterisk:cdr_custom.conf - Преобразование полей CDRв csv логе.
- cdr_manager.conf - CDRна основе событий AMI.
- Asterisk: cdr_mysql.conf - Параметры соединения с БД MySQL, для сохранения данных CDR.
- cdr_odbc.conf - Параметры ODBC соединений, для сохранения данных CDR.
- cdr_pgsql.conf - Параметры соединения с СУБД PostgreSQL, для сохранения данных CDR.
- cdr_sqlite3_custom.conf - Настройка полей CDRв БД Sqlite3
- cdr_syslog.conf - Модуль cdr_syslog сохраняет CDR, при помощи системного журнала (журналирование)
- cdr_tds.conf - FreeTDS библиотека Linux, позволяющая соединяться с Sybase ASE и Microsoft SQL Server.
- cel.conf - Channel Event Logging - Лог событий канала. В отличии от CDR, сохраняет все события имевшие место в канале.
- cel_custom.conf - Сохранение данных Channel Event Logging в csv файл.
- cel_odbc.conf - Сохранение данных Channel Event Logging через ODBC драйвер.
- cel_pgsql.conf - Сохранение данных Channel Event Logging в СуБД PostgreSQL.
- cel_sqlite3_custom.conf - Настройка полей CEL в БД Sqlite3
- cel_tds.conf - Соединение с Microsoft SQL Server при помощи библиотеки FreeTDS.
- chan_dahdi.conf - Настройки драйвера канала DAHDI
- chan_mobile.conf - Настройки модуля связи bluetooth. Позволяет использовать мобильный телефон, как канал связи.
- cli.conf - Настройки консоли Asterisk.
- cli_aliases.conf - Псевдонимы команд консоли Asterisk.
- cli_permissions.conf - Разрешение/Запрет выполнения команд консоли Asterisk, для пользователей Linux.
- codecs.conf - Настройки кодеков.
- Asterisk: confbridge.conf - Настройка модуля телеконференций в Asterisk.
- console.conf - Используйте вход/выход звуковой карты, как устройство связи Asterisk.
- dbsep.conf - Реализация realtime архитектуры при помощи cURL и CGI скрипта (dpseb.cgi - распространяется с исходными файлами Asterisk)
- dnsmgr.conf - Настройки DNS-запросов.
- dsp.conf - Настройки модуля DSP.
- dundi.conf - Распределённое универсальное распознавание номеров
- enum.conf -ENUMслужба сопоставления телефонных номеров адресам в интернете.
- extconfig.conf - Настройки RealTime архитектуры и статической конфигурации в БД.
- extensions.ael - План набора (dialplan) на Asterisk Extensions Language (AEL)
- extensions.conf - Dialplan - План набора (dialplan) Asterisk - pbx_config
- extensions.lua - План набора (dialplan) Asterisk на LUA.
- extensions_minivm.conf - План набора для minivm.
- Коды Asterisk - features.conf - Конфигурация пользовательских кодов Asterisk.
- festival.conf - Синтез речи.
- Asterisk: followme.conf - Настройки модуля Следуй за Мной.
- func_odbc.conf - Функции ODBC.
- h323.conf - Настройки одной из двух реализаций протокола h323 в Asterisk.
- http.conf - Встроенный http сервер Asterisk.
- Драйвер канала Asterisk IAX2 - Inter Asterisk Exchange - собственный VoIPпротокол в Asterisk.
- indications.conf - Национализация тональных сигналов.
- logger.conf - Настройка логов Asterisk.
- manager.conf - Настройка интерфейса AMI (Asterisk Manager Interface)
- meetme.conf - Устаревшая система телеконференций Asterisk.
- minivm.conf - Упрощенная система голосовой почты, как дополнение app_voicemail.c
- modules.conf - Параметры загрузки модулей Asterisk.
- Asterisk: MOH - Настройка Музыки на Удержании (MOH)
- ooh323.conf - Еще одна реализация протокола h323.
- pjsip.conf - PJSIP драйвер Asterisk. Вторая и более полная реализация драйвера SIPв Asterisk.
- Asterisk queuerules.conf - Правила динамического изменения пенальти пользователей очереди.
- Настройка очередей (queues.conf) Asterisk - Настройка очередей входящих вызовов.
- res_config_mysql.conf - Параметры соединения с БД MySQL.
- res_config_sqlite.conf - Параметры соединения с БД Sqlite
- res_config_sqlite3.conf - Параметры соединения с БД Sqlite3
- res_corosync.conf - Общие (share) состояния устройств для кластера серверов Asterisk при помощи движка corosync.
- res_curl.conf - Чтение/Запись данных Asterisk на удаленный http сервер через cURL (Realtime, Events, etc).
- res_fax.conf - Прием и отправка виртуальных факсов Asterisk.
- res_ldap.conf - Параметры соединения с LDAP.
- res_odbc.conf - Параметры соединения ODBC.
- res_parking.conf - Парковка вызовов.
- res_pgsql.conf - Параметры соединения PostgreSQL.
- Asterisk 12 res_pjsip_acl - Списки контроля доступа ACLдля PJSIP драйвера.
- res_snmp.conf - Параметры соединения протокола сетевого управления SNMP.
- rtp.conf - Глобальные настройки RTP - медиа портов и протокола.
- sip.conf - Настройки sip драйвера chan_sip
- sorcery.conf - Механизм кэширование Реалтайм конфигураций (на данный момент только PJSIP).
- users.conf - Универсальные пользователи, вместо пиров в конфиге драйвера канала (например SIP). Устаревший принцип.
—————–
- Asterisk cdr.conf - Call Detail Records - Детализированный отчет о звонках - Описание модулей работы с CDRв Asterisk.
- Asterisk: iax.conf - Настройки собственного VoIPпротокола Asterisk - Inter Asterisk Exchange.
- Пример файла chan_dahdi.conf для интерфейса ISDN PRI E1. - Пример конфигурации ISDN PRI E1.
Asterisk app: While
Asterisk app: While
Команда плана набора Asterisk While - Повторять цикл (loop) пока условие верно.
Описание
Петля создается между приложениями While() и EndWhile() и выполняется,
пока условие заданное в While(условие) верно.
Условие вычисляется один раз за цикл, в самом начале.
примечания:
- Цикл While/EndWhile может параллельно выполнять множество наборов за раз.
- Если условие неверно, выполнение диалплана продолжается после EndWhile
- Еще один модификатор цикла, приложение ContunueWhile
Синтаксис
While(expr)
Пример
exten => _4881,1,Answer exten => _4881,n,Set(i=1) exten => _4881,n,While($[${i} < 5]) exten => _4881,n,SayNumber(${i}) exten => _4881,n,Set(i=$[${i} + 1]) exten => _4881,n,EndWhile
см. также
Ограничение количества одновременных вызовов по ...
Ограничение количества одновременных вызовов по набранному номеру (call limit).
Контекст
- Набирается номер 810ХХХХХХХ, в консоль выводится сообщение: набираем 810ХХХХХХХ
- функция GROUP() назначает вызовы в группу long
- В консоль выводится сообщение: кол-во одновременных вызовов - ${GROUP_COUNT(long)}, где ${GROUP_COUNT(long) = порядковый номер вызова.
- Проверяется условие, если количество одновременных вызовов больше 1, вызов направляется в екстеншен overи разъединяется с выводом в консоль:
лимит превышен на - […] вызова.
- Если вызов первый, номер набирается через SIPтранк provider.
exten => _810.,1,Verbose(*** набираем - ${EXTEN} ***) same => n,Set(GROUP()=long) same => n,Verbose(*** кол-во одновременных вызовов - ${GROUP_COUNT(long)} ***) same => n,GotoIf($[${GROUP_COUNT(long)} > 1]?over) same => n,Dial(PJSIP/${EXTEN}@siptrunk,,) same => n(over),Verbose(*** лимит превышен на - ${MATH(${GROUP_COUNT(long)}-1)} вызова ***) same => n,Set(DIALSTATUS=CHANUNAVAIL)
Zapateller()
Zapateller()
Назначение: Блокировка telemarketers с использованием SIT
Описание: Zapateller(options)
Генерирует специальный информационный тональный сигнал для блокировки, вызывающего Вас, telemarketers.
Опции должны быть разделены вертикальной чертой. Доступны следующие опции:
- answer: параметр задает, что необходимо ответить на вызов перед генерации тонального сигнала
- nocallerid: параметр задает, чтоб Zapateller проигрывал тональный сигнал, только если от звонящего не получена информация о callerid.
Опции должны быть разделены символом |
Код возврата: Возвращает 0 при нормальном завершении или -1 при разрыве связи.
Команда Asterisk: Zapateller
Команда Asterisk: Zapateller
Команда диалплана Asterisk - при получении входящего генерирует специальный тональный сигнал, который блокирует вызов системы обзвона абонентов (телемаркетинга). Возвращает переменную ${ZAPATELLERSTATUS} с одним из следующих значений:
- NOTHING
- ANSWERED
- ZAPPED
синтаксис
Zapateller(options)
==аргументы
- options - опции разделенные запятой.
- answer: Ответить на вызов, перед генерацией тонального сигнала.
- nocallerid - генерировать тон, только при отсутствии callerid.
[Synopsis] Block telemarketers with SIT (Special information tones). [Description] Generates special information tone (SIT) to block telemarketers from calling you. This application will set the following channel variable upon completion: ${ZAPATELLERSTATUS}: This will contain the last action accomplished by the Zapateller application. Possible values include: NOTHING ANSWERED ZAPPED [Syntax] Zapateller(options) [Arguments] options Comma delimited list of options. answer: Causes the line to be answered before playing the tone. nocallerid: Causes Zapateller to only play the tone if there is no callerid information available. [See Also] Not available
Команда Asterisk: AddQueueMember
Команда Asterisk: AddQueueMember
Приложение диалплана Asterisk: Динамическое добавление интерфейса для обработки очереди вызовов.
Описание
AddQueueMember(queuename[[,interface[[,penalty[[,options[[,membername[[,stateinterface]]]]]))
Команда динамически добавляет интерфейс в существующую очередь вызовов, для обработки поступающих в нее вызовов (интерфейс как бы регистрируется в очереди вызовов, так же как агент, с использованием команды AgentCallbackLogin).
Аргументы
- queuename - имя очереди вызовов, в которую необходимо добавить интерфейс.
- interface - Название интерфейса для добавления в очередь, если не указано, используется текущий интерфейс.
- penalty - Целое число большее или равное нулю, доступные участники, обрабатывающие очередь, с меньшим значением пенальти получают вызовы в первую очередь.
- options: (версии 1.2+)
- j - Если заданный интерфейс уже обрабатывает поступающие вызовы данной очереди и существует команда с приоритетом n+101, тогда с нее продолжиться выполнение команд плана набора. Иначе, команда выйдет с кодом ошибки.
- В версии 1.6+ нет значений для поля «options», т.к. параметр «j» был удален, но, если необходимо указать остальные параметры, то этот аргумент должен быть указан как пустой параметр: ,,
- membername - имя для участника обработки очереди, под которым он будет добавлен.
- stateinterface - альтернативный интерфейс, который будет использоваться для определения состояния участника обработки очереди.
Код возврата
При возникновении ошибки возвращает -1.
По завершению выполнения, команда также установит переменную AQMSTATUS в одно из значений:
- ADDED
- MEMBERALREADY
- NOSUCHQUEUE
Пример:
AddQueueMember(sales,PJSIP/2666)
Используя вариант этой команды: AddQueueMember(<queuename>), вы добавите интерфейс, который совершает вызов, в список участников, которые обрабатывают очередь. <queuename> - это имя очереди вызовов, описанной в файле queues.conf
пример2:
exten => _101,1,Noop(agent logged on) same => n,Set(queueN=q${EXTEN:0:1}) same => n,AddQueueMember(${queueN},Local/${CALLERID(num)}@from-queue/n) same => n,PlayBack(ru/agent-loginok)
*CLI> queue show q1 q1 has 0 calls (max 11) in 'random' strategy (0s holdtime, 0s talktime), W:0, C:0, A:0, SL:0.0% within 0s Members: Local/4887@from-queue/n (ringinuse disabled) (dynamic) (Not in use) has taken no calls yet No CallersСм. также
Команды диалплана Asterisk
Команды диалплана Asterisk
В данном документе приведен список команд, которые Вы можете использовать в плане набора (extensions.conf). Получить список и описание приложений, доступных на вашем сервере Asterisk Вы можете командами CLI:
core show applicationsи core show application <name>.
Asterisk Dialplan Applications
- Команда Asterisk: AddQueueMember: Динамическое добавление агента для очереди.
- Asterisk app: ADSIProg: Загрузка ADSI скрипта Asterisk в телефон.
- Asterisk app: AELSub: Перейти в AEL (asterisk extension Language) подпрограмму.
- Asterisk app: AGI: Выполнить AGI приложение.
- Asterisk app: Answer: Ответить на вызов.
- Asterisk app: Authenticate: Авторизовать пользователя
- Asterisk app: BackGround: Проиграть аудио файл с возможностью посылки DTMFкоманд
- Asterisk app: BackgroundDetect: Распознавать речь при проигрывании аудио файла
- Asterisk app: Bridge: Соединить два канала
- BridgeWait: Поместить вызов на удержание.
- Busy: Установить состояние занято.
- CallCompletionCancel: Отмена ожидающего вызова. см. ccss.conf
- CallCompletionRequest: Запрос ожидающего вызова для предыдущего звонка.
- CELGenUserEvent: Генерировать пользовательские события в CELлог.
- Asterisk: ChangeMonitor: Изменения имени файла для записи разговора.
- ChanIsAvail: Проверка доступности канала связи.
- ChannelRedirect: Переадресация существующего канала в другую точку плана набора
- ChanSpy: Прослушивание канала.
- ClearHash: Clear the keys from a specified hashname.
- Asterisk app: ConfBridge: Приложение конференц-моста.
- Congestion: Indicate the Congestion condition.
- ContinueWhile: Перезапустить цикл команды Команда Asterisk: Whileс новыми условиями.
- ControlPlayback: Воспроизведение звукового файла с функцией перемотки.
- DAHDIRAS: Executes DAHDI ISDN RAS application.
- DAHDIScan: Scan DAHDI channels to monitor calls.
- DAHDISendCallreroutingFacility: Send an ISDN call rerouting/deflection facility message.
- DAHDISendKeypadFacility: Send digits out of band over a PRI.
- DateTime: Says a specified time in a custom format.
- Asterisk app: DBdel: Удалить ключ из внутренней Базы Данных Asterisk.
- Asterisk app: DBdeltree: Удалить семейство из внутренней БД Asterisk.
- DeadAGI: Выполнить скрипт AGI в мертвом канале.
- Asterisk application: Dial: Пытается установить соединение, одного устройства с другим..
- Dictate: Virtual Dictation Machine.
- Directory: Provide directory of voicemail extensions.
- DISA: Прямой доступ к системе. Direct Inward System Access.
- Asterisk app: DumpChan: Вывести полную информацию о канале вызова.
- EAGI: Executes an EAGI compliant application
- Echo: Echo media, DTMF back to the calling party
- EndWhile: Завершение цикла команды While().
- Exec: Выполнить указанную команду диалплана.
- ExecIf: Executes dialplan application, conditionally.
- ExecIfTime: Conditional application execution based on the current time.
- ExitWhile: End a While loop.
- ExtenSpy: Listen to a channel, and optionally whisper into it.
- ExternalIVR: Interfaces with an external IVR application.
- Flash: Flashes a DAHDI Trunk.
- ForkCDR: Forks the current Call Data Record for this channel.
- GetCPEID: Get ADSI CPE ID.
- Asterisk app: Gosub: Jump to label, saving return address.
- Asterisk app:GosubIf: Conditionally jump to label, saving return address.
- Asterisk app: Goto: Jump to a particular priority, extension, or context.
- GotoIf: Conditional goto.
- GotoIfTime: Conditional Goto based on the current time.
- Hangup: Hang up the calling channel.
- HangupCauseClear: Clears hangup cause information from the channel that is available through HANGUPCAUSE.
- IAX2Provision: Provision a calling IAXy with a given template.
- ICES: Encode and stream using 'ices'.
- ImportVar: Import a variable from a channel into a new variable
- Incomplete: Returns AST_PBX_INCOMPLETE value.
- Log: Send arbitrary text to a selected log level.
- Asterisk app Macro: Macro Implementation.
- MacroExclusive: Exclusive Macro Implementation.
- MacroExit: Exit from Macro
- MacroIf: Conditional Macro implementation
- MailboxExists: Check to see if Voicemail mailbox exists.
- MessageSend: Send a text message.
- Milliwatt: Generate a Constant 1004Hz tone at 0dbm (mu-law).
- MinivmAccMess: Record account specific messages.
- MinivmDelete: Delete Mini-Voicemail voicemail messages.
- MinivmGreet: Play Mini-Voicemail prompts.
- MinivmMWI: Send Message Waiting Notification to subscriber(s) of mailbox.
- MinivmNotify: Notify voicemail owner about new messages.
- MinivmRecord: Receive Mini-Voicemail and forward via e-mail.
- Asterisk: MixMonitor: Record a call and mix the audio during the recording. Use of StopMixMonitor is required to guarantee the audio file is available for processing during dialplan execution.
- Asterisk: Monitor: Monitor a channel.
- Morsecode: Plays morse code.
- MP3Player: Play an MP3 file or M3U playlist file or stream.
- Asterisk app: MSet: Set channel variable(s) or function value(s).
- MusicOnHold: Play Music On Hold indefinitely.
- MYSQL: Do several mySQLy things
- NBScat: Play an NBS local stream.
- NoCDR: Tell Asterisk to not maintain a CDR for this channel.
- NoOp: Do Nothing (No Operation).
- Originate: Originate a call.
- Page: Page series of phones
- Asterisk: PauseMonitor: Pause monitoring of a channel.
- Asterisk: PauseQueueMember: Pauses a queue member.
- Pickup: Directed extension call pickup.
- PickupChan: Pickup a ringing channel.
- Playback: Play a file.
- PlayTones: Play a tone list.
- PrivacyManager: Require phone number to be entered, if no CallerID sent
- Proceeding: Indicate proceeding.
- Progress: Indicate progress.
- Asterisk app: Queue: Queue a call for a call queue.
- Asterisk: QueueLog: Writes to the queue_log file
- RaiseException: Handle an exceptional condition.
- Asterisk app: Read: Read a variable.
- ReadExten: Read an extension into a variable.
- ReceiveFAX: Receive a FAX and save as a TIFF/F file.
- Record: Record to a file.
- Asterisk: RemoveQueueMember: Dynamically removes queue members.
- ResetCDR: Resets the Call Data Record.
- RetryDial: Place a call, retrying on failure allowing an optional exit extension.
- Return: Return from gosub routine.
- Ringing: Indicate ringing tone.
- SayAlpha: Say Alpha.
- SayAlphaCase: Say Alpha.
- SayCountPL: Say Polish counting words.
- SayDigits: Say Digits.
- SayNumber: Say Number.
- SayPhonetic: Say Phonetic.
- SayUnixTime: Says a specified time in a custom format.
- Asterisk app: SendDTMF: Sends arbitrary DTMF digits
- SendFAX: Sends a specified TIFF/F file as a FAX.
- SendImage: Sends an image file.
- SendText: Send a Text Message.
- SendURL: Send a URL.
- Set: Set channel variable or function value.
- SetAMAFlags: Set the AMA Flags.
- SetMusicOnHold: Set default Music On Hold class.
- SIPAddHeader: Add a SIP header to the outbound call.
- SIPDtmfMode: Change the dtmfmode for a SIP call.
- SIPRemoveHeader: Remove SIP headers previously added with SIPAddHeader
- SMS: Communicates with SMS service centres and SMS capable analogue phones.
- SoftHangup: Hangs up the requested channel.
- SpeechActivateGrammar: Activate a grammar.
- SpeechBackground: Play a sound file and wait for speech to be recognized.
- SpeechCreate: Create a Speech Structure.
- SpeechDeactivateGrammar: Deactivate a grammar.
- SpeechDestroy: End speech recognition.
- SpeechLoadGrammar: Load a grammar.
- SpeechProcessingSound: Change background processing sound.
- SpeechStart: Start recognizing voice in the audio stream.
- SpeechUnloadGrammar: Unload a grammar.
- StackPop: Remove one address from gosub stack.
- StartMusicOnHold: Play Music On Hold.
- Stasis: Invoke an external Stasis application.
- Asterisk: StopMixMonitor: Stop recording a call through MixMonitor, and free the recording's file handle.
- Asterisk: StopMonitor: Stop monitoring a channel.
- StopMusicOnHold: Stop playing Music On Hold.
- StopPlayTones: Stop playing a tone list.
- System: Execute a system command.
- TestClient: Execute Interface Test Client.
- TestServer: Execute Interface Test Server.
- Transfer: Transfer caller to remote extension.
- TryExec: Executes dialplan application, always returning.
- TrySystem: Try executing a system command.
- Asterisk: UnpauseMonitor: Unpause monitoring of a channel.
- Asterisk: UnpauseQueueMember: Unpauses a queue member.
- UserEvent: Send an arbitrary user-defined event to parties interested in a channel (AMI users and relevant res_stasis applications).
- Verbose: Send arbitrary text to verbose output.
- VMAuthenticate: Authenticate with Voicemail passwords.
- VMSayName: Play the name of a voicemail user
- VoiceMail: Leave a Voicemail message.
- VoiceMailMain: Check Voicemail messages.
- VoiceMailPlayMsg: Play a single voice mail msg from a mailbox by msg id.
- Wait: Waits for some time.
- Asterisk app: WaitExten: Waits for an extension to be entered.
- WaitForNoise: Waits for a specified amount of noise.
- WaitForRing: Wait for Ring Application.
- WaitForSilence: Waits for a specified amount of silence.
- WaitMusicOnHold: Wait, playing Music On Hold.
- WaitUntil: Wait (sleep) until the current time is the given epoch.
- Команда Asterisk: While: Start a while loop.
- Команда Asterisk: Zapateller: Block telemarketers with SIT.
Настройка очередей (queues.conf) Asterisk
Настройка очередей (queues.conf) Asterisk
Организация очередей входящих вызовов для создания колл центра.
Конфигурация очереди осуществляется в файле /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)
Записать в поле CDRdstchannelимя агента, которое вы можете установить во время входа в систему с параметром 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
Примечание для рассматриваемых далее таймаутов очереди.
Таймаут выхода из очереди по не ответу, не является параметром очереди, а может быть назначен как опция вызова приложения 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
Команда Asterisk: AddQueueMember
function 'QUEUE_WAITING_COUNT'
menu
IP АТС Asterisk и FreeSWITCH
IP АТС Asterisk и FreeSWITCH
Установка, настройка и обслуживание IP АТС Asterisk и FreeSWITCH.
Мы предлагаем услуги по установке, настройке и обслуживанию IP АТС Aterisk и FreeSWITCH. За годы работы, мы накопили внушительный опыт внедрения открытых и проприетарных телекоммуникационных платформ, что позволяет, предлагать нашим клиентам самые оптимальные решения.
Для внедрения IP АТС небольшой емкости (до 100 абонентов), прекрасно подходит программная АТС Asterisk с веб интерфейсом FreePBX. Русскоязычный, простой и интуитивно понятный веб интерфейс позволит вам, в дальнейшем, обслуживать АТС без дополнительных затрат. Все используемое ПО является свободно распространяемым и вы платите только за пусконаладку (от 10 000 рублей). Приобретая базовую установку 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, функционал может быть ограничен)
cdr_adaptive_odbc.conf
cdr_adaptive_odbc.conf
Модуль cdr_adaptive_odbcпозволяет добавлять собственные переменные в CDR,
создавать псевдонимы (alias) и фильтровать данные. Добавлять альтернативные
таблицы CDR, с уникальным содержанием.
Список полей таблицы CDRсоздаваемой при установке FreePBX:
calldate, clid, src, dst, dcontext, channel, dstchannel, lastapp, lastdata, duration, billsec, disposition, amaflags, accountcode, uniqueid, userfield,
did, recordingfile, cnum, cnam, outbound_cnum, outbound_cnam, dst_cnam
Как и следует из названия, модуль cdr_adaptive_odbc сохраняет CDRв базу данных через ODBC.
«adaptive» в данном случае означает, что она пытается приспособиться к структуре таблицы:
нет статической структуры таблиц, которые должны быть использованы с этим модулем.
Когда модуль загружен (или при перезагрузке), он читает структуру таблицы. Он ищет имя столбца, которому соответствует переменная CDR.
Это относится как к встроенным CDRпеременным, так и к пользовательским переменным.
Например, чтобы передавать данные из встроенной (builtin) переменной CDRchannel, в таблице базы данных должен быть столбец 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 | База данных. Параметры соединения настраиваются в 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
; The point of this module is to allow you log whatever you like in terms of ; the CDR variables. Do you want to log uniqueid? Then simply ensure that ; your table has that column. If you don't want the column, ensure that it ; does not exist in the table structure. If you'd like to call uniqueid ; something else in your table, simply provide an alias in the configuration ; file that maps the standard CDR field name (uniqueid) to whatever column ; name you like. ; Perhaps you'd like some extra CDR values logged that aren't ; in the standard repertoire of CDR variables (some that come to mind are ; certain values used for LCR: route, per_minute_cost, and per_minute_price). ; Simply set those CDR variables in your dialplan, i.e. Set(CDR(route)=27), ; ensure that a corresponding column exists in your table, and cdr_adaptive_odbc ; will do the rest. ; ; This configuration defines the connections and tables for which CDRs may ; be populated. Each context specifies a different CDR table to be used. ; ; The columns in the tables should match up word-for-word (case-insensitive) ; to the CDR variables set in the dialplan. The natural advantage to this ; system is that beyond setting up the configuration file to tell you what ; tables to look at, there isn't anything more to do beyond creating the ; columns for the fields that you want, and populating the corresponding ; CDR variables in the dialplan. For the builtin variables only, you may ; create aliases for the real column name. ; ; Please note that after adding columns to the database, it is necessary to ; reload this module to get the new column names and types read. ; ; Warning: if you specify two contexts with exactly the same connection and ; table names, you will get duplicate records in that table. So be careful. ; ;[first] ;connection=mysql1 ;table=cdr ;[second] ;connection=mysql1 ;table=extracdr ;[third] ;connection=sqlserver ;table=AsteriskCDR ;schema=public ; for databases which support schemas ;usegmtime=yes ; defaults to no ;alias src => source ;alias channel => source_channel ;alias dst => dest ;alias dstchannel => dest_channel ; ; Any filter specified MUST match exactly or the CDR will be discarded ;filter accountcode => somename ;filter src => 123 ; Negative filters are also now available ;filter src != 456 ; ; Additionally, we now support setting static values per column. The reason ; for this is to allow different sections to specify different values for ; a certain named column, presumably separated by filters. ;static "Some Special Value" => identifier_code ; ; Add quoted indentifiers for table and columns names. ;quoted_identifiers=" ; Default to null
Asterisk CDR - Call Detail Records - Детализированный отчет о звонках
cdr_manager.conf
cdr_manager.conf
; ; Asterisk Call Management CDR ; [general] enabled = no ; The "mappings" category can be used to define additional "key: value" pairs ; that will be included in the manager event. (after AccountCode, Source, etc). ; ; Each line like "varname => label" will include a "label: ${CDR(varname)}" ; in the generated event where ${CDR(varname)} its replaced with its value ; ;[mappings] ;rate => Rate ;carrier => Carrier
Asterisk CDR - Call Detail Records - Детализированный отчет о звонках
Asterisk: cdr_mysql.conf
Asterisk: cdr_mysql.conf
Параметры подключения к базе данных записи событий CDR.
Пример cdr_mysql.conf
Этот пример конфигурации, подразумевает, что SQLсервер локальный.
Примечание – если сервер базы данных запущен на той же машине, что и сервер Астериск, для связи с локальным сокетом Unix можно задать:
hostname=localhost
portи sock– необязательные параметры. Если hostname определен не как «localhost», тогда cdr_mysql будет пытаться подсоединиться по указанному порту или использовать порт по умолчанию. Если hostname не указано или если hostname это «localhost», тогда cdr_mysql будет пытаться, подсоединиться к сокет файлу, указанному sock, или в ином случае использовать сокет файл по умолчанию.
[global] hostname=localhost dbname=asteriskcdrdb password=password user=asteriskcdruser ;port=3306 ;sock=/tmp/mysql.sock ;userfield=1Включите последнюю опцию, если вы хотите использовать SetCDRUserField Файл mysql.sock присутствует только, пока mysql сервер поднят и запущен. Найти его местоположение можно командой:
locate mysql | grep sock
Asterisk CDR - Call Detail Records - Детализированный отчет о звонках
cdr_odbc.conf
cdr_odbc.conf
настройка соединения с БД CDRпри помощи драйвера ODBC. Устарело, используйте в новых установках cdr_adaptive_odbc.conf
; ; cdr_odbc.conf ; ;[global] ;dsn=MySQL-test ;loguniqueid=yes ;dispositionstring=yes ;table=cdr ;"cdr" is default table name ;usegmtime=no ; set to "yes" to log in GMT ;hrtime=yes ;Enables microsecond accuracy with the billsec and duration fields ;newcdrcolumns=yes ; Enable logging of post-1.8 CDR columns (peeraccount, linkedid, sequence)
Asterisk CDR - Call Detail Records - Детализированный отчет о звонках
cdr_pgsql.conf
cdr_pgsql.conf
Соединение с СУБД PostgreSQL для записи CDR. Устарело, используйте в новых установках cdr_adaptive_odbc.conf
; Sample Asterisk config file for CDR logging to PostgresSQL ; ; Note that you can use TLS connections to your database server. ; This is configured for your PostgreSQL client installation ; on this system (check for pgsessions.conf) [global] ;hostname=localhost ;port=5432 ;dbname=asterisk ;password=password ;user=postgres ;appname=asterisk ; Postgres application_name support (optional). Whitespace not allowed. ;table=cdr ;SQL table where CDRs will be inserted ;encoding=LATIN9 ; Encoding of logged characters in Asterisk ;timezone=UTC ; Uncomment if you want datetime fields in UTC/GMT
Asterisk CDR - Call Detail Records - Детализированный отчет о звонках