Страница 1 из 2
Настройка penalty для операторов в очереди
Добавлено: 07 фев 2018, 12:33
P.Ilya
Имеем очередь.
Настройки(выкинул лишнее)
Код: Выделить всё
[queue_2]
ringinuse=no
timeout=6
retry=10
strategy=rrmemory
member => SIP/1000,0
....
member => SIP/1034,1
Итак, оператор получает входящий вызов от очереди, отвечает(если хочет), если нет - то переходит другому оператору.
Проблема, что если в очереди есть операторы, которые в теории могут снять трубку, с penalty 0, но они все трубку не берут, то на них происходит затык - очередь постоянно вызывает только их. Это логично, но мне нужно, что если они не отвечают - идет к операторам с penalty 1 итд. Как это реализовать?
Варианты решения:
1) Да, я знаю, что можно сделать каскадом несколько очередей, этот вариант мне не подходит.
2) Да, можно поставить на паузу оператора, если он не отвечает, только автоматом эту паузу снять нельзя, ни по таймауту, никак. Поставить можно, снять нельзя.
3) Да, можно настроить defaultrule, но оно просто разрешит отвечать операторам с penalty 1 итд, но этого не будет, при наличии операторов с penalty 0.
4) Да, наверное можно сделать соответствующее поведение через Dial каскадом, но тоже нет.
Вопрос именно, можно ли это сделать средствами очереди, что бы "не-ответ" либо временно "отключал" агента из очереди, либо как-то учитывался в алгоритме поиска следующего агента.
Спасибо.
Re: Настройка penalty для операторов в очереди
Добавлено: 07 фев 2018, 13:23
Repz
If the strategy is defined as 'ringall', then only those available members with the lowest priorities will ring. In the example above, if 200 is not busy, then only 200 will ring. If 200 is busy, then only 201 and 203 will ring. If 200, 201 and 203 are busy, then 202 will ring.
перевод здесь
http://asterisk.ru/knowledgebase/Asterisk+call+queues или здесь
https://translate.google.com/
"Если Вы регистрируетесь тут, чтобы первым делом написать
"Я в Астериске - нуб", или
"Я новичок, уже третий день бьюсь, не пинайте сильно!"
то воздержитесь от регистрации либо размещайте Ваше сообщение
только в разделе "Бизнес".
Новичком тут считается только прочитавший (как минимум)
«Астериск - будущее телефонии» и пытающийся сделать большее.
Отсутствие необходимого минимума знаний НЕ является Вашим оправданием.
Скорее всего Вам просто нужна помощь, но помощь уже перед Вами -
Вы можете (и должны) искать похожие случаи, а они обязательно есть,
и как они были преодолены.
Правильно сформулированный вопрос это уже половина ответа на него.
В противном случае cкорее всего неумение сформулировать проблему, а так же
отсутствие понимания азов, приведёт только к негативному к Вам отношению,
и вызовет такое же негативное чувство у Вас в ответ, как бы горько это не звучало.
Для чего нужен форум?
Форум нужен для того, чтобы Вы САМИ нашли ответ на свой вопрос.
Форум нужен для того, чтобы Вы САМИ опубликовали на нем ответ на вопрос, интересный многим. "
https://forum.asterisk.ru/ucp.php?mode=register
Re: Настройка penalty для операторов в очереди
Добавлено: 07 фев 2018, 13:29
P.Ilya
Вы к чему это написали? Процитировали FAQ? Спасибо, я в курсе, как оно себя ведет.
Вопрос был про то, как заставить себя вести по другому, напрямую или сэмулировать. Если не знаете, зачем копипастить очевиднейшие вещи?
Re: Настройка penalty для операторов в очереди
Добавлено: 07 фев 2018, 15:06
Repz
Это был ответ на вопрос -
P.Ilya писал(а):Проблема, что если в очереди есть операторы, которые в теории могут снять трубку, с penalty 0, но они все трубку не берут, то на них происходит затык - очередь постоянно вызывает только их. Это логично, но мне нужно, что если они не отвечают - идет к операторам с penalty 1 итд. Как это реализовать?
и на вопрос -
P.Ilya писал(а):можно ли это сделать средствами очереди, что бы "не-ответ" либо временно "отключал" агента из очереди, либо как-то учитывался в алгоритме поиска следующего агента.
Вы не умеете готовить очереди.
отсюда появилась ссылка
https://forum.asterisk.ru/ucp.php?mode=register, где можно прочитать -
"В противном случае cкорее всего неумение сформулировать проблему, а так же
отсутствие понимания азов, приведёт только к негативному к Вам отношению,
и вызовет такое же негативное чувство у Вас в ответ, как бы горько это не звучало."
Я готов Вам, в рамках раздела бизнес, за тысячу убиенных енотов, продемонстрировать настройку очереди, где работает сразу несколько пенальти с операторами которые не могут сделать answer.
Re: Настройка penalty для операторов в очереди
Добавлено: 07 фев 2018, 15:14
P.Ilya
Я вполне четко описал проблему, указав штатное поведение очереди, и указав, какие варианты рассматривал, и какое поведение требуется.
Если вы готовы блеснуть знаниями в настройке очередей, можете сделать это в этом топике. Вполне возможно, что какой-нибудь timeoutrestart решает проблему.
Если мне будет нужен платный саппорт, я обращусь в соответствующий раздел, спасибо.
Re: Настройка penalty для операторов в очереди
Добавлено: 08 фев 2018, 09:48
P.Ilya
Понятно, что можно лесенкой прописать queuerules диапазонами, перебирая агентов с нужным penalties, но это же изврат тот еще.
Такое ваше "гениальное решение" по "готовке" очереди?
Re: Настройка penalty для операторов в очереди
Добавлено: 08 фев 2018, 09:53
shader
Топик стартер сам понимает, чего хочет?
Re: Настройка penalty для операторов в очереди
Добавлено: 08 фев 2018, 10:04
asterisker
>> 2) Да, можно поставить на паузу оператора, если он не отвечает, только автоматом эту паузу снять нельзя, ни по таймауту, никак. Поставить можно, снять нельзя.
Да что вы говорите?
Код: Выделить всё
#!/usr/local/bin/python2.7
# coding: utf-8
import asterisk.manager
import sys
import time
from datetime import datetime, timedelta
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.date import DateTrigger
host='127.0.0.1'
login = 'usr'
password = 'pswd'
pausedlist=list()
sched = BackgroundScheduler()
sched.start()
class MyManager(asterisk.manager.Manager):
def unpause(self, peer, state):
""" pauses in queue """
cdict = {'Action': 'QueuePause'}
cdict['Interface'] = peer
cdict['Paused'] = state
cdict['Reason'] = 'Hold '+str(state)
response = self.send_action(cdict)
return response
def handle_devstate(event, manager):
print event.headers
if event.headers[u'PeerStatus'] in[ u'Unregistered',u'Unreachable']:
sippeer=event.headers[u'Peer'].split(u'/')[1]
manager.command(u"devstate change Custom:DND"+ sippeer+ u" UNAVAILABLE")
def unpausehandler(peer, manager):
manager.unpause(peer,False)
pausedlist.remove(peer)
print peer
def handle_status(event, manager):
if event.headers[u'PausedReason']==u'Auto-Pause':
if event.headers[u'Interface'] not in pausedlist:
pausedlist.append(event.headers[u'Interface'])
run_date =DateTrigger( datetime.now() + timedelta(seconds=300))
sched.add_job(unpausehandler,args=[event.headers[u'Interface'],manager],trigger=run_date)
def handle_event(event, manager):
print "Received event: %s" % event.name
manager = MyManager()
try:
try:
manager.connect(host)
manager.login(login, password)
manager.register_event('QueueMemberPause', handle_status) # shutdown
manager.register_event('PeerStatus', handle_devstate)
response = manager.status()
while True:
time.sleep(10)
pass
manager.logoff()
except asterisk.manager.ManagerSocketException as e:
print "Error connecting to the manager: %s" % e.strerror
sys.exit(1)
except asterisk.manager.ManagerAuthException as e:
print "Error logging in to the manager: %s" % e.strerror
sys.exit(1)
except asterisk.manager.ManagerException as e:
print "Error: %s" % e.strerror
sys.exit(1)
finally:
manager.close()
Re: Настройка penalty для операторов в очереди
Добавлено: 08 фев 2018, 10:06
P.Ilya
Ее ставит очередь на паузу, а не мы вручную. В настройках очереди соотв. пункт отсутствует.
Re: Настройка penalty для операторов в очереди
Добавлено: 08 фев 2018, 10:10
asterisker
Мой код несколько избыточен, т.к. решает еще кое какие задачи. Но автопаузы он снимает. По таймауту.