Asterisk - SMS
Kurznachrichten über SIP
Wer IP Telefone an seinem Asterisk nutzt (Softphones oder feststehende IP Telefone), der hat auch die Möglichkeit, sich gegenseitig Kurznachrichten (ähnlich SMS) zu schicken. Wichtig zu wissen ist, dass es nur die Übertragung nur dann erfolgreich ist, wenn der Empfänge auch online ist. Eine Zwischenspeicherung zum späteren Versand ist (hier) nicht vorgesehen. Nachfolgend die Konfiguration auf Asterisk-Seite.
Angefangen wird in der pjsip.conf Datei. Hier muss für jede Nebenstelle (extension),
welche Nachrichten empfangen können soll, der Kontext festgelegt werden, auf den wir uns
später in der extensions.conf beziehen werden. Sinnvollerweise deklariert man den
einmal in einem Template, so dass alle Nebenstellen dann davon profitieren können ...
oder man macht sich die Mühe und schreibt es in die Konfiguration jeder Nebenstelle.
Die Direktive, die wir brauchen, lautet:
message_context=textmessages
Das war in der pjsip-Konfiguration schon alles. Als nächstes geht es in unseren Dialplan, also in die extensions.conf: Hier wird es etwas aufwändiger. Erst einmal das komplette Code-Snippet:
[textmessages]
exten => _6XXX,1,Gosub(send-text,s,1,(${EXTEN}))
[send-text]
exten => s,1,NoOp(Sending Text To: ${ARG1})
exten => s,n,NoOp(Message from: ${MESSAGE(from)})
exten => s,n,NoOp(Message to: ${MESSAGE(to)})
exten => s,n,NoOp(Message body: ${MESSAGE(body)})
exten => s,n,Set(SENDER=${CUT(CUT(CUT(MESSAGE(from),@,1),<,2),:,2)})
exten => s,n,NoOp(Sender: ${SENDER})
exten => s,n,MessageSend(pjsip:${ARG1},${SENDER})
exten => s,n,NoOp(Message send status: ${MESSAGE_SEND_STATUS})
exten => s,n,GotoIf($["${MESSAGE_SEND_STATUS}" = "SUCCESS"]?success:failed)
exten => s,n(success),Hangup()
exten => s,n(failed),Set(MESSAGE(body)=SMS-Fehler zum Empfänger ${ARG1}: ${MESSAGE_SEND_STATUS})
exten => s,n,MessageSend(pjsip:${SENDER},${ARG1})
exten => s,n,Hangup()
Erklärung: Zuerst brauchen wir die "Überschrift" bzw. Referenz aus unserer pjsip.conf Datei und deklarieren den neuen Abschnitt mit "textmessages". Hier folgt eine einfache Verzweigung mittels Gosub in den Unterabschnitt send-text und dort in die Extension s, Startnummer 1. Mittels der Variablen (${EXTEN}) wird die Zielrufnummer übergeben und steht als ${ARG1} zur Verfügung. Da ich 4-stellige Nebenstellen-Nummern, beginnend mit 6 vergeben habe, steht 6XXX für die feste 6 am Anfang gefolgt von 3 beliebigen Ziffern.
Im Abschnitt send-text werden erst einmal 4 Informationszeilen zur Kontrolle im Log ausgegeben, die den Empfänger, den Absender und den eigentlichen Inhalt der Nachricht enthalten. Mithilfe der CUT-Funktion wird als Nächstes der Absender aus den MESSAGE(from) Funktion herausgeschnitten und danach zur Kontrolle im Log ausgegeben. Jetzt erfolgt der eigentliche Versand der Nachricht mittels der Funktion MessageSend(pjsip:${ARG1},${SENDER}). Die folgenden Zeilen werten aus, ob die Übertragung erfolgreich war oder nicht. Falls sie das war, wird der Block mit einem Hangup() Befehl einfach beendet. Falls nicht, gibt es eine Rückmeldung, ebenfalls per Kurznachricht, an den Absender mit einer Fehlermeldung. Nachfolgend war das Softphone 6004 ausgeschaltet, die Fehlermeldung zeigt sich dann wie folgt:

Getestet habe ich die Funktion mit dem Softphone "Sipnetic" und einem festen Apparat "fanvil X6U". Hier ist zu beachten, dass das Fanvil nur für reine Textübermittlung geeignet ist. Bei 2 Softphones können auch z. B. Smileys übertragen werden. Der Asterisk ist hierbei KEIN Hinderungsgrund. Am Schluß ein kleiner Eindruck einer empfangenen Kurznachricht auf dem "fanvil" Telefon, gesendet von der Nebenstelle 6001:

Rein theoretisch sollte man so auch SMS aus dem Festnetz empfangen können. Das habe ich aber noch nicht probiert und ich bin mir nicht sicher, ob es das überhaupt noch gibt und von den Providern unterstützt wird. Nützlich ist die Funktion z. B. falls man auf dem Smartphone eine komplizierte Internet-Adresse dem Gegenüber mitteilen will, hierfür aber keine eMail schicken kann oder will und es zum Buchstabieren zu kompliziert ist ... oder einfach nur als netter Bonus :-)
Nachtrag: SMS im Festnetz werden bei der deutschen Telekom seit 01.03.2023 nicht mehr unterstützt :-( s. hier