Asterisk

Dec 21, 2012 12:39

Если используется подход, с динамической регистрацией в очередях, то возникает проблема с процессом разрегистрации. Т.е. процедура разрегистрации проста и очевидна, но человек, уходя может просто забыть разрегистрироваться. Это может создать некоторые неудобства. Потому, лучше, принудительно чистить очереди. Для этого приходится использовать крон

#!/bin/sh
echo "Channel: Local/99999@from-internal/n
MaxRetries: 0
RetryTime: 0
WaitTime: 20
Context: from-internal
Extension: 99999
Priority: 1
AlwaysDelete: Yes" >/var/spool/asterisk/tmp/99999.call
mv /var/spool/asterisk/tmp/99999.call /var/spool/asterisk/outgoing/99999.call

Астериск умеет выполнять звонки считывая т.н. call файлы. Но не умеет делать это по расписанию. Потому, приходится создавать файл по расписанию и закидывать в туда, откуда астериск их читает.
Вышеуказаный скрипт создает команду звонка на номер, который чистит очереди, это 99999. Сам экстеншен 99999 выглядит следующим образом.

exten => 99999,1,Set(Qes=110)
exten => 99999,n,While($[${Qes}<160])
exten => 99999,n,Set(LIST=${QUEUE_MEMBER_LIST(${Qes})})
exten => 99999,n,Set(X=1)
exten => 99999,n,Set(Qmember=${CUT(LIST,\,,${X})})
exten => 99999,n,While($[${EXISTS(${Qmember})}])
exten => 99999,n,RemoveQueueMember(${Qes},${Qmember})
exten => 99999,n,Set(X=$[${X} + 1])
exten => 99999,n,Set(Qmember=${CUT(LIST,\,,${X})})
exten => 99999,n,EndWhile()
exten => 99999,n,Set(Qes=$[${Qes}+10])
exten => 99999,n,EndWhile()
exten => 99999,n,Playback(agent-loggedoff)
exten => 99999,n,Hangup()

у меня очереди пронумерованы от 110 до 160 с шагом 10, в самом начале происходит инициализация переменной с номерами очередей, затем цикл перебора номеров, с вложенным циклом удаления экстеншенов из очередей. Список экстеншенов выдергивается командой QUEUE_MEMBER_LIST а результат, разбирается на отдельные куски.

asterisk

Previous post Next post
Up