sMug@replicatorbe
~/Publications/Domotique/sms-gateway-une-application-android-comme-passerelle-sms

SMS Gateway, une application Android comme passerelle SMS

Domotique / /3 min de lecture

Après avoir abandonné Gammu, un vieux téléphone Android transformé en passerelle SMS : les messages reçus partent en GET vers une URL, l'envoi se fait par requête HTTP, et la batterie du mobile fait onduleur pendant les coupures.

Note ajoutée depuis : ce billet en cite un autre, de 2013, sur Gammu — celui-là n'a pas encore refait surface dans mes backups. Le téléphone servait de passerelle SMS à l'installation domotique dont je parle deux jours plus tard.

En 2013, je vous avais parlé de Gammu, une passerelle SMS relativement puissante mais encore remplie de bugs incessants, qui m'a fait abandonner cette solution.

Je voulais aujourd'hui vous parler d'une application Android relativement sympa qui joue la passerelle SMS (Gateway SMS).

Cette application est disponible sous Android et se nomme SMS GATEWAY. Elle est bien entendu gratuite et fonctionnelle (je l'ai testée pendant plusieurs mois avant de vous en parler, je n'ai eu qu'une coupure, sans doute un problème avec la liaison WiFi).

Comme vous l'aurez compris, c'est une application qui doit tourner sur un téléphone portable, donc allumé en permanence, mais cela ne me dérange pas, car le système a une batterie de secours (celle du téléphone), chouette pour les coupures de courant… Il y a bien entendu toujours la liaison sans fil qui pourrait en freiner plus d'un (y compris moi… mais je vous fais part de mon retour d'expérience).

Il suffit donc de mentionner à l'application une URL qui transmet automatiquement en requête GET vers une page web. Et vous recevez tous les SMS du mobile !

Inversement, vous pouvez envoyer un SMS via une requête HTTP également. Le créateur du programme prévoit un « mot de passe » à passer dans la requête pour autoriser l'envoi — c'est mieux que rien, mais il circule en clair dans l'URL et se retrouve donc dans les journaux du serveur web.

Par exemple, comment faire un script PHP qui reçoit les données SMS ?

Comme je vous l'ai dit, il suffit de renseigner une URL dans l'option HTTP et d'activer l'option. Ensuite, le programme va rediriger automatiquement les SMS vers http.

/** Attention : compatible seulement Apache et non Nginx. **/
/** Nginx ne prend pas en charge getallheaders(), ou il faut ajouter un hack. **/
$headers = getallheaders();

if (empty($phone)) {
    $phone = $headers["phone"];
}
if (empty($smscenter)) {
    $smscenter = $headers["smscenter"];
}
if (empty($text_utf8)) {
    $text_utf8 = rawurldecode($headers["text"]);
}

// PAR EXEMPLE SI ON VERIFIE LE NUMERO DE TELEPHONE
if ($phone == '+32470000000') {
    // ACTION A FAIRE
}

Un mot sur ce test-là, parce qu'il est trompeur : vérifier le numéro de l'expéditeur n'est pas un contrôle d'accès. Un numéro d'appelant s'usurpe, et sans matériel particulier — c'est un champ déclaré, pas une identité vérifiée. Ça suffit pour trier ses propres messages, ça ne suffit pas pour décider d'ouvrir un portail ou de couper une alarme. Dès que l'action a une conséquence, il faut un secret partagé dans le contenu du message, et un compteur ou un horodatage pour qu'un SMS intercepté ne puisse pas être rejoué.

Vous avez pu remarquer que c'est simple de transférer les SMS reçus via cette application.