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

Im Zweifel die Quellen

Beschleicht Sie der Verdacht, dass die Dokumentation bei [6] veraltet ist, oder brauchen Sie den Datentyp eines Rückgabewerts, hilft das Studium des Asterisk-Quelltextes. Die Quelltextdatei für den Befehl »AGI« trägt den Namen »Asterisk-Quellverzeichnis/res/res_agi.c«. Unter [7] gibt es zudem eine mit Doxygen erstellte Dokumentation der Asterisk-Quellen. Daten, die Asterisk an das AGI-Programm schickt, beginnen im Quelltext mit »fdprintf(fd,« oder »fdprintf(agi->fd,«.

Für jeden AGI-Befehl gibt es in der Datei eine eigene Funktion, für »STREAM FILE« beispielsweise ist die Funktion »handle_streamfile()« zuständig. Die beiden Zeilen

fdprintf(agi->fd, "200 result=%d endpos=%ldn", 0, sample_offset);
fdprintf(agi->fd, "200 result=%d endpos=%ldn", res, sample_offset);

machen klar, dass Asterisk eine Antwort in der Art »200 result=%d endpos=%ldn« zurückliefern wird, wobei »%d« ein Integer ist und »%ld« ein Long Integer.

Dead-AGI beim Hangup

Eine weitere Möglichkeit, AGI-Programme zu starten, bietet der Dialplan-Befehl »DeadAGI«. Er dient dazu, Programme in einer Hangup-Extension aufzurufen. Der folgende Context stellt das dar:

[default]
exten => 69,1,Answer()
exten => 69,2,AGI(agi.php)
exten => 69,3,Hangup()
exten => h,1,DeadAGI(deadagi.php)

Wenn ein Benutzer auflegt, während »agi.php« läuft, springt Asterisk sofort in die Extension »h«, ohne die Priority 3 in der Extension »69« auszuführen. In »h« startet »DeadAGI« dann das Programm »deadagi.php«.

Dead-AGI-Programme werden gern benutzt, um Aufräumarbeiten zu erledigen. So könnte zum Beispiel das Programm »agi.php« mehrere temporäre Dateien gespeichert haben, deren Namen alle mit dem Namen des Channel beginnen. Da der Channel-Name auch in »deadagi.php« zur Verfügung steht, können Sie darin alle temporären Dateien löschen, die mit dem Channel-Namen beginnen.

Die Abfrage des Channel-Status mit dem AGI-Befehl »CHANNEL STATUS« in »deadagi.php« liefert möglicherweise überraschend die Antwort »Line is up« - und das selbst bei folgendem Context:

[default]
exten => 69,1,Answer()
exten => 69,2,Hangup()
exten => h,1,DeadAGI(deadagi.php)

Dies ist wichtig für Abrechnungsfragen. Wenn in dem eben gezeigten Context das Dead-AGI-Programm nichts anderes macht, als 10 Sekunden zu warten, dann zeigt Asterisk in den Call Detail Records eine Abrechnungszeit von mindestens 10 Sekunden an. Die wohl eher gewünschte Abrechnungszeit von 0 Sekunden liefert dagegen der Context:

[default]
exten => 69,1,Answer()
exten => 69,2,Hangup()
exten => h,1,ResetCDR(w)
exten => h,2,DeadAGI(deadagi.php)

Der Befehl »ResetCDR(w)« speichert den momentanen Zustand des Call Detail Record. Nach dem Aufruf des Dead-AGI-Programms in der Hangup-Extension können natürlich weitere Priorities folgen, die Asterisk nach Beendigung des Dead-AGI-Programms ausführen soll.

Abbildung 4: In der zweiten Zeile teilt Asterisk mit, dass es das Programm »tue-nichts« aufruft. Es besteht lediglich aus der Zeile »int main() {return 0;}«. Das AGI-Debugging ist bei diesem Aufruf aktiviert.

Listing 5: Asterisk hilft beim
Syntaxcheck

01 AGI Rx << GET DATA
02 AGI Tx >> 520-Invalid command syntax. Proper usage follows:
03 AGI Tx >>  Usage: GET DATA <file to be streamed> [timeout] [max digits]
04 Stream the given file, and recieve DTMF data. Returns the digits received from the channel at the other end.
05 AGI Tx >> 520 End of proper usage.

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.