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

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

$
0
0

Файлы конфигурации 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 app: While

$
0
0

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
вывод консоли

см. также

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

Ограничение количества одновременных вызовов по ...

$
0
0

Ограничение количества одновременных вызовов по набранному номеру (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)

Asterisk Dialplan advanced (Диалплан расширенный)

Zapateller()

$
0
0

Zapateller()

Назначение: Блокировка telemarketers с использованием SIT

Описание: Zapateller(options)

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

Опции должны быть разделены вертикальной чертой. Доступны следующие опции:

  • answer: параметр задает, что необходимо ответить на вызов перед генерации тонального сигнала
  • nocallerid: параметр задает, чтоб Zapateller проигрывал тональный сигнал, только если от звонящего не получена информация о callerid.

Опции должны быть разделены символом |

Код возврата: Возвращает 0 при нормальном завершении или -1 при разрыве связи.

Команда Asterisk: Zapateller

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

Команда Asterisk: Zapateller

$
0
0

Команда 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

Команда Asterisk: AddQueueMember

$
0
0

Команда 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

$
0
0

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

В данном документе приведен список команд, которые Вы можете использовать в плане набора (extensions.conf). Получить список и описание приложений, доступных на вашем сервере Asterisk Вы можете командами CLI:
core show applicationsи core show application <name>.

Asterisk Dialplan Applications

Asterisk: Настройка

Настройка очередей (queues.conf) Asterisk

$
0
0

Настройка очередей (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

Asterisk: PauseQueueMember

Asterisk app: Queue

Asterisk: QueueLog

Asterisk: RemoveQueueMember

Asterisk: UnpauseQueueMember

Asterisk queuerules.conf

function 'QUEUE_EXISTS'

function 'QUEUE_MEMBER'

function 'QUEUE_MEMBER_LIST'

function 'QUEUE_VARIABLES'

function 'QUEUE_WAITING_COUNT'

Asterisk:Лог очереди (queue) в mysql

FreePBX Queues

Asterisk Call Center Stats


menu

IP АТС Asterisk и FreeSWITCH

$
0
0

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 транков; создание очередей, телеконференций, голосовых меню, групп приема вызовов; использование сервисных кодов и отчетов о звонках.)
  • Бесплатную тех. поддержку в течении месяца с момента ввода в эксплуатацию.

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

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

cdr_adaptive_odbc.conf

$
0
0

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 - Детализированный отчет о звонках

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

cdr_manager.conf

$
0
0

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

Asterisk: cdr_mysql.conf

$
0
0

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 - Детализированный отчет о звонках

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

cdr_odbc.conf

$
0
0

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 - Детализированный отчет о звонках

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

cdr_pgsql.conf

$
0
0

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 - Детализированный отчет о звонках

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


Asterisk: cdr_tds.conf

$
0
0

Asterisk: cdr_tds.conf

cdr_tds модуль использует FreeTDS библиотеку для отправки CDR Microsoft SQL Server или Sybase БД.

;
; Asterisk Call Detail Records (CDR) - FreeTDS Backend
;

;[global]

; Connection -  соединение
;
; Используйте ключ 'connection' для указания имени подключения в файле 'freedtds.conf'
; 'freetds.conf' это конфигурационный файл библиотеки FreeTDS, а не Asterisk (см. документацию FreeTDS)
;
;         http://www.freetds.org/userguide/freetdsconf.htm
;
; Значения: Одно из соединений, назначенных в freetds.conf

;connection=ConnectionFromFreeTDSConf

; Database Name - имя базы данных
;
;  'dbname' - указывает имя базы данных для использования CDR.
;
; Значение: имя существующей базы данных.

;dbname=AsteriskCDRs

; Database Table Name - имя таблицы Базы Данных
;
;  'table'  ключ идентификации таблицы базы данных CDR.
;
; Значение: имя существующей таблицы базы данных CDR.
; Значение по умолчанию: Если не задано будет использовано - 'cdr'.

;table=cdr

; Credentials - полномочия
;
;  'username' и 'password' ключи  идентификации пользователя.
;
;Значение: пользователь и пароль базы данных.

;username=mangUsr
;password=

; Language
;
; The 'language' ключ изменения языка для сообщений об ошибках и информационных сообщений возвращаемых SQL сервером.
; Каждая БД и пользователь имеют собственное значение по умолчанию, которое перекрывается данным ключом.
;
; Значение: Язык поддерживаемый севером SQL.
; Значение по умолчанию:  us_english

;language=us_english

; Character Set
;
; The 'charset' setting is used to change the character set used when connecting
; to the database server.  Each database and database user has their own
; character set setting, and this default can be overriden here.
;
; Accepted value: Any valid character set available on the target SQL server.
; Default value:  iso_1

;charset=BIG5

; High Resolution Times
;
; The 'hrtime' включить значения высокой точности для полей 'billsec' и 'duration'.
;
; Значение: true или false
; Значение по умолчанию: false

;hrtime=false

Asterisk CDR - Call Detail Records - Детализированный отчет о звонках

Asterisk 12 res_pjsip_acl

$
0
0

Asterisk 12 res_pjsip_acl

SIP ACL module

Документация по конфигурации и использованию функций модуля res_pjsip_acl. ACLмодуль используется res_pjsip. Данный модуль не зависит от ENDPOINTs и управляет всеми входящими подключениями через res_pjsip. Есть два основных способа назначить ACLпри помощи соответствующих опций. Можно использовать привычные 'permit' и 'deny', которые действуют в отношении IP адресов. Или 'contactpermit' и 'contactdeny', которые действуют на основании адреса из заголовка 'Contact' входящего SIPзапроса REGISTER. Возможно комбинировать разные опции и создавать смешанный списки контроля доступа (ACL). В добавление к этому, вместо назначения ACLс помощью опций, можно задать адреса IP или заголовки Contact ACLв файле «acl.conf» при помощи 'acl' и 'contactacl' опций.

pjsip.conf
acl
Access Control List - Список Контроля Доступа

Опции конфигурации res_pjsip_acl

Option NameTypeRegular ExpressionDescription
aclCustomfalseИмя секции в acl.confдля контроля по IP
contact_aclCustomfalseИмя секции в acl.conf для контроля по заголовку Contact
contact_denyCustomfalseСписок запрещенных адресов Contact header
contact_permitCustomfalseСписок разрещенных адресов Contact header
denyCustomfalseСписок запрещенных IP адресов
permitCustomfalseСписок разрешенных IP адресов
typeNonefalseТип секции. всегда - 'acl'.

Описание конфигурационных опций

acl

Соответствует разделам настроенным в файле «acl.conf». Принимает значение в виде списка имен разделов через запятую.

 acl=your_named_acl,your_named_acl2  
contact_acl

Соответствует разделам настроенным в файле «acl.conf». Принимает значение в виде списка имен разделов через запятую.

contact_deny
 contact_deny=0.0.0.0/0.0.0.0

Принимает значение списка IP адресов через запятую. К IP адресам может быть добавлена маска подсети через слэш (/).

contact_permit
 contact_permit=2.2.2.2/2.2.2.2,1.1.1.1
deny

deny=0.0.0.0/0.0.0.0

permit

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

$
0
0

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

Первоначальная настройка системы

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

Ubuntu Software selection

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

ubuntu root mysql password

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

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

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

 $ sudo -i

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

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

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

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

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

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

 reboot

Установите PearDB

pear uninstall db
pear channel-update pear.php.net
pear install -Z db-1.7.14
Error: Error: cannot download "pear/DB"

Установка Asterisk

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

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

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

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

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

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

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

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

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

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

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

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

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

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

cd /usr/src && 
tar xvfz asterisk-13-current.tar.gz &&
rm -f asterisk-13-current.tar.gz &&
cd asterisk-* &&
./configure &&
contrib/scripts/get_mp3_source.sh &&
make menuselect
После ввода команды make menuselect, вам будет предложено выбрать устанавливаемые модули. Большинство требуемых модулей выбираются автоматически. Для поддержки mp3 включите модуль 'format_mp3'.

make menuselect format_mp3

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

make menuselect ru sound

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

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

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

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

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

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

Создайте пользователя 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
Spoiler

Настроим Apache

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

Подготовим 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

amportal a ma refreshsignatures
amportal a reload
amportal chown

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

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

и запустим amportal

 amportal start

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

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

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

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

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

freepbx start set user login

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

nano +67 /etc/locale.alias

 russian ru_RU.UTF-8

или sed:

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

Установка Asterisk

Asterisk CDR - Call Detail Records - Детализированный отчет о звонках

$
0
0

Asterisk CDR - Call Detail Records - Детализированный отчет о звонках

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

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

  • R/O - read only
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 Продолжительность соединения в секундах с момента ответа(снятия трубки или выполнения команды Asterisk app: 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

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переменным, так и к пользовательским переменным.
Например, чтобы передавать данные из встроенной переменной 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

cdr_csv

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

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

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

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

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

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

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

[mappings]

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

cdr_manager

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

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

[general]
enabled = yes
В следующая секция cdr_manager.confэто [mappings]. Здесь назначается пользовательская CDRпеременная передаваемая менеджеру Asterisk.
<CDR variable> => <Header name>

пример:

 [mappings]
 rate => Rate
 carrier => Carrier

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

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

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

*CLI> console dial 177@test

asterisk:alsa.conf

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

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

cdr_mysql

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

cdr_odbc

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

cdr_pgsql

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

cdr_radius

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

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

cdr_sqlite

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

cdr_sqlite3_custom

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

Spoiler

cdr_syslog

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

local.*      /var/log/asterisk/asterisk-cdr.log
Конфигурационный файл Asterisk - cdr_syslog.conf:
[cdr]

facility = local
priority = info
template = "Вызов от ${CDR(src)}"
пример записи syslog, для приведенной конфигурации:
 cat /var/log/asterisk/asterisk-cdr.log

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

cdr_tds

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

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

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

Asterisk: Настройка

Asterisk: extconfig.conf - Realtime

$
0
0

Asterisk: extconfig.conf - Realtime

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

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

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

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

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

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

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

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

file.conf => driver,database[,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` - собственно данные, после знака '⇒' в конфиге

Пример

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)

; Realtime configuration engine
;
; maps a particular family of realtime
; configuration to a given database driver,
; database and table (or uses the name of
; the family if the table is not specified
;
;example => odbc,asterisk,alttable,1
;example => mysql,asterisk,alttable,2
;example2 => ldap,"dc=oxymium,dc=net",example2
;
; Additionally, priorities are now supported for use as failover methods
; for retrieving realtime data.  If one connection fails to retrieve any
; information, the next sequential priority will be tried next.  This
; especially works well with ODBC connections, since res_odbc now caches
; when connection failures occur and prevents immediately retrying those
; connections until after a specified timeout.  Note:  priorities must
; start at 1 and be sequential (i.e. if you have only priorities 1, 2,
; and 4, then 4 will be ignored, because there is no 3).
;
;
; Possible driver backends:
;
; "odbc" is shown in the examples below, but is not the only valid realtime
; engine.  Here are several of the possible options:
;    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 (available via add-ons in menuselect)
;
; Note: The res_config_pgsql and res_config_sqlite backends configure the
; database used in their respective configuration files and ignore the
; database name configured in this file.
;
;iaxusers => odbc,asterisk
;iaxpeers => odbc,asterisk
;sippeers => odbc,asterisk
;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
;meetme => mysql,general
;queues => odbc,asterisk
;queue_members => odbc,asterisk
;queue_rules => odbc,asterisk
;acls => odbc,asterisk
;musiconhold => mysql,general
;queue_log => mysql,general
;
;
; While most dynamic realtime engines are automatically used when defined in
; this file, 'extensions', distinctively, is not.  To activate dynamic realtime
; extensions, you must turn them on in each respective context within
; extensions.conf with a switch statement.  The syntax is:
;      switch => Realtime/[[db_context@]tablename]/<opts>
; The only option available currently is the 'p' option, which disallows
; extension pattern queries to the database.  If you have no patterns defined
; in a particular context, this will save quite a bit of CPU time.  However,
; note that using dynamic realtime extensions is not recommended anymore as a
; best practice; instead, you should consider writing a static dialplan with
; proper data abstraction via a tool like func_odbc.
Viewing all 1041 articles
Browse latest View live


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