[Gelöst] CallerID ankommend 0 hinzufügen

howy-1

Neuer User
Mitglied seit
5 Apr 2010
Beiträge
39
Punkte für Reaktionen
0
Punkte
6
Hallo zusammen,

ich habe in meinem Dialplan die "Rauswahl" ins Festnetz mit vorangestellter Null eingestellt, so wie bei einer alten Telefonanlage. Diese Null soll bei hereinkommenden Anrufen gleich in der Anzeige vorangestellt werden, damit man sofort mit dem Telefon zurückrufen kann.
Bisher hatte ich den Asterisk per CAPI ans Festnetz angebunden und da lief das einfach mittels Umschreiben der CALLERID
Set(CALLERID(num)=0${CALLERID(num)})

Nun ist mein Asterisk komplett per SIP an T-Online angebunden und da geht das nicht mehr.
Es wird auf den Telefonen nur eine 0 angezeigt. Das liegt wohl daran, wie ich im CLI gesehen habe, dass die CALLERID mit +49 am Anfang hereinkommt und davor einfach die 0 gesetzt wird, was dann nicht klappen kann.
Lasse ich die Zeile mit Set(CALLERID) weg, kommt aber auf den Telefonen auch nicht die +49 an, sondern es steht die 0049 drin.

Gefunden hatte ich dann noch dieses:
ExecIf($["${REGEX("^+49"${CALLERID(num)})}"="1"]?Set(CALLERID(num)=0${CALLERID(num):3})

Dadurch wird die CallerID im CLI schonmal richtig angezeigt, also ohne +49 sonder mit 0 vorneweg, aber an den Telefonen kommt immer noch 0049 an.
Es wird auch bei Ortsgesprächen immer die komplette Vorwahl mit angezeigt.
Wie gesagt, vorher bei ISDN/CAPI ging das alles problemlos und ich habe den Dialplan einfach für SIP übernommen.

Mir raucht der Kopf...
 
Zuletzt bearbeitet:
Ich glaube, die T-Com schickt die Nummer des Anrufers zusätzlich als Remote Party ID Header. Wenn ich mich recht, erinnere leitet Asterisk diesen bei trustrpid=yes weiter an den Client. Im Zweifel sip set debug peer NummerDesClients und im INVITE Paket kucken, welche Header da drin sind.
 
Ich glaube, die T-Com schickt die Nummer des Anrufers zusätzlich als Remote Party ID Header. Wenn ich mich recht, erinnere leitet Asterisk diesen bei trustrpid=yes weiter an den Client. Im Zweifel sip set debug peer NummerDesClients und im INVITE Paket kucken, welche Header da drin sind.

Ok, das ist ja schonmal ein Anhaltspunkt, dem ich nachgehen kann.

Bei sip set debug peer NummerDesClients ist die NummerDesClients die Nummer (MSN) auf welcher der Anruf hereinkommt, bzw. die, mit der der Asterisk bei T-Com angemeldet ist, richtig?

Ergänzung: trustrpid steht bei mir auf "no"
 
Zuletzt bearbeitet:
Unbeachtlich des Hinweises von rentier-s:
Es kann sein, dass die Telefone statt der CALLERID(num) den CALLERID(name) anzeigen.
Deshalb macht es allenfalls Sinn, hier zur Sicherheit

Code:
ExecIf($["${REGEX("^+49"${CALLERID(num)})}"="1"]?Set(CALLERID(num)=00${CALLERID(num):3})
Set(CALLERID(name)=${CALLERID(num)})

einzubauen.
Wenn Du trustrpid auf No stehen hast, sollte er den FROM-Heaader benutzen und dann sollte das passen.
Das die Telekom bei VoIP in der Tat die Absenderufnummer als +E164 angibt, ist bei der Umwandlung naturgemäss die Ortsvorwahl drin.

Um jetzt "so richtig schön zu sein", müsstest Du folgendes machen (incl. Ausland, hier mal für das Ortsnetz von Berlin):

Code:
ExecIf($["${REGEX("^+"${CALLERID(num)})}"="1"]?Set(CALLERID(num)=000${CALLERID(num):1})
ExecIf($["${REGEX("^00049"${CALLERID(num)})}"="1"]?Set(CALLERID(num)=00${CALLERID(num):5})
ExecIf($["${REGEX("^0030"${CALLERID(num)})}"="1"]?Set(CALLERID(num)=0${CALLERID(num):4})
Set(CALLERID(name)=${CALLERID(num)})

Damit wäre die CALLERID dann im Ortsformat (für Berlin) und mit zusätzlich vorangestellter 0.
 
Es ist doch immer wieder bemerkenswert, was manche User hier so einfach aus dem Ärmel schütteln. Meine allergrößte Hochachtung!
Ich melde mich mit dem Ergebnis wieder, sobald ich am WE zum testen komme.

Grüße
 
Moins


Zusätzlich/Analog kannst du dir auch mal ansehen was mit aktivierter sendrpid/trustpid so geht: KlickKlack
 
So, jetzt habe ich es mal ausprobiert.

ExecIf($["${REGEX("^+"${CALLERID(num)})}"="1"]?Set(CALLERID(num)=000${CALLERID(num):1})
ExecIf($["${REGEX("^00049"${CALLERID(num)})}"="1"]?Set(CALLERID(num)=00${CALLERID(num):5})
ExecIf($["${REGEX("^0030"${CALLERID(num)})}"="1"]?Set(CALLERID(num)=0${CALLERID(num):4})
Set(CALLERID(name)=${CALLERID(num)})

Bei der zweiten Exif-Zeile musste ich hinten anstatt :5 die :3 nehmen, damit bekam ich die Vorwahl in "rückrufbarer" Weise angezeigt, mit der Null für die Telefonanlage und ohne die 0049. Dies funktioniert auch beim Anruf vom Handy aus.

Bei der dritten Exif-Zeile musste ich für meine Ortsvorwahl (03647) hinten die :7 setzen und damit kamen Ortsgespräche so rein, wie ich es vorher über ISDN mit chan_capi gewöhnt war, nur mit der führenden Null und ohne Ortsvorwahl. Allerdings fehlt jetzt bei hereinkommenden Handyanrufen auch die komplette Vorwahl.
Dies alles konnte ich im CLI beobachten.

Im CLI kommt bei Abarbeitung des Dialplanes bei der Zeile "Set(CALLERID(name)=${CALLERID(num)})" außerdem weiterhin
Set("SIP/DTAG-IP-00000006", "CALLERID(name)=+49********") in new stack

Und auf den Telefonen steht weiterhin die 0049 vorne dran bzw. bei einem testweise eingerichtet Softphone auf dem Laptop auch die komplette Nummer mit +49.

Muss vielleicht noch in der sip.conf was geändert werden, bei den einzelnen Clients?
 
Da passt was nicht zusammen:
Sowohl Deine Änderungen passen nach kurzem Nachrechnen nicht aber auch die Tatsache, dass er CALLERID(name) nicht mit dem geänderten Wert von CALLERID(num) belegt. Oder anders: Nach Deinem Ergebnis wird CALLERID(num) gar nicht geändert.
Poste doch bitte mal Deinen Dialplan und ein komplettes Log eines eingehenden Anrufs (asterisk -rvvvvv), dann sehen wir weiter.
 
Der Teil des Dialplanes, über den getestet wurde:

Code:
[tkom-in]

exten => 03647*******,1,ExecIf($["${REGEX("^+"${CALLERID(num)})}"="1"]?Set(CALLERID(num)=000${CALLERID(num):1})
exten => 03647*******,n,ExecIf($["${REGEX("^00049"${CALLERID(num)})}"="1"]?Set(CALLERID(num)=00${CALLERID(num):3})
exten => 03647*******,n,ExecIf($["${REGEX("^003647"${CALLERID(num)})}"="1"]?Set(CALLERID(num)=0${CALLERID(num):7})
exten => 03647*******,n,Set(CALLERID(name)=${CALLERID(num)})
exten => 03647*******,n,Dial(SIP/2010,30,rt)
exten => 03647*******,n,Hangup()

Darauf im CLI bei Anruf aus dem Ortsnetz:

Code:
-- Executing [03647*******@tkom-in:1] ExecIf("SIP/DTAG-IP-0000000a","0?Set(CALLERID(num)=000493647******") in new stack
-- Executing [03647*******@tkom-in:2] ExecIf("SIP/DTAG-IP-0000000a", "0?Set(CALLERID(num)=003647******") in new stack
-- Executing [03647*******@tkom-in:3] ExecIf("SIP/DTAG-IP-0000000a", "0?Set(CALLERID(num)=0******") in new stack
-- Executing [03647*******@tkom-in:4] Set("SIP/DTAG-IP-0000000a","CALLERID(name)=+493647******") in new stack
-- Executing [03647*******@tkom-in:5] Dial("SIP/DTAG-IP-0000000a", "SIP/2010,30,rt") in new stack

Bei Anruf aus dem Handynetz:

Code:
-- Executing [03647*******@tkom-in:1] ExecIf("SIP/DTAG-IP-0000000c", "0?Set(CALLERID(num)=00049162******") in new stack
-- Executing [03647*******@tkom-in:2] ExecIf("SIP/DTAG-IP-0000000c", "0?Set(CALLERID(num)=00162******") in new stack
-- Executing [03647*******@tkom-in:3] ExecIf("SIP/DTAG-IP-0000000c", "0?Set(CALLERID(num)=0 und letzte 6 Ziffern der Handynummer") in new stack
-- Executing [03647*******@tkom-in:4] Set("SIP/DTAG-IP-0000000c", "CALLERID(name)=+49162******") in new stack
-- Executing [03647*******@tkom-in:5] Dial("SIP/DTAG-IP-0000000c", "SIP/2010,30,rt") in new stack

Es ist übrigens ein Asterisk 10

Grüße
 
Die jeweilige 0 vor dem Fragezeichen zeigt uns, dass die jeweiligen Anweisungen nicht ausgeführt werden, da das Suchmuster nicht trifft.
Der Fehler ist auch zunächst recht einfach: Da sind Anführungszeichen zuviel und es fehlt jeweils eine Klammer.
Um das ganze etwas zu vereinfachen und lesbarer zu machen, habe ich das mal ohne REGEX geschrieben. Das ist auch getestet und läuft wie Du es haben willst.

Code:
exten => 03647*******,1,ExecIf($[ "${CALLERID(num):0:1}" = "+" ]?Set(CALLERID(num)=000${CALLERID(num):1}))
exten => 03647*******,n,ExecIf($[ "${CALLERID(num):0:5}" = "00049" ]?Set(CALLERID(num)=00${CALLERID(num):5}))
exten => 03647*******,n,ExecIf($[ "${CALLERID(num):0:6}" = "003647" ]?Set(CALLERID(num)=0${CALLERID(num):6}))
exten => 03647*******,n,Set(CALLERID(name)=${CALLERID(num)})
exten => 03647*******,n,Dial(SIP/2010,30,rt)
exten => 03647*******,n,Hangup()
 
Suuuper! Genau so wollte ich das. Und auf den Clients wird jetzt auch die Nummer richtig angezeigt.
Ich hatte das Listing einfach so von oben übernommen, nach Klammern und Anführungszeichen habe ich da nicht gekuckt, weil ich da eh nicht den Durchblick habe.

Vielen Dank!
 
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.