Ruhrpottfon Posted November 19, 2018 #1 Share Posted November 19, 2018 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? Link to comment Share on other sites More sharing options...
Solution Tom Wellige Posted September 1, 2019 Solution #2 Share Posted September 1, 2019 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: Please find the IsGroupLoggedOff function in the Function Collection (VBScript) and Function Collection (Lua) area of the Programming References section of the SwyxPEDIA here on Swyx Forum. 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 More sharing options...
AlexS Posted September 7, 2020 #3 Share Posted September 7, 2020 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 More sharing options...
Tom Wellige Posted September 8, 2020 #4 Share Posted September 8, 2020 Den VBScript Code kopierst Du in den Start Block. Die Funktion selbst ruft Du in dem Variable auswerten Block auf und wertest ihren Rückgabewert direkt über die beiden Ausgänge aus: Wobei 600 die Nummer der Gruppe ist, die Du abfragen willst. Link to comment Share on other sites More sharing options...
BennoKrause Posted April 13, 2022 #5 Share Posted April 13, 2022 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 Link to comment Share on other sites More sharing options...
Tom Wellige Posted April 13, 2022 #6 Share Posted April 13, 2022 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: Please find the IsAtLeastOneMemberOfGroupLoggedOff function in the Function Collection (VBScript) and Function Collection (Lua) area of the Programming References section of the SwyxPEDIA here on Swyx Forum. Link to comment Share on other sites More sharing options...
BennoKrause Posted April 13, 2022 #7 Share Posted April 13, 2022 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 More sharing options...
Tom Wellige Posted April 13, 2022 #8 Share Posted April 13, 2022 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: Auf Gruppen Basis (empfohlen!): Link to comment Share on other sites More sharing options...
BennoKrause Posted April 20, 2022 #9 Share Posted April 20, 2022 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: 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 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 More sharing options...
Tom Wellige Posted April 20, 2022 #10 Share Posted April 20, 2022 Werf doch mal einen Blick ins Server Trace, was an Status Werten ermittelt wird. Hier wird erklärt, wie Du die das Server Trace auf einzelne Rufe und nur Call Routing Ausgaben filtern kannst: How to filter SwyxWare traces for call routing output of single call Link to comment Share on other sites More sharing options...
BennoKrause Posted April 26, 2022 #11 Share Posted April 26, 2022 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 More sharing options...
BennoKrause Posted April 26, 2022 #12 Share Posted April 26, 2022 Ergänzung: 1 User aus der Gruppe hat die Leitung gesperrt, ist aber "Grün". Dadurch stellt der Ruf einfach ganz normal durch. Ich habe gedacht wenn man die Leitungstaste sperrt, ist der Status "Besetzt". lg Benno Link to comment Share on other sites More sharing options...
Tom Wellige Posted April 27, 2022 #13 Share Posted April 27, 2022 Hast Du schonmal wie von mir vorgeschlagen das Server Trace überprüft um sicher zu stellen, dass der Status der einzelnen Gruppen Mitglieder auch richtig ermittelt wird? Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now