Problem mit Set(CALLERID(num)

robinsonR

Mitglied
Mitglied seit
17 Apr 2006
Beiträge
560
Punkte für Reaktionen
0
Punkte
16
Irgendwo habe ich einen Knoten in meinen Gedankengängen drin. Ich meine, mit Asterisk 1.2 habe das so geklappt, mit Asterisk 1.4 will es einfach nicht, wie es sollte. Das Problem ist, dass bei Anrufen aus der Dominikanischen Republik die Nummer nicht korrekt angezeigt wird; es wird die 1 an dritter Stelle unterschlagen. So ist es natürlich nicht möglich, bei verpassten Anrufen zurückzurufen und es wird die Nummer natürlich im Telefonbuch auch nicht gefunden, um den Anrufer korrekt anzuzeigen. Also versuche ich, die fehlende Ziffer wieder einzufügen.

Code:
exten => s,n,GotoIf($[${CALLERID(num)} = 00809NXXXXXX]?20)               

exten => s,20,Set(CALLERID(num)=001809${CALLERID(num):5})
Was mache ich nur falsch? Ich erhalte folgende Einträge in der Log-Datei:
Code:
[Feb 18 16:54:45] WARNING[11836] ast_expr2.fl: ast_yyerror():  syntax error: syntax error, unexpected $end, expecting '-' or '!' or '(' or '<token>'; Input:
008098820409 =  3.*
                   ^
[Feb 18 16:54:45] WARNING[11836] ast_expr2.fl: If you have questions, please refer to doc/channelvariables.txt in the asterisk source.
[Feb 18 16:54:45] VERBOSE[11836] logger.c:     -- Executing [s@macro-getcid-general:6] GotoIf("SIP/0442912030-b7e3fb80", "0?50") in new stack
[Feb 18 16:54:45] DEBUG[11836] app_macro.c: Executed application: GotoIf
[Feb 18 16:54:45] WARNING[11836] ast_expr2.fl: ast_yyerror():  syntax error: syntax error, unexpected $end, expecting '-' or '!' or '(' or '<token>'; Input:
008098820409 =  0.*
 
exten => s,20,NoOp(CallerID=${CALLERID(num)} wird nicht geändert)
exten => s/_00809NXXX.,20,Set(CALLERID(num)=001809${CALLERID(num):5})

könnte dein Problem lösen.

Der Knoten ist vermutlich dass du irgendwo auf '_3.' (o.ä.) testen möchtest und dann zu Prio 50 zu springen. Dies ist aber nicht der Abschnitt den du aus der extension.conf geposted hast...
 
Ich muss vielleicht einen grösseren Teil der config.Datei anführen
Code:
exten => s,1,Set(CALLERID(name)=${CALLERID(name)})
exten => s,2,Set(CALLERID(num)=${CALLERID(num)}) 
exten => s,n,GotoIf($[${CALLERID(num)} = gw01netvoip]?60)
exten => s,n,GotoIf($[${CALLERID(num)} = anonymous]?60)
exten => s,n,GotoIf($[${CALLERID(num)} = 00809NXXXXXX]?20)
exten => s,n,GotoIf($[${CALLERID(num)} =  3.*]?50)
exten => s,n,GotoIf($[${CALLERID(num)} =  0.*]?50)
exten => s,n,Goto(100)

exten => s,20,Set(CALLERID(num)=0018[02]9${CALLERID(num):5})
exten => s,21,Goto(100)

exten => s,30,Set(CALLERID(num)=+${CALLERID(num):2})
exten => s,31,Goto(100)

exten => s,50,Set(CALLERID(num)=${CALLERID(num)})
exten => s,50,Goto(100)

exten => s,60,Set(CALLERID(all)="ohne Nummer") 
exten => s,61,Goto(100)

Diese Notation verstehe ich nicht, ist das neu?
Code:
exten => s/_00809NXXX.,20,Set(CALLERID(num)=001809${CALLERID( num):5})
 
Keine Ahnung seit wann die CID mit / hinter der DID ausgewählt werden kann.

Aber ich binn mir sicher, das deine Dialplan auch in Asterisk 1.2 nicht geht. Prio 1+2 ist Sinnlos. Wenn du den Inhalt der Variablen wissen willst mach
exten => s,1,NoOp(CALLERID=${CALLERID(all)})
Wenn man Pattern für 'ne Rufnummer benutzt (00809NXXXXXX) muß auf jeden fall ein '_' davor. Afaik konnte man das in der $[] noch nie angeben. Und ein * bedutete schon immer Multiplikation. Nur bei der DID und CID kann man die Pattern verwenden, wenn ein '_' vorangestellt ist.

Und wo wir dabei sind: Manche Provider übertragen statt "Anonymous" einfach eine "0", "Unknown" oder "" als CallerID(num).

Die Prio 20 geht so nicht. Die Prio 30 wird nicht angesprungen. Die Prio 50 tut nix.

probiers mal mit
Code:
exten => s,1,NoOp(CALLERID=${CALLERID(all)})
exten => s,2,SET(CALLERID(all)=${IF($[${CALLERID(number)}a=a]?"" <ohne Nummer>:${CALLERID(all)})})
exten => s/gw01netvoip,2,Set(CALLERID(all)="ohne Nummer") 
exten => s/anonymous,2,Set(CALLERID(all)="ohne Nummer") 
exten => s/0,2,Set(CALLERID(all)="ohne Nummer") 
exten => s/_00809NXXXXX.,2,Set(CALLERID(num)=+1809${CALLERID(num):5})
exten => s/_00829NXXXXX.,2,Set(CALLERID(num)=+1829${CALLERID(num):5})
exten => s/_00Z..,2,Set(CALLERID(num)=+${CALLERID(num):2})
exten => s,3,Goto(100)

Die Änderungen stehen alle in Prio '2'; d.h. es wird nur eine Zeile davon matchen.
 
Vielen Dank. Es ist schon möglich, dass das so nie funktioniert hat. Es ist auch nicht ganz einfach, Anrufe [vor allem aus dem Ausland] zu testen. Je nachdem, wie sie hier ankommen, zeigen sich unterschiedliche Nummern.

Jetzt zum besseren Verständnis: Wenn ich anstelle von «+1809 …» lieber «001809 …» angezeigt bekommen wollte, müsste ich anstelle von
Code:
exten => s/_00809NXXXXX.,2,Set(CALLERID(num)=+1809${CALLERID(num):5})
dann
Code:
exten => s/_00809NXXXXX.,2,Set(CALLERID(num)=001809${CALLERID(num):6})
benützen? Und was bewirkt «a=a» hier
Code:
exten => s,2,SET(CALLERID(all)=${IF($[${CALLERID(number)}a=a]?"" <ohne Nummer>:${CALLERID(all)})})
?

Bei diesem Provider (Netstream) kommt bei anonymen Anrufen eben entweder «anonymous» oder «gw01netvoip»; aber das hast du ja so umgesetzt.

Da dieser Abschnitt Teil eines Dialplans einer Trixbox ist, steht weiter oben schon
Code:
exten => s,1,Noop(user-callerid: ${CALLERID(name)} ${CALLERID(number)})
Das wird wohl deinem
Code:
exten => s,1,NoOp(CALLERID=${CALLERID(all)})
entsprechen?
 
exten => s/_00809NXXXXX.,2,Set(CALLERID(num)=001809${CALLERID(num):6})[/CODE]benützen?
jep
Und was bewirkt «a=a» hier
exten => s,2,SET(CALLERID(all)=${IF($[${CALLERID(number)}a=a]?"" <ohne Nummer>:${CALLERID(all)})})

Wenn ${CALLERID(number)} leer ist wird es zu $[a=a] was true ist. Wenn nicht leer ist wirds zu $[03012345a=a] was false ist. Also ein test ob CID leer.
 
Habe jetzt ein weiteres Problemchen: Ich verwende Trixbox; hier wird in den conf-Dateien oft darauf hingewiesen, man solle Änderungen nicht da anbringen, sondern in speziellen «custom.conf»-Dateien.
Code:
[ext-did]
include => ext-did-custom
exten => fax,1,Goto(ext-fax,in_fax,1)
exten => s,1,Set(__FROM_DID=${EXTEN})
exten => s,n,Gosub(cidlookup,cidlookup_2,1)
exten => s,n,Gosub(app-blacklist-check,s,1)
exten => s,n,GotoIf($[ "${CALLERID(name)}" != "" ] ?cidok)
exten => s,n,Set(CALLERID(name)=${CALLERID(num)})
exten => s,n(cidok),Noop(CallerID is ${CALLERID(all)})
exten => s,n,Set(__CALLINGPRES_SV=${CALLINGPRES_${CALLINGPRES}})
exten => s,n,SetCallerPres(allowed_not_screened)
exten => s,n,Goto(app-daynight,1,1)

; end of [ext-did]
Ich habe also den entsprechenden Context angelegt und den ganzen Teil inklusive Modifikation dort abgelegt
Code:
[ext-did-custom]
exten => fax,1,Goto(ext-fax,in_fax,1)
exten => s,1,Set(__FROM_DID=${EXTEN})
exten => s,n,Gosub(cidlookup,cidlookup_2,1)
exten => s,n,Gosub(app-blacklist-check,s,1)
exten => s,n,GotoIf($[ "${CALLERID(name)}" != "" ] ?cidok)

exten => s/anonymous,5,Set(CALLERID(name)="ohne Nummer") 
exten => s/gw01netvoip,5,Set(CALLERID(name)="ohne Nummer") 
exten => s/0,5,Set(CALLERID(all)="ohne Nummer") 
exten => s/_00809NXXXXX.,5,Set(CALLERID(all)=001809${CALLERID(all):6})
exten => s/_00829NXXXXX.,5,Set(CALLERID(all)=001829${CALLERID(all):6})

exten => s,5,Set(CALLERID(name)=${CALLERID(num)})
exten => s,n(cidok),Noop(CallerID is ${CALLERID(all)})
exten => s,n,Set(__CALLINGPRES_SV=${CALLINGPRES_${CALLINGPRES}})
exten => s,n,SetCallerPres(allowed_not_screened)
exten => s,n,Goto(app-daynight,1,1)

; end of [ext-did-custom]
Aber irgendwie will das nicht klappen. Was mache ich falsch?
 

Zurzeit aktive Besucher

Neueste Beiträge

Statistik des Forums

Themen
244,878
Beiträge
2,220,027
Mitglieder
371,604
Neuestes Mitglied
broekar
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.

IPPF im Überblick

Neueste Beiträge