Vorweg gesagt: Erwarten Sie nicht zu viel von diesem kleinen Exkurs. StarAstAPI ist noch verbesserungsfähig. :-)
Für das Manager-Interface gibt es mittlerweile mehr oder weniger gute APIs in verschiedenen Programmiersprachen (PHP, Perl, Python, Ruby etc.), die natürlich hier nicht alle getestet werden konnten[134]. Sollte die API für Ihre Lieblingssprache nicht laufen, können Sie das Problem sicher lösen - bis hierher haben sowieso nur Leute gelesen, die schon mal programmiert haben. :-)
Wir testen hier ganz kurz die StarAstAPI[135] in PHP, die ein PHP 5 voraussetzt[136], das mit --enable-sockets
kompiliert
wurde.[137] Leider findet man in den StarAstAPI-Dateien noch die seit
Jahren veralteten „short open tags“ (<?
),
ersetzen Sie diese ggf. durch die korrekte Syntax
(<?php
). Der API liegen 4 Demo-Skripte bei:
sLogin.php
versucht nur, sich einzuloggen[138], sCommand.php
führt den CLI-Befehl
reload
aus, sDial.php
versucht eine
Verbindung mit SIP/120 und sEvents.php
empfängt
Events. Wenn wir gleichzeitig mit asterisk -vvvr die
CLI beobachten und mit php -q sLogin.php eine
Verbindung zum AMI öffnen[139], sehen wir im CLI:
mos-eisley*CLI> == Parsing '/etc/asterisk/manager.conf': Found [Jan 26 20:08:09] NOTICE[10352]: manager.c:961 authenticate: 127.0.0.1 tried to authenticate with nonexistent user 'mark' == Connect attempt from '127.0.0.1' unable to authenticate mos-eisley*CLI>
Es hat also wegen des falschen Users nicht funktioniert, trotzdem meldet das Demo-Skript:
$ php -q sLogin.php Login Sucessful
und danach das Response-Paket:
Response: Error ActionID: 1 Message: Authentication failed
StarAstAPI arbeitet also nicht ganz sauber, kann aber sicher ohne allzu großen Aufwand verbessert werden. Wenn wir php -q sEvents.php aufrufen - jetzt mit dem richtigen User - sehen wir im CLI:
mos-eisley*CLI> == Parsing '/etc/asterisk/manager.conf': Found == Manager 'admin' logged on from 127.0.0.1 mos-eisley*CLI>
Testhalber führen wir im CLI ein
reload
aus, was sich in diesen Events in der Ausgabe des
PHP-Skripts widerspiegelt:
Event: Reload Privilege: system,all Message: Reload Requested Event: ChannelReload Privilege: system,all Channel: SIP ReloadReason: RELOAD (Channel module reload) Registry_Count: 0 Peer_Count: 0 User_Count: 0
Lassen Sie sich was einfallen! Schreiben Sie ein kleines Skript, das all Ihre Freunde anruft - natürlich mitten in der Nacht!
[134] Beispiele mit Anmerkungen auf http://www.voip-info.org/wiki/view/Asterisk+manager+Examples
[136] Die API lässt sich aber relativ leicht auf PHP 4 umschreiben, obwohl der Code recht unübersichtlich und schlecht formatiert ist. Im Zweifelsfall einfach immer die Parse-Errors beheben. :-)
[137] Auf der Shell erfährt man mit php -m, welche Module einkompiliert sind.
[138] Wenn Sie nach der Anleitung oben vorgegangen sind, müssen Sie natürlich jeweils den Benutzernamen und das Passwort entsprechend anpassen.
[139] Hier absichtlich mit falschem User/Passwort.
Version 1.2, November 2002
Neue Version verfügbar
Sie betrachten gerade die alte Version des Buches (Version 1.0). Wir empfehlen Ihnen für Asterisk 1.4 und 1.6 die neue Version des Buches.
Asterisk-Tag 2008
Lernen Sie Mark Spencer (den Erfinder von Asterisk) kennen! Viele Vorträge, Case-Studies und Workshops rund um das Thema VoIP. Asterisk-Tag.org