!!! 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|http://www.any-sms.info/] 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
  
    }
  }
}}}




[{Tag Monitoring Groovy Java}]