Jump to content

Call Routing mit HTTP GET Abfrage


vtcn05
 Share


Go to solution Solved by Tom Wellige,

Recommended Posts

Ich hab den Fehler gefunden. Unser Powershell-Skript, welches die Telefonnummer vom Dienstplan-Server abholt, schrieb die Telefonnummer mit dem Befehlt "Out-File -FilePath $Output" in die Datei, welche daraufhin UTF-16 kodiert war (was die Swyx nicht verarbeiten konnte). Mit Anpassung auf "Out-File -FilePath $Output -Encoding ASCII" kann die Swyx die Datei lesen und schreibt die richtige Nummer in die Variable.

 

Nochmals herzlichen Dank, an Dich @Tom Wellige. Ohne Deine Hilfe wäre ich längst nicht so weit gekommen 😊

 

_sync.ps1

$ProcessName = "Sync-Number"
$ErrorActionPreference = "Stop"
$LocalPath = $PSScriptRoot + "\"
$LogfileMonat = Get-Date -Format "yyyy-MM"
$Logfile = $LocalPath + "logs\${LogfileMonat}_${ProcessName}.log"
$Call = "https://server.tld/_export/phonenumber.php"
$PhoneRegex = "^([\+|0-9][0-9]{6,20})$"
$MailTo = "it@domain.tld"
$MailFrom = $env:computername.ToUpper() + " <$($env:computername.ToUpper())@domain.tld>"
$MailServer = "mail.domain.tld"
$Types = @(
    "1;north;tr",
    "2;north;tr",
    "1;south;tr",
    "2;south;tr",
    "1;;it",
    "2;;it"
)
# Auskommentiert von MJ am 02.08.2022 $ToDo = 0
if (!(Test-Path ${LocalPath}logs)) { New-Item -ItemType Directory ${LocalPath}logs -Force }
function WriteToLogfile ([Parameter(ValueFromPipeline = $true)]$LogOutput) {
    "$(Get-Date -Format "dd.MM.yyyy HH:mm:ss") " + $LogOutput | Out-File -FilePath $Logfile -Encoding default -Append
}
Try {
    # Auskommentiert von MJ am 02.08.2022 "--- Starte $ProcessName" | WriteToLogfile
    foreach ($Type in $Types.GetEnumerator()) {
        $Number = $Type.Split(";")[0]
        $Region = $Type.Split(";")[1]
        $Modul = $Type.Split(";")[2]
        $Output = $Modul + "_" + $Region + "_" + $Number + ".txt"
        # Auskommentiert von MJ am 02.08.2022 "Frage Nummer fuer $Output via $Call ab" | WriteToLogfile
        $OldNumber = Get-Content $Output -ErrorAction SilentlyContinue
        $Return = Invoke-WebRequest $Call"?modul="$Modul"&number="$Number"&region="$Region -UseBasicParsing
        $Content = $Return.Content
        if ($Content -match $PhoneRegex) {
            if ($Content -ne $OldNumber) {
                "Uhr: Dienstplan-Portal liefert neue Rufnummer $Content für $Output" | WriteToLogfile
                $Content | Out-File -FilePath $Output -Encoding ASCII
            # Auskommentiert von MJ am 02.08.2022     $ToDo += 1
            } <#else {
                "Nichts zutun!" | WriteToLogfile 
            }#>
        }
        else {
            "Es wurde keine einzelne Telefonnummer erkannt!" | WriteToLogfile
            $Content | WriteToLogfile
            #Throw "Es wurde keine einzelne Telefonnummer erkannt!"
        }
    }
    # Write-Host $ToDo
    # Auskommentiert von MJ am 02.08.2022 if ($ToDo -eq 0) {
    # Auskommentiert von MJ am 02.08.2022     "Nichts zutun!" | WriteToLogfile
    # Auskommentiert von MJ am 02.08.2022 } #else {
     #   "--- Ende $ProcessName" | WriteToLogfile
    #}
    # Auskommentiert von MJ am 02.08.2022 "--- Ende $ProcessName" | WriteToLogfile
}
Catch {
    if ($_.Exception.ItemName) {
        $ErrorMessage = $_.Exception.Message + " - " + $_.Exception.ItemName
    }
    else {
        $ErrorMessage = $_.Exception.Message
    }
    Send-MailMessage -From $MailFrom -To $MailTo -Subject "FEHLGESCHLAGEN - $ProcessName" -SmtpServer $MailServer `
        -Body "$ProcessName ist fehlgeschlagen! Fehler --- $ErrorMessage --- aufgetreten zum Zeitpunkt $(Get-Date)" -Attachments $Logfile
    Break
}

 

Link to comment
Share on other sites


Ach, noch ein kleiner Hinweis: das Call Routing wird von der Standard Microsoft Scripting Engine ausgeführt. Es ist nicht die SwyxWare, die Probleme mit der Datei hatte.

 

In der Zeile, in der das Skript die Datei öffnet, hatte ich ASCII als Kodirung fest vorgegeben:

 

Set file = fso.OpenTextFile(sFile, fsoForReading, fsoDontCreateIfNotExist, fsoTristateFalse)

 

Der vierte Parameter legt die Kodierung fest. Folgende Werste sind dort möglich:

 

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.

 

Mit fsoTristateTrue solltest Du eine UTF-16 kodierte Datei einlesen können.

 

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.