Dodano produkt do koszyka

Usuwanie agentów dynamicznych z kolejek - Asterisk i FreePBX - skrypt

Prosty skrypt do usuwania agentów dynamicznych z podanych kolejek

 
Jeżeli interesuje cię wynajęcie serwera z zainstalowanym systemem i FreePPBX, zapraszamy do zapoznania się z naszą ofertą serwerów wirtualnych - HOSTING FREE PBX
 
W wielu centralach IP PBX bazujących na Asterisku istnieje możliwość dodawania agentów dynamicznych do kolejek. Można ich dodawać poprzez wpisanie kodu w telefonie lub softphone, można też skorzystać z rozwiązań programowych (np. iSymphony lub inny panel do zarządzania logowaniami do kolejek). W wieloosobowych działach Call Center czasami agenci zapominają wylogować swój aparat z kolejki i telefon rozdzwania się, mimo, że pracownika nie ma już przy stanowisku. W tej sytuacji możemy zastosować proste rozwiązanie umożliwiające wylogowanie agentów dynamicznych z 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ą.

"

Data publikacji: 11.12.2019 00:00:00

Zaloguj się aby skomentować