Envoyer un SMS depuis Gmail via Freemobile
Si vous avez un peu suivie l'actualité de FreeMobile de ces derniers jours, vous savez certainement que Free a ajouté une option qui permet de recevoir des sms gratuitement sur votre ligne freemobile en appelant une simple URL.
Pour mes besoins, j'ai pondu un petit script Google qui vous permettra de faire la liaison entre Gmail et ce nouveau service. Autrement dit, à chaque fois que vous recevrez un mail correspondant à un libellé précis, vous recevrez automatiquement un SMS sur votre mobile.
Mais pourquoi ?
Pourquoi s’embêter à recevoir des alertes par sms alors qu'on peut les recevoir direct par mail ?
-vous n'avez pas de forfait internet (forfait 2€ de Free)
-vous n'avez pas de "smartphone" (téléphone de boulot, téléphone de secours, ...)
-domotique via SMS
-etc ...
Comment activer votre service de notifications SMS ?
Le principe est simple, activez l'option gratuite dans votre espace abonné, rendez-vous dans vos options et activez les "Notifications par SMS". Vous obtiendrez alors une clé d'identification au service, notez là dans un coin car elle est nécessaire au bon fonctionnement de l'envoi.
Comment ça marche ?
Voici le fonctionnement de base (explications venant de freemobile)
L'envoi du SMS se fait en appelant le lien suivant : https://smsapi.free-mobile.fr/sendmsg
avec les paramètres suivants :user : votre login pass : votre clé d'identification générée automatiquement par notre service msg : le contenu du SMS encodé sous forme d'url (Percent-encoding)Exemple : Envoyer le message "Hello World !" sur votre mobile :
https://smsapi.free-mobile.fr/sendmsg?user=18579358&pass=wUxxnu1DdRMF9k&msg=Hello%20World%20!
Vous pouvez également, si vous le préférez, envoyer les paramètres en POST.
Dans ce cas, le contenu du message n'a pas besoin d'être encodé.Le code de retour HTTP indique le succès ou non de l'opération :
200 : Le SMS a été envoyé sur votre mobile. 400 : Un des paramètres obligatoires est manquant. 402 : Trop de SMS ont été envoyés en trop peu de temps. 403 : Le service n'est pas activé sur l'espace abonné, ou login / clé incorrect. 500 : Erreur côté serveur. Veuillez réessayer ultérieurement.
Recevoir un SMS pour chaque nouveau mail correspondant à un libellé précis
Voici mon script, je vous donne les détails et la mise en place après.
// //
// Freemobile AutoSMS via Gmail Label (V1.2) //
// //
// Script by CHAUVIN Julien for webinventif.com //
// Docs: https://developers.google.com/apps-script/ //
// //
//############################################################//
// -----------------------------------------------------
// Globals
// -----------------------------------------------------
LABEL_SMS = 'SMS Perso';
LABEL_SMS_LU = 'SMS Perso lu';
FREE_PASS = 'votre_clé_de_notification';
FREE_USER = 'votre_identifiant_freemobile';
THREAD_SINGLE_ALERT = false;//recevoir une seule alerte par "conversation" ou à chaque nouveau mail (même dans la même conversation)
LIMIT = 10;
// -----------------------------------------------------
// ReturnFreeUrl(message)
// Retourne l'url du service SMS remplie et formatée
// -----------------------------------------------------
function ReturnFreeUrl(message) {
message = message.replace(/(\r\n|\n|\r)/gm," ");//les sauts de lignes ne passent pas en GET, alors on nettoie
return "https://smsapi.free-mobile.fr/sendmsg?user="+FREE_USER+"&pass="+FREE_PASS+"&msg="+encodeURIComponent(message.substring(0,480));
}
// -----------------------------------------------------
// EnvoiSMS()
// Envoi un SMS pour chaque message non lu correspondant
// au label défini dans LABEL_SMS et réattribue le label
// LABEL_SMS_LU
// -----------------------------------------------------
function EnvoiSMS() {
var label = GmailApp.getUserLabelByName(LABEL_SMS);
var compt = label.getUnreadCount();
var singleAlert = 1;
if (compt != 0){
var labelLu = GmailApp.getUserLabelByName(LABEL_SMS_LU);
var threads = label.getThreads();
var maxMails = LIMIT;
if(!maxMails) maxMails = threads.length;
for (i = 0; i < maxMails; i++){
if(THREAD_SINGLE_ALERT) singleAlert = threads[i].getMessageCount();
if(threads[i].isUnread()){
var mailBody = threads[i].getMessages()[Number(singleAlert-1)];// get last message of the thread
var mailTitle = mailBody.getSubject();
var message = '[M]'+mailTitle+' || '+mailBody.getPlainBody();
var mailUrl = ReturnFreeUrl(message);
var response = UrlFetchApp.fetch(mailUrl);
threads[i].addLabel(labelLu);
threads[i].removeLabel(label);
}
}
}
}
Donc en gros ce script sera exécuté chaque minute (ou plus, voir la suite), il va chercher tous les mails non lu ayant le libellé défini dans LABEL_SMS, les envoie par SMS et change le label par celui défini dans LABEL_SMS_LU (pour éviter qu'ils ne soient envoyés à appel du script). Donc indiquez vos libellés et vos identifiants dans la section "Globals" du script.
Update du 16/06/2014 (V1.1): Ajout d'une verif "if (compt != 0)" pour empêcher une erreur du script
Update du 17/06/2014 (V1.2): Ajout d'une option qui permet de choisir si l'on reçoit une notification SMS à chaque nouveau message d'une conversation (mails empilés) ou juste lors du 1er message de la pile. En mettant THREAD_SINGLE_ALERT sur true, vous recevrez donc un sms a chaque nouveau mail qui s'ajoute à la conversation (avec le contenu du dernier message de la pile)
Ok mais je fais comment pour activer ce script ?
Ce script est un "Google Apps Script", et pour qu'il soit pris en compte, il va falloir l'ajouter dans votre Google drive de la manière suivante:
- Créez ou ouvrez une feuille de calcul dans votre drive
- Allez dans le menu "outils" puis "éditeur de scripts"
- Choisissez "Projet vide" et collez le script dans la nouvelle fenêtre
- Enregistrez le script et ajoutez un déclencheur
- Dans le nouveau déclencheur, choisissez d’exécuter la fonction "EnvoiSMS" dans le menu déroulant, puis "En fonction du temps", "Minuteur" et "chaque minute" .... Et "enregistrer"
- Une alerte d’autorisation va apparaitre, cliquez sur "Continuer"
- Dans la nouvelle fenêtre, cliquez sur "J'accepte"
- C'est enfin fini !
Étape par étape en images:
- -
Et voilà !
PS: si quelqu'un arrive à envoyer les données en POST dans le script (j'ai toujours eu des erreurs 400), ça permettrait de pouvoir garder les sauts de lignes dans le sms.
-----
Pingback: Le petit journal du web — juin 2014 #1()