Меню

Mail queue freepbx ошибка

image
IP ATC Asterisk — это мощный комбайн в области IP-телефонии. А web-интерфейс FreePBX, созданный для Asterisk, значительно упрощает настройку и снижает порог вхождения в систему.
Если вы можете придумать какую-либо задачу, связанную с IP-телефонией, то почти наверняка это можно реализовать в Asterisk. Но будьте уверены, что от вас потребуется упорство и выдержка.

Перед нами встала задача настроить e-mail уведомления о пропущенных вызовах. Точнее говоря, оповещать через e-mail о тех случаях, когда входящий вызов перешёл в очередь, но никто (из агентов) так и не ответил на этот входящий вызов.

На удивление мы не обнаружили штатных средств для решения этой задачи во FreePBX. О том, как мы решили эту задачу, расскажу под катом.

Предисловие

Перед решением задачи «в лоб» мы конечно поискали информацию в интернете, но решения под ключ не нашли (возможно плохо искали, но что поделаешь… ).

Навыков работы непосредственно в Asterisk не так много, как хотелось бы, поэтому решение, предлагаемое здесь, не было до конца осмыслено и было отброшено.

Понравилось решение, предложенное здесь, хоть оно и не заработало. Отсюда подчеркнули, что работать в Asterisk нужно в контексте очередей [ext-queues]. И так как мы работаем во Freepbx, то работать нужно в файле конфигурации «extensions_override_freepbx.conf». Обратили внимание на то, что «ловить пропущенные вызовы» удобно перед событием hangupcall (окончание вызова).
Прочитав обсуждение здесь, появилась идея о том, что нужно фильтровать в CDR переменную «Disposition» по всем агентам в очереди. А после прочтения этой информации сформировались вполне конкретные шаги по решению поставленной задачи.

Что у нас есть:

Есть FreePBX 13.0.197, который использует Asterisk 13.12.1. Версия ОС SHMZ release 6.6 (Final). Дистрибутив базируется на CentOS.

В Asterisk настроен IVR (голосовое меню) раскидывающий входящие вызовы на разные Queues (очереди). Каждой очереди назначены Agents (агенты), т. е. операторы.

Теория

Что происходит в Asterisk

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

Для того чтобы лучше понять, что происходит в этот момент и что происходит дальше, обратимся к Report CDR (Рис.1).

image
Рис.1

Когда входящий вызов попал в очередь, у всех агентов значение переменной «Disposition» стало равным «NO ANSWER», если агенты в этот момент были не заняты. Переменная «Disposition» могла принять и другие значения (см. https://asterisk-pbx.ru/wiki/asterisk/cf/cdr), кроме значения «ANSWERED». А в тот момент, когда один из агентов отвечает на входящий вызов, значение переменной «Disposition» этого агента становится равной «ANSWERED».
Из Report CDR можно заметить, что когда вызов перешел в очередь (в колонке App значение становится равным «Queue»), то все события фигурируют с одинаковым «uniqueid» (колонка System).

Коротко о CDR

Важно понимать что такое CDR, и в какой именно момент в CDR заносятся данные, которые мы наблюдаем в Report CDR. CDR, относительно операционной системы — это база данных, в которую Asterisk записывает детализированный отчет вызовов (см. https://asterisk-pbx.ru/wiki/asterisk/cf/cdr). В нашем случае это база под именем asteriskcdrdb, которая находится в mysql. Опытным путем мы установили, что данные о вызове с определенным «uniqueid» заносятся в asteriskcdrdb не сразу после возникновения какого-либо события, а после события hangupcall (окончание вызова).

Принцип работы созданного решения

Так как у нас познаний в bash больше, чем познаний в Asterisk, то основная идея получилась следующей. Перед событием hangupcall вызвать bash-скрипт. В этот скрипт передать 3 параметра. Первый параметр «uniqueid», для фильтрации данных, получаемых из CDR. Второй параметр «CALLERID(num)» (номер звонившего), чтобы знать кому перезвонить. Третий параметр «NODEST» (номер очереди), в которую поступил звонок, для того, чтобы знать по какому вопросу был звонок, и кому отправить e-mail уведомление о пропущенном вызове.
Bash-скрипт должен подключиться к базе asteriskcdrdb в mysql и взять все значения переменной «Disposition» с определенным «uniqueid». Из полученных данных нужно исключить значения: «NO ANSWER», «BUSY», «FAILED», «UNKNOWN». В результате останутся либо «ANSWERED» — на входящий вызов ответили, либо вообще ни чего — пропущенный вызов.

Далее, если вызов оказался пропущенным, то скрипт должен отправить e-mail уведомление.
Забегая вперед отмечу важный момент. Asterisk выполняет команды последовательно, дожидаясь их выполнения (что в общем-то логично). А вызывать bash-скрипт мы будем до того, как выполнится команда hangupcall. Таким образом в момент непосредственного выполнения скрипта, в CDR еще не будет внесена информация об искомом нами «uniqueid». Для решения этой проблемы bash-скрипт мы будем вызывать с параметром «&», чтобы Asterisk сразу перешел к выполнению следующего шага, т. е. hangupcall. А внутри bash-скрипта, в самом начале, мы установим небольшую задержку по времени, чтобы дать время для Asterisk внести данные с интересующим нас «uniqueid» в CDR.

Практика

Перед тем как перейти к настройке Asterisk и созданию bash-скрипта, нужно настроить отправку e-mail уведомлений. Для этого мы будем использовать утилиту postfix.

Настройка postfix

У нас есть почтовый домен «lucky.ru», расположенный в Яндексе. Мы настроим postfix в режим smtp-клиента и будем отправлять письма с аккаунта asterisk@lucky.ru.
За основу взято решение отсюда: https://www.dmosk.ru/miniinstruktions.php?mini=postfix-over-yandex.

Сначала установим/обновим/проверим наличие пакетов:

yum install postfix
yum install mailx
yum install cyrus-sasl cyrus-sasl-lib cyrus-sasl-plain

Не будем затирать основной файл конфигурации postfix «/etc/postfix/main.cf», а создадим его резервную копию:

cp /etc/postfix/main.cf /etc/postfix/main.cf.sav

Редактируем файл «/etc/postfix/main.cf» и приводим его к следующему виду:

nano /etc/postfix/main.cf
#####################
relayhost =
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/private/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_type = cyrus
smtp_sasl_mechanism_filter = login
smtp_sender_dependent_authentication = yes
sender_dependent_relayhost_maps = hash:/etc/postfix/private/sender_relay
smtp_generic_maps = hash:/etc/postfix/generic
smtp_tls_CAfile = /etc/postfix/ca.pem
smtp_use_tls = yes
smtputf8_autodetect_classes = all
#####################

Не каждую строку в «/etc/postfix/main.cf» можно комментировать. Комментарии в некоторых строках не определяются парсером и передаются в обработку, а это приводит к ошибкам. Лучше отказаться от комментариев внутри этого файла. Можете поэкспериментировать с этим запустив в соседнем окне «tail -f /var/log/messages».

Отмечу строку «smtputf8_autodetect_classes = all». Эта запись включает utf-8 по умолчанию, что позволяет использовать кириллицу и в теле письма, и в теме письма без дополнительных манипуляций (См. http://www.postfix.org/SMTPUTF8_README.html).

Создадим каталог для файлов конфигураций:

mkdir /etc/postfix/private

Редактируем файл «/etc/postfix/private/sender_relay». В нем нужно указать на какой smtp-сервер нужно ссылаться при использовании нашего почтового домена:

nano /etc/postfix/private/sender_relay
#####################
@lucky.ru smtp.yandex.ru
#####################

Редактируем файл «/etc/postfix/private/sasl_passwd». В нем мы укажем e-mail адрес, который мы будем использовать для отправки писем, а так же логин и пароль от этой учетной записи (логин и пароль указываем через двоеточие):

nano /etc/postfix/private/sasl_passwd
#####################
asterisk@lucky.ru asterisk@lucky.ru:password_asterisk
#####################

Редактируем файл «/etc/postfix/generic». В нем мы пропишем правила подмены исходящего адреса (см. https://wiki.merionet.ru/ip-telephoniya/30/postfix-nastrojka-otpravki-pochty-v-asterisk/):

nano /etc/postfix/generic
#####################
root asterisk@lucky.ru
root@localhost asterisk@lucky.ru
root@localhost.localdomain asterisk@lucky.ru
root@freepbx asterisk@lucky.ru
root@freepbx.localdomain asterisk@lucky.ru
root@asterisk asterisk@lucky.ru
root@asterisk.localdomain asterisk@lucky.ru
asterisk asterisk@lucky.ru
asterisk@localhost asterisk@lucky.ru
asterisk@localhost.localdomain asterisk@lucky.ru
asterisk@freepbx asterisk@lucky.ru
asterisk@freepbx.localdomain asterisk@lucky.ru
asterisk@asterisk asterisk@lucky.ru
asterisk@asterisk.localdomain asterisk@lucky.ru
root@localdomain.localdomain asterisk@lucky.ru
#####################

Изначальный исходящий адрес зависит от содержимого «/etc/hosts» и «/etc/hostname», а также от имени пользователя, который будет отправлять письмо. Т. е. не смотря на то, что мы используем smtp-клиент и отправляем письма от asterisk@lucky.ru, все равно в адрес отправителя postfix изначально подставит «что-то своё» и это нужно исправить правилами из этого файла конфигурации.

Приведу содержимое своего файла «/etc/hosts»:

cat /etc/hosts
#####################
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 asterisk.localdomain
127.0.0.1 localhost.localdomain localhost
::1 asterisk localhost localhost6
#####################

Важно, чтобы сервер имел какой-либо домен (значение после точки), потому что утилита mail «ищет» имя домена в «/etc/hosts» и если «не находит» его сразу, то продолжит это делать в течение еще нескольких минут и только потом отправит письмо. Т. е. если домен не прописан, то письмо будет уходить с задержкой в несколько минут.

Приведу содержимое своего файла «/etc/hostname»:

cat /etc/hostname
#####################
asterisk
#####################

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

postmap /etc/postfix/generic && postmap /etc/postfix/private/{sasl_passwd,sender_relay}

Далее нам необходимо скачать и разместить на сервере сертификат smtp.yandex.ru, для этого выполним следующую команду:

openssl s_client -starttls smtp -crlf -connect smtp.yandex.ru:25 > /etc/postfix/ca.pem

Но после того, как на экран выйдет техническая информация команда будет «продолжать висеть». Нажмите Ctrl+C чтобы прервать её.

Теперь вручную удалим из получившегося файла весь мусор и оставим только сертификат. Должно получиться нечто подобное:

nano /etc/postfix/ca.pem
#####################
-----BEGIN CERTIFICATE-----
MIIGazCCBVOgAwIBAgIQcUU9mJXW4OUs5Gf0JfLtsjANBgkqhkiG9w0BAQsFADBf
...
nRG0DfdqYIuPGApFORYe
-----END CERTIFICATE-----
#####################

И наконец перезапустим postfix:

service postfix restart

Отправляем тестовое письмо:

echo "Это тело письма" | mail -s "Это тема" admin@lucky.ru

admin@lucky.ru — адрес назначения

На этом настройка posfix закончена.

Пишем bash-скрипт

Создаем директорию для хранения bash-скрипта (тут кому где больше нравится):

mkdir /home/asterisk/scripts

Создаем файл bash-скрипта:

touch /home/asterisk/scripts/noanswer.sh

Выдаем файлу скрипта права на выполнение:

chmod +x /home/asterisk/scripts/noanswer.sh

Если есть сомнения в правах на файл, то на время отладки можно дать полный доступ к файлу. Но это «не безопасно».

chmod 777 /home/asterisk/scripts/noanswer.sh

Текст bash-скрипта:

nano /home/asterisk/scripts/noanswer.sh
#####################
#!/bin/bash

sleep 7

res_sql="SELECT disposition FROM cdr WHERE uniqueid = '$1'"

answer=`mysql -u freepbxuser -pPassword_freepbxuser -D asteriskcdrdb -B -N -e "$res_sql" | grep -E -v "NO ANSWER|BUSY|FAILED|UNKNOWN" | head -n 1`

error_kod=0
if [ "$answer" != "ANSWERED" ]
then

 case $3 in
 68800)
 address="big_boss@lucky.ru"
 subject="по важному вопросу"
 ;;
 63100)
 address="debian@lucky.ru"
 subject="по вопросам linux debian"
 ;;
 63200)
 address="windows@lucky.ru"
 subject="по вопросам windows"
 ;;
 63300)
 address="freebsd@lucky.ru"
 subject="по вопросам freebsd"
 ;;
 63400)
 address="ubuntu@lucky.ru"
 subject="по вопросам linux ubuntu"
 ;;
 63500)
 address="centos@lucky.ru"
 subject="по вопросам linux centos"
 ;;
 *)
 address="admin@lucky.ru"
 error_kod=1
 ;;
 esac

 case $error_kod in
 0)
 echo "Пропущен вызов от абонента $2, звонившего $subject." | mail -s "Пропущен вызов от $2" $address
 echo "Пропущен вызов для $address от абонента $2, звонившего $subject. uid=$1" | mail -s "Пропущен вызов от $2" admin@lucky.ru
 ;;
 1)
 echo "Пропущен вызов от $2. Очередь неизвестна. uid=$1" | mail -s "Пропущен вызов от $2" admin@lucky.ru
 ;;
 esac

fi
#####################

Краткий разбор скрипта:
«sleep 7»:

Это та самая задержка по времени, о которой я писал ранее. У нас установлена задержка на 7 сек. Хотя, думаю, и одной секунды вполне хватит.

«res_sql="SELECT disposition FROM cdr WHERE uniqueid = '$1'"»:

Запрос в mysql мы вынесли в отдельную переменную для удобства.

Далее мы делаем запрос в mysql и фильтруем полученный вывод. Удаляем все варианты кроме «ANSWERED», если такой вообще есть. Если же значений «ANSWERED» несколько, то нужно оставить только одно. В конце в переменную «answer» мы получим либо «ANSWERED» либо «».
Если значение переменной «answer» не равно «ANSWERED», то это пропущенный вызов. В зависимости от номера очереди, с помощью оператора case мы зададим адрес, кому именно необходимо отправить e-mail уведомление, и что в этом сообщении написать (изменяемая часть сообщения).

Далее рассмотрен вариант, когда очередь задана в Asterisk, но не описана в скрипте. В этом случае admin@lucky.ru получит письмо, о том, что очередь не известна скрипту.

Если же очередь описана, то будет отправлено письмо по назначению и дублирующее письмо на admin@lucky.ru с указанием «uniqueid», для того, чтобы можно было отследить события по этому звонку, в случае необходимости.

На этом скрипт заканчивается.

Отмечу, что для подключения к mysql мы использовали логин и пароль, которые заранее узнали. Во FreePBX для того, чтобы узнать логин пользователя Asterisk в mysql выполните следующую команду:

cat /etc/amportal.conf | grep AMPDBUSER

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

cat /etc/amportal.conf | grep AMPDBPASS

Настройка Asterisk

Мы используем FreePBX. Во FreePBX есть разные типы конфигурационных файлов (см. https://asterisk-pbx.ru/wiki/freepbx/files), некоторые из них FreePBX перезаписывает при перезагрузке, а некоторые не перезаписывает (их называют custom), так как они специально предназначены для пользователя.

Мы будем работать с файлом конфигурации «extensions_override_freepbx.conf», так как он относится к типу custom.

Для начала убедимся, что в файле «/etc/asterisk/extensions.conf» подключен файл «extensions_override_freepbx.conf». Для этого выполним следующую команду:

cat /etc/asterisk/extensions.conf | grep extensions_override_freepbx.conf
#####################
#include extensions_override_freepbx.conf
#####################

Редактируем файл «/etc/asterisk/extensions_override_freepbx.conf» и приведем его к следующему виду:

nano /etc/asterisk/extensions_override_freepbx.conf
#####################
[ext-queues]

exten => h,1,System(/home/asterisk/scripts/noanswer.sh ${CDR(uniqueid)} ${CALLERID(num)} ${NODEST} &)
exten => h,2,Macro(hangupcall,)
#####################

Как я и писал ранее символ «&» в конце обязателен. Так как мы будем работать в bash-скрипте с данными CDR непосредственно из базы mysql, а эти данные заносятся в mysql только после выполнения «exten => h,2,Macro(hangupcall,)», то необходимо не ждать окончания отработки bash-скрипта, а перейти к выполнению следующего шага в Asterisk. А сам bash-скрипт должен содержать задержку по времени, перед выполнением основной своей части.

Для того, чтобы изменения в конфигурационном файле «/etc/asterisk/extensions_override_freepbx.conf» вступили в силу необходимо перезагрузить ядро Asterisk следующей командой:

/usr/sbin/asterisk -rx "core restart now"

Это нужно сделать после того как bash-скрипт будет создан.

Заключение

Наверное, это 1001-й способ «отлова пропущенных вызовов» в Asterisk. Поделитесь в комментариях как эту задачу решаете вы. И что, по вашему мнению, можно доработать/переделать/оптимизировать. Будем признательны за конструктивные идеи.

I’m running RasPBX current_version 03-12-2017 installed_version 26 (FreePBX 14.0.1.36, Asterisk 13.18.3) and seeing an error on the Dashboard:

Mail Queue: Unknown output from mailq: [[“exim: permission denied”], 1]

It seems to be a permissions problem with /var/spool/exim4 and asterisk’s group membership?

$ strace mailq
execve("/usr/bin/mailq", ["mailq"], [/* 10 vars */]) = 0
…snip…
chdir("/var/spool/exim4")               = -1 EACCES (Permission denied)
geteuid32()                             = 1000
stat64("/var/spool/exim4", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0
chdir("/var/spool/exim4")               = -1 EACCES (Permission denied)
write(2, "exim: permission deniedn", 24exim: permission denied
) = 24
_llseek(3, -2888, [5304], SEEK_CUR)     = 0
exit_group(1)                           = ?
+++ exited with 1 +++

$ ls -ld /var/spool/exim4 
drwxr-x--- 5 Debian-exim Debian-exim 4096 Sep 10 10:45 /var/spool/exim4

$ groups asterisk
asterisk : asterisk audio

Any ideas how I (safely) fix the issue?

Cheers
Mike


0

1

Подскажите куда копать.

Jul  4 14:12:01 freepbx postfix/pickup[18249]: BC7858223672: uid=0 from=<root>
Jul  4 14:12:01 freepbx postfix/cleanup[18278]: BC7858223672: message-id=<20210704091201.BC7858223672@freepbx.mydomain.ru>
Jul  4 14:12:01 freepbx postfix/qmgr[18250]: BC7858223672: from=<root@freepbx.mydomain.ru>, size=473, nrcpt=1 (queue active)
Jul  4 14:12:01 freepbx postfix/smtp[18280]: BC7858223672: to=<xx@mydomain.ru>, relay=192.168.xx.xxx[192.168.xx.xxx]:587, delay=0.07, delays=0.03/0.02/0.02/0, dsn=5.7.1, status=bounced (host 192.168.xx.xxx[192.168.xx.xxx] said: 550 5.7.1 Authentication Required (in reply to MAIL FROM command))
Jul  4 14:12:01 freepbx postfix/cleanup[18278]: CDBAB8223673: message-id=<20210704091201.CDBAB8223673@freepbx.mydomain.ru>
Jul  4 14:12:01 freepbx postfix/bounce[18282]: BC7858223672: sender non-delivery notification: CDBAB8223673
Jul  4 14:12:01 freepbx postfix/qmgr[18250]: CDBAB8223673: from=<>, size=2398, nrcpt=1 (queue active)
Jul  4 14:12:01 freepbx postfix/qmgr[18250]: BC7858223672: removed
Jul  4 14:12:01 freepbx postfix/local[18283]: CDBAB8223673: to=<root@freepbx.mydomain.ru>, relay=local, delay=0.01, delays=0/0.01/0/0, dsn=2.0.0, status=sent (delivered to mailbox)
Jul  4 14:12:01 freepbx postfix/qmgr[18250]: CDBAB8223673: removed

Подробное описание. Стратегии вызова. Политика записи. Таймауты агентов.

Очереди для эффективной обработки множества одновременных звонков, меньшим количеством операторов Call Центра.

freepbx13-queues-general-settings.png

Queue General Settings

Queue number

Используйте номер очереди для вызова и наведения входящих вызовов в модуле Inbound Routes.

Динамические Агенты (операторы Call центра) набирают код ‘*45’ и номер очереди для подключения.

Queue Name

Имя очереди для идентификации в веб интерфейсе. Не используется для вызовов.

Queue Password

Можно ограничить доступ в очередь для операторов Call центра паролем.
Эта опция необязательна.

Generate Device Hints

YesNo

Asterisk «Hints»

Тонкий намек, на толстые обстоятельства.

Asterisk реализует механизм SUBSCRIBE/NOTIFY для уведомления о событиях при помощи SIP сообщений. Asterisk осведомлен о состоянии различных объектов, находящихся в его ведении: телефонов, голосовой почты, очередей и др.
Состояние расширения Asterisk это не тоже самое, что состояние устройства (device state).
Протокол SIP рассылая сообщения SUBSCRIBE/NOTIFY информирует о состоянии устройства.
Чтобы информировать о состояниях Extensions Asterisk, используется понятие «hint», которое при помощи диалплана сопоставляет устройство и расширение (extensions) Asterisk:

[hints]

exten ⇒ расширение,hint,устройство

[subscribers]

exten ⇒ 2777,hint,PJSIP/777

В примере, SIP устройство PJSIP/2777 сопоставляется с расширением 2777.

[subscribers]

exten ⇒ Таня,hint,PJSIP/2777

В примере, SIP устройство PJSIP/2666 сопоставляется с именем ‘Таня’.

Если этот параметр включен, индивидуальные hints будут сгенерированы для каждого устройства, которое назначено для обслуживания очереди. Hints используются в сочетании с программируемыми BLF кнопками телефона, чтобы при входе или выходе из обслуживания очереди генерировать статус текущего состояния для BLF. Формат hints.

*45ddd*qqq

где *45 код переключения по умолчанию, ddd — номер устройства и qqq номер очереди.

Call confirm

Требовать подтверждения от оператора для приема вызова .

YesNo

Call Confirm Announce

Сообщение будет воспроизведено оператору очереди при поступлении вызова, для подтверждения приема перед ответом (если Call Confirm=yes ). По умолчанию воспроизводится стандартное сообщение подтверждения (если оператор доступен не через сервис Follow-Me) или альтернативное сообщение, если оператор доступен через Follow-Me. Установленное здесь сообщение переопределяет все остальные. Для добавления сообщений используйте модуль FreePBX 12 System Recordings.

CID name prefix

Добавляет префикс к callerid «name» поступившего вызова. Если, например, агент обслуживает несколько очередей, позволяет обозначить из какой очереди поступил вызов.

Wait Time Prefix

YesNo

Alert Info

Добавить информацию в Alert-Info SIP Header для Snom и других телефонов поддерживающих эту функцию.

Restrict Dynamic Agents

Ограничить регистрацию динамических агентов только списком Динамических агентов. Если установлено в ‘yes’, то динамические агенты не указанные списке не смогут подключится к обслуживанию очереди.
YesNo

Agent Restrictions

Если установлено в значение ‘Call as Dialed‘ то очередь совершает вызов, также, как и обычный внутренний вызов в системе. Но тогда, все установки ‘FollowMe‘ и ‘Call Forward‘ установленные для
внутреннего номера, будут уводить вызовы из очереди согласно этим значениям. Это поведение по умолчанию для последних версий FreePBX.
Если установлено в значение ‘No Follow-Me or Call Forward‘ то вызовы агентов будут ограничены только внутренним номером. Установки ‘FollowMe‘ и ‘Call Forward‘ будут игнорироваться.
Если установлено в значение ‘Extensions Only‘ то вызовы из очереди будут проходить так же, как при значениях ‘No Follow-Me or Call Forward‘. Но будут вызываться, только екстеншены заданные в пределах системы (FreePBX).

Call as DialedNo Follow-Me or Call ForwardExtensions Only

Ring Strategy

Autofill

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

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

YesNo

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

В больших очередях, с множеством вызовов, это может быть очень существенно.

Skip Busy Agents

NoYesYes + (ringinuse=no)Queue calls only (ringinuse=no)

Queue Weight

Чем выше число, тем выше приоритет очереди. Для агентов обслуживающих более одной очереди, это означает что вызов из такой очереди имеет больший приоритет.
По умолчанию — 0, то есть не использовать вес очереди.

Music on Hold Class

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

MoH OnlyAgent RingingRing Only

Join Announcement

Объявление проигрывается перед попаданием абонента в очередь. Если есть свободные агенты, объявление может быть пропущено, если выбрать опцию ‘When No Free Agents’, т.е. проигрывать, только если нет свободных агентов. Записи объявлений можно добавить в модуле System Recordings.

AlwaysWhen No Free AgentsWhen No Ready Agents

Call Recording

Записывать входящие вызовы. Если выбрано ‘never’ запись по запросу (on demand) недоступна.

ForceYesDon’t CareNoNever

см. также Extensions — Recording Options

Mark calls answered elsewhere

Помечать отклоненные вызовы, как отвеченные. (Чтобы на телефоне не было сообщений о пропущенных вызовах)

YesNo

Fail Over Destination

Назначение по неответу и истечению таймаута очереди, если задано.

Timing & Agent Options

Параметры времени и операторов

freepbx13-queues-timing-and-agent-options.png

Max Wait Time

Максимальное время нахождения в очереди. По его истечению, будет выполнен пункт Fail Over Destination
по умолчанию неограниченно.

Max Wait Time Mode

Параметры таймаута вызова в очереди. Определяет отношения абсолютного таймаута очереди и таймаута оператора.

Когда ‘Max Wait Time’ истекло, что делать:

Читайте подробнее о таймаутах в очереди Queues.conf — Timeout

StrictLoose

Agent Timeout

Время в секундах, в течение которого вызов будет поступать на телефон оператора, после которого наступит таймаут Retry, а затем вызов снова будет подан операторам в зависимости от заданной стратегии очереди.

Agent Timeout Restart

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

ДаНет

Retry

Через сколько секунд будет повторена попытка позвонить снова на все телефоны. Выбирая вариант «Без повторений» звонок будет направлен из очереди по назначению при неответе. Звонок перенаправится туда после тайм-аута у первого оператора, переход на второго оператора не произойдёт.

Wrap-Up-Time

Указывает сколько секунд агент останется свободным после окончания очередного вызова из очереди. Если используете Asterisk 1.6 и выше, Вы также можете установить параметр ‘Применить передышку для всех очередей’ на странице ‘Дополнительные настройки’ и операторы, работающие в нескольких очередях будут иметь перерыв после вызова в любой очереди.

Member Delay

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

Agent Announcement

Оповещение, воспроизводимое оператору, перед соединением с вызывающим абонентом

Для добавления оповещения используйте раздел FreePBX 12 System Recordings.

Report Hold Time

Если хотите сообщать позвонившему время ожидания прежде чем его соединят с оператором — установите Да.

ДаНет

Auto Pause

Поставить агента на паузу в данной очереди (или во всех очередях обслуживаемых оператором), если тот не ответил на вызов .
Уточните данное поведение при помощи других настроек: Auto Pause Delay, Auto Pause Busy/Unavailable.

Yes in this queue onlyYes in all queuesНет

Auto Pause on Busy

Поставить агента на паузу в данной очереди если он занят.

ДаНет

Auto Pause on Unavailable

Поставить агента на паузу в данной очереди если он недоступен.

ДаНет

Auto Pause Delay

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

Capacity Options

Параметры емкости очереди
freepbx13-queue-capacity-options

Max Callers

Максимальное число ожидающих в очереди (0 — неограниченно)

Join Empty

Если установлено Да, новый вызов поступает в очередь независимо, есть в ней пользователи способные принять вызов, если нет — сразу используется Fail Over Destination.

Возможные значения:

YesStrictUltra StrictNoLoose

Leave Empty

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

YesStrictUltra StrictNoloose

Penalty Members Limit

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

Подробнее о пенальти: queues.conf

Caller Announcements

freepbx13-queues-caller-announcement

Frequency

Как часто объявляется позиция в очереди и приблизительное время ответа агента,
Установите 0 для полного отключения этой функции.

Announce Position

Установите «yes» для объявления позиции.

YesNo

Announce Hold Time

Анонсировать время ожидания в очереди. Не объявляется если осталось менее минуты.

YesNoOnce

Periodic Announcements

Объявление в разрыв. Назначается в IVR

Перенаправить вызов в заданный IVR с последующим возвращением в очередь, если абонент ничего не выбрал.

Repeat Frequency

Частота повторения IVR.

Advanced options

Service Level

Параметр статистики очереди. Например, если задано 20 секунд, очередь будет подсчитывать процент отвеченных за это время вызовов: SL: 45.8% within 20s.

Фильтр регулярных выражений для операторов

Agent Regex Filter
Задайте регулярные выражения.
Все что попадает в фильтр агенты смогут набирать, остальное нет.

Reset Queue Stats

Сбросить статистику очереди по расписанию.

FreePBX

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Magner 926 ошибка safe
  • Magner 926 plus ошибка java