Jump to content

Call Routing mit HTTP GET Abfrage


vtcn05
 Share


Go to solution Solved by Tom Wellige,

Recommended Posts

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


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:

 

image.png

 

 

Link to comment
Share on other sites


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


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


Hallo Michael,

 

zunächst einmal zum Thema Traces: 

 

Wie man Textdateien auslesen kann, findest Du als Beispiel hier:

 

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


  • Solution

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


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


vor 15 Stunden schrieb Tom Wellige:

Wie man Textdateien auslesen kann, findest Du als Beispiel hier:

 

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


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


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


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.: 

 

image.png

 

 

Link to comment
Share on other sites


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


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.

 

Link to comment
Share on other sites


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.: 

 

image.png

 

 

 

 

@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


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


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


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


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


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.

2022-08-03 18_08_24-mRemoteNG - C__Users_jelinski.RADIOLOGIE_AppData_Roaming_mRemoteNG_confCons.xml .png

Link to comment
Share on other sites


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


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


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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 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.