SIP Trunk CompanyFlex - VoiceData ausgehende Rufnummer

enderf

Silver Partner
Basic Certified
Mitglied seit
22. September 2023
Beiträge
1
Moin,

ich habe vor kurzem bei einem Kunden eine 3CX v20 in Betrieb genommen. Nachträglich hat der Kunde einen Telekom CompanyFelx SIP Trunk bekommen.
Da der Kunde seine 3CX on-Prem hat, habe ich die Vorlage für "VoiceData" genommen, da es sich auch um einen Telekom-Internetanschluss handelt.
Der SIP-Trunk ist auch sofort grün geworden, aber bei ausgehenden Gesprächen wurde immer nur die SIP-Trunk-Hauptrufnummer angezeigt. In der v18 konnte man die Parameter alle anpassen und dieses Problem lösen, nun fehlen in der v20 aber die Felder, die ich sonst in der v18 angepasst habe.

Ich habe mir jetzt beholfen, in dem ich aus einer aktualisierten v20 die Konfiguration des angepassten SIP-Trunks exportiert und in der neuen v20 als Vorlage importiert habe.
Liegt hier ein Fehler auf meiner Seite vor? Eigentlich sollten doch "unterstützte" SIP-Trunks ohne weiteres tun meinerseits funktionieren?


Hier einmal als Vergleich, welches Feld ich angepasst hatte:
Original
XML:
<field name="ParameterOut" custom="" parameter="P-PreferredIdentityUserPart">$LineNumber</field>

Angepasst
XML:
<field name="ParameterOut" custom="" parameter="P-PreferredIdentityUserPart">$OutboundCallerId</field>

Hat jemand das gleiche Problem mal gehabt oder in letzter Zeit?
 
Habe hier das gleiche Problem, die ausgehende Nummer wird nur mit der -0 signalisiert und das Feld "P-Preferred Identity : User Part" zum Anpassen fehlt in der UI.
Ich probiere gleich mal deine Herangehensweise.

PS: Muss sagen das ich bis jetzt nur schlechte Erfahrungen mit der V20 gemacht habe.
 
  • Like
Reaktionen: gboelter
Ich habe es jetzt mit einem API-Request gelöst, da ich sonst den kompletten Trunk neu anlegen muss und ich somit alle Zuordnungen verlieren würde.
 
  • Like
Reaktionen: enderf und fxbastler
Ich habe es jetzt mit einem API-Request gelöst, da ich sonst den kompletten Trunk neu anlegen muss und ich somit alle Zuordnungen verlieren würde.
Kannst du das bitte etwas ausführlicher beschreiben?
 
 
  • Like
Reaktionen: mbehrens
Hi,
vielleicht kannst du das kurz noch mal etwas "einfacher" erklären. Wir haben hier das gleiche Problem und scheinbar kann man da selbst in v20 U4 immer noch nichts anpassen in dem Bereich?

Besten Dank
 
Hallo @itNGO

Ich habe mit dem Link auf die Frage von @mphilipp reagiert und ihm den Hinweis auf die API und etwas Eigeninitiative gegeben. Da kam dann keine Reaktion mehr.

Was @mk1 mit einem API Aufruf da gemacht hat, das hat er ja nicht geschrieben. Ich vermute, er hat für den betreffenden SIP Trunk in den OutboundParams für die ParamId 24 den Wert ValueId von 2 auf 17 geändert. Aber ich weiß es nicht.

Hi,
vielleicht kannst du das kurz noch mal etwas "einfacher" erklären.
Siehe oben, zweiter Absatz dieses Post mit den möglichen Änderungen. Das ist kurz und bündig, aber ich glaube nicht dass dir das hilft.

Deine Bitte nach einer einfachen Erklärung ist keine einfache Antwort und schon gar nicht kurz. Die kommt jetzt.
Lies bitte den gesamten Text bis ganz zu Ende bevor du etwas tust oder lass es sein.

Die angefragte API Lösung für dich kann z.B. mit folgendem Powershell Skript durchgeführt werden:

3cx-sip-trunk-change-outbound-parameter.ps1
Code:
$tcxurl = "mypbx.mydomain.de"       # needs port if not 443

$jsonauthbody = (@{
    Username="100"                  # 3CX user, maybe email address
    Password="Super_Secret0815"     # 3CX user password
    SecurityCode=""
} | ConvertTo-Json)

$LoginResponse = Invoke-RestMethod -Uri "https://$tcxurl/webclient/api/Login/GetAccessToken" -Body $jsonauthbody -Method POST -ContentType "application/json"

$headers = @{Authorization = "Bearer $($LoginResponse.Token.access_token)"}

$uri = "https://$tcxurl/xapi/v1/Trunks"
$tcxtrunks=(Invoke-RestMethod -Uri $uri -Headers $headers -Method GET -ContentType "application/json").Value

Write-Host "found SIP trunks:"
Foreach ( $tcxtrunk in $tcxtrunks) {
    Write-Host "trunk ID:  $($tcxtrunk.Id)       name:  $($tcxtrunk.Gateway.Name)"
}

$tcxtid = Read-Host 'enter trunk ID to change outbound params or enter 0 to leave'

If ( ($tcxtid -eq "0") -or [string]::IsNullOrWhiteSpace($tcxtid)) {
    Write-Host "exit, no changes"
    exit 0
}

$uri = "https://$tcxurl/xapi/v1/Trunks($tcxtid)"

# get existing trunk data
$trunkResponse = Invoke-RestMethod -Uri $uri -Headers $headers -Method GET -ContentType "application/json"

if (-not $trunkResponse) {
    Write-Host "error: could not get trunk data, exit"
    exit 1
}
$existingOutboundParams = $trunkResponse.gateway.OutboundParams

# show trunk OutboundParams
Write-Host "for the SIP trunk with ID  $($tcxtrunk.Id)  the OutboundParams are:"
$existingOutboundParams | Format-Table -Property ParamId, ValueId, Custom

# get user input about changes
$paramId = Read-Host "enter ParamId to change / create or enter 0 to leave"
If ($paramId -eq "0" -or [string]::IsNullOrWhiteSpace($paramId)) {
    Write-Host "exit, no changes"
    exit 0
}

$valueId = Read-Host "enter ValueId to change it (or enter 0 or leave empty to remove it)"
$custom  = Read-Host "enter Custom to change it (or leave empty)"

# remove ParamId if ValueId is 0 or empty
If ($valueId -eq "0" -or [string]::IsNullOrWhiteSpace($valueId)) {
    Write-Host "parameter with ParamId $paramId will removed"
    $existingOutboundParams = $existingOutboundParams | Where-Object { $_.ParamId -ne $paramId }
} Else {
    # if ParamId exist then change ValueId and Custom
    $param = $existingOutboundParams | Where-Object { $_.ParamId -eq $paramId }
    If ($param) {
        $param.ValueId = [int]$valueId
        $param.Custom = $custom
    } Else {
        # new ParamId, add it
        $existingOutboundParams += @{
            "Custom" = $custom
            "ParamId" = [int]$paramId
            "ValueId" = [int]$valueId
        }
    }
}

# sort OutboundParams
$existingOutboundParams = $existingOutboundParams | Sort-Object -Property ParamId

# print new OutboundParams
Write-Host "for the SIP trunk with ID  $($tcxtrunk.Id)  the new OutboundParams are:"
$existingOutboundParams | Format-Table -Property ParamId, ValueId, Custom

# create JSON for Patch request
$gateway = @{
    "OutboundParams" = $existingOutboundParams
}

$patchBody = @{
    "gateway" = $gateway
} | ConvertTo-Json -Depth 10


Try {
    $updateResponse = Invoke-RestMethod -Uri $uri -Headers $headers -Method PATCH -Body $patchBody -ContentType "application/json"
    Write-Host "SIP-Trunk change successful"
} Catch {
    Write-Host "error during SIP-Trunk change: $_"
    if ($_.Exception.Response) {
        $response = $_.Exception.Response.GetResponseStream()
        $reader = New-Object System.IO.StreamReader($response)
        $errorMessage = $reader.ReadToEnd()
        Write-Host "answer: $errorMessage"
    }
}

Im Skript ganz oben ist noch die Adresse und die Zugangsdaten zur 3CX einzutragen. Dieses Powershell Skript verbindet sich zum Webinterface der 3CX, meldet sich über die 3CX xapi Schnittstelle als berechtigter Benutzer (bevorzugt der Systemeigentümer) an der 3CX an, zeigt alle SIP Trunks an, fragt nach der ID des zu ändernden SIP Trunk, zeigt alle ausgehenden Parameter des SIP Trunk als Tabelle an, fragt nach dem zu ändernden Parameter (ParamID), fragt nach dem neuen Wert (ValueID), fragt nach Custom und führt diese Änderungen aus. Wenn an Statt der Parameter ID eine 0 oder nichts eingegeben wird dann bricht das Programm ab. Wenn an Statt eines Wertes eine 0 oder nichts eingegeben wird, dann wird der Parameter gelöscht. Wenn der eingegebene Parameter noch nicht vorhanden ist, dann wird er mit den angegebenen Werten eingefügt.

Dieses Powershell Skript kann alle vorhandenen ausgehenden Parameter eines beliebigen SIP Trunk einer laufenden 3CX ändern, löschen und erweitern. Wenn falsche Eingaben gemacht werden, dann ist der SIP Trunk evtl. nicht mehr nutzbar. Das Skript hat prinzipiell keine Fehlerbehandlung. Bei Problemen (falsche / unmögliche Eingaben) stürzt es ab, es werden rote Fehlermeldungen ausgegeben und es passiert nichts, vmtl. auch keine Änderung an einem SIP Trunk. Das Skript ist nicht für unbedarfte Benutzer sondern für Anlagenverwalter / Errichter.

Die Erklärung dazu ist folgende:
Alle in einer 3CX auswählbaren SIP Trunks liegen jeweils als XML Datei in einem Vorlagenverzeichnis, unter Linux ist das
/var/lib/3cxpbx/Instance1/Data/Http/Templates/provider/.
Die Vorlage für den Telekom SIP Trunk Company Flex Voice Data heißt telekomcompanyflexvoicedata.pv.xml. Darin sind alle Parameter des Trunk vordefiniert abgelegt.

Bei der Auswahl und Einrichtung eines neuen SIP Trunk in einer 3CX wird diese Vorlage gelesen, man gibt weitere Daten zur Einrichtung ein und man speichert die SIP Trunk Daten in der 3CX. Für die ausgehenden Parameterfelder werden dabei die Vorgaben der Vorlage in just diesem Moment in den in der 3CX eingerichteten SIP Trunk übernommen und in Form von Parametern (einer Wertetabelle) zu diesem SIP Trunk gespeichert. Wenn irgendwann später die zum Einrichtungszeitpunkt verwendete Vorlage - die XML Datei - geändert wird, dann hat das keinen Einfluss auf die Werte des in der 3CX eingespeicherten und genutzten SIP Trunk. Der bleibt unverändert. Erst wenn man einen neuen SIP Trunk mit so einer geänderten Vorlage einrichtet, dann werden diese geänderten Vorgaben in den neuen SIP Trunk übernommen. Das nutzt dir also nichts. Du möchtest die im laufenden SIP Trunk eingerichteten Daten wie z.B. DID und Zuweisungen in der 3CX behalten.

Es gibt verschiedene Möglichkeiten, an diese Parameter, die in der 3CX zu diesem eingerichteten SIP Trunk gespeichert sind, heranzukommen. Ein derzeit voll unterstützter Weg ist die Nutzung der offiziellen Configuration API von 3CX, der xapi. Genau das macht das Powershell Skript.

Jeder in der 3CX genutzte SIP Trunk hat eine ID. Mit dieser ID kann über die xapi die Wertetabelle der ausgehenden Parameter abgefragt und geändert werden. Eine Abfrage kann dann z.B. so aussehen:
Code:
PS C:\Users\fxbastler> (Invoke-RestMethod -Uri "https://meine.3cx.de/xapi/v1/Trunks" -Headers $headers -Method GET -ContentType "application/json").Value[1].Gateway.OutboundParams

Custom ParamId ValueId
------ ------- -------
             1      10
             2       3
             4      13
             5      11
             6      10
             7       3
             8      15
             9      19
            10       3
            24       2
            25       3
Das ist wohl aktuell die originale Wertetabelle eines Deutsche Telekom (CompanyFlex - VoiceData) SIP Trunk in einer 3CX. Die Wertetabelle besteht aus einer Parameter ID (ParamId), einem zugehörigen Werte ID (ValueId) und einem möglichen individuellen Eintrag (Custom) für die Werte ID 14 und 15.

Die ID sind wie folgt aufgeschlüsselt:
Code:
Gateway OutboundParams ParamId
------------------------------
1   Request Line URI : User Part
2   Request Line URI : Host Part
3   Contact : User Part
4   Contact : Host Part
5   To : Display Name
6   To : User Part
7   To : Host Part
8   From : Display Name
9   From : User Part
10  From : Host Part
11  User Agent : Text String
12  Remote Party ID - Called Party : Display Name
13  Remote Party ID - Called Party : User Part
14  Remote Party ID - Called Party : Host Part
15  Remote Party ID - Calling Party : Display Name
16  Remote Party ID - Calling Party : User Part
17  Remote Party ID - Calling Party : Host Part
20  P-Asserted Identity : Display Name
21  P-Asserted Identity : User Part
22  P-Asserted Identity : Host Part
23  P-Preferred Identity : Display Name
24  P-Preferred Identity : User Part
25  P-Preferred Identity : Host Part
26  P-Called-Party-ID : Display Name
27  P-Called-Party-ID : User Part
28  P-Called-Party-ID : Host Part

Gateway OutboundParams ValueId
------------------------------
1   "LineID" internal number of line
2   "LineNumber" external number of line
3   "GWHostPort" gateway/provider host/port
4   "OutHostPort" outbound proxy host/port
5   "AuthID" authentication
8   "CallerNum" caller's number (default: From->user)
9   "CallerName" caller's name (default: From->display name)
10  "CalledNum" number thar has been diales(default: To->user)
11  "CalledName" name that has been dialed (default: To->display name)
12  "DevHostPort" source address/port of message
13  "ContactUri" usually, content of Contact field
14  CustomIPRange
15  CustomField
16  "CallerDispName" Display name of a caller as it is in From Header - Provided by phone settings
17  "OutboundCallerId" Outbound caller Id taken from Extension settings in management console
18  "OutboundLineId" Outbound Line Caller ID taken from Outbound caller ID setting in management console
19  "OriginatorCallerID" Original Caller number will be sent
20  "EnforcedOutboundCallerId" To be used when you want to send Anonymous via PAI
21  "EnforcedOriginatorCallerId" To be used when you want to send Anonymous via PAI

Für alle aufgeführten ParamId in der Tabelle gibt es einen zugewiesenen Wert. Ist ein Parameter mit ID nicht aufgeführt, dann wird der Standard der 3CX (i.d.R. wenig bis nichts) verwendet. Für die ValueId 14 und 15 wird der Wert in Custom interpretiert, sonst nicht.

Wenn also der ausgehende Parameter
P-Preferred Identity : User Part von
"LineNumber" external number of line
auf
"OutboundCallerId" Outbound caller Id taken from Extension settings in management console
geändert werden soll, dann muss der Parameter mit der ParamId 24 an Statt einer 2 den Wert 17 erhalten. Mit dem Powershell Skript kann man das live ändern.
Merke: nicht alle ParamId / ValueID Kombinationen sind sinnvoll. Das Skript prüft nicht die Plausibilität der eingegebenen Parameter oder Werte.


Eine andere Möglichkeit ist nach wie vor, in einem Backup der 3CX die Parameter unter <VoipProvider> <ArrayOfOutboundParam> zu ändern und das Backup zurückzuspielen. Aber das war ja nicht die Frage und Bitte um Erklärung der API Nutzung.

Abschließend die obligatorischen Hinweise:

Man sollte ein klein wenig verstehen was man da tut bevor man es tut. Man sollte vorher ein gutes Backup der 3CX haben, testen und für den Notfall anderswo speichern.

Das Skript ist von mir. Ich übernehme keine Haftung wenn ihr es falsch bedient. Aber ihr könnt es nutzen und weiterentwickeln so wie ihr wollt. Das ist nur ein Schnipsel - eine Vorlage für Erweiterungen (z.B. ein Menü mit Auswahl usw.). Ein Hinweis auf den Urheber und diesen Post wäre nett. Ich hoffe auch, ich habe mich nirgends verschrieben :)

Die Daten sind meine eigenen gefundenen Erkenntnisse. Das ist nicht von 3CX dokumentiert so weit ich das weiß. Das kann sich auch alles irgendwann ändern (hat es aber seit 3CX v16 oder früher bisher nicht). Ich bin nicht 3CX. Vielleicht gibt es auch eine einfachere Lösung, dann wäre es schön, wenn das jemand hier schreibt.

voll gerne
 
Zuletzt bearbeitet:
Es gibt zu o.g. Skript eine leider notwendige Änderung die mir heute erst aufgefallen ist.

Hier das aktuelle

3cx-sip-trunk-change-outbound-parameter-v2.ps1

Code:
$tcxurl = "mypbx.mydomain.de"       # needs port if not 443

$jsonauthbody = (@{
    Username="100"                  # 3CX user, maybe email address
    Password="Super_Secret0815"     # 3CX user password
    SecurityCode=""
} | ConvertTo-Json)

$LoginResponse = Invoke-RestMethod -Uri "https://$tcxurl/webclient/api/Login/GetAccessToken" -Body $jsonauthbody -Method POST -ContentType "application/json"

$headers = @{Authorization = "Bearer $($LoginResponse.Token.access_token)"}

$uri = "https://$tcxurl/xapi/v1/Trunks"
$tcxtrunks=(Invoke-RestMethod -Uri $uri -Headers $headers -Method GET -ContentType "application/json").Value

Write-Host "found SIP trunks:"
Foreach ( $tcxtrunk in $tcxtrunks) {
    Write-Host "trunk ID:  $($tcxtrunk.Id)       name:  $($tcxtrunk.Gateway.Name)"
}

$tcxtid = Read-Host 'enter trunk ID to change outbound params or enter 0 to leave'

If ( ($tcxtid -eq "0") -or [string]::IsNullOrWhiteSpace($tcxtid)) {
    Write-Host "exit, no changes"
    exit 0
}

$uri = "https://$tcxurl/xapi/v1/Trunks($tcxtid)"

# get existing trunk data
$trunkResponse = Invoke-RestMethod -Uri $uri -Headers $headers -Method GET -ContentType "application/json"

if (-not $trunkResponse) {
    Write-Host "error: could not get trunk data, exit"
    exit 1
}
$existingOutboundParams = $trunkResponse.gateway.OutboundParams

# show trunk OutboundParams
Write-Host "for the SIP trunk with ID  $($tcxtrunk.Id)  the OutboundParams are:"
$existingOutboundParams | Format-Table -Property ParamId, ValueId, Custom

# get user input about changes
$paramId = Read-Host "enter ParamId to change / create or enter 0 to leave"
If ($paramId -eq "0" -or [string]::IsNullOrWhiteSpace($paramId)) {
    Write-Host "exit, no changes"
    exit 0
}

$valueId = Read-Host "enter ValueId to change it (or enter 0 or leave empty to remove it)"
$custom  = Read-Host "enter Custom to change it (or leave empty)"

# remove ParamId if ValueId is 0 or empty
If ($valueId -eq "0" -or [string]::IsNullOrWhiteSpace($valueId)) {
    Write-Host "parameter with ParamId $paramId will removed"
    $existingOutboundParams = $existingOutboundParams | Where-Object { $_.ParamId -ne $paramId }
} Else {
    # if ParamId exist then change ValueId and Custom
    $param = $existingOutboundParams | Where-Object { $_.ParamId -eq $paramId }
    If ($param) {
        $param.ValueId = [int]$valueId
        $param.Custom = $custom
    } Else {
        # new ParamId, add it
        $existingOutboundParams += @{
            "Custom" = $custom
            "ParamId" = [int]$paramId
            "ValueId" = [int]$valueId
        }
    }
}

# sort OutboundParams
$existingOutboundParams = $existingOutboundParams | Sort-Object -Property ParamId

# print new OutboundParams
Write-Host "for the SIP trunk with ID  $($tcxtrunk.Id)  the new OutboundParams are:"
$existingOutboundParams | Format-Table -Property ParamId, ValueId, Custom

# create JSON for Patch request
$gateway = @{
    "OutboundParams" = $existingOutboundParams
}

$patchBody = @{
    "gateway" = $gateway
} | ConvertTo-Json -Depth 10


Try {
    $updateResponse = Invoke-RestMethod -Uri $uri -Headers $headers -Method PATCH -Body $patchBody -ContentType "application/json"
    Write-Host "SIP-Trunk change 1 successful"
    $patchBody2 = @{"gateway" = @{ "Type" = "Provider"}} | ConvertTo-Json -Depth 10
    $updateResponse2 = Invoke-RestMethod -Uri $uri -Headers $headers -Method PATCH -Body $patchBody2 -ContentType "application/json"
    Write-Host "SIP-Trunk change 2 successful"
} Catch {
    Write-Host "error during SIP-Trunk change: $_"
    if ($_.Exception.Response) {
        $response = $_.Exception.Response.GetResponseStream()
        $reader = New-Object System.IO.StreamReader($response)
        $errorMessage = $reader.ReadToEnd()
        Write-Host "answer: $errorMessage"
    }
}

Ich musste noch drei Zeilen so ziemlich am Ende hinzufügen. Der Rest inkl. Verfahren und Doku von oben bleibt unverändert.

Wer das bisherige Skript erfolgreich verwendet hat sollte dieses neue Skript wenigstens einmal ansetzen. Auch wenn ein bestehender Wert in den gleichen Wert gesetzt wird - was an sich wenig Sinn macht. Das Ausführen behebt einen Fehler in der 3CX Verarbeitung der Trunk Änderung. Das ist nicht von mir gewollt. Ich werde 3CX deswegen anschreiben. Das ist vmtl. ein Fehler.

Erklärung:
Das alte Skript funktioniert wie gewünscht, die Trunk Änderung wird durchgeführt wie gewünscht, der Trunk funktioniert mit der Änderung wie gewünscht aber die Trunk Einstellungen in der 3CX Verwaltung sind hinterher nicht mehr änderbar.

In den 3CX v18 (wo man das Skript nur für autom. Änderungen brauchte) und ersten 3CX v20 hat das alles noch wie gewünscht funktioniert. Mit einer 3CX v20u4 und u5 funktioniert das so nicht mehr (evtl. gar schon mit einer u3 nicht mehr, kann ich nicht mehr testen). Der Unterschied zu früher ist: bei einem offiziell dokumentierten und gewünschten Trunk Update wird nun noch ein weiterer Parameter ungewünscht geändert. Das führt zu o.b. Verhalten: der Trunk ist nur noch per Skript änderbar.
 
Hi,
  • Updated template for Deutsche Telekom (CompanyFlex).
 
  • Like
Reaktionen: fxbastler
Hi,
  • Updated template for Deutsche Telekom (CompanyFlex).

Ich habe gerade RC3 installiert, die Templates telekomcompanyflex.pv.xml "Deutsche Telekom (CompanyFlex - Cloud)" und telekomcompanyflexvoicedata.pv.xml "Deutsche Telekom (CompanyFlex - VoiceData)" nutzen jetzt die Variable $EnforcedOutboundCallerId für den Outbound-Parameter P-PreferredIdentityUserPart:

Diff:
5,6c5,6
<     <version>150002</version>
<     <time>2023-01-23 18:00:00</time>
---
>     <version>150003</version>
>     <time>2026-01-22 18:00:00</time>
88c88
<       <field name="ParameterOut" custom="" parameter="P-PreferredIdentityUserPart">$LineNumber</field>
---
>       <field name="ParameterOut" custom="" parameter="P-PreferredIdentityUserPart">$EnforcedOutboundCallerId</field>

Vor dem Update habe ich einen Dummy-Trunk aus der CompanyFlex Cloud Vorlage angelegt, dieser wurde durch das Update nicht geändert.
Produktiv habe ich die Änderung noch nicht getestet, da ich keinen CoFlex Trunk zum Testen frei habe. Gibt es eine Dokumentation zur $EnforcedOutboundCallerId Variable?
Ich kenne nur $OutboundCallerId, diese Option ist im Dropdown erklärt mit "Outbound caller Id taken from Extension settings in management console". Die $EnforcedOutboundCallerId ist beschrieben durch "To be used when you want to send Anonymous via PAI".

Hört sich danach an, dass die Rufnummer unterdrückt werden kann? Aber nutzt die Variable die ausgehende Rufnummer der Nebenstelle (falls gesetzt) und/oder die ausgehende Rufnummer der genutzten Outbound Rule?

Wünschenswert wäre es natürlich wenn wir die P-Preferred-Identity : User Part in den Trunk-Optionen der Management Console setzen könnten, so wie es schon mit From: Display Name und 2 anderen Parametern geht. Dann müsste man zum Umstellen dieser Option nicht den Trunk, und damit die gesamte Rufverteilung eingehend sowie ausgehend, mit Downtime löschen und neu anlegen.
 
@SKDamon
Siehe mein Beitrag oben: bisher enthielt PPI:UserPart die LineNumber und jetzt ist es ein um anonymous erweitertes OutboundCallerId. Das ist es was man mit den oben beschriebenen Beiträgen bisher nachträglich nur per Skript ändern konnte und musste. Das ist jetzt im akt. Template original drin. Das passt schon.

Aber nutzt die Variable die ausgehende Rufnummer der Nebenstelle (falls gesetzt) und/oder die ausgehende Rufnummer der genutzten Outbound Rule?
Wie schon immer in der 3CX: beides ist möglich (sofern der Anbieter das unterstützt).
Priorität hat die ausgehende Regel. Wenn das Feld der genutzten Regel leer ist, dann greift das Feld ausg. Rufnummer des Nutzer. Ist auch das leer greift die Nummer im SIP Trunk.
 
Danke @fxbastler für den Support per DM, fürs Protokoll: Die offizielle Doku gibt es, ich kann Google nur nicht bedienen:

EnforcedOutboundCallerId​

The “EnforcedOutboundCallerId” variable is exactly the same as the “OutboundCallerId” variable (section 6.1.2.12) with the difference that when the anonymous dial code is used to make a call, instead of using value “anonymous”, it still performs the same checks described as if the dial code was not used.
 

Statistik des Forums

Themen
44.411
Beiträge
232.704
Mitglieder
78.328
Neuestes Mitglied
as7h