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

Oder Verknüpfung

Dieses Thema im Forum "Asterisk Allgemein" wurde erstellt von stäubel, 17 Okt. 2006.

  1. stäubel

    stäubel Neuer User

    Registriert seit:
    11 Aug. 2006
    Beiträge:
    196
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Dipl. Techniker HF / Applikations-Entwickler
    Ort:
    Kt.Glarus
    Hallo zusammen

    Hab da mal wieder eine Frage.
    Bei uns möchten einige Teilnehmer mit der Hauptnummer raustelefonieren und die andern mit Ihrer direkten Nummer.

    Da dies manchmal wieder ändern kann, möchte ich dies ein wenig elegant lösen, damit es schnell änderbar ist.

    Hab mir mal folgenden Code gemacht:

    Code:
    [globals]
    OWNUSERNR = 71 | 75 | 80        ;Diese internen Teilnehmer haben auch extern Ihre eigene Nummer
                                    ;z.B. intern 71 = extern 0441234571
    
                                    ;Die restltlichen sollen über die Beispiel Nummer 0441234560 signalisiert werden
                                    
    exten => _0XXXXXXXXXX,1,Set(_CALLERTON=16) 
    exten => _0XXXXXXXXXX,2,GotoIf($[${CALLERIDNUM} = ${OWNUSERNR}]?4)          
    exten => _0XXXXXXXXXX,3,Dial(CAPI/EICON/441234560:${EXTEN:1}/b,30) 
    exten => _0XXXXXXXXXX,4,Dial(CAPI/EICON/4412345${CALLERIDNUM}:${EXTEN:1}/b,30)
    
    
    Bei meinen Tests hats funktionier, aber wenn man früher viel C/C++ programmiert hat, tut das schon ein weinig weh.

    Meine Frage ist vorallem, darf man das wirklich machen?

    GotoIf($[${CALLERIDNUM} = 71 | 75 | 80 ?4)

    Also wenn CALLERIDNUM 71 oder 75 oder 80 ist, springe zu 4.
    Sonst fahre fort bei 3.

    Da ich niergends ein Beispiel gefunden habe, möchte ich fragen, ob
    es der "Asterisk-Norm" entspricht, oder ob es vielleicht sogar Zufall ist,
    dass es funktioniert? :rolleyes:

    Danke vielmal für einen Bescheid.

    Greez Stäubel
     
  2. Maik

    Maik Gesperrt

    Registriert seit:
    1 Apr. 2004
    Beiträge:
    1,778
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Wenn ich die Doku gerade richtig gelsen habe, wird zuerst der Ausdruck "71 | 75 | 80" ausgewertet und es wird 71 zurückgegeben. Mit anderen Nummern sollte es also nicht funktionieren. Du suchst vermutlich eher sowas wie REGEX.
     
  3. stäubel

    stäubel Neuer User

    Registriert seit:
    11 Aug. 2006
    Beiträge:
    196
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Dipl. Techniker HF / Applikations-Entwickler
    Ort:
    Kt.Glarus
    Danke fürs Nachschlagen!!
    Dachte mir beinahe, dass es nicht so einfach sein kann :mad:

    Aber was meinst du mit, REGEX?
    Für mich ist ein REGEX ein Regular Expression.
    Also folgendes Fettgedruckte:
    exten => _0XXX,1,Dial(SIP/${EXTEN},20)

    Aber gibts den keine if oder Switch Anweisung,
    wo man mehrere Variablen ODER-Verknüpft mit einem Wert "gleichzeitig" vergleichen kann.

    Thanx für deine Hilfe

    Gruss Stäubel
     
  4. Maik

    Maik Gesperrt

    Registriert seit:
    1 Apr. 2004
    Beiträge:
    1,778
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ich meinte die Dialplan-Funktion REGEX
     
  5. stäubel

    stäubel Neuer User

    Registriert seit:
    11 Aug. 2006
    Beiträge:
    196
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Dipl. Techniker HF / Applikations-Entwickler
    Ort:
    Kt.Glarus
    Hallo Maik
    Danke für den Hinweis.
    Hab mich mal damit beschäftigt und folgendes hinbekommen:

    Code:
    exten => _0XXXXXXXXXX,1,Set(_CALLERTON=16)
    exten => _0XXXXXXXXXX,2,GotoIf($[ ${REGEX("^80\|^50\|^88" ${CALLERIDNUM})} ]=1?4) 
    
    exten => _0XXXXXXXXXX,3,Dial(CAPI/EICON/441234560:${EXTEN:1}/b,30)
    exten => _0XXXXXXXXXX,4,Dial(CAPI/EICON/4412345${CALLERIDNUM}:${EXTEN:1}/b,30)
    
    Nun was komisch ist, ist das Asterisk irgendwie das $-Zeichen nicht schnallt.

    Also eigentlich müssten die internen Nummern im Bereich REGEX(.. mit $ abgeschlossen werden.

    $ = signalisiert das Zeilen- oder Stringende (Regulärer Ausdruck)

    Also: z.B
    Code:
    exten => _0XXXXXXXXXX,2,GotoIf($[ ${REGEX("^80$\|^50$\|^88$" ${CALLERIDNUM})} ]=1?4) 
    
    Aber immerhin funktionierts jetzt mal (ohne $-Zeichen)

    Aber stimmt das etwa so?

    Vielen Dank

    Grüsse Stäubel
     
  6. clan

    clan Mitglied

    Registriert seit:
    21 Apr. 2005
    Beiträge:
    266
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Warum nicht in der Asterisk-DB zu jedem Teilnehmer die Nummer eintragen, die Übermittelt werden soll? Damit wäre es mit einem Zugriff auf die DB getan, und Änderungen könnten ohne die extensions.conf anzufassen gemacht werden.
     
  7. stäubel

    stäubel Neuer User

    Registriert seit:
    11 Aug. 2006
    Beiträge:
    196
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Dipl. Techniker HF / Applikations-Entwickler
    Ort:
    Kt.Glarus
    Hmm, wie könnte ich den bequem die DB bearbeiten?

    Kenne nur die Grundbefehle wie z.B.

    exten => _123,1,Set(${DB(test/count)=1})
    um Daten in die AstDB zu speichern.

    Greez Stäubel
     
  8. clan

    clan Mitglied

    Registriert seit:
    21 Apr. 2005
    Beiträge:
    266
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Du willst in der extensions.conf die DB auslesen, Einträge kannst du per Asterisk CLI machen. Sieh dir doch mal die Ausgabe von 'help database' an. Als 'family' würde ich was eindeutiges wie 'callingnumber' oder so nehmen, als 'key' die Nebenstelle und als Wert die Nummer, die Übermittelt werden soll. Falls du nicht für jeden einen Eintrag nehmen willst kannst du einen Default fest in den Dialplan einkodieren oder als Nebenstelle 'default' oder so eintragen.

    Ausser dem CLI zum eintragen ginge noch die Management-Schnittstelle (ein passendes Tool vorausgesetzt) oder, falls die Asterisk-DB in einer externen Datenbank liegt, ein dazu passendes anderes Tool.
     
  9. stäubel

    stäubel Neuer User

    Registriert seit:
    11 Aug. 2006
    Beiträge:
    196
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Dipl. Techniker HF / Applikations-Entwickler
    Ort:
    Kt.Glarus
    Hallo zusammen

    Vielen Dank für die Hinweise, werde dies mal so ausprobieren,
    wenn ich mehr Zeit habe.
    Vorallem werde ich mich auch mal intensiver mit der AstDB
    (Berkeley DB) ausseinandersetzen müssen.

    Aber ist trotzdem komisch, dass Asterisk das $-Zeichen nicht schnallt.
    $ = ist ja schliesslich ein Regulärer Ausdruck (regular expression) und sollte Zeilen- oder Stringende () signalisieren.

    Naja werde dies mal zu meinen Asterisk X-Akten legen.

    Danke und viele Grüsse
    Stäubel
     
  10. PsychoMantis

    PsychoMantis Aktives Mitglied

    Registriert seit:
    18 Dez. 2005
    Beiträge:
    2,486
    Zustimmungen:
    1
    Punkte für Erfolge:
    38
    Beruf:
    Schüler
    Ort:
    Ingolstadt
    #10 PsychoMantis, 14 Mai 2008
    Zuletzt bearbeitet: 14 Mai 2008
    Was ist rausgekommen?
     
  11. rollo

    rollo IPPF-Promi

    Registriert seit:
    5 Juli 2004
    Beiträge:
    8,278
    Zustimmungen:
    1
    Punkte für Erfolge:
    38
    Ort:
    JO30SK
    Bei dem Alter des Threads würde ich sagen "42" ;)

    jo
     
  12. PsychoMantis

    PsychoMantis Aktives Mitglied

    Registriert seit:
    18 Dez. 2005
    Beiträge:
    2,486
    Zustimmungen:
    1
    Punkte für Erfolge:
    38
    Beruf:
    Schüler
    Ort:
    Ingolstadt
    #12 PsychoMantis, 14 Mai 2008
    Zuletzt bearbeitet: 14 Mai 2008
    Ich habe mir jetzt bestimmt 5 Minuten den Kopf darüber zerbrochen, aber ich checke immer noch nicht wie du auf 42 kommst.

    Nachtrag: Stimmt, den Film habe ich ja gesehen. *ROFL*
     
  13. FrankIT

    FrankIT Mitglied

    Registriert seit:
    4 Feb. 2006
    Beiträge:
    735
    Zustimmungen:
    0
    Punkte für Erfolge:
    0