SMS-Versand#
Manchmal möchte man aus einem Programm oder einem Skript heraus eine SMS versenden. Insbesondere zum Monitoring ist das sehr wichtig. Prinzipiell gibt es verschiedene Methoden:
- Man kann ein angeschlossenes Handy (MitDemHandyInsInternet) als Modem benutzen und über spezielle Befehle (SMSFormat) SMS absetzen.
- Man kann (wenn ich mich recht erinnere) über eine direkte API und einen UMTS-Stick SMS versenden (muss man aber nochmal genauer recherchieren)
- Man kann einen Webservice nutzen, der die SMS verschickt.
per Webservice#
Ich habe mich beim Webdienst Any-SMS
angemeldet. Dort muss man einen kleinen Betrag vorauszahlen (mindestens 10 Euro) und kann dann ab ca. 3 ct (je nach Service-Qualität) SMS über eine Webschnittstelle versenden. Neben der Webschnittstelle, die schön z.B. für den Massenversand von Informationen oder Werbung ist, gibt es auch eine WEB-API. Diese ist gut dokumentiert und eigentlich recht einfach aufgebaut. Man kann einfache SMSe per wget versenden. Das folgende Groovy-Skript zeigt, wie man es in einer Skript-Sprache machen kann (eine Umsetzung in Java sollte auch kein Problem sein.
Nachteil dieser Methode, insbesondere zum Monitoring ist, das man einen funktionierenden Internet-Anschluss benötigt. D.h., falls der Internet-Anschluss oder der Router oder ein Switch auf dem Weg dahin ausfällt, erfährt man das leider nicht...
#!/usr/bin/groovy
//
// SMS-Versand per any-sms in Groovy
//
class SmsVersand{
static main(args){
// Konfiguration
def id = '123456'
def pass = 'meinapipasswort'
// Absender darf nur 11 Zeichen haben, kann eine Telefonnummer oder Text sein
def absender = 'Icinga'
def gateway = 20
def url = 'http://gateway.any-sms.biz/send_sms.php'
// Parameter einlesen
//def nummer = '01638641980'
//def text = 'Test-Text des SMS-Versendeprogramms äöüÄÖÜ-ß-€- ätsch!'
def nummer = args[0]
def text = args[1]
// URL-Encoding des Textes
// Umlaute müssen mit dem ISO-8859-11 Wert kodiert sein
// (wer mir erklärt, wie das mit Umlauten richtiger geht, nur her damit!)
text=URLEncoder.encode(text)
text=text.replaceAll(/%C3%A4/,'%E4')
text=text.replaceAll(/%C3%B6/,'%F6')
text=text.replaceAll(/%C3%BC/,'%FC')
text=text.replaceAll(/%C3%84/,'%C4')
text=text.replaceAll(/%C3%96/,'%D6')
text=text.replaceAll(/%C3%9C/,'%DC')
text=text.replaceAll(/%C3%9F/,'%DF')
text=text.replaceAll(/%E2%82%AC/,'%80')
// URL zusammensetzen
def gesamturl="$url?id=$id&pass=$pass&gateway=$gateway&nummer=$nummer&absender="+
URLEncoder.encode(absender)+"&text=$text&test=0&xml=1"
//println gesamturl
// Verbindung herstellen
def conn = new URL(gesamturl).openConnection()
def result = conn.inputStream.getText()
//println result
def jetzt=new Date()
def format=new java.text.SimpleDateFormat('yyyyMMdd_HHmmss')
def logdir=new File("/var/log/sms/")
logdir.mkdir()
def outfile=new File(logdir.getPath()+"/"+format.format(jetzt))
outfile.write(gesamturl)
outfile.append("\n")
outfile.append(result)
result = new XmlSlurper().parseText(result)
if(result.error != 0){
System.exit 100
}
println "Restguthaben: $result.guthaben"
System.exit 0
}
}