Open Source im professionellen Einsatz
Linux-Magazin 12/2008
466

Programm übersetzen, aufrufen und parametrisieren

Der Code in Listing 1 realisiert den Callflow in Abbildung 1. Damit das Programm übersichtlich bleibt, verzichtet es auf umfängliche Fehlerbehandlungen. Nachdem Sie den Quelltext mit

gcc -o readwikipedia-agi readwikipedia-agi.c

kompiliert haben, kopieren Sie das Binary »readwikipedia-agi« nach »/var/lib/asterisk/agi-bin/«. Das ist das Verzeichnis, in dem Asterisk normalerweise ein Programm erwartet, wenn der AGI-Befehl es, wie im folgenden Context zu sehen, bei einem Anruf der Extension 69 aufruft:

[default]
exten => 69,1,Answer()
exten => 69,2,AGI(readwikipedia-agi)
exten => 69,3,Hangup()

Asterisk liefert dem AGI-Programm beim Aufruf Informationen, wie Listing 3 sie beispielhaft aufführt und die das AGI-Programm als Erstes von der Standardeingabe holen sollte. Das Format ergibt sich aus »Variablenname: Wert«. Das AGI-Programm muss so lange Daten von Stdin lesen, bis es auf eine Zeile trifft, die nur das Newline-Zeichen enthält und so das Ende der Daten markiert. In Listing 1 ist die Funktion »read_initial_agi_vars()« ab Zeile 209 dafür zuständig, die AGI-Variablen einzulesen. Wollen Sie aus dem Dialplan heraus »Argument_1«, ..., »Argument_n« an das AGI-Programm übergeben, starten Sie es mit:

AGI(readwikipedia-agi|Argument_1|...|Argument_n)

In Sachen Argumente wäre das Kommandozeilen-Äquivalent dazu:

readwikipedia-agi Argument_1 ... Argument_n

Informationen über seine Verzeichniskonfiguration stellt Asterisk dem AGI-Programm über Umgebungsvariablen wie in Tabelle 2 zur Verfügung.

Tabelle 2:
Verzeichniskonfiguration

Kommunikation zwischen AGI-Programm und Asterisk

AGI-Befehle an Asterisk schicken Sie wie in Listing 1, Zeile 25, über Stdout. Jeder Befehl löst eine Antwort aus, die das AGI-Programm von Stdin einlesen sollte, wie es der Aufruf von »fgets()« in Zeile 26 tut. Wenn Sie sich den Datenaustausch zwischen Asterisk und dem AGI-Programm anschauen wollen, tippen Sie »agi debug« auf Asterisks CLI. Jeden dort durch »AGI Tx >>« gekennzeichneten Text kann und sollte das AGI-Programm von Stdin lesen. Alles, was Asterisk als AGI-Befehl auszuwerten versucht, steht hinter »AGI Rx <<« (siehe Abbildung 4).

Die Eingabe von »agi debug off« verhindert die weitere Ausgabe dieser Meldungen. Von den AGI-Variablen abgesehen schickt Asterisk von sich aus keine Daten per Stdout an das AGI-Programm. Beim Schreiben vom AGI-Programm aus nach Stdout müssen Sie dringend beachten, dass Linux bei seinen Standard-E/A-Funktionen intern puffert, damit die Zahl der physikalischen Lese- und Schreiboperationen mit »read()«- und »write()«- Systemaufrufen möglichst klein bleibt.

Linux folgt dabei der Konvention, dass es Datenströme, die sich auf ein Terminal beziehen, zeilenweise puffert, alle anderen vollständig. Bei AGI-Programmen zeigt Stdout nicht auf ein Terminal und unterliegt somit der vollständigen Pufferung des Systems, was beim AGI-Entwickeln unerwünscht ist. Die Funktion »setvbuf()« in Zeile 261 sorgt wieder fürs zeilenweise Puffern.

Für die Programmierpraxis gut zu wissen ist, dass »agi show« eine Liste aller gültigen AGI-Befehlen liefert. Ausführlichere Hilfe im HTML-Format gibt's per »agi dumphtml /tmp/agi.html«. Details zu einem einzelnen Kommando vermittelt »agi show Befehl«.

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Zeit für was Neues

    Der eine braucht sowieso gerade eine neue, den anderen nervt, dass sich der Vermieter seiner Telefonanlage jedes Komfortmerkmal extra bezahlen lässt. Zeit zu wechseln, Zeit eine VoIP-fähige Anlage selbst zu bauen, Zeit für einen Asterisk-Workshop im Linux-Magazin.

  • Erweiterte Gesprächskultur

    Im zweiten Teil des großen Telefonanlagen-Workshops erfahren Sie, wie Sie komplexe Komfortfunktionen programmieren, beispielsweise interaktive Sprachmenüs, und welche Mechanismen Asterisk im Einzelnen dafür in seinem Ärmel hat.

  • Deutsche Sprachbausteine für Asterisk-Anlagen

    Der VoIP-Spezialist Amooma bietet Sprachbausteine für die freie Asterisk-Telefonanlage (Version 1.4 und 1.6) zum kostenfreien Download und uneingeschränkter Nutzung an.

  • Ruf mich an!

    Alles, was über Telefonie hinausgeht, macht den wirklichen Mehrwert von Asterisk aus: Sprachportale beispielsweise, die Fluggäste identifizieren und informieren, bei einer frostigen Wohnung warnen oder den Admin mimen, wenn die User ihre Passwörter verschusselt haben.

  • Gemeinschaft an der Strippe

    Asterisk-Toolkits wie das auf deutsche Verhältnisse angepasste Projekt mit dem schönen Namen Gemeinschaft helfen den Admins und Systemintegratoren, eine Telefonanlage ab mittlerer Größe mit überschaubarem Aufwand zu migrieren und zu betreiben.

comments powered by Disqus

Ausgabe 10/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.