StarAstAPI für PHP

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!



[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.