CFD: SIP-Trunk Eigenschaft lesen / ändern

FMA

Bronze Partner
Basic Certified
Mitglied seit
20. August 2021
Beiträge
1
Wie kann ich in einem Call Flow die Eigenschaften des verwendeten SIP-Trunks auslesen und ändern? Ich suche insbesondere nach der Eigenschaft "Feiertagsansage an allgemeinen Feiertagen".

Im Web-Interface ist diese in der Lasche "Allgemein" in den Einstellungen zum SIP-Trunk zu finden.Ich habe nach Angaben in der Dokumentation zu 3CXCallControl API gesucht, konnte aber leider keine Hinweise finden.

Herzlichen Dank!
 

Anhänge

  • SIP-Trunk-Eigenschaft.png
    SIP-Trunk-Eigenschaft.png
    63,5 KB · Aufrufe: 30
Hallo erstmal,

ein SIP Trunk ist intern eine DN (eine Distinguished Number, einfach weil der eine Nummer hat, wird i.d.R. fortlaufend irgendwas ab 10000 vergeben). Die hat Eigenschaften, sog. DN Properties.

Im Webinterface kann man sich viele der DN Eigenschaften anzeigen lassen wenn man den Parameter DEVELOPMENT_DNTABLE_EXPOSE auf 1 stellt und das Webinterface neu lädt. Dann gibt es neben den benutzerdefinierten Parametern ein zwei weitere Menüs. Bei der Suche dort tauchen ausser den NSt. auch die SIP Trunks (mit den DN Nummern) auf. Diese DN Parameter kann man normal auch in einer CFA lesen und schreiben. Die gefragte Eigenschaft wg. der Feiertagsansage ist da nicht dabei.

An alle weiteren DN Eigenschaften kommt man nur über die nicht öffentlich dokumentierte API die hier so spontan gepostet wurde. Das ist dann dort unter DN Interface zu finden (DN.HolidayInboundReferences ist es eher nicht). Da darfste dich selber durchwusteln welche Eigenschaft der DN das ist. Powershell ist dein Freund beim basteln und suchen.

powershell Debian 10
Code:
Add-Type -Path "/usr/lib/3cxpbx/3cxpscomcpp2.dll"  # für 3CX Windows anpassen!

Function ReadConfiguration() {
    $IniContent = Get-Content "/var/lib/3cxpbx/Bin/3CXPhoneSystem.ini"  # für 3CX Windows anpassen!
    $CurrentSectionName=$null
    for ($i = 1; $i -lt $IniContent.Length + 1; $i++) {
        $s = $IniContent[$i - 1].Trim();
        $delim="[","]"
        if ($s.StartsWith("[")) {
            $CurrentSectionName = ($s -Split {$delim -contains $_}).Where({$_ -ne "" })
        }
        elseif( ($CurrentSectionName -ne $null) -and (-not ([string]::IsNullOrEmpty($s))) -and (-not ($s.StartsWith("#"))) -and (-not ($s.StartsWith(";")))) {
            if( $CurrentSectionName -match "ConfService" ) {
                $param=$s.split("=")[0].Trim()
                $value=$s.split("=")[1].Trim()
                if( $param -match "ConfPort" ) {
                    $PS::CfgServerPort=$value
                }
                if( $param -match "confUser" ) {
                    $PS::CfgServerUser=$value
                }
                if( $param -match "confPass" ) {
                    $PS::CfgServerPassword=$value
                }
            }
        }
    }
}

$PS = [TCX.Configuration.PhoneSystem]
$PS::CfgServerHost = "127.0.0.1"
$PS::ApplicationName = "ContactApp"
ReadConfiguration

$TCXConn = ($PS::Root)
$TCXConn.WaitForConnect((New-TimeSpan -Seconds 30)) | Out-Null
if( $TCXConn.Connected ) {
    Write-Host "connection to call api established"
    $3CXTenant = $TCXConn.GetTenant()
  
# ab hier blabla, z.B. $xyz=$3CXTenant.GetExternalLines() oder  $xydn=$3CXTenant.DN ...

    $TCXConn.Disconnect()
}
else {
    Write-Error "connection to call api failed"
}
 
Zuletzt bearbeitet:
Ich muss hier nochmal auf das Thema einsteigen. Ich habe jetzt auch nochmal gesucht und leider nichts gefunden.
Bei mir geht es aber im Schwerpunkt um das De- bzw. Aktivieren des SIP-Trunks.

Sowohl in den DN Propertys des Trunks als auch in der API finde ich nichts wie ich das am schnellsten via CFD bewerkstelligen kann. Einzige bisher funktionierende Möglichkeit: In der Datenbank den Host überschreiben. Problem dabei: Die Anlage braucht einen Restart des Dienstes "3CX PhoneSystem 01 Configuration Server" um den neuen "falschen" Host zu nutzen. Dabei werden natürlich alle laufenden Calls gekillt und zudem die Logs mit fehlerhaften Anmeldeversuchen vollgemüllt.

Leider finde ich auch keinen Parameter den ich setzen könnte, der den Trunk temporär deaktiviert bzw. wieder aktiviert - nicht einmal das Ändern des Hosts bekomme ich via C# Element bewerkstelligt (die fehlerhaften Anmeldeversuche stören mich im Grunde nicht direkt).

Hast du da eine Idee @fxbastler ?

Ziel hinter der ganzen Thematik: Ich möchte eine Funktion bauen, die mir beim Überschreiten einer gewissen Anzahl an ausgehenden Anrufen/Einheiten seit dem letzten Monatsersten den Trunk bis zum Ende des Monats deaktiviert. Quasi eine Art "Limiter".

Alternativ und noch etwas spezifischer wäre die Variante die ausgehenden Regeln via CFD anzupassen und entsprechend auf BLOCK zu setzen, wenn Zahl X an Einheiten verbraucht wurde.

z.B. Wenn 2000 Einheiten nach CH Mobil telefoniert wurden, sperre Regel CH Mobil. So könnte man dann auch für einzelne gewählte Nummernbereiche Limits festlegen.
 
Zuletzt bearbeitet:
Okay, mittlerweile habe ich den passenden C# Schnipsel gebaut um den Host des Trunks anzupassen.
C#:
var gateway = PhoneSystem.Root.GetGateways();
gateway[1].Host = "dein.gw.tld";
gateway[1].Save();

Leider bleibt er aber trotz geändertem Host registriert. Auch nach Ablauf der Zeit zur Neuanmeldung scheint der alte Host noch irgendwo im Cache zu sein. Egal was ich probiere: ob mit Save() oder Refresh() - Der Trunk bleibt online. Ideen dazu?
 
Probiere mal eine künstliche SIP Trunk Anmeldung:
C#:
DN dn = PhoneSystem.Root.GetDNByNumber("10001"); // oder ein uebergebener Parameter, die DN Nummer des SIP Trunk, siehe Parameter DN der 3CX, sonst ueber den Namen suchen lassen
if (dn is ExternalLine && (dn as ExternalLine).Gateway is VoipProvider)
{
    PhoneSystem.Root.RefreshRegistration(dn.Number);
}
Die brachiale Kurzform wäre:
PhoneSystem.Root.RefreshRegistration("10001");
 
Er updatet den Trunk und setzt auch die Zeit der letzten Anmeldung auf die Zeit zu der, der Script ausgeführt wurde, leider bleibt der Trunk aber registriert und Gespräche darüber sind weiterhin möglich. In der Datenbank switcht der Host aber ohne Probleme sofort hin und her.

Irgendwas muss da im Cache passieren. Es müsste quasi die Funktion ausgeführt werden, die läuft, wenn man aktiv im Backend die Eigenschaften des Trunks ändert.
 
Er updatet den Trunk und setzt auch die Zeit der letzten Anmeldung auf die Zeit zu der, der Script ausgeführt wurde, leider bleibt der Trunk aber registriert und Gespräche darüber sind weiterhin möglich. In der Datenbank switcht der Host aber ohne Probleme sofort hin und her.
Das liest sich nicht logisch: der Name / die IP des Registrar wird geändert, die Anmeldung wird erneurt und der Trunk bleibt dennoch grün mit erfolgreicher Anmeldung.
 
Das liest sich nicht logisch: der Name / die IP des Registrar wird geändert, die Anmeldung wird erneurt und der Trunk bleibt dennoch grün mit erfolgreicher Anmeldung.
Richtig. Er meldet sich sogar neu an durch den Reg Refresh. Er zeigt einen aktuellen Timestamp mit Anmeldung OK und läuft.

Es scheint so als zieht er sich die Reg Daten irgendwo aus dem Cash. Nach dem Reg Refresh wird sogar der neue angepasste Host angezeigt scheinbar aber nur angezeigt jedoch nicht genutzt.
 
Zuletzt bearbeitet:

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
21.358
Beiträge
107.406
Mitglieder
70.512
Neuestes Mitglied
maxcolo
Holen Sie sich 3CX - völlig kostenlos!

Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX register cta
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.