Prosty skrypt do usuwania agentów dynamicznych z podanych kolejek
W pierwszej kolejności dodajemy agentów dynamicznych. Można to zrobić poprzez zalogowanie do kolejki za pomocą kodu w telefonie lub komendami:
[root@asteriskserver ~]# /usr/sbin/asterisk -rx 'queue add member SIP/102 to 1000'
Added interface 'SIP/102' to queue '1000'
[root@asteriskserver ~]# /usr/sbin/asterisk -rx 'queue add member SIP/103 to 1000'
Added interface 'SIP/103' to queue '1000'
[root@asteriskserver ~]# /usr/sbin/asterisk -rx 'queue add member SIP/104 to 1000'
Added interface 'SIP/104' to queue '1000'
[root@asteriskserver ~]# /usr/sbin/asterisk -rx 'queue add member SIP/105 to 1000'
Added interface 'SIP/105' to queue '1000'
Sprawdzamy aktualny status kolejki komendą:
[root@asteriskserver ~]# /usr/sbin/asterisk -rx 'queue show 1000'
1000 has 0 calls (max unlimited) in 'ringall' strategy (4s holdtime, 36s talktime), W:0, C:4, A:0, SL:100.0% within 60s
Members:
Agent5 Dynamiczny (Local/105@from-queue/n from SIP/105) (ringinuse enabled) (dynamic) (Not in use) has taken 1 calls (last was 71360 secs ago)
Agent2 Statyczny (Local/101@from-queue/n from hint:101@ext-local) (ringinuse enabled) (Not in use) has taken no calls yet
Agent1 Statyczny1 (Local/100@from-queue/n from hint:100@ext-local) (ringinuse enabled) (Not in use) has taken no calls yet
SIP/105 (ringinuse enabled) (dynamic) (Not in use) has taken no calls yet
SIP/104 (ringinuse enabled) (dynamic) (Not in use) has taken no calls yet
SIP/103 (ringinuse enabled) (dynamic) (Not in use) has taken no calls yet
SIP/102 (ringinuse enabled) (dynamic) (Not in use) has taken no calls yet
No Callers
Tworzymy skrypt queue_logout.sh
TREŚĆ SKRYPTU
#!/bin/sh
if [ ""$*"" == """" ]; then
echo ""musze wiedziec jakie kolejki""
echo ""uzycie: $0 queue1 queue2 queue3 ...""
exit
fi
for i in $*
do
CNTR=`/usr/sbin/asterisk -rx ""queue show ${i}"" | grep ""dynamic"" | awk '{print $1}'`
for j in ${CNTR}
do
echo ""running: /usr/sbin/asterisk -rx queue remove member ${j} from ${i}""
echo `/usr/sbin/asterisk -rx ""queue remove member ${j} from ${i}""`
done
done
Użycie: sh [skrypt] [kolejka] (sh -x skrypt jeżeli chcemy mieć debug tekstowy z wykonania komendy). Jeżeli chcemy usunąć agentów dynamicznych z kolejki 1000 wykonujemu
[root@asteriskserver ~]# sh -x /home/queue_logout.sh 1000
+ '[' 1000 == '' ']'
+ for i in '$*'
++ /usr/sbin/asterisk -rx 'queue show 1000'
++ awk '{print $1}'
++ grep dynamic
+ CNTR='Agent5
SIP/105
SIP/104
SIP/103
SIP/102'
+ for j in '${CNTR}'
+ echo 'running: /usr/sbin/asterisk -rx queue remove member Agent5 from 1000'
running: /usr/sbin/asterisk -rx queue remove member Agent5 from 1000
++ /usr/sbin/asterisk -rx 'queue remove member Agent5 from 1000'
+ echo Unable to remove interface ''\''Agent5'\''' from queue ''\''1000'\'':' Not there Command ''\''queue' remove member Agent5 from '1000'\''' failed.
Unable to remove interface 'Agent5' from queue '1000': Not there Command 'queue remove member Agent5 from 1000' failed.
+ for j in '${CNTR}'
+ echo 'running: /usr/sbin/asterisk -rx queue remove member SIP/105 from 1000'
running: /usr/sbin/asterisk -rx queue remove member SIP/105 from 1000
++ /usr/sbin/asterisk -rx 'queue remove member SIP/105 from 1000'
+ echo Removed interface SIP/105 from queue ''\''1000'\'''
Removed interface SIP/105 from queue '1000'
+ for j in '${CNTR}'
+ echo 'running: /usr/sbin/asterisk -rx queue remove member SIP/104 from 1000'
running: /usr/sbin/asterisk -rx queue remove member SIP/104 from 1000
++ /usr/sbin/asterisk -rx 'queue remove member SIP/104 from 1000'
+ echo Removed interface SIP/104 from queue ''\''1000'\'''
Removed interface SIP/104 from queue '1000'
+ for j in '${CNTR}'
+ echo 'running: /usr/sbin/asterisk -rx queue remove member SIP/103 from 1000'
running: /usr/sbin/asterisk -rx queue remove member SIP/103 from 1000
++ /usr/sbin/asterisk -rx 'queue remove member SIP/103 from 1000'
+ echo Removed interface SIP/103 from queue ''\''1000'\'''
Removed interface SIP/103 from queue '1000'
+ for j in '${CNTR}'
+ echo 'running: /usr/sbin/asterisk -rx queue remove member SIP/102 from 1000'
running: /usr/sbin/asterisk -rx queue remove member SIP/102 from 1000
++ /usr/sbin/asterisk -rx 'queue remove member SIP/102 from 1000'
+ echo Removed interface SIP/102 from queue ''\''1000'\'''
Removed interface SIP/102 from queue '1000'
Po sprawdzeniu dynamiczni agenci będą niedostępni:
[root@asteriskserver ~]# /usr/sbin/asterisk -rx 'queue show 1000'
1000 has 0 calls (max unlimited) in 'ringall' strategy (4s holdtime, 36s talktime), W:0, C:4, A:0, SL:100.0% within 60s
Members:
Agent Dynamiczny5 (Local/105@from-queue/n from SIP/105) (ringinuse enabled) (dynamic) (Not in use) has taken 1 calls (last was 71644 secs ago)
Agent Statyczny2 (Local/101@from-queue/n from hint:101@ext-local) (ringinuse enabled) (Not in use) has taken no calls yet
Agent Statyczny1 (Local/100@from-queue/n from hint:100@ext-local) (ringinuse enabled) (Not in use) has taken no calls yet
No Callers
Dodatkowe informacje.
Przed uruchomieniem skryptu sprawdzamy w jaki sposób dodawani są agenci dynamiczni, ponieważ w zależności od sposobu ich logowania (skrypt, aplikacja, kod) w różny sposób będą się oni prezentować.
[root@freepbx ~]# /usr/sbin/asterisk -rx 'queue show 10000'
10000 has 0 calls (max unlimited) in 'rrmemory' strategy (6s holdtime, 96s talktime), W:0, C:104, A:83, SL:100.0% within 30s
Members:
DOK Jan Kowalski (Local/1004@from-queue/n from SIP/1004) (ringinuse enabled) (dynamic) (Not in use) has taken 2 calls (last was 251 secs ago)
DOK Joanna Nowak (Local/1003@from-queue/n from SIP/1003) (ringinuse enabled) (dynamic) (in call) (In use) has taken 1 calls (last was 131 secs ago)
DOK Maria Kowalska (Local/1010@from-queue/n from SIP/1010) (ringinuse enabled) (dynamic) (Ring+Inuse) has taken 2 calls (last was 248 secs ago)
DIT Glowny Administrator (Local/1000@from-queue/n from SIP/1000) (ringinuse enabled) (dynamic) (paused) (Not in use) has taken no calls yet
No Callers
Ponieważ skrypt wykrywa nazwę interfejsu w oparciu o komendę awk
awk '{print $1}
musimy znaleźć wyrażenie regularne, które będzie odpowiednie sprawdzenia tej nazwy. Ponieważ nazwa interfejsu jest po trzecim wyrażeniu (Nazwa użytkownika numeru to DZIAŁ IMIĘ NAZWISKO) i jest poprzedzona nawiasem, to użyjemy wyrażenia awk '{print substr($4,2); }' (czwarty wyraz, od drugiego znaku). I w taki sposób należy mienić skrypt.
Ostatnim krokiem jest dodanie do skryptu do crona aby uruchamiał się o wyznaczonej przez nas godzinie.
Aby uzyskać informacje na temat konfiguracji centrali FreePBX możesz skontaktować się z naszym biurem obsługi klienta pod numerem 221 221 070. Nasi pracownicy umówią Państwa na rozmowę z inżynierem, który będzie mógł udzielić profesjonalnego wsparcia lub przyjechać do Państwa z wizytą serwisową.
"