Hier, l'opérateur Free Mobile a annoncé un nouveau service gratuit pour ses abonnés : le service d'envoi de SMS via une API.
Pratique et réclamé depuis un moment (même payant) ce service permet d'envoyer des SMS à son propre numéro d'abonné Free Mobile (et uniquement à celui-ci) depuis des appareils connectés tels que les lapin Karotz, un NAS, un serveur (de domotique par exemple).
Le service gratuit s'active en un clic via l'Espace Abonné, "Gérer mon compte" > "Mes Options" et est actif quasi-immédiatement.
Une fois activé, l'envoi du SMS se fait via l'adresse https://smsapi.free-mobile.fr/sendmsg
avec les paramètres suivants :
user
: L'identifiant Free Mobile (celui utilisé pour accéder à l'Espace Abonné)pass
: La clé d'identification générée et fournie par Free Mobile via l'Espace Abonnémsg
: Le contenu du SMS encodé sous forme d'url (en Percent-encoding)
Par exemple pour envoyer le message « All your base are belong to us » sur votre mobile il vous suffit d'utiliser (accéder à) l'URL suivante (remplacer "1234567890" et "s0me5eCre74p1K3y" par vos informations) :
https://smsapi.free-mobile.fr/sendmsg?user=1234567890&pass=s0me5eCre74p1K3y&msg=All%20your%20base%20are%20belong%20to%20us
Pour aider l'envoi de SMS d'alerte depuis vos serveurs en ligne de commande je vous propose le client shell tout simple suivant (et un script PHP aussi simple plus tard) :
send-notification.sh "All your base are belong to us"
Code source disponible sur GitHub : freemobile-smsapi-client
Plus de raison de ne pas vous faire envoyer des SMS d'alertes en cas d'événements importants tels que la chute de services (Nginx, Apache, MySQL, etc.), de problèmes matériels (grappe RAID, segfault kernel, redémarrage impromptu, etc.) ou attaques (fail2ban, fichiers de logs, etc.) voire d’intrusions physiques (dans le cas d'installation domotique : eeDomus, domogik, Homewizard, VeraLite, Z-Wave).
12 juin 2014 10:27
Merci pour le script shell, c'est super !
16 juin 2014 07:20
Chouette script, bien écrit et commenté, par contre je m'interroge sur l'encodage du message. Tu n'utilises pas --data-urlencode ?
Et aussi (l'avis du mec qui reçoit autour de 900 messages de notification par jour) : le header MESSAGE_HEADER qui dit "Notification :" il me semble plus qu'inutile 🙂
Dans la même veine, quitte à ajouter un footer, autant le rendre dynamique (invoquer hostname plutôt que de mettre "Le serveur de la maison" en dur).
16 juin 2014 09:27
Les valeurs des variables MESSAGE_HEADER et ...FOOTER sont des exemples à modifier à sa convenance 😉 (perso j'ai pas de FOOTER).
Pour l'encodage j'ai vu plusieurs scripts avec --data-urlencode mais si je l'utilise je n'ai plus de multiligne. Je dois encore faire des tests sur plusieurs OS de
mobile (dans mon cas sur iOS ça passe bien).
16 juin 2014 19:17
Ha tiens, c'est intéressant ce problème de multi-ligne associé au urlencode. Si je n'utilise pas data-urlencode dans mon script, un sms multilinge ne part carrément pas, mais c'est sans doute du au fait que je compte sur urlencode pour convertir les \r en %0D.
J'ai le sentiment diffus que ça pourrait être plus simple en POST...
16 juin 2014 21:12
Oui, je suis d'accord : il faudrait tester en POST. Mais la "doc" n'indique pas quel format pour coder les 3 paramètres (application/x-www-form-urlencoded ?).
À la limite les 2 premiers dans l'URL (?user=...&pass=...) puis le message en raw dans le body de la requête POST ?
1 juillet 2014 21:41
Si ça intéresse, j'ai commis un bout de code (vite fait et très sale) en PHP...
https://gitlab.com/microniko/mysms
Des fois que ça serve à quelqu'un...
2 juillet 2014 09:49
Merci pour ce script, très utile 🙂
20 juillet 2014 21:48
Je confirme pour le code PHP ! Il ne fonctionne pas (notamment à cause d'une fonction _() qui n'existe pas). A refaire de bout en bout
26 juillet 2014 00:01
@nico: la fonction _() est un alias de la fonction gettext [http://php.net/manual/en/function.gettext.php}] !
9 septembre 2015 00:03
Ça marche aussi bien en POST avec du json :
POST https://smsapi.free-mobile.fr/sendmsg
Header :
Content-Type: application/json
Body:
{
"user" : "...",
"pass" : "...",
"msg" : "....."
}
Pour tester via Mozilla, installez le plugin/extension RESTClient.
1 mai 2016 00:02
J'imagine déjà coupler ça avec une camera et un détecteur de mouvements, y'a de quoi s'amuser ! 😀
18 mars 2017 12:53
voici un code que j'ai pondu vite fait... il manque de sureté mais il fonctionne.
Pseudo
E-mail ou n° de tel
Message(160 characters maxi)
Envoyer
function envoi() {
//on confirme l'envoi :
var answer = confirm ('Envoyer?');
if (answer) {
//onrecupere les données :
var service = "https://smsapi.free-mobile.fr/sendmsg?";
var accs = "user=12345678&pass=ICI_VOTRE_PASS&msg=";
var monserv ="From:MON SERVEUR...%20";
var pseudo = document.getElementById("nom").value;
var contact = document.getElementById("email").value;
var content = document.getElementById("message").value;
var monurl = service + accs + monserv +"Pseudo:"+ pseudo +"%20Contact:"+ contact +"%20Message:%20"+ content;//<==vous pouvez arrangez ceci à votre sauce
var myWindowURL = monurl;
var myWindowName = "ONESMS";//<==peut être changé(mais pas trop utile)
var myWindowProperties = "width=320,height=170,top=250,left=300,menubar=no,toolbar=no,titlebar=no,statusbar=no";
var myWindow = window.open(myWindowURL, myWindowName, myWindowProperties);
}
};
3 avril 2017 12:01
Bonjour, Super script
Est-il possible de s’envoyer la conso via ce biais ?
ça pourrait être super pratique de recevoir la conso d'un appareil, par exemple une camera 3g, sur son tel
Mon bon j'imagine que ce n'est pas possible
6 avril 2017 11:26
Tu peux envoyer tout le texte que tu veux (pas d'images) : charge CPU, espace disque, etc.
Ce que le script ne fait pas c'est les mesures. Une fois que tu as l'information (sous forme de texte donc) c'est gagné.