VBScript Example - Request the status of any user
With the following VBScript function, which originates on the public Swyx Forum (www.swyxforum.com), it is possible to request the current status of any user or group from within the call routing.
The original post with all related discussions can be found here.
'----------------------------------------------------------------
' UserStatus
'
' Returns the current status of the given user.
'
' Parameter
' sNumber user name or extension
'
' Return
' integer 0 - State Unavailable (no status signalling configured!)
' 1 - Logged Off
' 2 - Logged On (no speaking)
' 3 - Speaking External
' 4 - Alerting
' 5 - Speaking Internal
' 6 - Away (from SwyxWare 2011 on)
' 7 - Do not Disturb (from SwyxWare 2011 on)
'----------------------------------------------------------------
Function UserStatus(ByVal sNumber)
PBXScript.OutputTrace("-------------> UserStatus ( sNumber = " & sNumber & " )")
Dim nReturn
nReturn = 0
Dim Users
Set Users = g_PBXConfig.GetUserByAddress(sNumber)
Dim User
For Each User In Users
PBXScript.OutputTrace("Found user " & User.Name & " with current state " & User.State)
nReturn = User.State
Next
UserStatus = nReturn
PBXScript.OutputTrace("nReturn = " & nReturn)
PBXScript.OutputTrace("<------------- UserStatus")
End Function
In order to use his function you need to do the following:
- Copy & paste the code into the Start block of your call routing script
- Make sure to have mutual status signalling configured between the call routing script user and the user you request the status from
- To call the UserStatus function you can use for example the Insert Script Code block
- To do so add the following code to its Parameters page
UseExit = UserStatus (100)
- Now you need to switch to the Links page and configure the exits. Enable the exits and configure their names.

- With having done this you have a block returning the status of the user with the extension 100 on it's exits:
-
Das ist korrekt. Die Funktionen hat den Fokus auf Benutzern, nicht auf Gruppen.
Selbstverständlich kann mittels "g_PBXConfig.GetUserByAddress" auch eine Gruppe aufgelöst und ausgewertet werden.
Ein Beispiel dazu, "IsGroupLoggedOff", findest Du in der VBScript Funktionssammlung i(Function Collection) im Swyx Forum Archiv:
https://www.swyxforum.com/archive/archive_references.html
-
"Muss ich, wenn die Funktion PBXGroup.IsBusy nutzen will, diese als Callrouting auf der eigentlichen Gruppe ausführen?"
Ja! Das PBXGroup Objekt gibt es nur in einem Gruppen Call Routing. Und es gibt Dir auch nur den Status der Gruppe zurück, auf der das Call Routing gerade läuft.
Deine Anforderung lässt sich aber schnell und einfach mit der vorhin genannten Funktionen umsetzen. Da mussen dann nur andere Status Werte abgefragt werden.Was genau ist denn die Anforderung: Du willst wissen, ob alle Benutzer in der Gruppe entweder Abwesend oder DND sind. Was ist mir nicht angemeldet und besetzt?
-
Danke für die Rückmeldung!
Der VG-Abwurf passiert leider nur, wenn in der Gruppe alle Agenten abgemeldet sind.
Sobald einer auf Abwesend oder Nicht-Stören steht, wartet der Anrufer, was nicht gut ist.
Bei Besetzt kann ich das nachvollziehen.
Deswegen wollten wir jetzt vor dem Zustellen auf die VG prüfen, ob in der Gruppe alle auf Abwesend/DND/Offline stehen. Falls ja, wird direkt auf der dahinterliegenden VG mit mehreren Benutzern zugestellt. Ist jemand auf grün oder im Telefonat, kann ruhig zugestellt werden.
-
Ich habe die IsGroupLoggedOff Funktion mal ein wenig angepasst:
''-------------------------------------------------------------------
'' Name: IsGroupAwayOrDND
'' ================
''
'' Checks if all members of a given SwyxWare user group are either in Away or DND.
''
'' return value:
'' integer True - all members of the given group are Away or DND
'' False - at least one member of the given group is not Away or DND
''--------------------------------------------------------------------
Function IsGroupAwayOrDND ( sNumber )
PBXScript.OutputTrace("-------------> IsGroupAwayOrDND ( sNumber = " & sNumber & " )")
Dim bReturn
bReturn = True ' assume all users are DND or Away until proven otherwise
Dim Users
Set Users = g_PBXConfig.GetUserByAddress(sNumber)
Dim User
For Each User In Users
PBXScript.OutputTrace("Found user " & User.Name & " with current state " & User.State)
' user logged in?
IfUser.State > 1Then
' user not away and not dnd?
If (User.State <> 6) And (User.State <> 7) Then
PBXScript.OutputTrace("User " & User.Name & " is not DND or Away, return false")
bReturn = False
Exit For
End If
End If
Next
IsGroupAwayOrDND = bReturn
PBXScript.OutputTrace("bReturn = " & bReturn)
PBXScript.OutputTrace("<------------- IsGroupAwayOrDND")
End Function
Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.
Kommentare
6 Kommentare