Aufruf eines AGI-Skripts im Dialplan
Ein AGI-Skript wird im Dialplan über die Applikation AGI()
aufgerufen. Das sieht so aus:
exten => 1234,1,Answer()
same => n,AGI(mein-skript.py)
same => n,Hangup()
Asterisk sucht das Skript im Default-Verzeichnis
/var/lib/asterisk/agi-bin/. Wenn Sie einen absoluten Pfad angeben,
wird der benutzt:
exten => 1234,1,AGI(/opt/tools/mein-skript.py,${CALLERID(num)},${EXTEN})
Alle zusätzlichen Kommagetrennten Parameter erreichen das Skript
über argv (im Beispiel: Caller-ID und Extension).
Varianten
Neben dem klassischen AGI() gibt es drei Varianten:
EAGI()-
Wie
AGI(), stellt dem Skript aber zusätzlich den Audio-Stream des Channels auf Dateideskriptor 3 zur Verfügung — nützlich, wenn das Skript z. B. Spracherkennung selbst machen will. DeadAGI()-
Für Skripte, die auf einem bereits aufgelegten Channel laufen — etwa aus der
h-Extension heraus. Ab Asterisk 12 istDeadAGIein Alias vonAGI, das mit toten Channels umgehen kann. FastAGI-
Statt ein Skript lokal pro Anruf zu starten, öffnet Asterisk eine TCP-Verbindung zu einem AGI-Server:
exten => 1234,1,AGI(agi://127.0.0.1:4573/mein-handler)Der Server läuft als dauerhafter Prozess und bekommt bei jedem Anruf eine neue Verbindung — kein Fork pro Anruf, deutlich geringere Latenz, bessere Skalierung. Für produktive AGI-Anwendungen fast immer die bessere Wahl.
|
Wenn Sie eine komplexere Event-getriebene Anwendung bauen (eine IVR, die aus dem CRM gespeist wird; eine Call-Center-Logik; ein Click-to-Call-Portal), lohnt sich der Sprung zu ARI. AGI ist ideal für „schnell mal eine Datenbank befragen, ein Ergebnis zurückgeben" — für alles, was länger am Channel hängt und mehrere parallele Gespräche koordinieren muss, ist ARI der modernere Weg. |