[Gelöst] Fritzbox übergibt Anrufer-Rufnummer nicht an Asterisk

Bib

Mitglied
Mitglied seit
31 Aug 2005
Beiträge
792
Punkte für Reaktionen
2
Punkte
18
Hallo,
ich habe eine Fritzbox 7490 (v7.01 und v7.11 getestet, sowie auch die Versionen davor) und einen Asterisk in einer virtuellen Umgebung.

Funktioniert alles, nur etwas stört mich:

Der Asterisk ist als SIP-Nebenstelle 621 an der Fritzbox angemeldet, wenn jemand anruft, dann sehe ich den Anruf auch auf der Asterisk CLI.

Aber ich sehe dort die Rufnummer des Anrufers nicht. Ich lasse mir bei einem Anruf durch eine Extension die ganzen möglichen Felder (Anzeigename, Anrufernummer, alles was da so geht) auf die CLI schreiben. Aber es steht überall nur 621 drin.


In den Einstellungen des Telefoniegerätes kann ich in der Fritzbox nichts bezüglich Rufnummernanzeige einstellen, da gibts nur die Felder für die Zugangsdaten, mehr nicht.


Hab alles nach Anleitungen im Internet konfiguriert und zu so einem Problem hab ich noch nie was gefunden.
 
Moinsen


Ein Anruf, der über ein register= reinkommt...
1. * schaut in der sip.conf nach 1. Peer mit passender IP
2. Dort schaut * nach dem context=
3. Dann gehts mit der register=.../[extension] im Kontext weiter
4. Wo die Anrufernummer mit...
( extensions.conf )
Code:
same => n,verbose(1,Anruf von: ${CALLERID(ani)})
...vor einem Dial() ermittelt werden kann.
Siehe: http://das-asterisk-buch.de/1.6/functions-callerid.html
 
Zuletzt bearbeitet:
Ich habs jetzt so abgeändert, aber die beiden neuen Test-Zeilen 2+3 werden nicht abgearbeitet...

Code:
exten => _X.,1,NoOp(haust_X Channel : ${CHANNEL})
exten => _X.,n,Verbose(1,TESTAnruf von: ${CALLERID(ani)})
exten => _X.,n,NoOp(TESTCALLERID-NUM-ani : ${CALLERID(ani)})
exten => _X.,n,NoOp(CALLERID-NUM : ${CALLERID(NUM)})
exten => _X.,n,NoOp(CALLERID-NUMBER : ${CALLERID(NUMBER)})
exten => _X.,n,NoOp(CALLERID-ALL: ${CALLERID(ALL)})
exten => _X.,n,NoOp(CALLERID-NAME : ${CALLERID(NAME)})



Das hier bekomme ich in der CLI angezeigt...
Code:
 == Using SIP RTP CoS mark 5
       > 0x7f1d2000d110 -- Strict RTP learning after remote address set to: 192.168.102.1:7078
    -- Executing [623@haustuer:1] NoOp("SIP/621-000000c1", "haust_X Channel : SIP/621-000000c1") in new stack
    -- Executing [623@haustuer:2] NoOp("SIP/621-000000c1", "CALLERID-NUM : 621") in new stack
    -- Executing [623@haustuer:3] NoOp("SIP/621-000000c1", "CALLERID-NUMBER : 621") in new stack
    -- Executing [623@haustuer:4] NoOp("SIP/621-000000c1", "CALLERID-ALL: "Fritzbox" <621>") in new stack
    -- Executing [623@haustuer:5] NoOp("SIP/621-000000c1", "CALLERID-NAME : Fritzbox") in new stack
    -- Auto fallthrough, channel 'SIP/621-000000c1' status is 'UNKNOWN'
 
Komisch, bei mir funktionierts...
Code:
[Aug 23 11:37:53]   == Using SIP RTP CoS mark 5
[Aug 23 11:37:53]        > 0xb4306308 -- Strict RTP learning after remote address set to: 192.168.188.11:7084
[Aug 23 11:37:53]     -- Executing [623@osmc:1] Goto("SIP/1008-00000057", "bib,623,1") in new stack
[Aug 23 11:37:53]     -- Goto (bib,623,1)
[Aug 23 11:37:53]     -- Executing [623@bib:1] NoOp("SIP/1008-00000057", "haust_X Channel : SIP/1008-00000057") in new stack
[Aug 23 11:37:53]     -- Executing [623@bib:2] Verbose("SIP/1008-00000057", "1,TESTAnruf von: 1008") in new stack
[Aug 23 11:37:53]  TESTAnruf von: 1008
[Aug 23 11:37:53]     -- Executing [623@bib:3] NoOp("SIP/1008-00000057", "TESTCALLERID-NUM-ani : 1008") in new stack
[Aug 23 11:37:53]     -- Executing [623@bib:4] NoOp("SIP/1008-00000057", "CALLERID-NUM : 1008") in new stack
[Aug 23 11:37:53]     -- Executing [623@bib:5] NoOp("SIP/1008-00000057", "CALLERID-NUMBER : 1008") in new stack
[Aug 23 11:37:53]     -- Executing [623@bib:6] NoOp("SIP/1008-00000057", "CALLERID-ALL: "" <1008>") in new stack
[Aug 23 11:37:53]     -- Executing [623@bib:7] NoOp("SIP/1008-00000057", "CALLERID-NAME : ") in new stack
[Aug 23 11:37:53]     -- Auto fallthrough, channel 'SIP/1008-00000057' status is 'UNKNOWN'

Vielleicht "dialplan reload" vergessen ?
...ich check auch vorher gerne mal den Dialplan.
Probier mal: dialplan show 623@haustuer
Statt 623 kann das auch eine Fantasienummer sein.
Denn _X. fängt ja Alles ;)
Wenn die Anrufe nur von den 62Nern kommen dürfen, wäre...
_62[0-9]
...ohne . oder ! am Ende restriktiver.
 
Zuletzt bearbeitet:
Ich hab normal "reload" gemacht, ohne dialplan. Reicht das nicht? Probiers gleich aus...

--

Jetzt kommt zwar die Anzeige richtig, aber es wird weiterhin die Fritzbox als Rufnummer angezeigt, nicht meine Mobilfunknummer.
 
Zuletzt bearbeitet von einem Moderator:
Wenn die FRITZ!BOX den Anruf an Asterisk über eine interne Wahl ( z.B. mit ** ) führt, dann ist dass auch logisch und bleibt auch so.
Eine Externe CallerID kann nur angezeigt werden, bzw. wird übertragen, wenn der Anruf über die dem in der FRITZ!BOX angelegten IP-Telefon zugewiesenen Internetrufnummer reinkommt.
Einer in der FRITZ!BOX angelegten IP-Türsprechstelle kann aber nur eine Ausgehende zugewiesen werden.
...der Rest wird eigentlich intern angesprochen.
 
Ich leite nichts weiter. Meine externe Sipgate-Rufnummer ist in der Fritzbox ganz normal als eigene Telefonnummer drin und dann hab ich als Telefoniegeräte ein paar DECT-Mobilteile und den Asterisk als "LAN-IP-Telefon" eingerichtet. Bei den Mobilteilen sehe ich die Rufnummer ja auch.

Der Kontext heisst nur "haustür" zum test, das hat also sonst nichts weiter zu bedeuten.
 
Dann darf ich jetzt davon ausgehen, dass dem IP-Telefon in der F!B an dem Asterisk einen User/Peer/Friend registriert die SIPGate-Nummer zugewiesen wurde ?
...dann findest du die Einstellungen für die "Rufnummerübermittlung" in den Einstellungen der SIPGate-Nummer in der F!B.

Beispiel:
Clipboard01.jpg


Der Kontext heisst nur "haustür" zum test,
Zeig mal aus der sip.conf den Peer, wo context=haustuer drinnesteht.
 
Zuletzt bearbeitet:
In meiner Fritzbox ist bei CLIP "keine Rufnummernübermittlung" ausgewählt. Nur so funktioniert es. Wenn ich irgendeinen der anderen möglichen Punkte aktiviere, dann kommt bei einem Anruf auf meine Nummer "Anschluss derzeit nicht erreichbar". Hab gerade alles durchprobiert. Dann wieder zurück auf "keine" und es geht wieder...

Auf den DECT-Mobilteilen sehe ich aber sehrwohl, wer gerade anruft...


Hier die sip.conf:
Code:
[general]
allowguest=no
port = 5060
bindaddr = 0.0.0.0
qualify = no
disable = all
allow = g722
allow = alaw
allow = ulaw
allow=gsm
allow=ilbc
videosupport = yes
maxcallbitrate=384
allow=h261
allow=h263
allow=h263p
dtmfmode = rfc2833
srvlookup = yes
localnet=192.168.102.0/255.255.255.0
directmedia = no
nat = no
language=de
match_auth_username=yes

register => asterisk621:[email protected]/621
register => asterisk623:[email protected]/623

[621] 
callerid="Fritzbox" <621>
type = peer
insecure = port,invite
nat = no
canreinvite = no
authuser = asterisk621
username = asterisk621
fromuser = asterisk621
fromdomain = 192.168.102.1
secret = sehrgeheim
host = 192.168.102.1
dtmfmode = rfc2833
context = haustuer
disallow = all
allow = ulaw
allow = alaw
transport = udp
qualify = yes


[623]                                       
callerid="Fritzbox" <623>
type = peer
insecure = port,invite
nat = no
canreinvite = no
authuser = asterisk623
username = asterisk623
fromuser = asterisk623
fromdomain = 192.168.102.1
secret = sehrgeheim
host = 192.168.102.1
dtmfmode = rfc2833
context = haustuer
disallow = all
allow = ulaw
allow = alaw
transport = udp
qualify = yes
 
Zuletzt bearbeitet:
Der Peer [621] wird für eingehende ( über register=* ) und ausgehende ( SIP/${EXTEN}@621 ) Verbindungen genutzt und darf deswegen keine gesetzte...
Code:
callerid="Fritzbox" <621>
( Kommt die dir nicht bekannt vor ? )
...CallerID haben, wenn du die Echte der involvierten Endgeräte sehen willst.
Mach also mal ein Semikolon ( ; ) vor den Eintrag, speichern und ein: sip reload

Logik: Setzt Asterisk keine CallerID wird sie vom Endgerät gesetzt

Welcher Anleitung bist du denn da gefolgt ?


* Asterisk nimmt immer den ersten gefundenen Peer mit der passenden IP und nimmt daraus den context= um dann in der extensions.conf in die passende Kontext/Extension ( [haustuer]/621 ) welche dem letzten Teil hinter dem Slash ( / ) des register= entspricht, zu springen.
Also: register=.../621 --> [621] IP --> context=haustuer -extensions.conf-> [haustuer] 621
Deswegen reicht auch in der extensions.conf...
[haustuer] exten => 621,1,Verbose(1,TESTAnruf von: ${CALLERID(ani)})

Ich weiss aus eigener Erfahrung, dass dies nicht immer sofort jedem klar ist.
...hab auch ein Weichen gebraucht, dass zu kapieren ;)
 
Zuletzt bearbeitet:
Ich hab da ettliche Anleitungen im Internet durchgeschaut und mir aus allen dann eine lauffähioge Konfiguration zusammengeschustert...


Und plötzlich gehts!

DANKE!!! Da wäre ich ja nie drauf gekommen.
 
Ja, war mal wieder eine schwere Geburt :cool:
Bitte bearbeite deinen ersten Post und setzt das Präfix auf [GELÖST].
...damit Sucher finden können ;)
 
Jetzt muss ich abr doch nochmal was nachfragen...

* Asterisk nimmt immer den ersten gefundenen Peer mit der passenden IP und nimmt daraus den context= um dann in der extensions.conf in die passende Kontext/Extension ( [haustuer]/621 ) welche dem letzten Teil hinter dem Slash ( / ) des register= entspricht, zu springen.
Also: register=.../621 --> [621] IP --> context=haustuer -extensions.conf-> [haustuer] 621
Deswegen reicht auch in der extensions.conf...
[haustuer]
exten => 621,1,Verbose(1,TESTAnruf von: ${CALLERID(ani)})

Ich weiss aus eigener Erfahrung, dass dies nicht immer sofort jedem klar ist.
...hab auch ein Weichen gebraucht, dass zu kapieren ;)

Wie meinst du das?

Was hab ich dann zuviel bei mir drinstehen? Steht bei mir zuviel in der sip.conf oder in der extensions.conf?
 
Beispiel, damit es vielleicht klarer rüberkommt...

Bei mir heisst der ( sip.conf ) Peer nicht 621 oder so sondern: fbfgateway0 *
...und dadrinne steht: context=osmc
Kommt jetzt ein Anruf rein, über das register=.../hierkannstehnwasduwillst
...findet Asterisk die IP und den Kontext vom register in: fbfgateway0
...springt dann ( extensions.conf ) in den Kontext: [osmc]
...erwartet dort die Extension: hierkannstehnwasduwillst
...also sowas:
[osmc] exten => hierkannstehnwasduwillst,1,Answer(500) exten => hierkannstehnwasduwillst,2,morsecode(${EXTEN})


* Rausrufen
[osmc] exten => **600,1,dial(SIP/${EXTEN}@fbfgateway0,120)
( Wenn Telefon auch context=osmc hat - muss aber nicht so sein ;) )

Jetzt verstanden ?
 
Achso, du meinst, dass ich keine 2 Einträge - z.B. [fritz-in] und [fritz-out] in der sip.conf benötige, weil das alles auch mit einem einzigen Eintrag ausreicht, der für incoming und outgoing verwendet wird (in deinem Fall [fbfgateway0])?

_______________

Bei mir steht jetzt auf der CLI bei einem Anruf beispielsweise folgendes:
Code:
...
-- Executing [623@incoming:3] NoOp("SIP/621-000000d0", "CALLERID-NUM-ani : 08912345") in new stack
...

Ich werde da mit 621 und 623 noch nicht so ganz schlau... Also ich hab in der FB beide Nummern als LAN-Telefon angelegt. Bei 621 klingelt eine andere Rufnummer als bei 623. Bei 623 klingelt nur meine Hauptrufnummer.

Die Zeile die ich im CODE gepostet habe heisst dann, dass in der Fritzbox jemand anruft und somit die externe Nebenstelle 623 klingelt (das ist dann der Asterisk). Dann gehts zum Context incoming in der extensions.conf, weil das im Eintrag [623] in der sip.conf als context=incoming so angegeben ist.
--> Hier ruft jetzt der Asterisk aber dann plötzlich mit der FB-NSt 621 raus, weil das der erste Eintrag ist, den er mit meiner Fritzbox-IP in der sip.conf findet.

Ist das soweit richtig? Oder warum steht hier 621 drin? NoOp("SIP/621-000000d0"
 
Achso, du meinst, dass ich keine 2 Einträge - z.B. [fritz-in] und [fritz-out] in der sip.conf benötige, weil das alles auch mit einem einzigen Eintrag ausreicht, der für incoming und outgoing verwendet wird (in deinem Fall [fbfgateway0])?
Oje, schwere Geburt geht weiter.

Ich meine...
Der Versuch unterschiedliche Peers für eingehende Anrufe für ein und dieselbe IP scheitert daran, dass Asterisk immer den ersten gefundenen Eintrag mit der IP der FRITZ!BOX nimmt und eingehende Anrufe immer im selben Kontext landen.
Deswegen kann in diesem Kontext der eingehende Anruf nur anhand der register=/extension identifiziert werden, von welchen register der Anruf stammt.

Fürs Rausrufen klappt das aber.
Da du ja den Peer konkret angeben musst.
...und außerdem unterschiedliche IP-Telefon Benutzernamen haben.

Beispiel 10 FRITZ!BOX IP-Telefone in der sip.conf

1 [fbfgateway0]
2 [fbfgateway1]
3 [fbfgateway2]
4 [fbfgateway3]
5 [fbfgateway4]
6 [fbfgateway5]
7 [fbfgateway6]
8 [fbfgateway7]
9 [fbfgateway8]
10 [fbfgateway9]

Anruf FRITZ!BOX --> Asterisk = Immer [fbfgateway0]
...kannst du also auch den context=incoming geben.
Die Restlichen sind wirklich nur zum Rausrufen geeignet.
Mit [fbfgateway0] geht aber auch der Rausruf.

Was geht, aber nicht unbedingt notwendig ist, ein goto() wenn die Extension nicht von [fbfgateway0] bzw. dem 1. register=.../extension stammt.
Beispiel:
[incoming] exten => 623,1,goto(623,623,1)
( goto(Kontext,Extension,Priority) )
...wäre...
[623]
exten => 623,1,dial(SIP/whatever)
 
Zuletzt bearbeitet:
Danke für die Erklärungen. Ich hab meine Fritzbox Peers jetzt in verständlichere Namen umbenannt und ein wenig gespielt und mir die logs auf der CLI dazu angeschaut. Jetzt wird das etwas verständlicher. Ich hatte das nur alles mit 621, ... benannt, weil ich dachte, man muss hier zwingend den selben Namen vergeben. Hab ich wohl irgendwo aus einer Anleitung falsch rausgelesen.

Die Benennung fbfgateway_x für den Peer ist schon besser als z.B. incoming, weil ich dann incoming auch zum rausrufen verwenden könnte, das verwirrt hier nur.


Das einzige "Problem" bzw. Unschönheit wegen diesem Verhalten ist dann wohl, dass halt in meiner Logging-Ausgabe auf der CLI bei eingehenden Anrufen nach dem NoOP("SIP/ hier IMMER das fbfgateway0 angezeigt wird. Aber das sollte ja nicht weiter stören.

Ganz klar wirds dann, wenn ich dem fbfgateway0 einfach 2 contexte zuweise, also z.B. incoming_fritzbox_all und outgoing_fbfgateway0. Dann sehe ich es auf Anhieb, dass hier "fritzbox all" reinkommt.
 
Genau, das Verständnis ist die Grundlage ;)

Ich hatte das nur alles mit 621, ... benannt, weil ich dachte, man muss hier zwingend den selben Namen vergeben.
Ganz genauso war das auch bei mir, Damals ;)

Ganz klar wirds dann, wenn ich dem fbfgateway0 einfach 2 contexte zuweise, also z.B. incoming_fritzbox_all und outgoing_fbfgateway0. Dann sehe ich es auf Anhieb, dass hier "fritzbox all" reinkommt.
Das versteh ich wiederum nicht, ein Beispiel ?
 
War ein Denkfehler von mir. In der Definition von fbfgateway0 steht ja nur der incoming-context drin. Ein outgoing-context würde ja nicht beim fbfgateway, sondern beim Endgerät stehen, also meinem IP-Telefon zum Beispiel.

___


Wenn der Asterisk immer den ersten passenden register-Eintrag nimmt, bei dem die IP usw passt, dann macht es ja keinen Sinn, wenn ich da meine ganzen fbfgateways einzeln als register => eintrage, oder?

Dann reicht es doch, wenn ich nur fbfgaetway0 als register und den Rest dann nur unter [fbfgateway_] eintrage? Oder müssen die trotzdem alle doppelt drin stehen in der sip.conf?
 
Jetzt haben wir es fast ;)

Ja. Anders gehts nicht, denn...
Die register= sind für eingehende Anrufe.
Die Peers ( primär ) für Ausgehende Anrufe.
Ausnahme ist der erste Peer, weil der alle Anrufe von allen register= mit der selben IP fangen tut.
Deshalb ist die Identifikation* nur anhand der register=.../Extension im Kontext des ersten Peer möglich.
...und für jedes in der FRITZ!BOX angelegte IP-Telefon der FRITZ!BOX, welche du nutzen möchtest, braucht es ein register=.
Da kommste nicht drumrum.


* Das wären die "Jobs" für "exten => ", "gotoif()" und/oder "execif()", je nach Geschmack.
Mit "exten => " die genaue register=.../Extension zu fangen, wäre die eindeutigste Methode, und auch noch lesbar/verstehbar für angehende Asterisk Administratoren, die das nicht selber programmiert haben.
Dafür reicht aber mit "gotoif()" oder "execif()" eine Einzige "exten => ", die mit "Pattern Matching"** ( Mustererkennung** ;) ) alle register../Extension fangen tut.
...und dann nacheinander testet, welche von den maximal 10 IP-Telefonen gerade anruft.

** Beispiel: exten => _62[0-9],1,execif($[${EXTEN}=620]?dial(SIP/whatever,120))
Matcht für: 620 - 629
...und dial() wird nicht für 621 - 629 ausgeführt, nur für: 620
 
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.