vtcn05 Posted July 25, 2022 #1 Share Posted July 25, 2022 Hallo zusammen, ich möchte im Call Routing beim eingehenden Anruf ein HTTP Get abfragen, welcher eine Telefonnummer zurück liefert (HTTP GET auf "https://**********/_export/phonenumber.php?modul=it&number=1" liefert z.B. 01731234567 zurück). Zu dieser Nummer möchte ich dann den Anruf weiterleiten. Kann mir jemand einen Tipp geben, wie ich das hinbekomme (einmal das HTTP GET absetzen und das Ergebnis in einer Variable ablegen und zusätzlich die erste 0 durch +49 ersetzen)? LG Michael Mod Edit: ich habe die URL unkenntlich gemacht Link to comment Share on other sites More sharing options...
Tom Wellige Posted July 25, 2022 #2 Share Posted July 25, 2022 Hallo Michael, werf doch mal einen Blick hier drauf: PBXScript.WebRequest Link to comment Share on other sites More sharing options...
Tom Wellige Posted July 26, 2022 #3 Share Posted July 26, 2022 Kopiere den folgenden Code in die Parameter Seite des Start Blocks: Const REQUEST_URL = "https://**********/_export/phonenumber.php?modul=it&number=1" Const DEFAULT_NUMBER = "0123456" Function GetNumber PBXScript.OutputTrace "--------> GetNumber" Dim sReturn sReturn = DEFAULT_NUMBER PBXScript.OutputTrace "Request URL = " & REQUEST_URL Dim oWebRequest, respCode Set oWebRequest = PBXScript.WebRequest oWebRequest.HttpVerb = HttpVerbGet oWebRequest.URL = REQUEST_URL oWebRequest.AddHeader "Content-Type:application/text" respCode = oWebRequest.Execute PBXScript.OutputTrace "Response Code = " & respCode PBXScript.OutputTrace "Response Body = " & oWebRequest.ResponseBody If respCode = 200 Then If oWebRequest.ResponseBody <> "" Then sReturn = oWebRequest.ResponseBody End If End If ' replace leading "0" with "+49" If Left(sReturn, 1) = "0" Then sReturn = "+49" & Right(sReturn, Len(sReturn)-1) End If GetNumber = sReturn PBXScript.OutputTrace "sReturn = " & sReturn PBXScript.OutputTrace "<-------- GetNumber" End Function Im Durchstellen Block kannst Du nun diese Funktion direkt aufrufen: 2 Link to comment Share on other sites More sharing options...
vtcn05 Posted July 30, 2022 Author #4 Share Posted July 30, 2022 Hallo Tom, erstmal vielen Dank für die umfassende Antwort. Ich habe das mal bei mir eingebunden, doch leider trennt er die Verbindung sofort, ohne durchzustellen. Weißt Du, wo ich ein Log finde, um zu schauen, was er da macht? Link to comment Share on other sites More sharing options...
vtcn05 Posted July 30, 2022 Author #5 Share Posted July 30, 2022 Ich bin mittlerweile auch einen Schritt weiter. Ich habe über die Windows Aufgabenplanung ein Skript laufen, welches per wget die Daten abholt und in Text Dateien auf der Festplatte des Swyx Servers ablegt. Insgesamt gibt es 6 Dateien. Eine für jede mögliche Variable (in jeder Datei ist genau eine Telefonnummer, die ich verarbeiten möchte). Das wäre ein wenig sicherer, da die Daten schon lokal auf dem Swyx Server liegen. Nur ist auch hier die Frage, wie ich die Inhalte der Textdateien auslese und in Variablen ablege. Link to comment Share on other sites More sharing options...
Tom Wellige Posted July 30, 2022 #6 Share Posted July 30, 2022 Hallo Michael, zunächst einmal zum Thema Traces: How to filter SwyxWare traces for call routing output of single call Wie man Textdateien auslesen kann, findest Du als Beispiel hier: CheckCallerInTextFile Ich würde vorschlagen, Du legst Dir im Start Block neben den Funktion zum Auslesen der Textdateien einfach 6 verschiedene globale Variablen an Dim Ziel1 Dim Ziel2 Dim Ziel3 Dim Ziel4 Dim Ziel5 Dim Ziel6 in welche Du die eingelesenen Werte speicherst. Im grafischen Teil des Skriptes (sprich in den GSE Blöcken) kannst Du dann ganz einfach auf deren Inhalt zugreifen, z.B. = Ziel1 Link to comment Share on other sites More sharing options...
Solution Tom Wellige Posted July 30, 2022 Solution #7 Share Posted July 30, 2022 Ich hatte in meiner Funktion in meiner Antwort weiter oben einen kleinen Fehler drin (fehlendes "&" an einer Stelle). Ich hatte die einfach runter geschrieben ohne sie auszuprobieren. Ich habe den Code oben korrigiert und die Funktion läuft jetzt. Hier ihre Trace Ausgaben: 30 10:28:08.550 0030b4 Info SrvScript 05259788 00000014 SPBXScriptVbs::OutputTrace () --------> GetNumber 30 10:28:08.550 0030b4 Info SrvScript 05259788 00000014 SPBXScriptVbs::OutputTrace () Request URL = https://**********/_export/phonenumber.php?modul=it&number=1 30 10:28:08.638 0030b4 Info SrvScript 05259788 00000014 SPBXScriptVbs::OutputTrace () Response Code = 200 30 10:28:08.638 0030b4 Info SrvScript 05259788 00000014 SPBXScriptVbs::OutputTrace () Response Body = 0178******* 30 10:28:08.638 0030b4 Info SrvScript 05259788 00000014 SPBXScriptVbs::OutputTrace () sReturn = +49178******* 30 10:28:08.638 0030b4 Info SrvScript 05259788 00000014 SPBXScriptVbs::OutputTrace () <-------- GetNumber (ich habe die URL und Nummer unkenntlich gemacht) Link to comment Share on other sites More sharing options...
vtcn05 Posted July 30, 2022 Author #8 Share Posted July 30, 2022 vor 14 Stunden schrieb Tom Wellige: Ich hatte in meiner Funktion in meiner Antwort weiter oben einen kleinen Fehler drin (fehlendes "&" an einer Stelle). Ich hatte die einfach runter geschrieben ohne sie auszuprobieren. Ich habe den Code oben korrigiert und die Funktion läuft jetzt. Hier ihre Trace Ausgaben: 30 10:28:08.550 0030b4 Info SrvScript 05259788 00000014 SPBXScriptVbs::OutputTrace () --------> GetNumber 30 10:28:08.550 0030b4 Info SrvScript 05259788 00000014 SPBXScriptVbs::OutputTrace () Request URL = https://**********/_export/phonenumber.php?modul=it&number=1 30 10:28:08.638 0030b4 Info SrvScript 05259788 00000014 SPBXScriptVbs::OutputTrace () Response Code = 200 30 10:28:08.638 0030b4 Info SrvScript 05259788 00000014 SPBXScriptVbs::OutputTrace () Response Body = 0178******* 30 10:28:08.638 0030b4 Info SrvScript 05259788 00000014 SPBXScriptVbs::OutputTrace () sReturn = +49178******* 30 10:28:08.638 0030b4 Info SrvScript 05259788 00000014 SPBXScriptVbs::OutputTrace () <-------- GetNumber (ich habe die URL und Nummer unkenntlich gemacht) Ich finde zwar die Einträge im Trace-Protokoll noch nicht, aber es funktioniert schon. Vielen lieben Dank! Link to comment Share on other sites More sharing options...
vtcn05 Posted July 30, 2022 Author #9 Share Posted July 30, 2022 vor 15 Stunden schrieb Tom Wellige: Wie man Textdateien auslesen kann, findest Du als Beispiel hier: CheckCallerInTextFile Ich würde vorschlagen, Du legst Dir im Start Block neben den Funktion zum Auslesen der Textdateien einfach 6 verschiedene globale Variablen an Dim Ziel1 Dim Ziel2 Dim Ziel3 Dim Ziel4 Dim Ziel5 Dim Ziel6 in welche Du die eingelesenen Werte speicherst. Puh, da blick ich noch nicht ganz durch. Kann ich Dich (gegen Rechnung) damit beauftragen, so ein Skript zu erstellen? Es gibt 6 Textdateien, in jeder steht genau eine Nummer, die in eine der 6 Variablen muss. Link to comment Share on other sites More sharing options...
Tom Wellige Posted July 31, 2022 #10 Share Posted July 31, 2022 Geld neheme ich dafür nicht Was hältst Du denn davon, die GetNumber Funktion ein wenig zu erweitern, damit sie die 6 verschiedenen Nummern abrufen kann. Ich nehme an, dass ist der URL Parameter number? Das sind dann Zahlen von 1 bis 6? Du könntest diesen URL Parameter als Parameter in die Funktion hinreichen, so dass Du die Nummer direkt in den Durchstellen Blöcken abfragen kannst. Ich ändere die Funktion mal entsprechend: Const REQUEST_URL = "https://**********/_export/phonenumber.php?modul=it&number=%num%" Const DEFAULT_NUMBER = "0123456" Function GetNumber ( nNumber ) PBXScript.OutputTrace "--------> GetNumber ( " & nNumber & " )" Dim sReturn sReturn = DEFAULT_NUMBER sURL = REQUEST_URL sURL = Replace(sURL, "%num%", nNumber) PBXScript.OutputTrace "Request URL = " & sURL Dim oWebRequest, respCode Set oWebRequest = PBXScript.WebRequest oWebRequest.HttpVerb = HttpVerbGet oWebRequest.URL = sURL oWebRequest.AddHeader "Content-Type:application/text" respCode = oWebRequest.Execute PBXScript.OutputTrace "Response Code = " & respCode PBXScript.OutputTrace "Response Body = " & oWebRequest.ResponseBody If respCode = 200 Then If oWebRequest.ResponseBody <> "" Then sReturn = oWebRequest.ResponseBody End If End If ' replace leading "0" with "+49" If Left(sReturn, 1) = "0" Then sReturn = "+49" & Right(sReturn, Len(sReturn)-1) End If GetNumber = sReturn PBXScript.OutputTrace "sReturn = " & sReturn PBXScript.OutputTrace "<-------- GetNumber" End Function In der URL Definition ganz oben steht für den number URL Parameter nun ein Platzhalter, der in der Funktion durch die Nummer ersetzt wird, die Du als Parameter hinein reichst. Den Aufruf in den entsprechendenen Durchstellen Blöcken änderst Du jetzt ein wenig ab, so dass Du die gewünschte Nummer als Parameter übergibst: = GetNumber (1) oder = GetNumber (4) Damit sind die Textdateien komplett raus. In meinen Augen sind die nur ein unnötiger Umweg der die Sache komplizierter macht, als sie sein muss. Link to comment Share on other sites More sharing options...
vtcn05 Posted July 31, 2022 Author #11 Share Posted July 31, 2022 Die Webanwendung funktioniert so ähnlich. Es gibt 3 Parameter: - modul ("tr" oder "it"): Hier entschiedet sich ob der Anruf für einen Radiologen oder für einen IT-ler ist. - region (aktuell: "North" oder "South", weitere Regionen sind für zukünftige Anwendungen einstellbar): Hier kann man auswählen, aus welcher Region der Anruf kommt und welcher Radiologe/Teleradiologe den Anruf daher erhält. - number ("1" oder "2"): Jeder IT-ler und (Tele-)Radiologe hat 2 Telefonnummern. Der Anruf wird erst auf der ersten Nummer (meist sein Handy) versucht durchzustellen und falls er da nicht ran gehen kann oder diese ausgefallen ist, klingelt es auf seiner Backup-Telefonnummer (meist sein privates Festnetz-Telefon). Als Radiologie-Gruppe übernehmen wir die radiologische Notfallversorgung von > 40 Kliniken. Wenn also ein z.B. schwerverletztes Unfallopfer mit dem Rettungswagen in eine Klinik gebracht wird und dort kein Radiologe ist, werden die Aufnahmen des CTs an unseren Radiologen weitergeleitet, damit dieser die Grundlage für die weiteren Entscheidungen bezüglich der Behandlung befunden kann. Der Server, auf welchem die Dienstplanung liegt, steht in einem entfernten Rechenzentrum. Das lokale kopieren der Daten per Skript in Dateien auf den lokalen Swyx-Server sorgt dabei dafür, dass wenn die Leitung zum Dienstplanungs-Server oder dieser selbst ausfällt, die Telefonanlage immer noch die Anrufe durchstellen kann. So gewinnen wir im Ausfallmoment deutlich Zeit um das Problem in den Griff zu bekommen. Daher sind die lokalen Dateien aus meiner Sicht eine Besserung im Vergleich zu dem Online-Abruf aus der PHP Anwendung. Unser Skript ruft die PHP Anwendung minütlich auf und vergleicht ob neue Werte vorhanden sind. Im Falle eines Ausfalls wird ein Ticket in unserem System erstellt. Wenn die Swyx Datei sich auf die Daten aus der lokalen Datei bezieht, ist der Teleradiologe trotz Ausfall der Dienstplanung weiterhin für die Klinik erreichbar. Die Dateien liegen einfach auf der Festplatte des Swyx Servers (z.B. unter "E:\Call_Routing_Dienstplan\_tr_north_nr1.txt") und haben als einzigen Inhalt die Telefonnummer des Anrufziels. Aktuelle Textdateien: - E:\Call_Routing_Dienstplan\_tr_north_nr1.txt (Telefonnummer des diensthabenden Teleradiologen für den Bereich "north") - E:\Call_Routing_Dienstplan\_tr_north_nr2.txt (Backup Telefonnummer des diensthabenden Teleradiologen für den Bereich "north") - E:\Call_Routing_Dienstplan\_tr_south_nr1.txt (Telefonnummer des diensthabenden Teleradiologen für den Bereich "south") - E:\Call_Routing_Dienstplan\_tr_south_nr2.txt (Backup Telefonnummer des diensthabenden Teleradiologen für den Bereich "south") - E:\Call_Routing_Dienstplan\_it_nr1.txt (Telefonnummer des diensthabenden Notfall-IT´lers) - E:\Call_Routing_Dienstplan\_it_nr2.txt (Backup Telefonnummer des diensthabenden Notfall-IT´lers) Link to comment Share on other sites More sharing options...
Tom Wellige Posted August 1, 2022 #12 Share Posted August 1, 2022 Kopier den folgenden Code in den Start Block. Der liest automatisch alle Deine Text Dateien in globale Variablen ein, wenn das Skript gestartet wird. Du kannst dann also in Deinem Skript sofort die Variablen z.B. in Durchstellen Blöcken verwenden. Für jede Datei habe ich auch eine Default Nummer vorgesehen, die verwendet wird, wenn es Probleme mit der Datei gibt. ' global variables containing the numbers Dim g_sTRNorth1 Dim g_sTRNorth2 Dim g_sTRSouth1 Dim g_sTRSouth2 Dim g_sITNr1 Dim g_sITNr2 ' data files Const FILE_TR_NORTH_1 = "E:\Call_Routing_Dienstplan\_tr_north_nr1.txt" Const FILE_TR_NORTH_2 = "E:\Call_Routing_Dienstplan\_tr_north_nr2.txt" Const FILE_TR_SOUTH_1 = "E:\Call_Routing_Dienstplan\_tr_south_nr1.txt" Const FILE_TR_SOUTH_2 = "E:\Call_Routing_Dienstplan\_tr_south_nr2.txt" Const FILE_IT_NR_1 = "E:\Call_Routing_Dienstplan\_it_nr1.txt" Const FILE_IT_NR_2 = "E:\Call_Routing_Dienstplan\_it_nr2.txt" ' default numbers Const DEF_TR_NORTH_1 = "123456" Const DEF_TR_NORTH_2 = "123456" Const DEF_TR_SOUTH_1 = "123456" Const DEF_TR_SOUTH_2 = "123456" Const DEF_IT_NR_1 = "123456" Const DEF_IT_NR_2 = "123456" ' FileOpen iomode Values Const fsoForReading = 1 ' Open a file for reading only. Const fsoForWriting = 2 ' Open a file for writing only. Const fsoForAppending = 8 ' Open a file and write to the end of the file. Const fsoDontCreateIfNotExist = False Const fsoCreateIfNotExist = True Const fsoTristateUseDefault = -2 ' Opens the file by using the system default. Const fsoTristateTrue = -1 ' Opens the file as Unicode. Const fsoTristateFalse = 0 ' Opens the file as ASCII. '---------------------------------------------------------------- ' GetNumberFromFile ' ' Returns the number being stored in the given file. ' ' Parameter: ' sFile text file (incl. path) that contains the number ' sDefault number to be returned in case of problems with the file access. ' ' Return: ' string '---------------------------------------------------------------- Function GetNumberFromFile ( sFile, sDefault ) PBXScript.OutputTrace "--------> GetNumberFromFile ( '" & sFile & "', '" & sDefault & "' )" On Error Resume Next Dim sReturn sReturn = sDefault Dim fso, file Set fso = CreateObject("Scripting.FileSystemObject") If fso.FileExists( sFile ) Then Set file = fso.OpenTextFile(sFile, fsoForReading, fsoDontCreateIfNotExist, fsoTristateFalse) If Err = 0 Then sReturn = file.ReadLine If Err <> 0 Then PBXScript.OutputTrace "Error reading from file! Return default number." PBXScript.OutputTrace Err & ": " & Err.Description sReturn = sDefault End If file.Close Else PBXScript.OutputTrace "Error opening file! Return default number." PBXScript.OutputTrace Err & ": " & Err.Description End If Set file = Nothing Else PBXScript.OutputTrace "File does not exist! Return default number." End If Set fso = Nothing ' replace leading "0" with "+49" If Left(sReturn, 1) = "0" Then sReturn = "+49" & Right(sReturn, Len(sReturn)-1) End If GetNumberFromFile = sReturn PBXScript.OutputTrace "sReturn = '" & sReturn & "'" PBXScript.OutputTrace "<-------- GetNumberFromFile" End Function g_sTRNorth1 = GetNumberFromFile(FILE_TR_NORTH_1, DEF_TR_NORTH_1) g_sTRNorth2 = GetNumberFromFile(FILE_TR_NORTH_2, DEF_TR_NORTH_2) g_sTRSouth1 = GetNumberFromFile(FILE_TR_SOUTH_1, DEF_TR_SOUTH_1) g_sTRSouth2 = GetNumberFromFile(FILE_TR_SOUTH_2, DEF_TR_SOUTH_2) g_sITNr1 = GetNumberFromFile(FILE_IT_NR_1, DEF_IT_NR_1) g_sITNr2 = GetNumberFromFile(FILE_IT_NR_2, DEF_IT_NR_2) z.B.: 1 Link to comment Share on other sites More sharing options...
Seb110 Posted August 1, 2022 #13 Share Posted August 1, 2022 Guten Morgen, beim WebRequest bekomme ich die Fehlermeldung: "Interner Fehler des Servers". Wenn ich die URL mit dem Browser am Server öffne, bekomme ich die Nummer aber angezeigt. Leider habe ich aktuell noch keinen Zugriff auf Swyx Trace, sodass ich keine näheren Informationen bekomme. Hast du @Tom Wellige vielleicht eine Idee, woran es liegen kann? Das Skript habe ich so wie du oben beschrieben hast, im Startblock und im Durchwahlblock versuche ich die Nummer auszulesen. Besten Dank EDIT* Ich war etwas zu voreilig, es lag an dem Fehlenden '&' Zeichen. PBXScript.OutputTrace "Response Body = " & oWebRequest.ResponseBody NEUE FRAGE Woran könnte es liegen, dass er mir beim Weiterleiten unsere Vorwahl zwischen der Ländervorwahl und der Rufnummer macht? +49 xxxx 179123456 Link to comment Share on other sites More sharing options...
Tom Wellige Posted August 1, 2022 #14 Share Posted August 1, 2022 2 hours ago, Seb110 said: NEUE FRAGE Woran könnte es liegen, dass er mir beim Weiterleiten unsere Vorwahl zwischen der Ländervorwahl und der Rufnummer macht? +49 xxxx 179123456 Wenn Du den Code von ganz oben in diesem Topic übernommen hast, dann ist dort ein Stück Code enthalten, der eine führende "0" durch "+49" ersetzt. Alles andere bleibt unangetastet. Wenn die Nummer also nicht so ist, wie Du sie haben willst, dann kommt sie schon so falsch vom Web Request zurück. 1 Link to comment Share on other sites More sharing options...
vtcn05 Posted August 1, 2022 Author #15 Share Posted August 1, 2022 vor 8 Stunden schrieb Tom Wellige: Kopier den folgenden Code in den Start Block. Der liest automatisch alle Deine Text Dateien in globale Variablen ein, wenn das Skript gestartet wird. Du kannst dann also in Deinem Skript sofort die Variablen z.B. in Durchstellen Blöcken verwenden. Für jede Datei habe ich auch eine Default Nummer vorgesehen, die verwendet wird, wenn es Probleme mit der Datei gibt. ' global variables containing the numbers Dim g_sTRNorth1 Dim g_sTRNorth2 Dim g_sTRSouth1 Dim g_sTRSouth2 Dim g_sITNr1 Dim g_sITNr2 ' data files Const FILE_TR_NORTH_1 = "E:\Call_Routing_Dienstplan\_tr_north_nr1.txt" Const FILE_TR_NORTH_2 = "E:\Call_Routing_Dienstplan\_tr_north_nr2.txt" Const FILE_TR_SOUTH_1 = "E:\Call_Routing_Dienstplan\_tr_south_nr1.txt" Const FILE_TR_SOUTH_2 = "E:\Call_Routing_Dienstplan\_tr_south_nr2.txt" Const FILE_IT_NR_1 = "E:\Call_Routing_Dienstplan\_it_nr1.txt" Const FILE_IT_NR_2 = "E:\Call_Routing_Dienstplan\_it_nr2.txt" ' default numbers Const DEF_TR_NORTH_1 = "123456" Const DEF_TR_NORTH_2 = "123456" Const DEF_TR_SOUTH_1 = "123456" Const DEF_TR_SOUTH_2 = "123456" Const DEF_IT_NR_1 = "123456" Const DEF_IT_NR_2 = "123456" ' FileOpen iomode Values Const fsoForReading = 1 ' Open a file for reading only. Const fsoForWriting = 2 ' Open a file for writing only. Const fsoForAppending = 8 ' Open a file and write to the end of the file. Const fsoDontCreateIfNotExist = False Const fsoCreateIfNotExist = True Const fsoTristateUseDefault = -2 ' Opens the file by using the system default. Const fsoTristateTrue = -1 ' Opens the file as Unicode. Const fsoTristateFalse = 0 ' Opens the file as ASCII. '---------------------------------------------------------------- ' GetNumberFromFile ' ' Returns the number being stored in the given file. ' ' Parameter: ' sFile text file (incl. path) that contains the number ' sDefault number to be returned in case of problems with the file access. ' ' Return: ' string '---------------------------------------------------------------- Function GetNumberFromFile ( sFile, sDefault ) PBXScript.OutputTrace "--------> GetNumberFromFile ( '" & sFile & "', '" & sDefault & "' )" On Error Resume Next Dim sReturn sReturn = sDefault Dim fso, file Set fso = CreateObject("Scripting.FileSystemObject") If fso.FileExists( sFile ) Then Set file = fso.OpenTextFile(sFile, fsoForReading, fsoDontCreateIfNotExist, fsoTristateFalse) If Err = 0 Then sReturn = file.ReadLine If Err <> 0 Then PBXScript.OutputTrace "Error reading from file! Return default number." PBXScript.OutputTrace Err & ": " & Err.Description sReturn = sDefault End If file.Close Else PBXScript.OutputTrace "Error opening file! Return default number." PBXScript.OutputTrace Err & ": " & Err.Description End If Set file = Nothing Else PBXScript.OutputTrace "File does not exist! Return default number." End If Set fso = Nothing ' replace leading "0" with "+49" If Left(sReturn, 1) = "0" Then sReturn = "+49" & Right(sReturn, Len(sReturn)-1) End If GetNumberFromFile = sReturn PBXScript.OutputTrace "sReturn = '" & sReturn & "'" PBXScript.OutputTrace "<-------- GetNumberFromFile" End Function g_sTRNorth1 = GetNumberFromFile(FILE_TR_NORTH_1, DEF_TR_NORTH_1) g_sTRNorth2 = GetNumberFromFile(FILE_TR_NORTH_2, DEF_TR_NORTH_2) g_sTRSouth1 = GetNumberFromFile(FILE_TR_SOUTH_1, DEF_TR_SOUTH_1) g_sTRSouth2 = GetNumberFromFile(FILE_TR_SOUTH_2, DEF_TR_SOUTH_2) g_sITNr1 = GetNumberFromFile(FILE_IT_NR_1, DEF_IT_NR_1) g_sITNr2 = GetNumberFromFile(FILE_IT_NR_2, DEF_IT_NR_2) z.B.: @Tom Wellige, Du bist großartig. Ich weiß gar nicht, wie ich Dir danken kann 🙂 Ich kann das Skript leider erst morgen testen. Gebe dann aber eine Rückmeldung. Link to comment Share on other sites More sharing options...
vtcn05 Posted August 2, 2022 Author #16 Share Posted August 2, 2022 Das Datei-Skript bringt mir leider nur ein Besetztzeichen (trennt die Leitung sofort). In nachfolgenden Log-Dateien finde ich leider gar nichts dazu 😞 Link to comment Share on other sites More sharing options...
Most Valued User jodost Posted August 2, 2022 Most Valued User #17 Share Posted August 2, 2022 In der IpPbxSrv.log solltest du fündig werden 1 Link to comment Share on other sites More sharing options...
vtcn05 Posted August 2, 2022 Author #18 Share Posted August 2, 2022 Könnte es das hier sein? ~"1208","+49173xxxxxxxxxxx","Jelinski, Michael mobil","+495621xxxxxxxxx","TR-Hotline 24-7 1500","+495621xxxxxxxxxxxxx","TR-Hotline 24-7 1500","02.08.2022","20:05:05","02.08.2022","20:05:07","02.08.2022","20:05:08","","","02.08.2022","20:05:11","","0,00","Connected","","","","0","T - ZEN - HFO - 05621-7833-x","(call routing)","","","0","0","0","","","OriginatorDisconnected" 02 20:05:11.644 00434c Inf3 SrvPBXCtl 081C4DD8 000001f9 SPBXCallFSM::~SPBXCallFSM () A 02 20:05:11.644 00434c Info SrvPBXCtl 0E3D6258 000001f9 SPBXCall::~SPBXCall () A 02 20:05:11.644 00434c Inf2 SwTCL 0E3D6258 000001f9 STclCall::SetBaseCall (00000000) 02 20:05:11.644 00434c Info SwTCL 0E3D6258 000001f9 STclCall::~STclCall () 02 20:05:11.644 001434 Inf2 SrvPBXCtl 06943FC8 000001f9 SScriptFsm::ActionOnDiscdAWhileConctngB () 02 20:05:11.644 001434 Inf3 SrvPBXCtl 06BE2990 000001f9 SPBXCallHub::SetDisconnectReason (OriginatorDisconnected, ext cause 0, U:0, T:0, '','',Unknown) stored 02 20:05:11.644 001434 Inf3 SrvPBXCtl 06BE2990 000001f9 SScrServer::ProcessPhoneCallListEntries () 02 20:05:11.644 001434 Inf3 SrvPBXCtl 068B8608 000001f9 SPhnCallHdl::ProcPhoneCalls () NO phone calls -> skipped 02 20:05:11.644 001434 Inf2 SrvPBXCtl 06BE2990 000001f9 SPBXCallHub::DiscAndRemoveAllCalls (CallDisconnected, ext cause 16) 02 20:05:11.644 001434 Inf3 SrvPBXCtl 06BE2990 000001f9 SPBXCallHub::DiscAndRemoveAllCalls () disconnecting call 0E3D4E48 02 20:05:11.644 001434 Inf3 SrvPBXCtl 0E3D4E48 000001f9 SPBXCall::EventDisconnect (cause: CallDisconnected, ext cause: 16, discon. type: Normal) 02 20:05:11.644 001434 Inf2 SrvPBXCtl 06BE2990 000001f9 SPBXCallHub::RemoveCall (0E3D4E48) 02 20:05:11.644 00434c Info SwSIP 0E3DD018 000001f9 SwSIPCall::ActionOnDisconnectWaitForDisc() 02 20:05:11.644 00434c Info SwSIP 0E3DD018 000001f9 SwSIPCall::ActionOnDisconnectWaitForDisc() Last SIP request was BYE or CANCEL -> send SIP 200 OK response 02 20:05:11.644 001434 Inf3 SrvPBXCtl 06BE2990 000001f9 SPBXCallHub::RemoveCall (0E3D4E48) number of calls before erase: 2 02 20:05:11.644 001434 Inf3 SrvPBXCtl 06BE2990 000001f9 SPBXCallHub::RemoveCall () removed call 0E3D4E48 02 20:05:11.644 001434 Inf2 SrvPBXCtl 0E3D4E48 000001f9 SPBXCall::SetCallHub (00000000) remove callhub 06BE2990 02 20:05:11.644 001434 Inf3 SrvPBXCtl 06BE2990 000001f9 SPBXCallHub::DiscAndRemoveAllCalls () disconnecting call 0E3D8070 02 20:05:11.644 001434 Inf3 SrvPBXCtl 0E3D8070 000001f9 SPBXCall::EventDisconnect (cause: CallDisconnected, ext cause: 16, discon. type: Normal) 02 20:05:11.644 00434c Info SwSIP 0E3DD018 000001f9 SwSIPCall::SendSipResponse () SEND SIP 200 OK 02 20:05:11.644 00434c Info SwSIP 0E3DD018 000001f9 SwSIPCall::TraceTransition () WaitForDisconnect --evtSigDisconnect--> Disconnected (Result: 0) 02 20:05:11.645 00434c Inf2 SwTCL 068D42F0 000001f9 SBaseCall::Destroy () 02 20:05:11.645 00434c Inf2 SwTCL 068D42F0 000001f9 SBaseCall::Unlink () 02 20:05:11.645 00434c Info SwSIP 06C7E840 00000000 SwSIPEndp::EraseCall () Erased Call with Call-ID 'j61aPTnWZJaBKjYJdE3sbQ..' from list of calls! 02 20:05:11.645 00434c Info SwTCL 068D42F0 000001f9 SBaseCall::~SBaseCall () 02 20:05:11.645 00434c Info RefCnt 0D5E8638 000001f9 SRefMutex::~SRefMutex () 02 20:05:11.645 001434 Inf2 SrvPBXCtl 06BE2990 000001f9 SPBXCallHub::RemoveCall (0E3D8070) 02 20:05:11.645 001434 Inf3 SrvPBXCtl 06BE2990 000001f9 SPBXCallHub::RemoveCall (0E3D8070) number of calls before erase: 1 02 20:05:11.645 001434 Inf3 SrvPBXCtl 06BE2990 000001f9 SPBXCallHub::RemoveCall () removed call 0E3D8070 02 20:05:11.645 001434 Inf2 SrvPBXCtl 0E3D8070 000001f9 SPBXCall::SetCallHub (00000000) remove callhub 06BE2990 02 20:05:11.645 0022a0 Inf2 SrvPBXCtl 081C4858 000001f9 SPBXCallFSM::ActionOnDisconnectFinal () B1-A 02 20:05:11.645 0022a0 Inf2 SwTCL 0E3D4E48 000001f9 STclCall::SignalDisconnect (CallDisconnected, lateDisconnect=false, extCause=16) 06B93540 02 20:05:11.645 0022a0 Inf3 SrvPBXCtl 0E3D7668 000001f9 SPBXCall::EventDisconnected (CallDisconnected, lateDisconnect=false, extCause=16, '','',Unknown) 02 20:05:11.645 00434c Inf2 SrvPBXCtl 081C33B8 000001f9 SPBXCallFSM::ActionOnDisconnect () B1-C1 02 20:05:11.645 00434c Inf2 SwTCL 0E3D8070 000001f9 STclCall::SignalDisconnect (CallDisconnected, lateDisconnect=false, extCause=16) 06B932E8 02 20:05:11.645 00434c Inf3 SrvPBXCtl 0E3D5850 000001f9 SPBXCall::EventDisconnected (CallDisconnected, lateDisconnect=false, extCause=16, '','',Unknown) 02 20:05:11.645 001434 Info SrvPBXCtl 06943FC8 000001f9 SScriptFsm::TraceTransition () ConnectedAConnectingB --DisconnectA--> Running (Result: 0) 02 20:05:11.645 0022a0 Inf3 SrvPBXCtl 0E3D4E48 000001f9 SPBXCall::GetRegisteredEntity () U:43 02 20:05:11.645 00434c Inf3 SrvPBXCtl 0E3D8070 000001f9 SPBXCall::GetRegisteredEntity () U:43 02 20:05:11.645 00434c Inf2 SrvGk 051421F0 000001f9 SGkImpl::RemoveActiveCallForConId (0E3D8070, 505) -> no int: 4294967295, no ext: 4294967295 02 20:05:11.645 00434c Info SrvPBXCtl 081C33B8 000001f9 SPBXCallFSM::TraceTransition () B1-C1 Alerting --Disconnect--> HubDisconnected (Result: 0) 02 20:05:11.645 0022a0 Inf2 SrvGk 051421F0 000001f9 SGkImpl::RemoveActiveCallForConId (0E3D4E48, 505) -> no int: 4294967295, no ext: 4294967295 02 20:05:11.645 0022a0 Inf2 SwTCL 0E3D4E48 000001f9 STclCall::Unlink () from base call 06B93540 02 20:05:11.645 0022a0 Inf2 SwTCL 06B93540 000001f9 SBaseCall::SetTclCall (00000000) replaced TCL call pointer 0E3D4E48 02 20:05:11.645 0022a0 Inf2 SwTCL 06B93220 000001f9 SBaseCall::Unlink () 02 20:05:11.645 0022a0 Inf2 SwTCL 0E3D7668 000001f9 STclCall::SetBaseCall (00000000) replaced base call pointer 06B93220 02 20:05:11.645 0022a0 Inf2 SwTCL 06B93220 000001f9 SBaseCall::SetTclCall (00000000) replaced TCL call pointer 0E3D7668 02 20:05:11.645 0022a0 Inf3 SrvPBXCtl 06B93220 000001f9 SScriptCall::~SScriptCall () 02 20:05:11.645 0022a0 Info SwTCL 06B93220 000001f9 SBaseCall::~SBaseCall () 02 20:05:11.645 0022a0 Inf3 SrvPBXCtl 06B93540 000001f9 SScriptCall::~SScriptCall () 02 20:05:11.645 0022a0 Info SwTCL 06B93540 000001f9 SBaseCall::~SBaseCall () 02 20:05:11.645 0022a0 Inf2 SwTCL 0E3D4E48 000001f9 STclCall::SetBaseCall (00000000) replaced base call pointer 06B93540 02 20:05:11.645 0022a0 Info SrvPBXCtl 081C4858 000001f9 SPBXCallFSM::TraceTransition () B1-A CallDisconnected --Disconnect--> Idle (Result: 0) 02 20:05:11.645 0022a0 Inf2 SrvPBXCtl 01B75EE8 000001f9 STraceIdContainer::Free (connID 505) 02 20:05:11.645 0022a0 Inf3 SrvPBXCtl 081C4858 000001f9 SPBXCallFSM::~SPBXCallFSM () B1-A 02 20:05:11.645 0022a0 Info SrvPBXCtl 0E3D4E48 000001f9 SPBXCall::~SPBXCall () B1-A 02 20:05:11.645 0022a0 Inf2 SwTCL 0E3D4E48 000001f9 STclCall::SetBaseCall (00000000) 02 20:05:11.645 0022a0 Info SwTCL 0E3D4E48 000001f9 STclCall::~STclCall () 02 20:05:11.646 003dd0 Info SrvScript 081C1AC0 000001f9 SPBXScriptVbs::OutputTrace () PBXCall.ConnectToEx(+49173xxxxxxxxxxxxx), retVal = 22 (PBXCallTermOriginatorDisconnected), rDetectedDigit=[], AllowedDevTypes=-1) 02 20:05:11.646 0015c8 Inf2 SrvPBXCtl 081C4908 000001f9 SPBXCallFSM::ActionOnDisconnectedFinal () B1 02 20:05:11.646 003dd0 Info SrvScript 081C1AC0 000001f9 SPBXScriptVbs::OutputTrace () retVal = PBXCallTermOriginatorDisconnected, Variable = 02 20:05:11.646 0015c8 Info SrvPBXCtl 081C4908 000001f9 SPBXCallFSM::ActionOnDisconnectedFinal () no call hub 02 20:05:11.646 0015c8 Inf2 SwTCL 0E3D7668 000001f9 STclCall::SetBaseCall (00000000) 02 20:05:11.646 0015c8 Info SrvPBXCtl 081C4908 000001f9 SPBXCallFSM::TraceTransition () B1 HubDisconnected --Disconnected--> Idle (Result: 0) 02 20:05:11.646 003dd0 Info SrvScript 081C1AC0 000001f9 SPBXScriptVbs::OutputTrace () <-- gseConnectToLoopEx4, rc = 7 [gseStateDisconnected] 02 20:05:11.646 0015c8 Inf2 SrvPBXCtl 01B75EE8 000001f9 STraceIdContainer::Free (connID 505) 02 20:05:11.646 003dd0 Info SrvScript 081C1AC0 000001f9 SPBXScriptVbs::OutputTrace () case [Disconnect3] 02 20:05:11.646 0015c8 Inf3 SrvPBXCtl 081C4908 000001f9 SPBXCallFSM::~SPBXCallFSM () B1 02 20:05:11.646 0015c8 Info SrvPBXCtl 0E3D7668 000001f9 SPBXCall::~SPBXCall () B1 02 20:05:11.646 003dd0 Info SrvScript 081C1AC0 000001f9 SPBXScriptVbs::OutputTrace () case [SendEmail9] 02 20:05:11.646 0015c8 Inf2 SwTCL 0E3D7668 000001f9 STclCall::SetBaseCall (00000000) 02 20:05:11.646 0015c8 Info SwTCL 0E3D7668 000001f9 STclCall::~STclCall () 02 20:05:11.646 0015c8 Info RefCnt 06969AE0 000001f9 SRefMutex::~SRefMutex () Link to comment Share on other sites More sharing options...
Tom Wellige Posted August 2, 2022 #19 Share Posted August 2, 2022 Weiter oben (#6) hatte ich Dir einen Post verlinkt der im Detail erklärt, wie Du das Server Trace lesen bzw. filtern kannst. Wenn Du es nicht filterst, gehe einfach ganz ans Ende der Trace Datei und scrolle hoch bis Du Ausgaben der VBSkript Funktion findest, z.B. "--------> GetNumberFromFile". Oder bis Du auf etwas stösst, was "Laufzeitfehler" oder "Runtime Error" heisst. Link to comment Share on other sites More sharing options...
vtcn05 Posted August 2, 2022 Author #20 Share Posted August 2, 2022 vor 27 Minuten schrieb Tom Wellige: --------> GetNumberFromFile vor 29 Minuten schrieb Tom Wellige: "Laufzeitfehler" oder "Runtime Error" Alle 3 leider nicht gefunden. Ich versuche es morgen nochmal und schaue wie ich das filtere. Vielen Dank nochmals! Link to comment Share on other sites More sharing options...
Tom Wellige Posted August 3, 2022 #21 Share Posted August 3, 2022 Hast Du den kompletten Code aus #12 in den Start Block kopiert? Hast Du da noch andere Dinge drin? Auf meinem Testsystem läuft mein Code aus #12 einwandfrei. Link to comment Share on other sites More sharing options...
Tom Wellige Posted August 3, 2022 #22 Share Posted August 3, 2022 Schick mir doch mal die Server Trace Datei die mindestens einen fehlgeschlagenen Anruf in Dein Call Routing enthält als private Nachricht (bitte nicht öffentlich hier in den Topic). Ich brauche dann auch noch einen Zeitstempel Deines Testanrufes und die beiden beteiligten Rufnummern. Ich schaue dann mal, ob ich da was sehen kann. Link to comment Share on other sites More sharing options...
vtcn05 Posted August 3, 2022 Author #23 Share Posted August 3, 2022 Vielen Dank für Deine Hilfe. Wie von Dir erkannt, war der Name zu lang. Nun startet er das Skript. Er überspringt aber ohne Wartezeit die Schleifenblöcke mit den Variablen, sendet direkt die Mail (zweiter Pfeil) und trennt die Verbindung. Ich schaue gleich mal in das Log um zu schauen, ob ich da war erkenne. Link to comment Share on other sites More sharing options...
vtcn05 Posted August 3, 2022 Author #24 Share Posted August 3, 2022 Ich glaube das da noch irgendwas nicht richtig ist. Im Log steht unter "CallConnectTo (dest..." irgendein Zeichenkauderwelch ('ÿþ+'). Muss ich die Variablen die er nutzt eventuell noch in den Skripteigenschaften anlegen? 03 18:03:31.490 002ac4 Info SrvPBXCtl 06BE2990 0000023d SScrServer::CallGetCalledNumber () returning 1500 03 18:03:31.490 002ac4 Info SrvPBXCtl 06BE2990 0000023d SScrServer::CallConnectTo (dest 'ÿþ+', timeout 30s, proc with dest script: no, 'TR_Wartemusik.wav', abort DTMF digits '', allowed devs: ALL', use media bridge no) 03 18:03:31.490 002ac4 Inf2 SrvPBXCtl 06BE2990 0000023d SScrServer::EventScriptConnectTo () 03 18:03:31.490 0044a0 Inf2 SrvPBXCtl 069436C8 0000023d SScriptFsm::ActionOnScriptConnToAConnctd() 03 18:03:31.492 0044a0 Inf3 SrvPBXCtl 06BE2990 0000023d SPBXCallHub::GetMediaFileFromCDS (TR_Wartemusik.wav) -> local: C:\Users\IpPbx_User\AppData\Local\Swyx\IpPbxSrv.exe\FileCache\a13ebcb0-40a9-47c4-9425-d7934ce8688e.wav 03 18:03:31.492 0044a0 Inf3 SrvWavCmpr 0254E238 00000000 SAFCompr::DecompressFile () ~File: C:\Users\IpPbx_User\AppData\Local\Swyx\IpPbxSrv.exe\FileCache\a13ebcb0-40a9-47c4-9425-d7934ce8688e.wav 03 18:03:31.494 0044a0 Inf3 SrvWavCmpr 0254E238 0000023d SAFCompr::DecompressFile (C:\Users\IpPbx_User\AppData\Local\Swyx\IpPbxSrv.exe\FileCache\a13ebcb0-40a9-47c4-9425-d7934ce8688e.wav) no decompression needed, size in bytes: 9053744 03 18:03:31.494 0044a0 Info SrvPBXCtl 06BE2990 0000023d SPBXCallHub::PlayTone (TR_Wartemusik.wav, user scope 0, do not connect A, connected U:0 , skip 0 seconds, connected addr: <empty>, 0, 00000000) 03 18:03:31.509 0044a0 Info MediaMgr 0D9B4700 0000023d SMediaMgr::ChangePlayMedia (file: C:\Users\IpPbx_User\AppData\Local\Swyx\IpPbxSrv.exe\FileCache\a13ebcb0-40a9-47c4-9425-d7934ce8688e.wav, userID: 0) OK 03 18:03:31.509 0044a0 Info MediaMgr 06C36AD8 00000000 CKeyExchange::SetEncryptionMode () Setting encryption mode: Encryption preferred 03 18:03:31.509 0044a0 Info MediaMgr 06C36AD8 00000000 CKeyExchange::MakeOffer () 03 18:03:31.509 0044a0 Info Mikey 06C36AFC 00000000 Mikey::CreatePskMsg MIKEY message created: Link to comment Share on other sites More sharing options...
Tom Wellige Posted August 4, 2022 #25 Share Posted August 4, 2022 Hallo Michael, die Variable ist quasi von Hand in Start Block angelegt worden. Alles was sich im Start Block befindet ist global im ganzen Call Routing verfügbar. Auf meinem Testsystem habe ich das Problem nicht. Schick mir doch bitte nochmal Deine aktuelle .RSE Datei und nochmal aktuelle Traces. 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