AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Очередь, стратегия ringall и порядок вызова агентов

Asterisk IP PBX 7 сообщений -
#1

Очередь, стратегия ringall и порядок вызова агентов


Назрел вопрос.
Используется * версии 1.8.14.1, очередь из 20 агентов (организованная через Local), стратегия ringall и Realtime (агенты прописаны в таблице).
Local используется из-за того, чтобы все звонки одновременно шли на всех операторов, вне зависимости от того, занят аппарат оператора чем-то или нет. Realtime, соответственно, для оперативности управления.
И вот возникает такая неприятная ситуация: приходит вызов, но он неравномерно доходит до операторов. Например, один аппарат звонит на 1 секунду позже других, получается неравномерность работы операторов. К сожалению, заставить клиента согласиться со сменой стратегии распределения вызовов равномерно по операторам не могу, требуется только одновременный вызов ко всем, как на обычных мини-АТС.
И вот в связи с этим у меня вопрос. Каким образом * вызывает агентов из очереди? Точнее, в каком порядке? Где это прописывается? И какими средствами можно реализовать именно одновременность вызова операторов? Чтобы не было задержек по 1 секунде. Спасибо.

_________________
Внимание! Свет в конце тоннеля может быть светом фар приближающегося поезда!
Ubuntu 10.04/12.04 - Asterisk 1.8.11.0-rc2/1.8.14.1/1.8.17.0/10.10.0
#2

Не выйдет одновременно, все равно небольшая разница будет:


Астериск не все делает многопотоково;

Телефоны дают небольшой лаг, иногда сетка;

Local очередь приносит баги, кстати будут проблемы, когда будет повисать все, например сип не будет работать до перезагрузки астериска. При нагрузке и не сразу, 20 агентов как раз нормально для подобных багов.

Разница в пределах примерно секунды, не считаю критичной.


Более подробно о реализации на конкретной версии астериска в исходниках и doxygen, но основная беда - Local channnel
#3

У меня, как ни странно, других проблем, кроме неравномерности вызова операторов, не наблюдается. Даже при отвале ДНС sip продолжает работать, не глючит (вынес все мультифоновские записи на отдельную машину, которая пусть глючит сколько влезет, на другие вызовы это не оказывает влияния).
Проблемы с сеткой, конечно, могут быть. Но исключение разных коммутаторов (аппараты и сервер включены все в один коммутатор) никакого эффекта не дает.
Мне бы получить случайный порядок вызова операторов, а не как сейчас - практически строго определенный. Чтобы от вызова к вызову задержка была у разных операторов.
Или понять, какой модуль определяет порядок вызова. Как я понимаю, читал здесь же на форуме, в конечном итоге каждого оператора в очереди вызывает dial, а вот какой модуль вызывает dial - так и не понял.

Added after 9 minutes:

Разница в пределах 1 секунды как раз очень критична, так как операторы работают по принципу "кто быстрее". Конечно, когда на 20 операторов приходит сразу 20 вызовов, то никакой разницы, но когда операторов больше, чем одновременно поступающих вызовов, то проявляется конфликт. На том аппарате, что для * был первым, на вызов УЖЕ ответили, в то время как на последнем только приходит вызов. А бывает, что этот вызов и вовсе не поступает на последние аппараты (вот я и хочу узнать, в каком модуле определяется очередность).

_________________
Внимание! Свет в конце тоннеля может быть светом фар приближающегося поезда!
Ubuntu 10.04/12.04 - Asterisk 1.8.11.0-rc2/1.8.14.1/1.8.17.0/10.10.0
#4

У вас задействованы сразу два модуля, один из охереди для управления стратегией и звонками и второй - команды дайл, для обслуживания локального канала
#5

Мне деваться некуда. Пробовал сделать просто SIP, но тогда другая проблема возникает:
при поступлении двух вызовов в очередь одновременно только первый из них попадает на телефонные аппараты, второй висит до того момента, пока не будет отвечен первый (хотя, конечно, это вполне логично). Но вот в этот момент как раз и возникают грабли с временной задержкой распространения сигнала вызова. Оператор, который мог бы принять второй вызов, отмечается занятым, так как к нему вызов пришёл фактически после ответа на него другим оператором. Да и астер ругается сообщением "SIP response 500 Call Already Terminated".

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

Или как при SIP в очереди игнорировать состояние агента (не просто ringinuse=yes, а чтобы еще и ringinringing=yes).

_________________
Внимание! Свет в конце тоннеля может быть светом фар приближающегося поезда!
Ubuntu 10.04/12.04 - Asterisk 1.8.11.0-rc2/1.8.14.1/1.8.17.0/10.10.0
#6

Пробуйте:
Код:
queues.conf [queue]
member => Local/ring@all_agents

extensions.conf
[all_agents]
exten => ring,1,Dia(SIP/1&SIP/2&SIP/3&SIP/4&SIP/5&SIP/6&......)
exten => ring,n,Busy(4)
exten => ring,n,Hangup
Проблемы:
команда дайл с амперсанодом звонки не отправит одновременно, будет микроскопическая задержка

перед командой дайл неплохо посмотреть, какие агенты заняты и им не набирать - т.е. надо слекга усложнить дайлплан. Или настроить один звонок на сип телефонах (или в конфиге)
#7

Мне-то как раз занятым и надо отправлять вызовы (на всех аппаратах включена возможность приема множества вызовов), кроме тех, что на паузе.

Но мысль интересная. Поэкспериментирую, спасибо!

_________________
Внимание! Свет в конце тоннеля может быть светом фар приближающегося поезда!
Ubuntu 10.04/12.04 - Asterisk 1.8.11.0-rc2/1.8.14.1/1.8.17.0/10.10.0