AGI Script parallel zum DIAL kommando ausführen

snafu0815

Neuer User
Mitglied seit
11 Jul 2007
Beiträge
8
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

ich habe folgendes Problem:

Ich moechte ein AGI Script während eines Gesprächs laufen lassen um z.B. jede Minute Geld von einem Konto abzubuchen (via SQL).

Ich habe schon verschiedene ansaetze durch, leider ohne Erfolg.

Führe ich das "EXEC DIAL SIP/XXXXX" innerhalb des AGI aus bleibt die ausführung des Scripts an dieser Stelle stehen.

Eine andere Idee war es das DIAL Command gleichzeitig mit einem AGI Script direkt im Wählplan auszuführen, an dieser Stelle ist mir leider nicht bekannt OB und/oder WIE es moeglich ist mehrere Commands im Waehlplan gleichzeitig auszuführen.

Ist es ueberhaupt moeglich ein Script während eines Gespräches laufen zu lassen? Und innerhalb des Scripts den Status des Calls zu ueberwachen?

Im Einsatz ist ein Debian Etch System mit Asterisk v1.2.20 und AGI wird ueber PHP gesteuert.

Besten Dank

Gruß snafu0815
 
Ist nur wirklich notwendig wenn Du mehrere Gespräche gleichzeitig pro Guthaben verwalten musst.

ein möglicher Lösungsweg:

Schau Dir mal DIAL mit dem Befehl M an, ein Macro wird aufgerufen und Du kannst Datenbankeinträge vornehmen.

Per Daemon überwachst Du diese Channels und führst tmp. Abbuchungen durch oder beendest den Channel bei Überschreitung.

Ist alles nicht ganz trivial das stabil zum laufen zu bekommen.
 
Versuche es mit einem LOCAL-channel den du gleichzeitig anwählst.
In diesem lässt du das agi ausführen und das phone klingelt weiter
 
Hi zusammen,

Danke fuer die schnelle Raktion.

Die Idee von Thomas007 fand ich sehr gut und habe ich auch gleich aufgegriffen.
Hierzu habe ich erstmal ein Macro angelegt, das im Prinzip nicht andres tut als ein AGI Script anzustoßen.

(Wie meintest du die Sache mit dem Daemon? - Wenn ich ueber das Macro ein AGI Script laufen lasse laeuft das ja auch im context aktuell geoeffneten channels und kann via SQL die Abrechnung vornehmen)

Allerdings habe ich das komische Phaenomen, das ich nur EIN Kommando an die CLI schicken kann, sobal ein weiteres Kommando ueber STDOUT an das CLI geschickt wird, wird das ignoriert. Da im Script nichts weiter folgt, is das Script damit auch in dem CLI beendet.

Hatte das schonmal jemand?

Gruß snafu0815
 
Gleichzeitig kannst Du Befehle mit Dial(Local/1234@context1&Local/1234@context2); ausführen. Für Dein Vorhaben benötigt Du aber eher ein AGI, welches den kompletten Anruf steuert. Für die parallele Ausführung wäre in diesem Fall die Java implementierung von FastAGI geeignet. Die könnte nämlich in einem Nebenprozess die Datenbank aktualisieren und ggf. auf das Gespräch einwirken.

PHP kann soweit ich weiß keine Threads.

---EDIT Clemens: Beitrag von einem Doppel hier zusammengefügt
 
Wenn Du viele Gespräche hast rufst Du viele AGI-Scripte auf. Das tut der Performance nicht gut und kann Probleme geben.

Ein Daemon der einmal in der Minute die Channels durchgeht und rechnet und dann nur die überfälligen Gespräche beendet ist wesentlich stabiler.

Ansonsten hast Du wahrscheinlich nach dem put stdin nicht wieder ausgelesen.

Was Du mit bei AGI Scripten mit CLI machst verstehe ich nicht. AGI hat eigene Befehle.
 
Hi,

hm, nach dem schreiben in STDIN fuehre ich immer ein read auf dem STDOUT aus, das erste Script laeuft auch einwandfrei druch, welches Ueberprueft ob der Benutzer registriert ist, und ueberhaupt noch guthaben hat.

Danach fuehre ich DIAL im Waehlplan aus und stosse das Macro mit dem zweiten AGI script an.

Beim zweiten Aufruf des zweiten AGI Scripts ueber das Macro hab ich allerdings keine Moeglichkeit mehr ein weiteren Command an das CLI zu senden.

@Thomas

Das "EXEC DIAL" war nur mal ein Testkommando um einen einen Call aus dem AGI heraus zu starten, mittlerweile hab ich auch nur noch AGI Commands im Einsatz ;-)
(Nichtsdestotrotz - tolles Wort *G* - gibt es ja auch keinen DIAL Command innerhalb des AGI)

Ueber welches Interface soll der Daemon denn mit dem Asterisk Kommunizieren? Oder meinst du mit Daemon ein AGI Script das solange laeuft wie der Call steht?

Ein Daemon der "nur" jede minute nachschaut welche Calls geoeffnet sind und demnach dann abrechnet ist aber leider nicht praktikabel, da auch Gespraeche abgerechnet werden muessen die kuerzer als eine minute dauern, an dieser Stelle wuerde der Daemon von DIESEM Call ueberhaupt nichts mitbekommen, wenn er zu "falschen" Zeit nachschaut.
Jede Sekunden den Daemon nachgucken zu lassen halte ich fuer keine gute Idee...

Deshalb brauch ich eine Loesung die sich immer auf den abgesetzten Call bezieht.

Um die Performance der Asterisk Kiste nicht allzu sehr zu beeintraechtigen kann man das Script ja auf einem separaten remote rechner ausführen - später mal.
 
Die Abrechnung machst Du schon komplett in Asterisk.
Mit dem Macro machst Du einen Eintrag Gespräch offen und Startzeit in einer Datenbank. Wenn das Gespräch beendet wird kommt der Eintrag wieder weg und Asterisk nimmt die reguläre Abrechnung vor.

Den Daemon brauchst Du dann nur um Gespräche zu beenden wenn das Guthaben erschöpft ist. Der Daemon kann leichter und schneller das aktuell verbrauchte Guthaben aus mehreren Gesprächen berechnen und mit dem verbleibenden Guthaben abgleichen. Geht das gegen Null werden die Gespräche beendet. Finale Abrechnung dann wieder im Asterisk Dialplan.
Zugriff auf Asterisk mit der manager API.

Die Abrechnung ist in jedem Fall sekundengenau. Die Ungenauigkeit bei der Beendigung falls Guthaben gegen Null kann man durch ein paar Maßnahmen optimieren.
 
Halli Hallo :)

nach ein paar Ueberlegungen hat mir die Variante mit dem Daemon am ehesten zugesagt...

allerdings hab ich noch ein weiteres Problem, der Daemon soll nur den Channel des angerufenen Benutzers trennen und den Channel des Anrufers offen halten.

ueber 'soft hangup' auf der Console hab ich zwar die moeglichkeit einen Channel zu beenden, allerdings wird grundsaetzlich der bridged channel auch geschlossen.
Gibt es da Moeglichkeiten den Channel des Anrufers offen zu halten?

Ausserdem wuerde ich gerne ueber den Daemon Soundfiles auf einem bestimmten Channel ausgeben, auch hier denke ich hab ich keine Moeglichkeit, oder?

Dank euch.
Gruß snafu
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
244,808
Beiträge
2,218,757
Mitglieder
371,494
Neuestes Mitglied
msh7
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.