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

Unerwarteter Befehlsablauf

Nach dem Überblick geht es weiter mit dem Befehl »STREAM FILE«, um darzustellen, welche Fallen auf AGI-Entwickler lauern. Der Hilfetext

Usage: STREAM FILE <filename> <escape digits> [sample offset]
Send the given file, allowing playback to be interrupted by the given digits, if any.
...

den »agi show stream file« liefert, lässt die irrige Vermutung zu, dass das Pseudoprogramm in Listing 4 dem Anrufer die Datei »letters/a.gsm« vorspielt. Das Problem liegt jedoch darin, dass Asterisk nicht genug Zeit bleibt, um die Audiodatei wiederzugeben, während das AGI-Skript läuft. Das AGI-Programm arbeitet nämlich nur den Bruchteil einer Sekunde lang, sofort anschließend macht Asterisk mit der nächsten anstehenden Priority im Dialplan weiter.

Würden Sie hinter »flush(stdout)« mit »sleep(1)« das Skript eine Sekunde lang warten lassen, spielt Asterisk die Audiodatei ab. Sleep-Aufrufe sind natürlich keine Option für Produktivsysteme. Richtig ist es, Antworten auf AGI-Befehle auch dann von Stdin zu lesen, wenn niemand sie auswertet. In Listing 4 müssten Sie hinter »flush(stdout)« in Zeile 3 einen Befehl einfügen, der eine von »STREAM FILE« gelieferte Ausgabezeile einliest.

In diesem Fall funktioniert selbst das nicht, was daran liegt, dass der eingefügte Befehl lediglich die erste Zeile der AGI-Variablen liest, die der Puffer gerade parat hält, im Beispiel oben die Zeile:

agi_request: readwikipedia-agi

Nachdem Asterisk die Zeile gelesen hat, wirft das AGI-Programm sofort das Handtuch und gibt nichts mehr aus. Das Problem: Sie haben nicht als Erstes nach Programmstart alle AGI-Variablen eingelesen. Nur dann nämlich wartet ein »fgets()«-Befehl nach dem »flush(stdout)« tatsächlich auf die Antwort von »STREAM FILE«. Das sorgt auch dafür, dass der »STREAM FILE«-Befehl genau so viel Zeit bekommt, wie er für die Ausführung braucht.

Listing 4: Fehlerhafter
AGI-Pseudocode

01 program stream_file
02 schreibe 'STREAM FILE letters/a ""n' nach stdout
03 flush(stdout)
04 end program stream_file

Antworten unter der Lupe

Asterisk kennt für AGI-Programme drei verschiedene Rückgabecodes. Mit »510« teilt es mit, dass es einen ungültigen AGI-Befehl erhalten hat:

AGI Rx << GET ATA demo-congrats 5000 10
AGI Tx >> 510 Invalid or unknown command

Wenn Sie für einen Befehl eine falsche Syntax verwendet haben, kommt »520« zurück, wie in Listing 5 zu sehen ist. Hier vermisst der »GET DATA«-Befehl die Angabe der Datei, die er wiedergeben soll. Das ist übrigens der einzige Fall, bei dem Asterisk eine mehrzeilige Antwort zurückliefert. Die Hilfe zu dem AGI-Befehl säumen zwei Zeilen, die mit »520« beginnen. Ein Rückgabecode von 200 schließlich signalisiert, dass Sie einen AGI-Befehl korrekt verwendet haben:

AGI Rx << GET DATA demo-congrats
AGI Tx >> 200 result=-1

Antworten dieser Art umfassen immer genau eine Zeile. Diese Zeile enthält immer die Zeichenkette »result=Integer [Weitere_Informationen]«. Je nach Befehl differiert die Bedeutung der Integerzahl. Darüber und über weitere Informationen, die manche AGI-Befehle liefern, weiß das Wiki [6] zu berichten.

Abbildung 3: Dreh- und Angelpunkt jedes Voiceportals sind Sprachausgaben. Entsprechende Dateien müssen Sie vor Inbetriebnahme aufzeichen – hier geschehen für das Wort „Linux-Magazin“.

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.