Здравствуйте. У меня есть очередь внутри 6 агентов. Всё работает. Проблема в том, что агенты болтают по полчаса. И человек, даже первый в очереди, ждет по 10-20 минут на мелодии IVR-а. Хотелось бы сделать следующим образом.
Если все агенты заняты или недоступны, то звонящий человек слышыт короткие гудки (занято), и деньги за звонок не берутся. Чтобы такое получилось, астериск перед тем как брать трубку и переводить звонок в очеред, должен проверить наличие свободных агентов. Далее, астериск поднимает канал с агентом, и только потом подключает канал с транка.
То есть вот что мне надо:
Убрал answer перед queue. У звонящего не снимают деньги с телефона. Но очередь все равно впускает звонки несмотря на joinempty=no.
очередь вызывается так:
exten => XXXXXXXX,1,Queue(call-center,Ttr)
queue.conf выглядет так:
[call-center]
strategy = random
timeout = 12
retry = 1
joinempty = no
leavewhenempty = yes
member => SIP/11
member => SIP/12
member => SIP/13
member => SIP/14
member => SIP/15
member => SIP/16
в sip.conf прописан callcounter=yes. show queue:
SIP/13 (ringinuse enabled) (paused) (Not in use)
SIP/16 (ringinuse enabled) (paused) (Not in use)
SIP/12 (ringinuse enabled) (in call) (Busy)
SIP/15 (ringinuse enabled) (paused) (Not in use)
SIP/11 (ringinuse enabled) (paused) (Busy)
SIP/14 (ringinuse enabled) (paused) (Not in use)
Тут я запаузил всех кроме одного. Этот один Busy. В то время когда он занят я позвонил, меня закинуло в очередь. А не должно! А астериск выдал:
chan_sip.c:6836 update_call_counter: Call to peer '12' rejected due to usage limit of 1
Хотя, если запаузить всех, тогда меня не впустит в очередь. То есть все как надо. То есть астериск воспринимает "Busy", как своодного агента для того чтобы впустить в очередь. А после того как впустил, не соединяет с агентом, так как он занят.
Задан: 2016-11-04 09:56:31 +0400
Просмотрен: 1,949 раз
Обновлен: Nov 21 '16
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
Столько много размышлений вместо того, чтобы просто почитать документацию и использовать параметр leavewhenempty .
zzuz ( 2016-11-04 13:00:20 +0400 )редактироватьда, возможно. докупать надо время человека, которому не влом посмотреть в freepbx все доступные опции.
meral ( 2016-11-05 15:06:31 +0400 )редактироватьJoinempty и leavewhenempty почти подходят. Дело в том, что если посмотреть со стороны звонящего, то для него дела обстоят так: он звонит, на его звонок отвечают и через секунду сбрасывают. И с него берут деньги за телефон, хотя он не разговаривал. В сабже я указал "как задержать ответ транка до поднятия трубки агента очереди". То есть, астериск не должен отвечать на звонок, а не только не впускать в очередь.
aldar ( 2016-11-07 11:22:32 +0400 )редактироватьНе ставьте Answer , он и не будет отвечать.
zzuz ( 2016-11-07 12:31:48 +0400 )редактироватьСпасибо, можно поподробней как и где?
aldar ( 2016-11-07 12:50:37 +0400 )редактироватьВ вашем диалплане перед вызовом команды Queue() ,
zzuz ( 2016-11-07 13:05:42 +0400 )редактироватьВ freepbx очередь отвечает по умолчанию. вам прийдется не использовать freepbx похоже. Ну или попробуйте musiconhold убрать.
meral ( 2016-11-07 15:33:26 +0400 )редактироватьсперва подумал попробовать custom dialplan. Ну а так как у меня на этом сервере только один колл центр, лучше и правда обойтись без freepbx.
aldar ( 2016-11-08 04:39:59 +0400 )редактироватьСпасибо огромное. Поставил чистый астериск. Убрал Answer перед очередью. Теперь все работает как надо. У звонящего человека не снимают деньги с телефона.
aldar ( 2016-11-20 09:27:03 +0400 )редактироватьJoinempty и leavewhenempty -> не работают в астериске без freepbx-a. Я отредактировал вопрос. Добавил туда инфы.
aldar ( 2016-11-21 11:10:38 +0400 )редактировать"не работают в астериске без freepbx-a." . Работают , не нужно сочинять.
zzuz ( 2016-11-21 14:41:27 +0400 )редактироватьработалО. не во всех версиях работает. я тут нипричем. не ломал. честно. (это про неответ, leaveempty естественно работает. почему нет).
meral ( 2016-11-21 20:30:14 +0400 )редактироватьdevice states/hints включите
meral ( 2016-11-21 20:35:13 +0400 )редактироватьПосле долгих тестов понял, что "ringinuse=no" и устаревший "call-limit=1" работают одинаково. Запрещают вторую линию на агенте, на leavewhenempty никак не влияют. leavewhenempty проверяет только запаузенных и недоступных агентов. Но он никак не определяют занятых агентов. Чтобы научить его определять занятых агентов есть команда "callcounter=yes". Только вот она никак у меня не работает. Ни devicestate, ни hint-ы не помогают. У меня переменная devicestate и команда "core show hints" правильно определяют состояние устройств. Только вот это никак не влияет на "callcounter=yes", от которого никакого толку, в какую секцию его не ставь. Я поставил версию астериска 13.12.2, думая что она более менее стабильна. На какую версию стоит перейти чтобы работало. Или что еще можете посоветовать попробовать.
aldar ( 2016-11-24 07:16:09 +0400 )редактировать