Faire Une Gateway HTTP->SMS Avec Kannel
Kannel est une gateway SMS qui permet de recevevoir et envover des SMS. Cela permet entre autre d’envoyer des SMS, mais aussi d’en recevoir et d’avoir des réponses à ces SMS.
Il y a aussi la possiblité d’avoir des accusés de reception, ainsi que de spécifier le type/pid du SMS.
Installation sous ubuntu 12.04
.. code-block:: bash
$ sudo apt-get install kannel kannel-extras
L’installation ne devrait pas étre trop differente avec ubuntu 14.04.
Kannel dispose de 2 systemes pour les SMS, le mode WAP et le mode SMS. Dans l’installation par defaut, c’est le mode WAP qui est activé sous ubuntu, il est donc necessaire d’activer le mode SMS.
Pour cela il suffit d’éditer le fichier de config situé /etc/default/kannel.
.. code-block:: bash
#START_WAPBOX=1 # A commenter
START_SMSBOX=1 # A décommenter
Un petit redemarrage plus tard avec sudo /etc/init.d/kannel restart, quasiment tout devrait étre pret.
Configuration de la gateway SMS
Kannel est constitué de diverses parties.
- SMSBOX: Envoi et reception des SMS
- SMSC: La partie chargée du de l’envoi et reception des SMS (gateway SMS, modem, etc…)
- http: Interface de stats
La configuration utilisée içi est un modem TC65i utilisé comme modem GSM pour l’envois des SMS. Le kannel livré sur ubuntu 12.04 ne contient pas de fichier de configuration pour les modems, il faut donc en créer un pour pouvoir utiliser le modem GSM.
Voici mon fichier de config (/etc/kannel/modems.conf)
.. code-block:: ini
# Modems configuration
#
# Example and default values
#
# group = modems
# id = "my-id"
# name = "my-name"
# detect-string = "MODEM"
# detect-string2 = "" [Default]
# init-string = "AT+CNMI=1,2,0,0,0" [Default]
# speed = 9600 [Default]
# enable-hwhs = "AT+IFC=2,2" [Default]
# need-sleep = false [Default]
# no-pin = false [Default]
# no-smsc = false [Default]
# sendline-sleep = 100 [Default, miliseconds]
# keepalive-cmd = "AT" [Default]
# broken = false [Default]
# message-storage = "SM"
# enable-mms = false [Default]
# If modemtype=auto, try everyone and defaults to this one
group = modems
id = generic
name = "Generic Modem"
group = modems
id = wavecom
name = Wavecom
detect-string = "WAVECOM"
group = modems
id = premicell
name = Premicell
detect-string = "PREMICEL"
no-pin = true
no-smsc = true
group = modems
id = siemens_tc65i
name = "Siemens TC65i"
detect-string = "SIEMENS"
detect-string2 = "TC65i"
init-string = "AT+CNMI=1,2,0,1,1"
speed = 115200
enable-hwhs = "AT\\Q3"
need-sleep = true
reset-string = "AT+CFUN=1,1"
keepalive-cmd = "AT+CBC;+CSQ"
group = modems
id = siemens_tc35
name = "Siemens TC35"
detect-string = "SIEMENS"
detect-string2 = "TC35"
init-string = "AT+CNMI=1,2,0,1,1"
speed = 19200
enable-hwhs = "AT\\Q3"
need-sleep = true
group = modems
id = siemens_m20
name = "Siemens M20"
detect-string = "SIEMENS"
detect-string2 = "M20"
speed = 19200
enable-hwhs = "AT\\Q3"
keepalive-cmd = "AT+CBC;+CSQ"
need-sleep = true
group = modems
id = siemens_sl45
name = "Siemens SL45"
detect-string = "SIEMENS"
detect-string2 = "SL45"
init-string = "AT+CNMI=1,2,2,2,1"
keepalive-cmd = "AT+CBC;+CSQ"
speed = 19200
enable-hwhs = "AT\\Q3"
need-sleep = true
message-storage = "SM"
group = modems
id = nokiaphone
name = "Nokia Phone"
detect-string = "Nokia Mobile Phone"
need-sleep = true
keepalive-cmd = "AT+CBC;+CSQ"
enable-mms = true
group = modems
id = falcom
name = "Falcom"
detect-string = "Falcom"
#no-smsc = true
group = modems
id = ericsson_r520m
name = "Ericsson R520m"
detect-string = "R520m"
init-string = "AT+CNMI=3,2,0,0"
group = modems
id = ericsson_t68
name = "Ericsson T68"
detect-string = "T68"
init-string = "AT+CNMI=3,3"
keepalive-cmd = "AT+CBC;+CSQ"
broken = true
group = modems
id = sonyericsson_gr47
name = "Sony Ericsson GR47"
detect-string = "GR47"
message-storage = "ME"
# use this init-string for non sim-buffering
init-string = "AT+CNMI=3,2,0,0"
# use this init-string for sim-buffering
#init-string = "AT+CNMI=3,1,0,0"
reset-string = "ATZ"
broken = true
group = modems
id = alcatel
name = "Alcatel"
detect-string = "Alcatel"
init-string = "AT+CNMI=3,2,0,0"
group = modems
id = sonyericsson_T630-T628
name = "Sony Ericsson T630-T628?
init-string = "AT+CNMI=2,3,2,0,0;+CMGF=0?
keepalive-cmd = "AT+CBC;+CSQ;+CMGF=0?
broken = true
group = modems
id = sonyericsson_p1i
name = "Sony Ericsson P1i"
detect-string = "Sony Ericsson P1i"
init-string = "ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0"
message-storage = "SM"
reset-string = "ATZ"
broken = true
Vient ensuite la configuration de kannel en elle-même. La configuration présentée içi est une configuration pour un gateway SMS simple (sans WAP).
.. code-block:: ini
# HTTP administration is disabled by default. Make sure you set the
# password if you enable it.
# include the modems definition
include = "/etc/kannel/modems.conf"
# group design the type of configuration
group = core
# HTTP admin post
admin-port = 13000
# The sms box post
smsbox-port = 13001
# password for SMS admin
admin-password = dpm
# to protect the web interface
admin-deny-ip = "*.*.*.*"
admin-allow-ip = "127.0.0.1"
box-deny-ip = "*.*.*.*"
box-allow-ip = "127.0.0.1"
log-file = "/var/log/kannel/bearerbox.log"
# The group used to manage the SMS sending et receiving
group = smsbox
bearerbox-host = localhost
# HTTP interface listen port
sendsms-port = 13013
# Char allowed for the number
sendsms-chars = "0123456789 +-"
log-file = "/var/log/kannel/smsbox.log"
access-log = "/var/log/kannel/smsbox-access.log"
# Phone number of the sender (often erased by the provider)
global-sender = 0677077322
# The user for the HTTP send sms interface
group = sendsms-user
username = rapidsms
password = dpm
user-deny-ip = "*.*.*.*"
user-allow-ip = "127.0.0.1"
# The SMS modem (could be a smsc provider)
group = smsc
smsc = at
smsc-id = usb0-modem
# The modem defined in the config
modemtype = siemens_tc65i
device = /dev/ttyACM0
smsc-id = tc65modem
pin = 0000
Un petit restart plus tard on dispose d’une gateway SMS fonctionnelle.
Envoi de SMS par HTTP
Pour pouvoir envoyer des SMS, rien de plus simple, on peux utiliser curl ou une librarie dans son langage de programmation préféré.
.. code-block:: bash
curl http://127.0.0.1:13013/cgi-bin/sendsms?username=rapidsms&password=dpm&to=0677077333&text=plop%20test%0AComment%20sa%20va