Coverbild des Asterisk Buches von Stefan Wintermeyer

Letzte Woche => Endspurt!

Montag den 29.01.07 geht das Buch in die Produktion. Bis dahin laeuft der Beta-Test noch in vollem Umfang. Bitte melden Sie Fehler! Siehe Beta-Test FAQ.

Erscheinungstermin: 03.03.07. Das Buch wird auf dem Asterisk-Tag.org in Chemnitz vorgestellt und kann dort auch erworben werden. 10 Tage spaeter wird es im Buchhandel sein. Wer nicht in Chemnitz sein kann, sollte das Buch vorbestellen: Amazon oder direkt beim Verlag

Asterisk-Schulungen und Consulting vom Autor dieses Buches finden Sie auf http://www.amooma.de. Naechste Asterisk-Schulung: 12.02. - 13.02.07 (noch 2 Plaetze frei) - Ach ja, ... wir suchen auch noch Asterisk Entwickler! => http://www.amooma.de/jobs/


10.6. AGI()

Ruft eine AGI-konforme Anwendung auf

AGI(Programm[,Argumente])

(Analog auch EAGI(), FastAGI(), DeadAGI())

Führt ein Asterisk-Gateway-Interface-kompatibles Programm Programm auf dem aktuellen Channel aus. Solche externen Programme (die in fast jeder beliebigen Sprache vorliegen können - z.B. Perl, PHP, ...), können den Telefonkanal steuern, Audiodateien abspielen, DTMF-Ziffern auslesen und so weiter. Asterisk kommuniziert dabei mit dem AGI-Program über STDIN und STDOUT. Die spezifizierten Argumente werden an das AGI-Programm durchgereicht.

Das Programm muss im zugrundeliegenden Dateisystem als executable (ausführbar) gekennzeichnet sein. Der Pfad zum Programm ist relativ zum Asterisk-AGI-Verzeichnis, standardmäßig /var/lib/asterisk/agi-bin/.

Soll ein AGI-Programm laufen, ohne dass ein Channel offen ist (wie in einer h-Extension, aufgelegt), muss statt dieser die DeadAGI()-Anwendung verwendet werden. Falls AGI über ein Netzwerk laufen soll, benutzen Sie FastAGI().

Benötigen Sie aus Ihrem AGI-Programm heraus Zugriff auf den eingehenden Audiostream, benutzen Sie EAGI() (Extended AGI) an Stelle von AGI(). Das eingehende Audio-Signal kann dann unter File Descriptor 3[45] eingelesen werden.

Liefert -1 mit dem Auflegen oder falls ein Auflegen durch das Programm verlangt wurde oder 0, falls nicht aufgelegt werden soll.

; mein AGI-Skript aufrufen:
exten => 123,1,AGI(agi-skript)
exten => 123,n,EAGI(eagi-skript)

Anmerkung

Interner Hilfetext zu dieser Applikation in Asterisk 1.4: 

  -= Info about application 'AGI' =- 

[Synopsis]
Executes an AGI compliant application

[Description]
  [E|Dead]AGI(command|args): Executes an Asterisk Gateway Interface compliant
program on a channel. AGI allows Asterisk to launch external programs
written in any language to control a telephony channel, play audio,
read DTMF digits, etc. by communicating with the AGI protocol on stdin
and stdout.
  This channel will stop dialplan execution on hangup inside of this
application, except when using DeadAGI.  Otherwise, dialplan execution
will continue normally.
  A locally executed AGI script will receive SIGHUP on hangup from the channel
except when using DeadAGI. This can be disabled by setting the AGISIGHUP channel
variable to "no" before executing the AGI application.
  Using 'EAGI' provides enhanced AGI, with incoming audio available out of band
on file descriptor 3

  Use the CLI command 'agi show' to list available agi commands
  This application sets the following channel variable upon completion:
     AGISTATUS      The status of the attempt to the run the AGI script
                    text string, one of SUCCESS | FAILED | HANGUP

Differenz zum internen Hilfetext in Asterisk 1.2: 

13,19c13,15
<   This channel will stop dialplan execution on hangup inside of this
< application, except when using DeadAGI.  Otherwise, dialplan execution
< will continue normally.
<   A locally executed AGI script will receive SIGHUP on hangup from the channel
< except when using DeadAGI. This can be disabled by setting the AGISIGHUP channel
< variable to "no" before executing the AGI application.
<   Using 'EAGI' provides enhanced AGI, with incoming audio available out of band
---
> Returns -1 on hangup (except for DeadAGI) or if application requested
>  hangup, or 0 on non-hangup exit. 
> Using 'EAGI' provides enhanced AGI, with incoming audio available out of band
22,25c18
<   Use the CLI command 'agi show' to list available agi commands
<   This application sets the following channel variable upon completion:
<      AGISTATUS      The status of the attempt to the run the AGI script
<                     text string, one of SUCCESS | FAILED | HANGUP
---
> Use the CLI command 'show agi' to list available agi commands

Siehe auch. Abschnitt 10.21, „DeadAGI(), Abschnitt 10.32, „FastAGI()



[45] zu Erinnerung: 0: stdin, 1: stdout, 2:stderr. 3 ist ein frei definierter File descriptor