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

Как сделать альтернативную очередь?

0

Есть call-центр. Хочется реализовать очередь для входящих звонков со своей логикой обработки, например, чтобы:

  • при звонке клиента не поднималась трубка пока он ждет ответа, чтобы он денег не тратил;
  • клиент при повторном звонке попадал на того телефониста с кем он уже разговаривал;
  • телефонист из прикладной программы мог изменять статус "в работе"/"отошел";
  • распределение входящих звонков между телефонистами было по моему алгоритму;
  • чтобы vip-клиенты (список в базе данных) были впереди очереди согласно некоторому рейтингу;
  • ну и другое, что начальство напридумывает...

В принципе все это можно реализовать средствами dialplan'а и функциями связанными с моей базой данных. Вопросы: как получить список свободных в данный момент телефонистов? Если свободных нет, как ожидать момента когда телефонист освободиться?

удалить закрыть спам изменить тег редактировать

спросил 2011-09-09 18:03:49 +0400

ponch Gravatar ponch
231 26 3 12

обновил 2011-09-09 18:12:32 +0400

Comments

Я бы сменил такое начальство. Оно выснашает весь мозг пока это не отладится нормально, а на это уйдут годы. amonra ( 2011-09-09 18:25:00 +0400 )редактировать
при нормальное реализации это можно за неделю написать,какие годы meral ( 2011-09-10 04:39:38 +0400 )редактировать

3 Ответа

0

Можно, конечно, подправить исходники asterisk, чтобы при стандартных очередях трубка не поднималась, но мне так не хочется делать. Для своего Trixbox я пока написал dialplan Injection:

Set(MyDialCnt=1) 
Set(MyDisp=${MY_QUEUE_NEXT()}) 
NoOp(My MyDisp = {${MyDisp}) 
Dial(${MyDisp}, 2) 
(get_next), Set(MyDisp=${MY_QUEUE_NEXT()}) 
GotoIf($["${MyDisp}" = ""]?loop_end:try_dial) 
(try_dial), Dial(${MyDisp}, 5) 
Set(MyDialCnt=$[${MyDialCnt} + 1]) 
NoOp(My Test Exp ${MyDialCnt}) 
Goto(get_next) 
(loop_end), NoOp(My disp loop end)

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

Мне в нем не нравиться, что при поиске свободного телефониста делается Dial(). Мне кажется это нагружает asterisk, но не знаю как определить занятость ексненшена. Теперь когда буду дописывать в MY-QUEUE-NEXT() буду передавать CallerID и определять кто раньше обрабатывал звонок. Буду использовать GROUP() что бы сделать очередь для VIP - пока в ней кто-то есть для "обычного" звонка делается секундная пауза Wait.

Мне просто не хочется повторять функциональность Queue(), поэтому и спрашиваю реализован ли уже нужный функционал в asterisk, или все-таки придется изобретать велосипед.

ссылка удалить спам редактировать

ответил 2011-09-10 22:22:36 +0400

ponch Gravatar ponch
231 26 3 12

Comments

в вашем случае проще всего вбазу значение писать. через DB() meral ( 2011-09-11 11:29:50 +0400 )редактировать
реализован. называется queue. вы его готовить не умеете meral ( 2011-09-11 11:30:26 +0400 )редактировать
возможно, что не умею, так как не знаю, как заставить queue не поднимать трубу. И мне кажется это обычными средствами не сделать. ponch ( 2011-09-11 18:52:58 +0400 )редактировать
ну не занете, ставте в холд, запускаете еше один звонок в очередь, и по ответу этого звонка соединяете с етм что на холде. блин. ну как вам еше сказать что на вашем уровне это не делается? meral ( 2011-09-11 21:19:03 +0400 )редактировать
вот именно так, как сказали. :) А уровень всегда полезно повышать... Буду стараться :) ponch ( 2011-09-12 12:32:54 +0400 )редактировать
1

если вы напишите "распределение входящих звонков между телефонистами было по моему алгоритму" более подробно, я вам скажу скольку будет стоить.

так как вы пишите это работать не будет. ну развечто у вас до 50 телефонов. вообще все кроме "алгоритма" и "чего анпридумывает" делается более-мене стаандартными но не публичными приемами. типо знаяю-как-не-скажу-ибо-мой-хлеб.

хотите, подпишите НДА, я вам скажу как ;) в паблик я жто не буду вылаживать.

навскидку, 1-2 делалось для одного колцентра за 400 доларов, вип клиенты вообще тривально делаются с ипользование функционала очередей. ну а занятые агенты выключаются с использованием dynamic agents либо Local канал и базы. ввообще тривиально

ссылка удалить спам редактировать

ответил 2011-09-10 04:35:57 +0400

meral Gravatar meral flag of Ukraine
23347 24 20 177
http://pro-sip.net/

обновил 2011-09-10 04:44:05 +0400

Comments

Значит мне подойдет, у меня телефонистов в пределах 20. Я сейчас сам себе отвечу, а то в комментариях форматирование сбивается. ponch ( 2011-09-10 21:46:22 +0400 )редактировать
Может намекнете, как делали чтобы при звонке клиента не поднималась трубка. Исходники правили? ponch ( 2011-09-10 22:26:29 +0400 )редактировать
нет, не правил. а вы подумайте чтодля этого надо;) . я вообще правлю исходники раз в год и как правило убираю баги в вастерсике. астериск повзоялет сделать почти что угодно. там же полный язык переходов. ну квлификация разная надо для разныъх действий. meral ( 2011-09-11 11:26:34 +0400 )редактировать
есть множество вариантов. от макросов privacy до ручного управления через musiconhold и паарлельный звонок в очередь. а еще есть высший пилотаж с использванием audiohooks,asynagi и очередей. meral ( 2011-09-11 11:32:38 +0400 )редактировать
за идеи спасибо! :) ponch ( 2011-09-12 12:25:11 +0400 )редактировать
0

Это вам нужно немерянного программера нанять со знанием *. Причём на постоянную работу ))) Или купить OpenScape Office от сименса, там все эти рюшечки уже есть...

ссылка удалить спам редактировать

ответил 2011-09-09 18:23:58 +0400

amonra Gravatar amonra flag of Ukraine
2301 26 13 65
http://lantec.ua/

обновил 2011-09-09 18:24:24 +0400

Comments

Да ладно! Что там сложного-то? Всю логику в моей базе можно сделать. Для каждого звонка по CallerID определяем кто с ним разговаривал, если занят/не отвечает, берем из базы следующего. Если все заняты, то крутим цикл ожидания с секундной задержкой и ждем когда кто-то освободиться. Занятость телефонистов можно контролировать с помощью GROUP() и GROUP_COUNT(). VIP очередь тоже через GROUP() можно сделать. Лучше скажите, как задержку сделать? ponch ( 2011-09-10 00:59:11 +0400 )редактировать
это вы не пробвали написать. вы попробуйте. не будет это работать;) вообще ваша задача равносильна задачи написания колцентра с нуля. вон вицидиал уже пишут лет 15. а он как работал через **** так и работает. тоесть решение задачи зависит от уровня программиста. meral ( 2011-09-10 04:33:36 +0400 )редактировать
м. а задержка это что?) meral ( 2011-09-10 04:46:06 +0400 )редактировать
Нашел уже. Это Wait. ponch ( 2011-09-10 21:55:25 +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)!
[скрыть предварительный просмотр]

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

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

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

Статистика

Задан: 2011-09-09 18:03:49 +0400

Просмотрен: 674 раз

Обновлен: Sep 10 '11

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