Befehl aus Variable?

c64

Neuer User
Mitglied seit
4 Jan 2005
Beiträge
55
Punkte für Reaktionen
0
Punkte
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?
 
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.
 
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})
 
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
 
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.
 
betateilchen schrieb:
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.

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.
 
wie Hupe schon sagte - dafür gibt es doch das Manager-Interface. Warum tust Du Dir den Streß an, das Rad neu zu erfinden ?
 
betateilchen schrieb:
wie Hupe schon sagte - dafür gibt es doch das Manager-Interface. Warum tust Du Dir den Streß an, das Rad neu zu erfinden ?


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?
 
Oder eben FastAGI. Da wird die Verbindung vom Asterisk-Server her iniziiert. An muss aber auf der anderen Seiter ein FastAGI-Server laufen.
 
c64 schrieb:
betateilchen schrieb:
wie Hupe schon sagte - dafür gibt es doch das Manager-Interface. Warum tust Du Dir den Streß an, das Rad neu zu erfinden ?


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?


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!
 
Hupe schrieb:
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!

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?).
 
betateilchen schrieb:
Der Asterisk hat eine interne Datenbank - die läuft immer !

Ja, da soll aber keine Entscheidung draus entstehen. Im Prinzip soll der gesammte Dialplan extern liegen. Selbst das Answer() darf nicht lokal entschieden werden.
 
Mit "lokal" meinte ich auch den Rechner, der auf das Manager-Interface zugreift, nicht den Asterisk-Server.
 
Hupe schrieb:
Mit "lokal" meinte ich auch den Rechner, der auf das Manager-Interface zugreift, nicht den Asterisk-Server.

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 ;-)
 
@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
 
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?
 
britzelfix schrieb:
@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

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.
 
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 :).
 
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.