y.b

Neuer User
Mitglied seit
17 Mrz 2022
Beiträge
11
Punkte für Reaktionen
0
Punkte
1
Hallo zusammen,

ich habe in meinem Unternehmen seit Januar eine FreePBX-Installation (Asterisk 16) im Einsatz.
Die Anlage funktioniert an und für sich einwandfrei und bietet eigentlich nahezu alle notwendigen Funktionen.

Leider konnte ich trotz verschiedener Hilfestellungen (Forenbeiträge hier und anderswo, Support durch meinen Telefonanbieter und Videotutorials) ein Problem nicht lösen:
Leite ich einen Anruf nach Extern weiter (was insbes. bei sofortiger Umleitung bzw. Umleitung ohne Rücksprache sehr unschön ist), wird nicht die Rufnummer des Anrufers, sondern unsere zentrale Rufnummer angezeigt (und nur diese, nicht einmal die entsprechende Extension). Das ist vor allem deshalb unpraktikabel, weil wir z. T. mit externen Dienstleistern arbeiten, die dann – unter anderem – wirklich jedes Mal die Rückrufnummer abfragen müssen.

Für die Expertinnen und Experten unter euch, ein paar Infos vorab:
  • Unser Telefonanbieter ist sipgate (Produkt sipgate trunking)
  • Clip-no-Screening ist möglich und aktiv – ich kann tatsächlich jede beliebige Nummer als ausgehende Rufnummer setzen, das habe ich mehrfach getestet
  • Das Ändern oder Entfernen der CID in der FreePBX-Einstellung "Hauptleitungen" / "Trunks" sowie in "Outbound Routes" bringt keine Änderung
  • Das hier ist meine extensions_custom.conf:

    Code:
    exten => _**X.,1,Pickup(${EXTEN:2})
    [sipout]
    exten => _X.,1,Set(CALLERID(number)=SIPID)
    exten => _X.,n,Dial(SIP/${EXTEN}@sipgate-out,30,trgb(sipout-hook^${EXTEN}^1))
    exten => _X.,n,Hangup
    [sipout-hook]
    exten => _X.,1,Set(PJSIP_HEADER(add,P-Preferred-Identity)=<sip:${CALLERID(num)}@sipconnect.sipgate.de>)
    
    [custom-sip-header]
    ; Add B(custom-sip-header^s^1) to the dial options of a trunk in addition to the defaults already there
    ; This only affects calls on specific trunks
    exten => s,1,Noop(entering user defined context custom-sip-header in extensions_custom.conf)
    exten => s,n,Set(HASH(__SIPHEADERS,P-Preferred-Identity)=sip:${CALLERID(num)}@sipconnect.sipgate.de)
    ;exten => s,n,Set(HASH(__SIPHEADERS,P-Asserted-Identity)=sip:[email protected])
    exten => s,n,Return

  • ... und das hier die extensions_override_freepbx.conf:

    Code:
    exten => _X.,n,SipAddHeader(P-Preferred-Identity:sip:49${CALLERID(number):1}@sipconnect.sipgate.de)
    [macro-dialout-trunk-predial-hook]
    exten => s,1,Set(__CLIP=${CALLERID(num)})
    exten => s,n,Set(__CLIP=${IF($["LEN(${CDR(cnum)})">"2"]?${IF($["${CDR(cnum)}"="${CDR(cnam)}"]?"${CDR(cnum)"}":${CLIP})}:${CLIP})}) ; bei Rufumleitung Absendernummer übermitteln
    exten => s,n,Set(CALLERID(name)=${CLIP})
    exten => s,n,Set(CALLERID(number)=${CLIP})
    
    [func-apply-sipheaders]
    exten => s,1,Noop(Applying SIP Headers to channel)
    exten => s,n,Set(SIPHEADERKEYS=${HASHKEYS(SIPHEADERS)})
    exten => s,n,While($["${SET(sipkey=${SHIFT(SIPHEADERKEYS)})}" != ""])
    exten => s,n,Set(sipheader=${HASH(SIPHEADERS,${sipkey})})
    exten => s,n,SIPAddHeader(${sipkey}: ${sipheader})
    exten => s,n,Set(PJSIP_HEADER(add,${sipkey})=${sipheader})
    exten => s,n,EndWhile
    exten => s,n,Set(CALLERID(num)=${CLIP})
    exten => s,n,Set(__CLIP=${IF($["${CLIP:0:2}"="00"]?${CLIP:2}:${CLIP})}) ; 00 abschneiden
    exten => s,n,Set(__CLIP=${IF($["${CLIP:0:1}"="0"]?49${CLIP:1}:${CLIP})}) ; 0 durch 49 ersetzen
    exten => s,n,Set(__CLIP=${IF($["${CLIP:0:1}"="+"]?${CLIP:1}:${CLIP})}) ; +abschneiden
    exten => s,n,Set(PJSIP_HEADER(add,P-Preferred-Identity)=<sip:${CLIP}@sipconnect.sipgate.de>)
    exten => s,n,Set(PJSIP_HEADER(add,P-Asserted-Identity)=<sip:${CLIP}@sipconnect.sipgate.de>)
    
    ;--== end of [func-apply-sipheaders] ==--;

Ich habe mich nicht wirklich getraut, daran etwas zu verändern, denn nur auf diese Weise wird überhaupt die von mir gesetze CID (meistens jeweils die Nummer mit Durchwahl, selten andere Einzelrufnummern) gesetzt. Tatsächlich habe ich auch schon verschiedene Blöcke mal rausgenommen oder die ganze Datei geleert, auch das hat nur dazu geführt, dass so oder so nur noch die Hauptrufnummer angezeigt wurde.
Bis das funktioniert hat, habe ich eine Weile mit dem sipgate Support gemeinsam daran getüftelt.

Vielleicht hat ja jemand eine Idee, hat eine ähnliche Konstellation selbst im Einsatz oder kennt jemanden, der jemanden kennt...
Grundsätzlich wäre es mit mittelmäßigem Aufwand für mich auch denkbar, die Anlage kurzzeitig auf einen zweiten Server zu klonen, um die Funktionalität zu testen, ohne den laufenden Betrieb zu beeinträchtigen.

Ich bedanke mich schon jetzt herzlich für alle Beiträge!
 
Ich habe genau den gewünschten Fall in mehreren Umgebungen am laufen - meist aber mit easybell als Anbieter.

In den Config Dateien musste ich nichts spezielles hinterlegen.

Lediglich bei den Durchwahlen „Clip Nummer“ <Clip Nummer>

In der Outbound Route „Clip Nummer“ <Stammnummer>

Im Trunk <Stammnummer>

Zusätzlich habe ich im trink noch
Contact User: Stammnummer
From User: Stammnummer
Send Rpid/PAI: both


Damit klappt es hier. Vorher war das Problem, dass irgend ein Wert fehlte und es daher bei easybell über das Backup routing lief und die Clip zerschossen hat.
 
Leite ich einen Anruf nach Extern weiter (was insbes. bei sofortiger Umleitung bzw. Umleitung ohne Rücksprache sehr unschön ist), wird nicht die Rufnummer des Anrufers, sondern unsere zentrale Rufnummer angezeigt (und nur diese, nicht einmal die entsprechende Extension).
Bringe bei Deinem SIP-Provider in Erfahrung, in welchem SIP-Header er die ursprüngliche CallerID haben möchte. Bei easybell ist das z.B.
P-Asserted-Identity (wenn man es entsprechend konfiguriert hat). Danach sieht man weiter.
 
Bringe bei Deinem SIP-Provider in Erfahrung, in welchem SIP-Header er die ursprüngliche CallerID haben möchte.
Bei Sipgate ist das laut Support die P-Preffered-Identity.

Ich zitiere mal aus der Mail an mich, dann sieht man es ganz genau (ich habe nur die Absendernummer – wie oben schon – unkenntlich gemacht):

Wir können nur Rufnummern verarbeiten, die dem E-164 Format entsprechen.
Bedeutet also, dass in der Anlage die Rufnummer folgendermaßen hinterlegt werden sollte:
"P-Preferred-Identity: <sip:[email protected]>".
 
P-Preferred-Identity wird nicht out of the box von FreePBX behandelt. Dazu musst Du ihn als custom header im outbound call anlegen. Siehe hier. Davor musst Du aber den Wert, den Du für P-Preferred-Identity einträgst aus einem anderen Header auslesen. Du könntest ja im Trunk send PAI aktivieren und dann aus dem P-Assertd-Identity Header (hoffentlich ist der zu dem Zeitpunkt schon drin), den Wert auslesen und P-Preferred-Identity übergeben. Evtl. musst Du noch sicherstellen, dass das Format der Nummer (E164) korrekt ist.
 
Hi,
lieben Dank für deine schnelle Antwort :)

Dazu musst Du ihn als custom header im outbound call anlegen.

Habe in Hauptleitungen / Trunks > (Mein Trunk) > Asterisk Dial Options folgendes eingetragen:
Code:
B(custom-sip-header^s^1)
Modus ist Override.

Das müsste ja dann eigentlich auf meinen Custom Header in der extensions_custom.conf verweisen, der seinerseits ja die P-Preferred-Identity übergibt, oder?

Ich bin aber ehrlich gesagt grundsätzlich etwas verwirrt, denn die Nummer wird ja nur bei Weiterleitungen nach Extern nicht übergeben, bei normalen Anrufen aus der Anlage raus ist das kein Problem. Ich kann ohne Probleme dort jede beliebige Nummer (also z. B. auch eine Handynummer oder eine, die es gar nicht gibt) eintragen und damit rausrufen. Warum das dann bei Weiterleitungen nicht funktioniert, ist mir ehrlich gesagt schleierhaft...

Die Nummern trage ich in der Anlage immer als <49123456789> ein. Das funktioniert und müsste m. E. ja dem E.164-Format entsprechen.
 
Hi, der Weg über den PAI-Header geht nicht. Der wird wohl erst danach gesetzt. Du kannst aber folgendes machen:

in extensions_custom.conf folgenden Eintrag vornehmen oder ergänzen (ich gehe von Asterisk 18.x und pjsip und freepbx 15.x aus):

Code:
[macro-dialout-trunk-predial-hook]
...
;exten => s,n,NoOp(The caller id name is: ${CALLERID(name)})
;exten => s,n,NoOp(The caller id number is: ${CALLERID(num)})
;exten => s,n,NoOp(The ampuser is: ${AMPUSER})
;exten => s,n,NoOp(The real caller id is: ${REALCALLERIDNUM})
;exten => s,n,NoOp(The outbound cli is: ${DB(AMPUSER/${REALCALLERIDNUM}/outboundcid)})
exten => s,n,GotoIf(${ISNULL(${AMPUSER})}?ppi:continue)
exten => s,n(ppi),Gosub(func-set-sipheader,s,1(P-Preferred-Identity,<sip:${REALCALLERIDNUM}@sipconnect.sipgate.de\;user=phone>))
exten => s,n(continue),NoOp()
...
exten => s,n,MacroExit

Ich habe das mit einer Weiterleitung in den inbound routes erfolgreich getestet. Falls ein Call von intern nach extern geht, wird der Header P-Preferred-Identity an dieser Stelle nicht gesetzt (weil AMPUSER definiert ist).

Ergibt dann einen Eintrag wie folgt: P-Preferred-Identity: <sip:49xxxx@sipconnect.sipgate.de;user=phone>
Damit da eine korrekte E164-Nummer erscheint, musst Du vorher die Nummer entsprechend normalisieren (eingehende Nummern werden bei mir grundsätzlich auf E164-Format eingestellt). Das ist aber ein anderes Thema.

Du kannst das ja mal für Dich als Start nehmen. Für mich (bzw. meine use cases) funktioniert das so.
 
Zuletzt bearbeitet:
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
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.