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 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!



[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

Das gedruckte Buch