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

Befehl aus Variable?

Dieses Thema im Forum "Asterisk Rufnummernplan" wurde erstellt von c64, 4 Juli 2005.

  1. c64

    c64 Neuer User

    Registriert seit:
    4 Jan. 2005
    Beiträge:
    55
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo,

    ich möchte einen Befehl in einer Variable ablegen und ihn dann ausführen:
    (ähnlich dem eval-Befehl in PHP)

    folgendes habe ich versucht, aber es funktioniert nicht:
    exten =>foo,1,SetVar(TEST="Wait(10)")
    exten =>foo,2,${TEST}

    Geht das überhaupt irgendwie?
     
  2. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    nein, weil ${} keine gültige Anweisung für den Asterisk darstellt.

    Warum willst Du sowas überhaupt machen ? Vielleicht gibt es für Deine Aufgabenstellung eine andere Lösung.
     
  3. c64

    c64 Neuer User

    Registriert seit:
    4 Jan. 2005
    Beiträge:
    55
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Moin,
    ich möchte die Kommands von einem externen PHP-Script (auf einem anderen Server) beziehen und hier ausführen. Also erst in eine Variable packen, dann Exec.

    Ich habe das mit der Variable nun wohl nun gelöst (Den Befehl Exec kannte ich nicht):
    exten => foo,1,SetVar(WA=15)
    exten => foo,2,SetVar(TEST='Wait(${WA})')
    exten => foo,3,Exec(${TEST})
     
  4. Hupe

    Hupe Aktives Mitglied

    Registriert seit:
    8 Apr. 2004
    Beiträge:
    2,586
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Dafür wurde das Asterisk-Manager-Interface geschaffen!
     
  5. britzelfix

    britzelfix Gesperrt

    Registriert seit:
    28 Mai 2004
    Beiträge:
    1,099
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Braunschweig
    ist da nicht ein AGI besser?
    Dann braucht man nicht für jeden Befehl
    ein eigenes Script, sondern benutzt ein
    Script und übergibt ${TEST} als Parameter:

    exten => foo,3,AGI,script.agi|${TEST}

    (script.agi muß nach /var/lib/asterisk/agi-bin/)

    Gruß
    britzelfix
     
  6. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Mir ist immer noch unklar, welchen Sinn die ganze Aktion haben soll. Mittels extensions.ael ist es inzwischen möglich fast alles auch in einem Dialplan zu realisieren. Inklusive Schleifen- und verschachtelter Bedingungsprogrammierung.
     
  7. c64

    c64 Neuer User

    Registriert seit:
    4 Jan. 2005
    Beiträge:
    55
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Der Sinn ist, dass die Kommandos, nachdem ein Call eingeht, komplett von einem entfernten Server aus ausgeführt werden. Das Einleiten der Wartemusik mit Wunschtitel das Verbinden zu einem SIP Endgerät, oder auch nicht, falls kein Mitarbeiter da ist... Das Ganze wird auf dem entfernten Server per Webinterface administriert. Der Asterisk-Server fragt dann immer mal wieder mit einer Unique-ID nach, ob neue Befehle vorliegen, und wie lang er warten soll, bis er nochmal fragt, oder auch nicht.

    Das Ganze ist so dynamisch, dass ich mich direkt dafür entschieden habe, die Befehle zur Laufzeit zu generieren und zu übermitteln. Es soll auch auf das http Protokoll beschränkt sein.
     
  8. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    wie Hupe schon sagte - dafür gibt es doch das Manager-Interface. Warum tust Du Dir den Streß an, das Rad neu zu erfinden ?
     
  9. c64

    c64 Neuer User

    Registriert seit:
    4 Jan. 2005
    Beiträge:
    55
    Zustimmungen:
    0
    Punkte für Erfolge:
    0


    Mmm, mit dem Manager kann ich mir das garnicht so richtig vorstellen wie das gehen soll.
    Wenn ein Gespräch eingeht, müsste ich bei dem Manager-Server anfragen wohin das Gespräch gehen sollen. Also brauche ich die Kommukation:

    Asterisk->ManagerServer: AbsenderMSN,EmpfängerMSN
    ManagerServer->Asterisk: DIAL(SIP/1,SIP/2,SIP5) ; oder mehr oder weniger oder garnix, dann Warteschleife oder Ansage dass nix verfügbar ist

    Wie löse ich denn diese Kommunikation von Asterisk ->Manager? Und dass dann direkt im Fortlauf des Dialplans die Befehle ausgeführt werden?
     
  10. Hupe

    Hupe Aktives Mitglied

    Registriert seit:
    8 Apr. 2004
    Beiträge:
    2,586
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Oder eben FastAGI. Da wird die Verbindung vom Asterisk-Server her iniziiert. An muss aber auf der anderen Seiter ein FastAGI-Server laufen.
     
  11. Hupe

    Hupe Aktives Mitglied

    Registriert seit:
    8 Apr. 2004
    Beiträge:
    2,586
    Zustimmungen:
    0
    Punkte für Erfolge:
    0


    Na, das würde viellciht ein bischen anders gehen:

    Es kommt ein anruf rein. Das löst ein NewChannel-Event aus. Daraufhin kannst Du von diesem Event den Kontext und die Extension abfragen. Somit weisst Du was der anrufer gewählt hat (bzw, über welchen Account, MSN etc pp). Dann siehst Du in der Lokalen datenbank naoch, wohin der Anruf gehen soll. Dann erzeugst Du zu dem Ziel einen Channel, und Verbindes den neu erzeugten Channel mit dem eingegangenen Channel. So, oder ähnlcih misst Du Dir das Vorstellen.
    Habe damit auch nochnicht so viel gemacht. Da musst Du dich einfach mal einlesen!
     
  12. c64

    c64 Neuer User

    Registriert seit:
    4 Jan. 2005
    Beiträge:
    55
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Es soll aber keine lokale Datenbank laufen. Nach Eingang des Calls soll sofort der externe Server gefragt werden, was nun passieren soll. Geht das mit dem Manager Interface? Der Dialplan soll sozusagen vom externen Server zur Laufzeit ergänzt werden.

    Das ist wie gesagt so dynamisch, dass es vorkommen kann, dass garkein DIAL folgt. Es sollen auch keine zig tausend if Abfragen in die extensions rein. Das soll der externe Server mir einfach sagen. Wie er das macht, ist egal. Hauptsache Asterisk führt das dann aus, im Zusammenhang mit dem jetzigen Anrufe (UniqueID?).
     
  13. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Der Asterisk hat eine interne Datenbank - die läuft immer !
     
  14. c64

    c64 Neuer User

    Registriert seit:
    4 Jan. 2005
    Beiträge:
    55
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ja, da soll aber keine Entscheidung draus entstehen. Im Prinzip soll der gesammte Dialplan extern liegen. Selbst das Answer() darf nicht lokal entschieden werden.
     
  15. Hupe

    Hupe Aktives Mitglied

    Registriert seit:
    8 Apr. 2004
    Beiträge:
    2,586
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Mit "lokal" meinte ich auch den Rechner, der auf das Manager-Interface zugreift, nicht den Asterisk-Server.
     
  16. c64

    c64 Neuer User

    Registriert seit:
    4 Jan. 2005
    Beiträge:
    55
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ah, ja dann versprichst du mir das, was ich damit realisieren möchte. Werde mich mal einlesen. Wenn jemand nen Beispielfetzen zur Hand hat, immer her damit ;-)
     
  17. britzelfix

    britzelfix Gesperrt

    Registriert seit:
    28 Mai 2004
    Beiträge:
    1,099
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Braunschweig
    @c64

    Wir fragen uns hier warum es denn unbedingt
    ein "externer Server" sein muß?

    Das Ganze scheint mir ein gewaltiges Projekt zu werden.
    Man sollte sich daher zuerst mal fragen: Ist es realisierbar?
    Ist es sinnvoll? In welcher Zeit kann ich es schaffen?

    Es gibt außerdem noch Manager-Soft wie z.B. FOP oder AMP.

    Gruß
    britzelfix
     
  18. rajo

    rajo Admin-Team

    Registriert seit:
    31 März 2004
    Beiträge:
    1,958
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Wenn der Dialplan extern liegen soll -- warum nicht mit Realtime arbeiten und den in eine sql-DB packen? Dann saugt sich Asterisk das ganze was passieren soll aus der SQL-DB und die kann man auch bequem von einem anderen Rechner aus per Webinterface füttern. Oder hab ich da jetzt was falsch verstanden?
     
  19. c64

    c64 Neuer User

    Registriert seit:
    4 Jan. 2005
    Beiträge:
    55
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Es ist so, dass auf dem externen Server die ganzen Daten liegen und sich die Leute auch dort anmelden. Wenn man angemeldet ist, sollen Anrufe auf die interne SIP Nebenstelle möglich sein. Ja, das Projekt ist schon nicht klein, aber die externen Komponenten liegen (fast) schon alle vor. Es gilt halt nur, den Rückkanal zu Asterisk zu integrieren. Es sollen sehr viele Entscheidungen getroffen werden, was wann warum passieren soll, wenn alle besetzt sind, oder keiner da ist, usw. usf.

    Vorgefertigte Manager-Software bietet diese Anbindung nicht, bzw. das Ganze soll auch in ein Produkt integriert werden, wobei dann die rechtliche Seite auch so eine Sache ist, wenn der Spass nicht unter der LGPL steht, ganz abgesehen davon, dass das Ding dann sowieso komplett umgestrickt werden muss, wobei man dann auch selbst was neues bauen kann.
     
  20. Hupe

    Hupe Aktives Mitglied

    Registriert seit:
    8 Apr. 2004
    Beiträge:
    2,586
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Dein System ist aber ziemlich gefährlich. Wenn die Manager-Software in die Knie (warum auch immer) geht, dann hast Du gleich das ganze System platt gemacht und nix läuft mehr. Ich würde es so machen, dass alles was direkt zu Asterisk gehört (config und Dialplan-DB) auf einem Rechner liegt. Dann kann es ja auch nurnoch an einem Rechner liegen, wenn es nichtmehr funzt, und nichtmehr an zweien.
    Es spricht dann ja auch nichts dagegen die SQL-Datenbank mit einem Web-Interface aus der Ferne zu konfigurieren, bzw. bestimmte Funktionen zu automatisieren. So ist es viel praktischer, wenn der Asterisk bei einem anderen Rechner nachfragt, ob der User gerade angemeldet ist (das kann man wunderbar mit AGI oder FastAgi scripten), und der entfernte Rechner gibt dann zurück, ob und wo der gesuchte User gerade angemeldet ist. Und sollte das (z.B. aus netzwerktechnischen Gründen mal nicht möglich sein, so kann man das gespräch immernoch auf ein default gerät legen, wo man immer errreichbar ist (z.B. Handy, bzw die Telefonzentrale etc pp).
    Das System, wie Du es vorhast, richt geradezu nach Systemausfällen. Aber machbar ist das bestimmt. Auch wenn Du am Ende mehr dran entwickelst und debugst als telefoniert wird :).