Die SMS Applikation ist seit Anfang 2004 Bestandteil von Asterisk. Allerdings gab es von der ersten Version bis zum jetzigen Status einige Änderungen, die die Konfiguration, die Verzeichnistruktur und Dateiformate betreffen. Ich setze hier mindestens die Version Asterisk 1.2.1 voraus. Der im Besipiel für den SMS Versand verwendete Channel ist bei Verwendung von chan_capi-cm gültig. Wird ein anderes Asterisk Modul verwendet, ist dieser entsprechend anzupassen.
Im folgenden geht es um die Kommunikation von Asterisk mit dem Service Message Centre (SMSC) der Telekom. Asterisk verhält sich dabei wie ein SMS fähiges Festnetz-Telefon.
Der gesamte Source ist Bestandteil des Asterisk tar Archives. Die SMS Wählplan Applikation wird im Asterisk Build Prozess stets mitübersetzt. Zusätzlich gibt es ein Programm smsq , welches gegebenenfalls getrennt zu übersetzen ist.
cd ./asterisk-1.2.1/utils/
make
su "cp smsq /usr/local/bin/"
Für die MSN 12345 soll der Empfang von Festnetz SMS als Textnachricht ermöglicht werden. Als Kontext für eingehende Anrufe wird incoming angenommen, was gegebenenfalls an den in zapata.conf, capi.conf oder anderen Konfigurationsdateien gewählten Namen angepasst werden muss. Eine ankommende SMS wird ausschliesslich an der Rufnummer der 01930100 (SMSC der Telekom) erkannt.
[incoming]
exten => 12345,1,NoOp(${EXTEN}:${CALLERID})
exten => 12345/01930100,2,Goto(smsin,${EXTEN},1)
exten => 12345,2,NoOp(Keine SMS)
[smsin]
exten => _X.,1,Answer
exten => _X.,n,Wait(2)
exten => _X.,n,SMS(${EXTEN},a)
exten => _X.,n,Wait(1)
exten => _X.,n,Hangup
Mit dem folgenden Script soll eine SMS über CAPI an die Rufnummer 012312345 versand werden. Für den ersten Test empfielt es sich, hier die eigene Mobiltelefonnummer einzutragen, da der Empfang von Festnetz SMS zwar schon konfiguriert, aber noch nicht freigeschaltet ist. Die SMS würde nicht als Text ankommen, sondern vorgelesen werden.
#!/bin/sh -x
MSGT='Hello World'
DEST='012312345'
CHAN='CAPI/contr1/0193010'
SDIR='/var/spool/asterisk/'
MSN='12345'
SMSQ='/usr/local/bin/smsq'
MYID=$(/usr/bin/id -u)
if [ "$MYID" -eq 0 ]; then
COMMAND="$0"
while [ "$#" -gt 0 ]; do
COMMAND="$COMMAND \"$1\""
shift
done
/bin/su asterisk --shell=/bin/bash --command="$COMMAND"
exit 0
fi
if [ -x "$SMSQ" ]; then
"$SMSQ" --spool-dir="$SDIR" --mo --motx-retries 2 --motx-delay 90 \
--motx-callerid "$MSN" --motx-channel "$CHAN" "$DEST" "$MSGT"
else
echo "$SMSQ nicht ausfuehrbar"
exit 1
fi
Als Anmeldung wird eine SMS mit dem Text ANMELD an die Rufnummer 8888 geschickt. Anschliessend erhält man eine SMS als Bestätigung. Die Konfiguration für den Empfang muss also schon vorher erfolgt sein.
Für jede eingehende SMS wird eine Datei unterhalb von /var/spool/asterisk/sms/mtrx/ angelegt. Der Dateiname enthält mehrere Komponenten. Vorne steht die Zielrufnummer. Enthalten sind ausserdem die vom SMSC gesetzen Werte für Datum und Uhrzeit (Service Centre Time Stamp). mtrx steht hier für Mobile Terminated Receive. Der Begriff Mobile ist erstmal etwas irritierend, denn der Empfang erfolgt ja auf dem (hoffentlich) feststehenden Asterisk Server. Aber bei dieser Übertragung war Asterisk ja das Endgerät und verhält sich genauso wie ein Telefon es tun würde.
Die beim SMS Empfang angelegte Datei so aus:
oa=012312345
ud=Hello World
scts=2006-01-17T13:28:39
Für die Weiterleitung der SMS kann ebenfalls smsq eingesetzt werden. Der nachfolgende
Shell Befehl kann etwa als cron job regelmässig aufgerufen werden. Zu achten ist hier wieder auf
die Benutzerrechte. Der Prozess sollte als User asterisk ausgeführt werden.
/usr/local/bin/smsq --process '/usr/local/bin/smsq_process' --spool-dir=/var/spool/asterisk/
Die Daten der angenommenen SMS stehen dem zu erstellenden Script smsq_process
als Environment Variable zur Verfügung. Hier ein Beispiel Script .
Im Command Line Interface sieht man bei SMS Versand und Empfang ein Listing der folgenden Art.
-- SMS RX 93 00 6D
-- SMS TX 91 17 01 06 0B 81 20 80 18 60 71 F8 00 F1 0B C8 32 9B FD 06 5D DF 72 36 19 B3
-- SMS RX 95 09 01 00 60 10 71 41 82 12 40 6B
-- SMS TX 94 00 6C
-- SMS TX 93 00 6D
-- SMS RX 91 1D 04 0B 81 20 80 18 60 71 F8 00 F1 60 10 71 41 82 93 40 0B C8 32 9B FD 06 5D DF 72 36...
-- SMS TX 95 02 00 00 69
-- SMS RX 94 00 6C