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 t ried 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.