Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

Задержать "ответ" транка до поднятия трубки агента очереди

0

Здравствуйте. У меня есть очередь внутри 6 агентов. Всё работает. Проблема в том, что агенты болтают по полчаса. И человек, даже первый в очереди, ждет по 10-20 минут на мелодии IVR-а. Хотелось бы сделать следующим образом.

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

То есть вот что мне надо:

  1. входящий звонок приходит с транка провайдера, астериск не отвечает, звонящий человек слышит длинные гудки дозвона (мелодия провайдера, не нашего астериска)
  2. астериск проверяет наличие агентов. Если агентов нет - то астериск сбрасывает дозвон, а звонящий человек слышит короткие гудки (неотвеченный вызов сбрасывается)
  3. Если есть доступный агент, то астериск поднимает канал до агента, у агента звонит телефон, а звонящий человек всё еще слышит длинные гудки дозвона.
  4. Хочу заметить, до сих пор у звонящего человека не снимают деньги с телефона, так как астериск еще не взял трубку.
  5. Астериск перебирает агентов по заданному мной времени, тогда как общее время дозвона я не в силах изменить - это настраивается у провайдера.
  6. Только после того как один из агентов берет трубку, астериск поднимает канал с провайдером (отвечает на звонок), соединяя их бриджем.

Убрал 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

aldar Gravatar aldar
83 8 6

обновил 2016-11-21 13:31:55 +0400

Comments

Столько много размышлений вместо того, чтобы просто почитать документацию и использовать параметр 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 )редактировать
1

Не ставьте 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 )редактировать
1

В 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 )редактировать

Будьте первым, кто ответит на этот вопрос!

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: 2016-11-04 09:56:31 +0400

Просмотрен: 1,387 раз

Обновлен: Nov 21 '16

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.