Asterisk обрабатывает звонки в очередях по принципу FIFO, т.е. звонки будут обрабатываться один за одним по мере их поступления в очередь. Но если вы хотите каким-то клиентам предоставить приоритетное обслуживание? Для таких целей приложение Queue имеет опцию приоритета при постановке звонка в очередь.
Теперь разобьем общую задачу на более мелкие:
1) Первым делом нужно определить, нужно ли звонку выставить более высокий приоритет
2) Выставить приоритет
3) Поставить звонок в очередь
Все эти задачи реализованы в контексте:
-
[queue]
-
exten => s,1,GotoIf(${DB_EXISTS(vipclients/${CALLERID(num)})}?setprior)
-
exten => s,n,Set(QUEUE_PRIO=5)
-
exten => s,n(gotoqueue),Queue(manager-queue)
-
exten => s,n,Hungup()
-
exten => s,n(setprior),Set(QUEUE_PRIO=10)
-
exten => s,n,Goto(gotoqueue)
-
-
exten => h,1,Hangup()
-
exten => i,1,Hangup()
В первой строчке проверяется база astdb на наличие номера в семействе vipclients (в это семейство будут помещаться номера с повышенным приоритетом). Если номер есть в базе, то звонок перекидывается к метке setprior, где выставляется более высокий приоритет, после чего звонок перекидывается в очередь (gotoqueue).