.titleBar { margin-bottom: 5px!important; }

Problem mit Set(CALLERID(num)

Dieses Thema im Forum "Asterisk Rufnummernplan" wurde erstellt von robinsonR, 18 Feb. 2009.

  1. robinsonR

    robinsonR Mitglied

    Registriert seit:
    17 Apr. 2006
    Beiträge:
    560
    Zustimmungen:
    0
    Punkte für Erfolge:
    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.*
     
  2. Burmann

    Burmann Mitglied

    Registriert seit:
    16 Feb. 2005
    Beiträge:
    372
    Zustimmungen:
    0
    Punkte für Erfolge:
    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...
     
  3. robinsonR

    robinsonR Mitglied

    Registriert seit:
    17 Apr. 2006
    Beiträge:
    560
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    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})
     
  4. Burmann

    Burmann Mitglied

    Registriert seit:
    16 Feb. 2005
    Beiträge:
    372
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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.
     
  5. robinsonR

    robinsonR Mitglied

    Registriert seit:
    17 Apr. 2006
    Beiträge:
    560
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    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?
     
  6. Burmann

    Burmann Mitglied

    Registriert seit:
    16 Feb. 2005
    Beiträge:
    372
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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.
     
  7. robinsonR

    robinsonR Mitglied

    Registriert seit:
    17 Apr. 2006
    Beiträge:
    560
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    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?