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?
jep 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?