Jump to content
Gold Sponsor: Data-Way IT-Consulting, Austria

CR: Skip group if everybody is logged off


Ruhrpottfon
 Share


Go to solution Solved by Tom Wellige,

Recommended Posts

Hi community,

 

I'm trying to setup a call routing for one of our customers. They have 3 groups that are called in a chain. If the first group (azubi) is not answering in 6 seconds tha call goes to the next group (Buero), after additional 20 seconds the call goes to group 3. Now they want to have the call go directly to group 3 if the other group members are no inhouse.

I've come up with this code for the start block:

 

Function AzubiStatus()
    Dim nReturn
    nReturn = 1
 
    Dim Users = New Integer() {23, 24}
    Dim User

    For index = 0 To Users.GetUpperBound(0)
	dim Current
	Set Current = g_PBXConfig.GetUserByAddress(Users(index))
        PBXScript.OutputTrace("Found user " & Current.Name & " with current state " & Current.State)
        If Current.State <> 1 Then
            nReturn = 0
        End If
    Next
 
    AzubiStatus = nReturn
    PBXScript.OutputTrace("nReturn = " & nReturn)
    PBXScript.OutputTrace("<------------- UserStatus")
 
End Function

Function BueroStatus()
    Dim nReturn
    nReturn = 1
 
    Dim Users = New Integer() {21, 22, 23, 24}
    Dim User

    For index = 0 To Users.GetUpperBound(0)
	dim Current
	Set Current = g_PBXConfig.GetUserByAddress(Users(index))
        PBXScript.OutputTrace("Found user " & Current.Name & " with current state " & Current.State)
        If Current.State <> 1 Then
            nReturn = 0
        End If
    Next
 
    BueroStatus = nReturn
    PBXScript.OutputTrace("nReturn = " & nReturn)
    PBXScript.OutputTrace("<------------- UserStatus")
 
End Function

 

Function AzubiStatus checks if any of these numbers 23, 24 are inhouse, (logged in) if not go to the next group.

Function BueroStatus checks if any of these numbers 21, 22, 23, 24 are inhouse, (loggin in) if not go to the next group.

 

Does this work wherne I call these functions in a block in front of the groups? Is there a more elegant way to check the status of group members?

CR.PNG.a6d88e9bf7fdaca9a902ca7461973a17.PNG

 

 

Link to comment
Share on other sites


  • 9 months later...
  • Solution

As you use more of less the same function for both cases (Azubi, Buero) I would just place the following function in the "Start" block and use a "Variable auswerten" block to call it:

 

''-------------------------------------------------------------------
'' Name:     IsGroupLoggedOff
''           ================
'' 
'' Checks if all members of a given SwyxWare user group are logged off.
'' 
'' return value:
''      integer     True  - all members of the given group are logged off (or status can't be requested)
''                  False - at least one member of the given group is logged on
''--------------------------------------------------------------------
Function IsGroupLoggedOff ( sNumber )
 
    PBXScript.OutputTrace("-------------> IsGroupLoggedOff ( sNumber = " & sNumber & " )")
 
    Dim bReturn
    bReturn = True
 
    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)

        If User.State > 1 Then bReturn = False
 
    Next
 
    IsGroupLoggedOff = bReturn
 
    PBXScript.OutputTrace("bReturn = " & bReturn)
    PBXScript.OutputTrace("<------------- IsGroupLoggedOff")
 
End Function

 

And instead of hard coding the numbers of the group members into the code, I would create a SwyxWare user groups with the desired users in them and call the above function with the group number (or name) as parameter.

 

Link to comment
Share on other sites


  • 1 year later...

Hallo Tom,

 

ich hänge genau an diesem CallRouting mit der Abfrage der Gruppenmitglieder-Stati. An welcher Stelle muss im Script die Rufnummer der Gruppe eingesetzt werden? 

Das Script habe ich im Start eingefügt. Danach werte ich mit der Variablen-Abfrage die Variable "bReturn" aus, oder?

Gibt es dazu ein Beispiel?

 

Vielen Dank!!!!

 

 

 

Link to comment
Share on other sites


  • 1 year later...

Hallo zusammen, wir haben genau die gleiche Problemstellung. Der Anruf an die Gruppe "Lager" soll direkt an die Zentrale gehen, wenn einer der Benutzer der Gruppe nicht angemeldet ist.

Ich habe wie oben beschrieben den VBScript Code in den Start Block kopiert und danach über eine Variable die Funktion aufgerufen.

Dennoch stellt das CallRouting nicht direkt an die Zentrale durch, wenn kein Mitarbeiter angemeldet ist.

 

Kann das an der Abfrage liegen "If User State >1"?

Denn 1 Mitarbeiter ist angemeldet, hat aber die Leitung "Gruppe Lager" gesperrt.

 

Was bedeutet >1?

 

Anbei ein Bild des CallRouting.

lg

 

 

CallRouting Lager.png

Link to comment
Share on other sites


Die möglichen Status Werte werden u.a. in der UserStatus hier aus dem Forum beschrieben.

 

1 bedeutet abgemeldet, alles über 1 bedeutet der Benutzer ist angemeldet.

 

Für Deine Anwendung muss die obige Funktion IsGroupLoggedOff etwas abgewandelt werden. Die überprüft ja, ob ALLE Benutzer abgemeldet sind, Dir reicht es aber ja zu wissen, ob wenigstens ein Benutzer abgemeldet ist. Der Code für die Funktion könnte dann also wie folgt aussehen:

 

''-------------------------------------------------------------------
'' Name:     IsAtLeastOneMemberOfGroupLoggedOff
''           ==================================
'' 
'' Checks if at least one member of a given SwyxWare user group is logged off.
'' 
'' return value:
''      integer     True  - at least one member of the given group is logged off
''                  False - all members of the given group are logged in
''--------------------------------------------------------------------
Function IsAtLeastOneMemberOfGroupLoggedOff ( sNumber )
 
    PBXScript.OutputTrace("-------------> IsAtLeastOneMemberOfGroupLoggedOff ( sNumber = " & sNumber & " )")
 
    Dim bReturn
    bReturn = False
 
    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)

        If User.State = 1 Then bReturn = True
 
    Next
 
    IsAtLeastOneMemberOfGroupLoggedOff = bReturn
 
    PBXScript.OutputTrace("bReturn = " & bReturn)
    PBXScript.OutputTrace("<------------- IsAtLeastOneMemberOfGroupLoggedOff")
 
End Function

 

Damit das richtig funktioniert musst Du sicher stellen, dass der Call Routing Benutzer den Status der Gruppenmitglieder sehen darf.

 

 

Link to comment
Share on other sites


Hallo Tom,

 

danke für deine schnelle Rückmeldung. Ich denke ich benötige noch eine Erweiterung:

Hierzu nochmals eine weitere Beschreibung meinerseits:

 

Mitglieder der Gruppe Lager:

MA1-Status "Abgemeldet"

MA2-Status "Abgemeldet"

MA3-Status "Angemeldet" ->  aber Leitung "Lager" gesperrt

 

Sobald MA 3 zwar arbeitet und angemeldet ist, aber die Leitung Lager gesperrt hat, soll der Anruf direkt an die Zentrale gehen.

Stand jetzt klingelt es bis zum Timeout durch.

 

Hast du hier noch einen Tipp?

 

Des Weiteren eine Frage: Wo muss man dies beim Call Routing Benutzer einstellen?

"Damit das richtig funktioniert musst Du sicher stellen, dass der Call Routing Benutzer den Status der Gruppenmitglieder sehen darf."

 

Vielen lieben Dank

 

 

 

Link to comment
Share on other sites


Wenn ein Benutzer seine Leitungstaste sperrt sollte sein Status aus "besetzt" signalisiert werden.

 

Da das bei Dir scheinbar nicht passiert, stimmt vermutlich die Berechtigung zum Abfragen des Status noch nicht.

 

Die Berechtigung kann entweder auf Benutzer oder Gruppen Basis in der SwyxWare Administration festgelegt werden. 

 

 

Auf Benutzer Basis:

 

image.png

 

image.png

 

 

Auf Gruppen Basis (empfohlen!):

 

image.png

 

image.png

 

 

 

Link to comment
Share on other sites


Guten morgen,

 

leider klappt es bei mir noch nicht ganz.

 

Anforderung:

Je nach Status der Mitglieder aus der Gruppe, siehe unten, soll der Anruf

entweder direkt an die Zentrale gehen, oder an die Gruppe durchgestellt werden.

 

Alle Mitglieder prüfen:

,                     0 - State Unavailable                             -> 99 Zentrale ? ? ?

'                    1 - Logged Off                                     - >99 Zentrale
'                    2 - Logged On (no speaking)            -> Direkt an Gruppe
'                    3 - Speaking External                         -> 99 Zentrale
'                    4 - Alerting                                           -> 99 Zentrale
'                    5 - Speaking Internal                          -> 99 Zentrale
'                    6 - Away                                               -> Direkt an Gruppe
'                    7 - Do not Disturb                               -> 99 Zentrale

 

Infos zu den Mitgliedern der Gruppe Lager beim Test:

MA1-Status "Abgemeldet" - Arbeit mit dem SwyxClient + Swyx Phone

MA2-Status "Abgemeldet" - Arbeit mit dem SwyxClient + Swyx Phone

MA3-Status "Angemeldet" - Arbeit mit dem SwyxClient + Handy App   ->  aber Leitung "Lager" im Client gesperrt

 

Meine Einrichtung:

1. Berechtigung zum Abfragen des Status auf der "Gruppe Lager" ist eingerichtet:

 

Bild1.png.2a6dfbb184867fc94b7252f6aea7282c.png

 

2. Folgendes Skript habe ich in den Start Block eingefügt und frage dieses dann im anschließenden variable Block ab.

''-------------------------------------------------------------------
'' Name:     GroupNotAvailable
''           ==============
'' 
'' Checks if all members of a given SwyxWare user group are available 
'' for callings User Status 2 or 6.
'' 
'' return value:
''        integer        True  - all members of the given group are not available
''                            False - at least one member of the given group is available
''--------------------------------------------------------------------
Function GroupNotAvailable ( sNumber )
 
    PBXScript.OutputTrace("GroupNotAvailable ( sNumber = " & sNumber & " )")
 
    Dim bReturn
    bReturn = True
 
    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)

        If User.State <> 2 or User.State <> 6 Then bReturn = False
 
    Next
 
    GroupNotAvailable = bReturn
 
    PBXScript.OutputTrace("bReturn = " & bReturn)
    PBXScript.OutputTrace("GroupNotAvailable")
 
End Function
 

 

 

 

Bild2.thumb.png.ebe618666265aec4e68a917aebd7254b.png

 

 

Leider funktioniert es noch nicht so richtig.

 

Für Rückmeldungen bin ich sehr dankbar.

Liebe Grüße

Benno

 

 

 

 

 

Link to comment
Share on other sites


Hallo,

 

ich benötige dringend Hilfe, da das Unternehmen welches uns die Swyx verkauft hat, sich auch nicht direkt mit Skript ECR auskennt.

Meine Geschäftsleitung aber langsam die Geduld verliert.

 

Eigentlich will ich nur ein einfachstes Call Routing für Gruppen:

 

Ist irgendein User einer Gruppe auf dem Status "Grün" = Anwesend und frei = User Status = 2 (laut meinem Verständnis)

dann stelle an die Gruppe durch.

Bei allen anderen Status -> Direkte Umleitung an die Gruppe Zentrale

 

Folgendes Skript habe ich eingebaut. Leider klappt es nicht. Die User setzen Ihren Status am Client auf "Abwesend" und der Anruf geht dennoch durch.

 

 

''-------------------------------------------------------------------
'' Name:     GroupAvailableFP
''           ==============
'' 
'' Checks if all members of the SwyxWare user group Fuhrpark (FP) are available 
'' for callings User Status 2.
'' 
'' return value:
''        integer        True  - at least one member of the given group is available
''                False - no member of the given group is available
''--------------------------------------------------------------------
Function GroupAvailableFP ( sNumber )
 
    PBXScript.OutputTrace("GroupAvailableFP ( sNumber = " & sNumber & " )")
 
    Dim bReturnFP
    bReturnFP = False
 
    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)

        If User.State = 2 Then bReturnFP = True
 
    Next
 
    GroupAvailableFP = bReturnFP
 
    PBXScript.OutputTrace("bReturnFP = " & bReturnFP)
    PBXScript.OutputTrace("GroupAvailableFP")
 
End Function
 

 

 

 

Für Rückantworten bin ich sehr dankbar.

lg

Benno

 

 

 

Link to comment
Share on other sites


Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share


×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use and have taken note of our Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.