Доброго времени суток. Используем сборку asterisk 11.6 PearlPBX. Разработчик техподдержку не оказывает (разовали договор), требуется настроить стратегию очереди таким образом:
В очереди на прием звонков находятся следующие операторы:
> [root@pearlpbx asterisk]# asterisk -rx
> "queue show" CallCenter has 0 calls
> (max unlimited) in 'ringall' strategy
> (3s holdtime, 137s talktime), W:0,
> C:3294, A:395, SL:0.1% within 0s
> Members:
> 731 (SIP/731 from SIP/731) with penalty 1 (ringinuse disabled)
> (realtime) (Not in use) has taken 132
> calls (last was 68032 secs ago)
> 765 (SIP/765 from SIP/765) with penalty 1 (ringinuse disabled)
> (realtime) (Not in use) has taken 76
> calls (last was 81980 secs ago)
> 761 (SIP/761 from SIP/761) with penalty 1 (ringinuse disabled)
> (realtime) (In use) has taken 266
> calls (last was 1117 secs ago)
> 722 (SIP/722 from SIP/722) with penalty 1 (ringinuse disabled)
> (realtime) (Not in use) has taken 264
> calls (last was 1040 secs ago)
> 711 (SIP/711 from SIP/711) with penalty 1 (ringinuse disabled)
> (realtime) (Not in use) has taken 256
> calls (last was 1338 secs ago)
> 744 (SIP/744 from SIP/744) (ringinuse disabled) (realtime) (Not
> in use) has taken 1183 calls (last was
> 2 secs ago)
> 743 (SIP/743 from SIP/743) (ringinuse disabled) (realtime)
> (Unavailable) has taken 70 calls (last
> was 170178 secs ago)
> 741 (SIP/741 from SIP/741) (ringinuse disabled) (realtime) (Not
> in use) has taken 1024 calls (last was
> 267 secs ago)
> 771 (SIP/771 from SIP/771) with penalty 1 (ringinuse disabled)
> (realtime) (paused) (Not in use) has
> taken 23 calls (last was 1029571 secs
> ago) No Callers
741+743+744 должны имеють повышенный приоритет и именно им направляется звонок в первые 15 секунд. Потом звонок идет на всех, кто не в состоянии "пауза". Состояние "пауза" генерируется по графику и описано ниже в коде диалплана
.
Вот кусок диалплана
[CallCenter]
exten => _X!,1,Wait(1)
exten => _X!,n,Answer()
;exten => _X!,n,Playback(pearlpbx/custom/Vas_vitae_medichnij_centr_Asklepij)
exten => _X!,n,GotoIfTime(08:00-17:00,mon-fri,*,*?20)
exten => _X!,n,GotoIfTime(17:00-19:00,mon-fri,*,*?30)
exten => _X!,n,GotoIfTime(19:00-21:00,mon-fri,*,*?40)
exten => _X!,n,GotoIfTime(21:00-23:00,mon-fri,*,*?50)
exten => _X!,n,GotoIfTime(08:00-12:00,sat,*,*?60)
exten => _X!,n,GotoIfTime(12:00-14:00,sat,*,*?70)
exten => _X!,n,NoOp(HE PABOTAEM)
exten => _X!,n,Playback(pearlpbx/ne_rabotaem_20150312)
;exten => _X!,n,Playback(pearlpbx/custom/Vas_vitae_medichnij_centr_Asklepij)
;exten => _X!,n,Playback(pearlpbx/custom/Nazhal_zaraz_mi_ne_mozhemo_vidpovisti_na_vash_dzvinok)
;exten => _X!,n,Playback(pearlpbx/custom/Boguniya_8-23)
;exten => _X!,n,Playback(pearlpbx/custom/Peretelefonujte_bud-laska_v_robochij_chas)
;exten => _X!,n,Playback(pearlpbx/custom/Djakuemo_za_rozuminnja_2)
;exten => _X!,n,Playback(pearlpbx/custom/WaitinForYouCall)
exten => _X!,n,Hangup(16)
; 8:00-17:00 Zvonki postupayut na vseh krome(711; 761; 771; 743)
exten => _X!,20,NoOp
exten => _X!,n,GoSub(subUnpauseAll,start,1())
exten => _X!,n,PauseQueueMember(CallCenter,SIP/711)
exten => _X!,n,PauseQueueMember(CallCenter,SIP/761)
exten => _X!,n,PauseQueueMember(CallCenter,SIP/771)
exten => _X!,n,PauseQueueMember(CallCenter,SIP/743)
exten => _X!,n,Goto(100)
; 17:00-19:00 Zvonki postupayut tolko na Shevchenko 14 (761)
exten => _X!,30,NoOp
exten => _X!,n,GoSub(subPauseAll,start,1())
exten => _X!,n,UnpauseQueueMember(CallCenter,SIP/761)
exten => _X!,n,Goto(100)
; 19:00-21:00 Zvonki postupayut tolko na Vokzalnaya, 12 (711)
exten => _X!,40,NoOp
exten => _X!,n,GoSub(subPauseAll,start,1())
exten => _X!,n,UnpauseQueueMember(CallCenter,SIP/711)
exten => _X!,n,Goto(100)
; 21:00-23:00 Zvonki postupayut tolko na Vokzalnaya 12 (711)
exten => _X!,50,NoOp
exten => _X!,n,GoSub(subPauseAll,start,1())
exten => _X!,n,UnpauseQueueMember(CallCenter,SIP/711)
exten => _X!,n,Goto(100)
; SatAM 8:00-12:00 Zvonki postupayut tolko na CallCenter (741; 744)
exten => _X!,60,NoOp
exten => _X!,n,GoSub(subPauseAll,start,1())
exten => _X!,n,UnpauseQueueMember(CallCenter,SIP/741)
exten => _X!,n,UnpauseQueueMember(CallCenter,SIP/744)
exten => _X!,n,Goto(100)
; SatPM 12:00-14:00 Zvonki postupayut tolko na Shevchenko 14 (761)
exten => _X!,70,NoOp
exten => _X!,n,GoSub(subPauseAll,start,1())
exten => _X!,n,UnpauseQueueMember(CallCenter,SIP/761)
exten => _X!,n,Goto(100)
; Queue
exten => _X!,100,Playback(pearlpbx/custom/Vas_vitae_medichnij_centr_Asklepij)
exten => _X!,n,Queue(CallCenter,rtT)
exten => _X!,n,Hangup()
exten => _X!,150,AGI(PearlPBX-callback-add.pl,${CALLERID(num)},${EXTEN},${CHANNEL})
exten => _X!,n,Hangup();
[subPauseAll]
exten => start,1,PauseQueueMember(CallCenter,SIP/711)
same => n,PauseQueueMember(CallCenter,SIP/741)
same => n,PauseQueueMember(CallCenter,SIP/743)
same => n,PauseQueueMember(CallCenter,SIP/744)
same => n,PauseQueueMember(CallCenter,SIP/722)
same => n,PauseQueueMember(CallCenter,SIP/731)
same => n,PauseQueueMember(CallCenter,SIP/761)
same => n,PauseQueueMember(CallCenter,SIP/765)
same => n,PauseQueueMember(CallCenter,SIP/771)
same => n,PauseQueueMember(CallCenter,SIP/790)
same => n,PauseQueueMember(CallCenter,SIP/791)
same => n,PauseQueueMember(CallCenter,SIP/798)
same => n,Return()
[subUnpauseAll]
exten => start,1,UnpauseQueueMember(CallCenter,SIP/711)
same => n,UnpauseQueueMember(CallCenter,SIP/741)
same => n,UnpauseQueueMember(CallCenter,SIP/743)
same => n,UnpauseQueueMember(CallCenter,SIP/744)
same => n,UnpauseQueueMember(CallCenter,SIP/722)
same => n,UnpauseQueueMember(CallCenter,SIP/731)
same => n,UnpauseQueueMember(CallCenter,SIP/761)
same => n,UnpauseQueueMember(CallCenter,SIP/765)
same => n,UnpauseQueueMember(CallCenter,SIP/771)
same => n,UnpauseQueueMember(CallCenter,SIP/790)
same => n,UnpauseQueueMember(CallCenter,SIP/791)
same => n,UnpauseQueueMember(CallCenter,SIP/798)
same => n,Return()
;[Saturday]
;switch => Realtime/Saturday@extensions
!!741+743+744 должны имеють повышенный приоритет и именно им направляется звонок в первые 15 секунд. - КАК ЭТО РЕАЛИЗОВАТЬ?
внес изменения в penalty в базе "asterisk" PostgreSQL через phpPgAdmin:
Действия uniqueid membername queue_name interface penalty paused
Редактировать Удалить
13
721 Отделения SIP/721
1
NULL
Редактировать Удалить
17
711 Otdeleniya SIP/711
1
NULL
Редактировать Удалить
18
761 Otdeleniya SIP/761
1
NULL
Редактировать Удалить
15
721 Otdeleniya SIP/721
1
NULL
Редактировать Удалить
36
741 CallCenter SIP/741 NULL
0
Редактировать Удалить
37
744 CallCenter SIP/744 NULL
0
Редактировать Удалить
40
722 CallCenter SIP/722
1
0
Редактировать Удалить
41
731 CallCenter SIP/731
1
0
Редактировать Удалить
43
765 CallCenter SIP/765
1
0
Редактировать Удалить
47
798 CallCenter SIP/798
1
0
Редактировать Удалить
39
711 CallCenter SIP/711
1
1
Редактировать Удалить
42
761 CallCenter SIP/761
1
1
Редактировать Удалить
44
771 CallCenter SIP/771
1
1
Редактировать Удалить
38
743 CallCenter SIP/743 NULL
1
Есть 2 теоретических варианта(может и больше, но два относительно простых)
1) Делаете очередь в которой три агента 741, 743, 744, в ней выствляете leaveempty=strict. За ней ставите обычную очередь. Соответсвенно очередь пропускается если все три заняты.
2) в agents.conf выставляете пенальти, в queuerules пишите правило повышающее пенальти со временем.
ну и есть вариант просто нанять вменяемого разроботчика.
Задан: 2016-03-16 18:45:25 +0400
Просмотрен: 379 раз
Обновлен: Mar 17 '16
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
ну европейцы в лице Поляков могли бы сбросится на несколько евро. PS приоритет через пенальти
awsswa ( 2016-03-16 20:27:08 +0400 )редактироватьСудя по диалплану , это хорошо , что разорвали . Это не разработчик . Это костыльбанда.
zzuz ( 2016-03-16 20:28:07 +0400 )редактироватьКак добавить пенальти на внутренний номер 741, 743, 744?
sattva ( 2016-03-16 22:42:34 +0400 )редактироватьмогу сказать "ухты". с pearlpbx еще вроде никто не обращался.
meral ( 2016-03-17 07:30:04 +0400 )редактироватьЗначит нужно привлечь другого разработчика или изучать вопрос самостоятельно.
P.S. Из описания pearlpbx:
>Ни строчки на PHP ! ;-) Я не люблю PHP, поэтому серверная часть (backend) PearlPBX написана исключительно на Perl.
У себя чтоли дописать:
>Ни строчки на PERL ! Я не люблю PERL, поэтому вся серверная часть написана исключительно на PHP.
Но что это даст ? Есть повод гордиться ? А в чем разница для конечного клиента ?
virus_net ( 2016-03-17 09:34:45 +0400 )редактироватьНашел в мануале: Управление свойствами группы операторов. Я постарался подобрать значения свойств для очередей по-умолчанию так, что бы их не нужно было модифицировать. На самом деле свойств у очередей значительно больше чем можно увидеть на данном скриншоте, но автор посчитал, что остальное можно вынести в “профессиональный” режим. В версии 1.х профессиональный режим еще недоступен, но он будет в версии 2.х. А пока есть база данных и доступ к ней. Описание свойств очередей можно найти в таблице public.queues.
Поэтому внес изменения "penalty" - в базе данных PostgreSQL "asterisk" - через phpPgAdmin!
Действия uniqueid membername queue_name interface penalty paused Редактировать Удалить
sattva ( 2016-03-17 12:51:05 +0400 )редактировать13 721 Отделения SIP/721 1 NULL Редактировать Удалить
17 711 Otdeleniya SIP/711
1 NULL Редактировать Удалить
18 761 Otdeleniya SIP/761
1 NULL Редактировать Удалить
15 721 Otdeleniya SIP/721 1 NULL Редактировать Удалить
36 741 CallCenter SIP/741 NULL
0 Редакт
Учитывая использование AGI скриптов, если там ускоритель в скриптах не стоит, то перл - это даже хуже. Вы бы лучше вносили изменения сразу в файлы. Смысл в базе если веб не работает?
meral ( 2016-03-18 08:29:39 +0400 )редактироватьИспользование пенальти сработает не совсем как вы ожидаете так как нет возможности что бы пенальти действовало только 15 секунд. Оно будет действовать постоянно, а значит на остальных пользователей звонок не перейдёт если ктото из операторов с более низким пенальти не будет занят/отключён. В вашем случе стоти реализовать через две последовательные очереди с настройками у первой leavewhenempty
j33n ( 2016-03-19 14:16:06 +0400 )редактироватьчто значит "нет возможности". а про queue_rules вы не в курсе?
meral ( 2016-03-20 04:02:24 +0400 )редактироватьвообще, не позорьте бабушкины тапочки, если leavewhenmpty очередь выходит, то и очередь с пенальти перейдет на следующий уровень пенальти без дополнительных настроек.
meral ( 2016-03-20 04:04:09 +0400 )редактироватьСпасибо за указание, вы правы действительно с queuerules можно делать такие переходы, ранее это как то совсем упускал и не использовал эту приблуду. leavewhenmpty я привёл как дополнительную опцию которя помогает переходить между очередями симулируя переход между операторами с разными пенальти, но я писал это просто рассуждая что если в очереди #1 какой то оператор с места уйдёт, не выключив телефон, то при стратегиях leastrecent и fewestcalls звонок может просто "залипнуть" на нём, долбя на него раз за разом. Если же использовать 2 очереди то звонок выйдет в следующую по таймауту очереди. Но снова таки учитывая ваше указание на queuerules это теперь не имеет смысла.
j33n ( 2016-03-21 13:30:28 +0400 )редактироватьqueuerules.conf:
[CallCentre] penaltychange => 5, +1
sattva ( 2016-03-30 09:44:09 +0400 )редактировать