SMS per Webserver versenden
Kurznachrichten aus dem Web

DeveloperIT-ProjekteSoftware

SMS ist die Killer-Applikation des Mobilfunks. Mit dem passenden Gateway lässt sich die schnelle mobile Kurznachricht flexibel in Webserver einbinden.

Vielseitige Nachrichten

SMS per Webserver versenden

Simsen, bis der Arzt kommt – wer öfter U-Bahn fährt, hat bisweilen den Eindruck, dass viele Jugendliche nichts anderes mehr machen. Da liegt es nahe, dieses Medium mit dem Web zu verknüpfen. Viele Anbieter tun das bereits. Viele Webmaster bieten zur Kundenbindung die Möglichkeit an, SMS von ihren Seiten aus zu verschicken. Per SMS und Web wird gechattet, abgestimmt und gespielt. Aber auch seriösere Anwendungen finden sich zuhauf. So verschickt zum Beispiel die Postbank Einmal-Passwörter per SMS. Admins im Notfall per SMS zu alarmieren gehört in großen Rechenzentren schon lange zum Alltag.

SMS kann sogar tiefe Medienbrüche überbrücken. Wer schon einmal versucht hat, auf Plakaten für eine Website zu werben, kennt das Problem. Interessenten, die das Plakat unterwegs sehen, haben die Web-Adresse vergessen, bevor sie das nächste Mal an einem Internet-PC sitzen. SMS stellt die fehlende Direktverbindung zwischen Plakat und Website her. Auf das Plakat wird eine Mobilfunknummer gedruckt, an die der potenzielle Kunde seine E-Mail-Adresse per SMS schicken kann. Geht er dann das nächste Mal online, findet er weitere Infos und einen Link in seinem E-Mail-Postfach. Die Stadtmobil Carsharing Frankfurt GmbH kontaktierte Neukunden erfolgreich auf diese Weise.

Genau wie bei E-Mail, Web oder FTP braucht man auch bei SMS zunächst einen Account bei einem passenden Anbieter. SMS-Dienste in allen Größen sind im Internet leicht zu finden. Von kleinen Anbietern wie Grouptime reicht die Spannweite bis zu großen Dienstleistern wie Itenos, über deren Server sich Millionen von SMS verschicken lassen. Itenos sprengt mit seinem Service aber auch schon den Rahmen: Er lässt sich nur mit dediziertem Server und eigener IP-Adresse nutzen. Inhaber von Shared-Hosting-Accounts bleiben leider außen vor.


SMS-Anbieter

SMS per Webserver versenden

Für diesen Workshop haben die Autoren sechs Anbieter recherchiert, deren Gateways mit Shared Hosting funktionieren: Mobilant, INA Germany, Top Concepts, Almado, Comunified und Grouptime. Alle Gateways hat die Redaktion ausprobiert und für gut befunden.

Bei allen sechs Anbietern können Sie SMS über ein PHP-Skript versenden. Bis auf Almado bieten alle auch den Empfang von SMS-Nachrichten per Webserver an. Bis auf Grouptime lassen sich alle Gateways auch ohne PHP ansprechen, denn alle Daten für den SMS-Versand werden über den URL eines GET-Requests auf den HTTP-Server übertragen. Wem PHP nicht liegt, der kann diese Gateways also auch mit Perl oder einer beliebigen anderen Skriptsprache nutzen. Im Prinzip reicht sogar ein einfaches HTML-Formular zum Simsen. Davon ist aber aus Sicherheitsgründen abzuraten, denn im GET-Request, mit dem die SMS verschickt wird, sind stets auch Benutzername und Passwort enthalten. Diese müssten im HTML-Formular im Klartext hinterlegt werden. Dem Missbrauch wäre damit Tür und Tor geöffnet.

Das ist auch der Grund, weshalb Andre Helms keinen direkten HTTP-Zugriff auf seinen Grouptime-Server anbietet. Er hat sein Gateway in PHP und Perl programmiert. »Bei uns werden die Passwörter mit MD5 verschlüsselt«, erklärt der Anbieter aus Poing bei München. Damit sind Angriffe zwar nicht völlig ausgeschlossen, aber wenn die MD5-Prüfsumme nicht stimmt, löst das System Alarm aus. Ein Grouptime-Admin kann dann einschreiten.

Die anderen Anbieter sollten hier nachziehen, denn bisher überlassen sie die Sicherheit größtenteils ihren Kunden.


SMS senden

SMS per Webserver versenden

Eine SMS lässt sich so zum Beispiel über einen einfachen HTTP-Request per URL versenden:

http://http.ina-germany.de:7200/bin/send?
USERNAME=xxxxxx
&PASSWORD=xxxxxx
&MESSAGE=Test+INA
&DESTADDR=01712345678

Wenn Sie diese Angaben hintereinanderweg ohne Leerzeichen in die Adresszeile eines Browsers schreiben, lösen Sie damit eine SMS aus. Das klappt allerdings nur, wenn Sie zuvor einen Account bei einem SMS-Provider angemeldet haben und Benutzername und Passwort erhalten haben. In einem HTML-Formular kann der SMS-Aufruf so aussehen:

action="http://www.comunified.com/
gateway/sendsms.php" method="post">


Handynummer:&nbsp ;

Nachricht:&nbsp ;


Der Action-Parameter enthält die Adresse des SMS-Gateways. Zum Versand sind vier Parameter nötig: Zielrufnummer, Text, Benutzername und Passwort. Rufnummer und SMS-Text werden per Eingabefeld vom Benutzer abgefragt, die Zugangsdaten für das Gateway sind als Hidden-Variable hinterlegt. Damit ist auch sofort klar, warum es so nicht geht: Jeder, der in der Lage ist, sich einen HTML-Quelltext anzeigen zulassen, kann so Ihre Zugangsdaten ausspähen und auf Ihre Kosten simsen. Es empfiehlt sich daher, im Formular nur die Zielrufnummer und die Nachricht abzufragen und Benutzernamen und Passwort für das Gateway in einem PHP-Skript zu hinterlegen. Dieses wird im Formular als Action-Parameter angegeben:


Sicherheit

SMS per Webserver versenden

Wer ganz auf Nummer sicher gehen will, kann das Skript aufteilen und den Teil, der Benutzername und Passwort enthält, in einem eigenen Ordner speichern. Der wird dann mittels .htaccess nur für Zugriffe von localhost freigegeben. So kann der Server den fehlenden Teil des Skripts nachladen, aber alle andere Zugriffe werden abgeblockt. Bei Grouptime ist diese Konfiguration voreingestellt. Die passende .htaccess-Datei sieht so aus:

Order deny,allow
Deny from all
Allow from localhost

Grouptime liefert ein eigenes PHP-Skript für den Versand mit. Der Webmaster braucht darin nur seine Zugangsdaten einzutragen. Um eine SMS zu versenden, wird das Skript per Include-Befehl eingebunden:

include(“sendclass.php”);

Dann reicht ein einziger Funktionsaufruf, um die SMS zu verschicken. Zuvor sollte der Text aber noch URL-encodiert werden. Das ist übrigens auch bei den anderen Anbietern Pflicht:

$text = urlencode($text);
$smsfax->senden (“$adressenliste”,”$text”);


Rufnummernformat

SMS per Webserver versenden

Die Zielrufnummer kann meist wie gewohnt mit Vorwahl eingegeben werden. Lediglich Comunified verlangt, dass die Landesvorwahl vorangestellt wird, also zum Beispiel für Deutschland: 49179123456. Bei Absolut SMS müssen zusätzlich Doppelpunkte eingefügt werden: 49:179:123456. Wenn Sie ein Benutzerformular programmieren, können Sie natürlich einen Hinweis auf diese spezielle Syntax anzeigen. Sinnvoller ist es aber, diese Eigenheiten in der PHP-Programmierung abzufangen.

Bei den anderen Anbietern außer Grouptime wird in PHP ein GET-Request auf einen HTTP-Server generiert. Um den Code lesbar zu halten, werden zunächst Variablen definiert:

$url = “http://www.comunified.com/ gateway/sendsms.php”;
$user = “xxxxxxx”;
$pass = “xxxxxxx”;

Dann sieht der HTTP-Request so aus:

$ergebnisseite = fopen($url.
‘?user=’.$user.
‘&password=’.$pass.
‘&message=’.$message.
‘&recipient=’.$recipient, ‘r’)
or die($php_errormsg);

In der Variablen $ergebnisseite landet das Handle für die Antwortseite des Servers. Die besteht normalerweise aus einer schlichten OK-Meldung, eventuell noch mit einer Message-ID. Bis auf Grouptime geben alle SMS-Gateways einfache Systemmeldungen aus, die Sie in Ihren Skripts weiterverarbeiten können. Um die Servermeldungen verarbeiten zu können, lesen Sie die Seite aus und schließen dann die Verbindung. Die Antwortseiten umfassen meist nur eine bis drei Zeilen.


Rückmeldung vom Server

SMS per Webserver versenden

So lesen Sie zum Beispiel die Rückmeldung des INA-Gateways aus:

$id = fread($ergebnisseite,1011111); $fehlernummer = fread($ergebnisseite,1011111); $fehlerbeschreibung = fread($ergebnisseite,1011111); fclose($ergebnisseite);

Wenn alles gut gegangen ist, ist die Fehlernummer gleich null und die Beschreibung lautet OK. Was Sie mit den Servermeldungen machen, bleibt Ihnen überlassen. Sie können umfangreiche Protokolle in Textdateien oder Datenbanken schreiben, um den Erfolg des SMS-Dienstes detailliert auswerten zu können. Sinnvoll ist es, eventuelle Fehlermeldungen aufbereitet an den Benutzer weiterzuleiten. So sehen die Antworten der Gateways im Einzelnen aus:

Absolut SMS:
msgid: 9004b821d83860e09e2292fe973fe 266x315x169

Comunified:
+OK 48b8d3f1e0dd4d59d17b3338487acb96

Grouptime:
Keine Rückmeldung

INA:
21594479 0 OK

Mobilant:
100Die SMS wurde an 0179123456 gesendet. Vielen Dank für das Testen unseres Services

Top Concepts:
OK: Nachricht übermittelt – Sie haben noch 41 Nachrichten frei – Nummer: 0179123456


Fehlversuch

SMS per Webserver versenden

Schlägt der Versand fehl, geben die Gateways bis auf Grouptime eine Fehlermeldung aus. Um Fehlermeldungen zum Vorschein zu bringen, lassen die Redakteure im Test die Zielrufnummer weg. Bis auf Absolut SMS und Grouptime ergibt das aussagekräftige Meldungen, die sich gut weiterverarbeiten lassen.

So sehen die Antworten der SMS-Server im Einzelnen aus:

Absolut SMS:
Error

Comunified:
-ERROR 505 MISSING RECIPIENT

Grouptime:
E-Mail “Adresse fehlerhaft”

INA:
-1 2 Recipient (DESTADDR) is missing

Mobilant:
200Die angegebene Handynummer ist nicht im korrekten Format. Bitte gehen Sie zurück und verändern Sie die Eingabe.

Top Concepts:
ERROR: Keine Empfänger-Nummer gewählt.

Bei Grouptime werden Versandfehler anders gehandhabt. Sie können nämlich im Grouptime-Skript eine Variable $LOG_MAIL mit einer E-Mail-Adresse belegen, an die dann Fehlermeldungen gesandt werden.


Tracking

SMS per Webserver versenden

Wer SMS-Rundschreiben zur Kundenbindung nutzt, will wissen, ob seine Nachrichten ankommen. Auch wenn es gilt, im Notfall Admins oder Feuerwehrleute zu alarmieren, ist es hilfreich zu wissen, ob die SMS erfolgreich versandt wurde. Bei Absolut SMS können Sie den Status versandter Nachrichten so abfragen:


http://service.absolutsms.de/sms/q.php?user&=&pass= &msgid=ourID

Comunified und Mobilant übermitteln den Status der SMS auf Wunsch an ein Skript auf Ihrem Server. Das kann zum Beispiel so aussehen:

http://www.it-journalist.de/receiveDLR.php?id=%i&status=%s&time=%t

Dabei wird die ID der Nachricht, ihr Zeitstempel im Unix-Format und ihr Status übermittelt. Der Status kann mehrere Werte annehmen: Delivered, Buffered, Transmitted und Accepted bedeuten, dass die SMS in verschiedenen Stadien auf dem Weg zum Empfänger ist. Ist der Versand fehlgeschlagen, nimmt die Nachricht den Status Notdelivered an.

Wer SMS zur Benutzerauthentifizierung einsetzen will, kann zum Beispiel bei der Registrierung einen zufälligen Schlüssel erzeugen. Er wird per SMS an die Handynummer des Benutzers geschickt und von diesem zur Bestätigung eingegeben. Diese Anwendung kommt genau wie Server-Überwachungsskripts allein mit dem Versand von SMS-Nachrichten aus. Noch mehr Möglichkeiten eröffnen sich, wenn man SMS per Web nicht nur verschicken, sondern auch empfangen kann.


Empfang

SMS per Webserver versenden

Beim SMS-Empfang wird der Spieß umgedreht. Nun spricht das SMS-Gateway ein Skript auf Ihrem Server an. Damit das funktioniert, müssen Sie dem Anbieter die Adresse dieses Skripts mitteilen. Der leitet dann eingehende SMS an Ihr Skript weiter. Bei Comunified zum Beispiel sieht das so aus:

http://it-journalist.de/smsin.php
?message_id=14q23514351234jh
&sender=0179123456
&message=Hier+kommt+eine+SMS

Die SMS steht dann im Skript in den Variablen $message_id, $sender und $message zur Verfügung. Diese können an vorhandene Skripts weitergeleitet werden, um zum Beispiel SMS-Nachrichten in ein Gästebuch einzufügen. Ist die Anwendung nur für registrierte Benutzer freigegeben, so können darüber hinaus mit Hilfe der Mobiltelefonnummer die Benutzerdaten aus der Datenbank ausgelesen werden. Auf diese Weise lässt sich zum Beispiel der Name des Absenders ins Gästebuch eintragen.

Um damit sinnvoll arbeiten zu können, sollten eingehende SMS in den meisten Fällen in einer Datenbank abgelegt werden. Neben der Option, das SMS-Gateway in eigene Skripts einzubinden, bieten alle SMS-Provider aus diesem Workshop auch die Möglichkeit, vorgefertigte SMS-Dienste zu nutzen. So können Sie bei Absolut SMS Outlook-Kontakte importieren. Grouptime bietet ein gemeinsames Portal für den Versand von SMS, E-Mail und Fax.


Fazit

SMS per Webserver versenden

SMS-Dienste in Webseiten einzubinden ist nicht schwer. Die schnellen mobilen Kurznachrichten eröffnen Webmastern eine Vielzahl neuer Möglichkeiten von der schlichten Web-SMS bis hin zu Anwendungen wie Server-Überwachung, Einmal-Passwörtern oder Spielen per SMS.