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

Нужно настроить очередь с пенальти (платно)

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

Нужно настроить очередь с пенальти (платно)


Астериск 1.8.13.0
Есть тестовая очередь с 2-мя членами: 001 и 101. Нужно, чтобы первые 20 секунд вызов шел только на 001, следующие 40 на 001 и 101 одновременно (ringall), затем (по не ответу) выходил из очереди с определенным значением QUEUESTATUS. При этом во время нахождения вызова в очереди каждые 30 секунд должен проигрываться звуковой файл.
Ну и объяснить мне, почему ваши настройки именно такие, какими вы их сделали.
Стоимость услуг предлагайте.
#2

сделайте две очереди. а так... так патчить надо.
#3

Я так и делал вначале, но это вариант на коленках в моем случае.
#4

Я просто против патчей, если это не особо обосновано. Во-первых, придется портировать от версии к версии. Во-вторых, иногда криво срабатывает все это.

У нас тоже надо было править пенальти и патчили астериск, года два потом сопровождали такое решение, позже сделали две очереди.

Не вижу с этом проблем, все вопросы можно на уровне дайлплана решить.
#5

Цитата:
Я просто против патчей, если это не особо обосновано. Во-первых, придется портировать от версии к версии. Во-вторых, иногда криво срабатывает все это.
У нас тоже надо было править пенальти и патчили астериск, года два потом сопровождали такое решение, позже сделали две очереди.
Не вижу с этом проблем, все вопросы можно на уровне дайлплана решить.


Я просто не совсем понимаю, что значит "патчить". Думал, настройка пенальти входит в базовый дистрибутив, а значит от версии к версии должна наблюдаться совместимость. Речь ведь не идет о том, чтобы устанавливать какие-то расширения. Разве нельзя все настроить, используя queue.conf, queuerules.conf и, возможно, agents.conf?
#6

писал в личку, но тот же текст приведу здесь, так как это может быть интересно всем:

возможно в 1.8 и поправили, ранее (1,2-1,6) работало это так:

очередь:

пенальти 1: агент1, агент2, агент3
пенальти 2: агент4, агент5, агент6

время звонка 20 секунд

пожелание - если в течение 20 секунд не ответил агент на приоритете 1, звонок должен уйти ко 2-у.

как сделано в астериске: пока есть хоть один свободный агент в пределах первого приоритета, звонки идут ему. и только если его (агента) нет - на приоритет 2.

это - патч 1
далее, вы хотите при переходе на второй приоритет сменить логику звонка на ринголл - это патч 2

Цитата:
Я просто не совсем понимаю, что значит "патчить". Думал, настройка пенальти входит в базовый дистрибутив, а значит от версии к версии должна наблюдаться совместимость. Речь ведь не идет о том, чтобы устанавливать какие-то расширения. Разве нельзя все настроить, используя queue.conf, queuerules.conf и, возможно, agents.conf?


ну смотрите, в настройке очереди в queue.conf конкретно указана стратегия обзвона, а вы хотите менять ее на лету.
что у нас в queuerules.conf?
Код:
; It is possible to change the value of the QUEUE_MAX_PENALTY and QUEUE_MIN_PENALTY
; channel variables in mid-call by defining rules in the queue for when to do so. This can allow for
; a call to be opened to more members or potentially a different set of members.
; The advantage to changing members this way as opposed to inserting the caller into a
; different queue with more members or reinserting the caller into the same queue with a different
; QUEUE_MAX_PENALTY or QUEUE_MIN_PENALTY set is that the caller does not lose his place in the queue.
;
; Note: There is a limitation to these rules; a caller will follow the penaltychange rules for
; the queue that were defined at the time the caller entered the queue. If an update to the rules is
; made during the caller's stay in the queue, these will not be reflected for that caller.
;
; The syntax for these rules is
; penaltychange => ,[,absolute or relative change to QUEUE_MIN_PENALTY]
;
; Example:
; [myrule]
; penaltychange => 30,+3 ; 30 seconds into the call increase the QUEUE_MAX_PENALTY by 3, no change to QUEUE_MIN_PENALTY
; penaltychange => 60,10,5 ; 60 seconds into the call increase the QUEUE_MAX_PENALTY to 10 and increase the QUEUE_MIN_PENALTY to 5
; penaltychange => 75,,7 ; 75 seconds into the call keep the QUEUE_MAX_PENALTY the same and increase the QUEUE_MIN_PENALTY to 7


это не даст вам возможности сменить стратегию дозвона.

Потому я вам изначально посоветовал - сделайте две очереди и все...

Added after 5 minutes:

Цитата:
Есть тестовая очередь с 2-мя членами: 001 и 101. Нужно, чтобы первые 20 секунд вызов шел только на 001, следующие 40 на 001 и 101 одновременно (ringall), затем (по не ответу) выходил

я извиняюсь, в вашем частном случае, с двумя агентами всего, расположив их так:
пенальти 1: 001
пенальти 2: 001, 101

и установив стратегию ринголл, поигравшись с queuerules.conf, можно все же чего-то добится. Но если агентов будет больше и пожелания по дозвону на первом уровне будут другие (например, leastrecent), то надо делать две очереди.
#7

а как товарищ с двумя очередями могу сказать, при переходе из очереди в очереди ставьте паузу Wait - иначе бывают грабли
#8

Спасибо за развернутый ответ!

Цитата:
Но если агентов будет больше и пожелания по дозвону на первом уровне будут другие (например, leastrecent), то надо делать две очереди.

На данный момент динамически менять стратегию обзвона в очереди не требуется.

Цитата:
я извиняюсь, в вашем частном случае, с двумя агентами всего, расположив их так:
пенальти 1: 001
пенальти 2: 001, 101


Да, мой случай несколько упрощенный, но все же агентов не так много.
Как правильно задать нескольким агентам одно и то же пенальти? Чтобы при этом один агент мог иметь несколько пенальти?
Я так понимаю, это делается в queues.conf

Сейчас у меня:
Код:
defaultrule = test
strategy = ringall
member => SIP/001,1
member => SIP/101,2

Как мне корректно записать, что 001 присвоено пенальти 1 и 2? Только через ringgroup или есть способ проще?
#9

Цитата:
Сейчас у меня:

Код:
defaultrule = test
strategy = ringall
member => SIP/001,1
member => SIP/101,2


Как мне корректно записать, что 001 присвоено пенальти 1 и 2? Только через ringgroup или есть способ проще?

Код:
defaultrule = test
strategy = ringall
member => SIP/001,1
member => SIP/001,2
member => SIP/101,2
#10

Цитата:
defaultrule = test
strategy = ringall
member => SIP/001,1
member => SIP/001,2
member => SIP/101,2


А вот реализовать, чтобы по неответу 001 в течение например 15 секунд пенальти увеличивалось бы на +1 и тем самым начинали бы звонить 001 и 101 вместе - не получится?

Я вообще правильно понимаю, что запись
Код:
penaltychange => 15, 5, 2

означает, что, если в течение 15 секунд вызов не будет принят, диапазон пенальти изменится на с 2 до 5.
Т.е. агенты с пенальти s,n,Set(QUEUE_MIN_PENALTY=2)
exten => s,n,Set(QUEUE_MAX_PENALTY=4)
Этот код означает, что помещенный в очередь вызов будет обрабатываться только агентами, которым присвоен пенальти с 2 по 4 включительно?
Т.е. по идее можно вообще не задавать значения пенальти перед входом в очередь и это будет означать, что вызов станет обрабатываться всеми агентами, начиная с 1-го пенальти?
#11

Скажем так, я активно гонял очереди до 1.6 версии, когда только это все внедрялось, потому не могу сказать на основе личного опыта, но по опиисанию:

; It is possible to change the value of the QUEUE_MAX_PENALTY and QUEUE_MIN_PENALTY
; channel variables in mid-call by defining rules in the queue for when to do so.

Возможно менять указаные переменные в процессе звонка, определив значения для очереди, когда это должно произойти.
ЭТО НЕ ДО ВХОДА В ОЧЕРЕДЬ, ОНА САМА ДИНАМИЧЕСКИ ЭТО ВОЗЬМЕТ

; This can allow for
; a call to be opened to more members or potentially a different set of members.

Это позволяет сделать звонок открытым большему количеству агентов или даже другому набору агентов
ЭТО ОТВЕТЫ НА ВАШИ ВОПРОСЫ

; The advantage to changing members this way as opposed to inserting the caller into a
; different queue with more members or reinserting the caller into the same queue with a different
; QUEUE_MAX_PENALTY or QUEUE_MIN_PENALTY set is that the caller does not lose his place in the queue.

этот наворот сделан как альтернатива использованию дополнительной очереди или той же самой очереди с отличающимися QUEUE_MAX_PENALTY или QUEUE_MIN_PENALTY, что позволяет звонящему не потерять свое место в очереди
ПРИ ДВОЙНОЙ ОЧЕРЕДИ В САМОМ ДЕЛЕ ТАКОЙ БАГ БЫВАЕТ

; Note: There is a limitation to these rules; a caller will follow the penaltychange rules for
; the queue that were defined at the time the caller entered the queue. If an update to the rules is
; made during the caller's stay in the queue, these will not be reflected for that caller.

Если вы изменили эти правила для очереди, после того, как звонок туда уже попал, на актуальный звонок изменения не сработают.
;

КАК РЕЗЮМЕ, СТОИТ ПОПРОБОВАТЬ Smile

Заодно и бесплатно.
#12

Цитата:
Код:
defaultrule = test
strategy = ringall
member => SIP/001,1
member => SIP/001,2
member => SIP/101,2

Такая запись некорректна. Астериск просто не звонит ни на один из тех номеров, которые дублируются в мемберах, пусть даже и с разными пенальти.
Вариант создания рингруппы и ссылка на нее так же не прокатывает. Вызов созданной в internal рингруппы 999 с добавленным в нее 001 и 101:
Код:
[queues.conf]
member => 001,1
member => Local/999@internal/n,2

при отладке выдает странную ошибку: буду звонить только на 101, т.к. 001 уже набран


Есть идеи, как еще можно объединить в одном мембере несколько экстеншенов?
#13

Создать группу и включить нужных членов
Пример:
Было номер 108, удалили, создали группу 108 и включили туда двух новых членов 1081 и 1082. Не забыв выставив им CallierID как 108.
Ну и при звонке на номер 108 будут звучать номера 1081 и 1082
#14

Так а чем это отличается от моего варианта с вызовом группы?
#15

поищите патч тут, был, чтобы как я ранее указал можно было бы агентов указать.
#16

Цитата:
поищите патч тут, был, чтобы как я ранее указал можно было бы агентов указать.

Ответил вам в ЛС