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

Queue уведомаления (announce) и обработка нажатия клавиши

Newbies/FAQ Forum 5 сообщений -
#1

У меня возник вопрос:
Возможно ли как то сделать уведомление в очереди если все агенты заняты? И возможно ли обрабатывать нажатия клавиши если звонящий уже ушел в команду Queue().
Для чего это нужно:
Например: Позвонил человек, если все операторы заняты слышит "На данный момент все операторы заняты, нажмите 1 и мы Вам перезвоним или ожидайте на линии" При нажатии 1 запускать скрипт callback, который бы сначала звонил оператору и при ответе уже набирал клиенту.

В queue.conf есть только следующее:
;queue-youarenext = "queue-youarenext" ; ("You are now first in line.")
;queue-thereare = "queue-thereare" ; ("There are")
;queue-callswaiting = "queue-callswaiting" ; ("calls waiting.")
;queue-holdtime = "queue-holdtime" ; ("The current est. holdtime is")
;queue-minutes = "queue-minutes" ; ("minutes.")
;queue-thankyou = "queue-thankyou" ; ("Thank you for your patience.")
;Note: when the semicolons don't work, leave them out e.g.:
;queue-thankyou=yoursoundfile

Насколько я понял проигрывание по таймауту определенного ролика и позиция в очереди.
Может у когото есть идеи как это реализовать (Астериск 1.4)?
#2

например не пускать в очередь, в которой нет свободных операторов, выполнять следующий шаг сценария в котором проигрывается уведомление и т.д.
#3

Набросал кое-то. Но страшновато свое рукоблудие вставлять в рабочую станцию.
Может подскажите слабые моменты?

[incoming] ; контекст для входящих
....
exten => s,n,Answer
exten => s,n,StartMusicOnHold
exten => s,n,Gosub(busyagent,s,1)
exten => s,n,Queue(Que|tT|||200)
....

[busyagent] ; контекст для проверки агентов

exten => s,1,Set(f=0)
exten => s,2,Set(t=0)
exten => s,3,While($[${t} < 10]) ; по времени будет работать 5*10=50 секунд после чего звонок всеравно уйдет в очередь
exten => s,4,Set(n=1) ; Начиная с 1-го агента
exten => s,5,While($[${n} < 16]) ;цикл проверить статус агентов которых в системе 16
exten => s,6,GotoIf("${AGENT(${n}:status)}" = "LOGGEDIN"]?7:9) ;проверяю зареган ли агент если нет то и не проверяю занятось
exten => s,7,GotoIf("${AGENT(${n}:channel)}" = ""]?8:9) ; проверяю занят ли?
exten => s,8,Return ;если свободен возращаюсь
exten => s,9,Set(n=$[${n} + 1])
exten => s,10,EndWhile
exten => s,11,BackGround(Все операторы заняты нажмите 1 и мы перезвоним Вам или ожидайте)
exten => s,12,WaitExten(5) ;жду ввода 5 сек 1
exten => s,13,Set(t=$[${t} + 1])
exten => s,14,EndWhile
exten => s,15,Return

exten => 1,1,System(/var/lib/asterisk/scripts/callback.php ${CALLERID(num)})
exten => 1,n,Hangup
#4

спустя столько лет опробовал?
#5

Можно использовать DEVICE_STATE перед принятием решения отправлять звонок в очередь или нет!

В отношении
Цитата:
И возможно ли обрабатывать нажатия клавиши если звонящий уже ушел в команду Queue().

Да, вполне реальная задача. Проговорить в анонсе, прописать контекст в описании очереди и в диалплане обработать нажатую цифру.