Wie Variable per AGI-Script auslesen ?

snakeseven

Neuer User
Mitglied seit
17 Mrz 2006
Beiträge
120
Punkte für Reaktionen
0
Punkte
0
Hi,
ich setze im Callfile eine Variable PLAY:
SetVar: PLAY=/var/www/vhosts/domain.de/Audio/MP3_out/soundfile.mp3
Das Callfile ruft den Context [playgmx] auf, wo PLAY auch korrekt verarbeitet wird.
Im Context [playgmx] rufe ich in der 1.Zeile folgendes AGI-Script auf,
welches ${PLAY}auslesen und als Text abspeichern soll:

#!/usr/bin/env python
import sys

sys.stdout.write("GET FULL VARIABLE ${PLAY}")
sys.stdout.flush()
p = sys.stdin.readline().strip()
d = open("/var/www/vhosts/domain.de/Audio/agi.txt","a")
d.write(p)
d.close()

Aber alles was mir das AGI ins File schreibt ist:
agi_request: /var/www/vhosts/domain.de/Audio/save.agi
statt ${PLAY}:
/var/www/vhosts/domain.de/Audio/MP3_out/soundfile.mp3

Der AGI Debug zeigt, daß der Inhalt von PLAY korrekt ausgelesen wurde:
AGI Rx << GET FULL VARIABLE ${PLAY}
AGI Tx >> 200 result=1 (/var/www/vhosts/domain.de/Audio/MP3_out/soundfile.mp3)

Jetzt frage ich, wie ich per AGI an ${PLAY} rankomme ? Brauche das zur Protokollierung des Calls.

Gruss, Seven
 
Kennen wir uns nicht von irgendwo ;-)... ???

Asterisk übergibt beim AGI Aufruf zuerst bestimmte AGI Variablen.
Diese Variablen sind vom Typ agi_ + KEYNAME: VALUE.

Durch Deinen Python Aufruf "sys.stdin.readline()" liest Du z.B. die erste
Zeile von STDIN ein:
agi_request: /var/www/vhosts/domain.de/Audio/save.agi

Dies entspricht der AGI Variablen request(Key) mit dem Wert /var/www/vhosts/domain.de/Audio/save.agi

Du musst also zuerst die AGI Environment Variablen in ein DICT einlesen.
Anschliessend solltest Du dann auch noch Dein GET FULL VARIABLE Ergebnis
erhalten und parsen können.

Tabellar
 
tabellar schrieb:
Kennen wir uns nicht von irgendwo ;-)... ???

Ja, die Python Community treibt sich einfach überarall rum:D
Nach meinem Umstieg von Windoof auf Linux, bin ich deinem Tipp gefolgt und habe Asterisk erforscht. Keine einfache Materie, wie dieses Forum zeigt, aber sehr mächtig !! Werde mich jetzt mal mit deiner Antwort beschäftigen + bin schon jetzt sicher, dass es funktionieren wird !

Gruss, Seven
 
So, jetzt hab ich wenigstens eine zwar unelegante, aber funktionierende Lösung. Ich setze die Caller-ID auf den Wert von PLAY. Alles andere funktionierte nicht, weil sich über die obligatorischen AGI-Variablen hinaus keine vom Asterisk gesendeten Variablen einlesen ließen.

extensions.conf:
exten => s,1,SetCallerID(${PLAY})
exten => s,n,AGI(/var/www/vhosts/domain.de/Audio/save.agi)
(...)

AGI-Script:
#!/usr/bin/env python
import sys

for i in range(1,acht): #"acht" durch 8 ersetzen (wegen Smiley)
line = sys.stdin.readline()

d = open("/var/www/vhosts/domain.de/Audio/agi.txt","a")
d.write(line)
d.close()

Eintrag #8 im AGI-Debug:
AGI Tx >> gi_calleridname: /var/www/vhosts/domain.de/Audio/MP3_out/Soundfile.mp3

Nur falls jemand mal vor einem ähnlichen Problem steht.
Gruss, Seven
 
Zuletzt bearbeitet:
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.