ВидеоКонф(ВКС)  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Настройка penalty для операторов в очереди

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

Настройка penalty для операторов в очереди

Сообщение P.Ilya » 07 фев 2018, 13:33

Имеем очередь.
Настройки(выкинул лишнее)
Код: выделить все
[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 каскадом, но тоже нет.
Вопрос именно, можно ли это сделать средствами очереди, что бы "не-ответ" либо временно "отключал" агента из очереди, либо как-то учитывался в алгоритме поиска следующего агента.
Спасибо.
P.Ilya
 
Сообщений: 101
Зарегистрирован: 17 ноя 2014, 19:40

Re: Настройка penalty для операторов в очереди

Сообщение Repz » 07 фев 2018, 14:23

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
Repz
 
Сообщений: 169
Зарегистрирован: 04 мар 2015, 12:35

Re: Настройка penalty для операторов в очереди

Сообщение P.Ilya » 07 фев 2018, 14:29

Вы к чему это написали? Процитировали FAQ? Спасибо, я в курсе, как оно себя ведет.
Вопрос был про то, как заставить себя вести по другому, напрямую или сэмулировать. Если не знаете, зачем копипастить очевиднейшие вещи?
P.Ilya
 
Сообщений: 101
Зарегистрирован: 17 ноя 2014, 19:40

Re: Настройка penalty для операторов в очереди

Сообщение Repz » 07 фев 2018, 16:06

Это был ответ на вопрос -
P.Ilya писал(а):Проблема, что если в очереди есть операторы, которые в теории могут снять трубку, с penalty 0, но они все трубку не берут, то на них происходит затык - очередь постоянно вызывает только их. Это логично, но мне нужно, что если они не отвечают - идет к операторам с penalty 1 итд. Как это реализовать?

и на вопрос -
P.Ilya писал(а):можно ли это сделать средствами очереди, что бы "не-ответ" либо временно "отключал" агента из очереди, либо как-то учитывался в алгоритме поиска следующего агента.


Вы не умеете готовить очереди.

отсюда появилась ссылка https://forum.asterisk.ru/ucp.php?mode=register, где можно прочитать -

"В противном случае cкорее всего неумение сформулировать проблему, а так же

отсутствие понимания азов, приведёт только к негативному к Вам отношению,

и вызовет такое же негативное чувство у Вас в ответ, как бы горько это не звучало."


Я готов Вам, в рамках раздела бизнес, за тысячу убиенных енотов, продемонстрировать настройку очереди, где работает сразу несколько пенальти с операторами которые не могут сделать answer.
Repz
 
Сообщений: 169
Зарегистрирован: 04 мар 2015, 12:35

Re: Настройка penalty для операторов в очереди

Сообщение P.Ilya » 07 фев 2018, 16:14

Я вполне четко описал проблему, указав штатное поведение очереди, и указав, какие варианты рассматривал, и какое поведение требуется.
Если вы готовы блеснуть знаниями в настройке очередей, можете сделать это в этом топике. Вполне возможно, что какой-нибудь timeoutrestart решает проблему.
Если мне будет нужен платный саппорт, я обращусь в соответствующий раздел, спасибо.
P.Ilya
 
Сообщений: 101
Зарегистрирован: 17 ноя 2014, 19:40

Re: Настройка penalty для операторов в очереди

Сообщение P.Ilya » 08 фев 2018, 10:48

Понятно, что можно лесенкой прописать queuerules диапазонами, перебирая агентов с нужным penalties, но это же изврат тот еще.
Такое ваше "гениальное решение" по "готовке" очереди?
P.Ilya
 
Сообщений: 101
Зарегистрирован: 17 ноя 2014, 19:40

Re: Настройка penalty для операторов в очереди

Сообщение shader » 08 фев 2018, 10:53

Топик стартер сам понимает, чего хочет?
shader
 
Сообщений: 117
Зарегистрирован: 09 авг 2013, 10:33

Re: Настройка penalty для операторов в очереди

Сообщение asterisker » 08 фев 2018, 11:04

>> 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()

Последний раз редактировалось asterisker 08 фев 2018, 11:14, всего редактировалось 1 раз.
asterisker
 
Сообщений: 65
Зарегистрирован: 18 июл 2016, 12:40

Re: Настройка penalty для операторов в очереди

Сообщение P.Ilya » 08 фев 2018, 11:06

Ее ставит очередь на паузу, а не мы вручную. В настройках очереди соотв. пункт отсутствует.
P.Ilya
 
Сообщений: 101
Зарегистрирован: 17 ноя 2014, 19:40

Re: Настройка penalty для операторов в очереди

Сообщение asterisker » 08 фев 2018, 11:10

Мой код несколько избыточен, т.к. решает еще кое какие задачи. Но автопаузы он снимает. По таймауту.
asterisker
 
Сообщений: 65
Зарегистрирован: 18 июл 2016, 12:40

След.

Вернуться в Вопросы новичков

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27

© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH