Suite à la fin du service de notifications Pushme.to, je continue à explorer les différentes solutions que l’on peut avoir afin de pouvoir être averti gratuitement d’une alerte domotique ou autre. Aujourd’hui je vais vous présenter une astuce proposée par Romain Vialard. Elle consiste à utiliser l’alerte venant d’un mail reçu dans sa messagerie Gmail pour l’envoyer par SMS en utilisant les services de Google Calendar le tout orchestré par Google Drive. Ne vous fiez pas aux apparences, la mise en place très simple prend moins de 5 minutes!
Comment ça marche?
Avec cette méthode, vous pourrez être informés à chaque fois que vous recevrez un mail important dans votre messagerie Gmail. Elle utilise la fonctionnalité proposée gratuitement par Google Calendar qui consiste à envoyer un rappel par SMS pour un rendez-vous à venir. Cette fonctionnalité a déjà été utilisée comme par exemple avec un serveur domotique Vera. Les rendez-vous sont placés automatiquement dans le calendrier et cette fonctionnalité est détournée pour notre plus grand plaisir.
La cinématique est la suivante:
- un mail arrive dans votre boîte aux lettres
- A la réception de votre mail, il est déclaré important par le filtre mis en place dans Gmail si les critères paramétrés dans le filtre correspondent aux caractéristiques de votre mail (émetteur, mots dans le sujet ou dans le corps du message…)
- Un Script tournant dans Google Drive le traite et insère un évènement correspondant dans votre calendrier dans Google Agenda. Cet évènement a un rappel d’échéance par SMS.
Tout cela bien entendu sans que vous ayez à intervenir! Sauf bien évidemment pour la mise en place.
Gardez en mémoire qu’il est fort probable qu’il y ait tout de même une limite au nombre de notifications par SMS que vous pouvez recevoir chaque jour. Cette limite ne devrait pas affecter la plupart des utilisateurs, mais c’est quelque chose à garder à l’esprit si vous avez programmé un grand nombre d’événements et que vous ne recevez plus de notifications par SMS.
Le guide ci-dessous suppose que vous avez déjà un compte Google, que vous avez activé votre compte Google Calendar (ou Agenda en français), que vous avez une adresse Gmail et que vous avez activé le service Google Drive (anciennement Google Docs).
Mise en œuvre
Et maintenant suivez le guide:
- Dans Google Calendar, renseigner votre numéro de téléphone portable pour permettre les notifications via SMS.
- Dans Gmail, créer un nouveau “Libellé” appelé “Envoi SMS”.
- Dans Gmail, créer un filtre qui mettra le libellé “Envoi SMS” sur les mails importants que vous recevrez. Dans mon exemple ces mails importants sont ceux qui viennent d’une adresse spécifique et qui contiennent le mot “Alerte” dans le corps du message.
- A ce stade afin de valider le filtre, s’envoyer un mail correspondant aux critères dudit filtre.
- Dans Google Drive, créer un script : Créer => Plus => Script
- Copier/Coller le code suivant dans le script créé:
function EnvoiSMS() { var label = GmailApp.getUserLabelByName('Envoi SMS'); var threads = label.getThreads(); var now = new Date().getTime(); for(i in threads){ CalendarApp.createEvent('DOMO- '+threads[i].getFirstMessageSubject(), new Date(now+60000), new Date(now+60000)).addSmsReminder(0); threads[i].moveToTrash(); } label.removeFromThreads(threads); }
- Enregistrer le script
- Cliquer sur l’icône “Exécuter”. Une fenêtre d’avertissement s’ouvre alors pour vous demander l’autorisation pour que ce script ait accès aux services Gmail et Google Calendar
- Cliquer sur le bouton “Autoriser”
- Cliquer à nouveau sur l’icône “Exécuter”.
- Après une minute vous devriez recevoir un SMS avec le sujet du mail que vous avez écrit un peu plus haut.
On voit que ça marche. Il ne nous reste plus qu’à programmer cette tâche afin qu’elle s’exécute automatiquement : il faut l’ordonnancer. Là encore, on fait appel aux services de Google Drive afin de lui permettre de s’exécuter tous les jours, toutes les heures ou encore toutes les minutes. C’est au choix.
Pour l’ordonnancer le script, poursuivez le guide!
- Dans Google Drive, dans l’éditeur de Scripts, cliquer sur la petite icône en forme de montre : “Déclencheurs du script actuel…”
- Cliquer sur le lien “Aucun déclencheur configuré. Cliquez ici pour en ajouter un.” Sélectionner d’exécuter la fonction “EnvoiSMS” en “Fonction du temps” en choisissant le “Minuteur” positionné à la valeur “Chaque minute” par exemple.
- Appuyer sur le bouton “Enregistrer”.
C’est fini!
Quelques explications
Il faut savoir que toute l’intelligence se situe dans le filtre créé et maintenu par vous dans Gmail. L’envoi des SMS est assuré par Google Calendar. Le script créé et ordonnancé n’est utilisé que pour permettra aux 2 services de discuter ensemble.
Le script créé prendra maintenant en compte les mails qui auront été estampillées par le libellé “Envoi SMS” par le filtre de réception. Pour chacun de vos messages ainsi identifiés, un événement est automatiquement inséré dans votre calendrier en lui spécifiant qu’il faut qu’il y ait un rappel automatique par SMS une minute avant que l’évènement n’arrive. Comme l’évènement a été créé pour démarrer dans une minute… le SMS vous est envoyé tout de suite! Le script termine enfin son travail en retirant le libellé “Envoi SMS” des messages traités.
Conclusion
Vous voici maintenant dotés d’un outil vous permettant d’envoyer des SMS gratuitement lorsque vous recevez un mail attendu. Vous pourrez l’utiliser par exemple pour être averti par SMS des messages laissés sur votre répondeur par exemple en diminuant le délai de 15 munites demandé par IFTTT. Il peut également servir pour relayer toute alerte reçue par un système qui ne peut qu’émettre des mails.
Faites-en bon usage!
Source: Google Developers
Il y a bien plus simple… avec l’appli iOS “Push” on reçois une adresse mail spécifique et il suffit de faire envoyer un mail par la box à cette adresse et le mail se transforme en notification push sur l’iPhone.
L’appli iOS PUSH marche tout a fait pour les besoins de notifications pour les ibidules. L’idée était d’apporter une solution entièrement gratuite.
l’intérêt est dans cette fonctionnalité de script sur GDRIVE que je n’avais pas encore découverte.
merci pour cette info
JF
merci pour cette fonctionnalité de gdrive … maintenant je vais regarder de plus près les fonctionnalités de gdrive. merci bien
Pour être alerté en temps réel avec le service IFTTT (sans les 15 minutes de délai), il suffit d’utiliser le service de trigger. (trigger@ifttt.com recu de votre mail). Par exemple, pour une cam IP qui envoie un mail d’alerte sur ce trigger, je reçois un SMS dans la seconde !
Le souci est que l’on n’est pas toujours maître de l’adresse mail qui envoi. Si j’ai bien compris le principe il faut que l’expéditeur soit sa propre adresse mail c’est ça? Par contre pour l’exemple de la caméra IP c’est bien vu!
Stephane ,
peux-tu m’expliquer comment utiliser le service trigger, j’ai aussi une camera IP mais qui m’envoie une simple alerte sur mon mail avec 2-3 clichés..comment peut-on recevoir cela directement par sms dans la seconde ? merci
stephane, suite à votre intervention sur ce site, merci de me preciser comment faire pour recevoir la notification ou le message dans la seconde ??? de mon coté il se passe bien 5 min .. dans l’attente de votre retour… merci bcp
Bonjour,
merci pour cette explication très utile !
Je viens de trouver qu’il est très simple d’écrire vers l’agenda de son choix avec getCalendarsByName().
Par contre quand j’ai deux (ou plus de mails) taggués ça ne fonctionne pas car le sujet lu est toujours le premier :
threads[0].getFirstMessageSubject();
En remplaçant 0 par i tout fonctionne 😉
Je corrige dans le script à copier/coller. Merci!
De rien, ce système est génial, merci de l’avoir présenté !
J’ai modifié un peu le script exemple sur mon blog et voici un lien bien utile pour chercher avec précision un mail dans sa boîte gmail avec la fonction GmailApp.search : http://goo.gl/9Yc5X
Penses-tu qu’il est possible de gérer dynamiquement de numéro de téléphone de destination ?
Bonjour Clément,
Je ne pense pas que ce soit possible. Je n’ai rien trouvé en tout cas qui permette de le faire…
Je n’ai pas réussi à configurer l’alerte correctement, j’ai plusieurs calendriers dans google agenda, est-ce que ça pose un problème? est-ce que normalement on doit voir l’alerte dans l’agenda ? Hervé si tu peux m’aider à finir ma config je t’en serais reconnaissante.
merci
ça marche très bien, mais je reçois toujours 2 sms, sans pouvoir corriger ce double envoi,
par ailleurs, j’aimerai aussi recevoir le nom de l’expéditeur du mail reçu,
merci de votre aide !
Concernant le double envoi, j’imagine que tu as vérifié que le mail était en un seul exemplaire…
Il me semble que j’avais eu ce souci et que j’avais une option dans les paramètres de l’agenda qui demandait qu’un SMS me soit envoyé en rappel du rendez-vous. Cette option dans le paramétrage de l’agenda + le code de notification fait que je les recevait en double…
Salut,
Cela fonctionne parfaitement, mais j’ai moi aussi le double envoi et je n’ai pas trouvé de solution.
Si vous avez un tuyau, merci de partager……
@+
bonjour, pour moi ca ne focntionne pas, ca m’ecris “Type error : impossible d’appeler la methodee “getThreads” de null ( ligne 5 fichier “code””.
Quest ce que j’ai mal fait ?
salut seb moi aussi j’avais la même erreur et c’est parce que le libelle créer ne correspondait pas au script.
j’avais enregistre envoie SMS avec un e et pas envoi SMS.
et j’ai aussi changer dans la formule il faut mettre des guillemets.
a “envoi sms” et a “DOMO”.
voila j’espère que cela va aider.
@seb, j’ai également cet erreur mais tout fonctionne quand même
Bonjour, j ai bien réussi de suivre le tuto, et c est parfait!!
Seul problème, je reçois chaque fois 4 SMS…
Help, merci. !!!
Bonjour,
le système fonctionne chez moi néanmoins le sms m’affiche “DOMO” ?
est-ce qu’il est possible (non seulement de recevoir une notification) mais aussi le lire le contenu du mail sur le sms recuy= ?
merci
Bonjour,
Je trouve la solution super, je vais l’essayer des que je reçois ma caméra ip pour réaliser de la surveillance. Par contre il est très simple pour un voleur de couper le fil téléphonique avant de rentrer dans une maison. Est il possible de réaliser par le même procédé une vérification de liaison par l’intermédiaire d’un ping toute les heures et si problèmes envoyer un sms via mail?
Excellent ça !!! Ca faisait longtemps que je cherchais à faire ça, mais je n’avais pas pensé à Drive !
Par contre j’aimerais bien que les évènements créés par le script soient créés dans un agenda particulier… Là ils sont créés dans mon agenda principal, au milieu de mes rdv, etc… Pas très pratique ! Ce que je voudrais c’est que les évènements soient créés dans un agenda particulier, par exemple appelé ‘SMS’, que j’afficherai/synchroniserai ou non dans l’interface Google Agenda ou sur mon téléphone. Si quelqu’un a la solution ce serait parfait !
PS : je précise que j’ai bien vu le message de toniolol, mais je n’ai pas réussi à l’appliquer… :s
En fait c’est bon j’ai réussi ! Merci beaucoup pour ces astuces ! 😀
Cool! Heureux que tu ais réussi à faire la mise en oeuvre.
Merci pour ce tuto
Je ne sais pas si Google a changé quelque chose, mais en ayant suivi scrupuleusement les explications, je ne recois pas de SMS. Le mail oui, mais pas de SMS.
Bonsoir
Merci pour ce script extrêmement pratique. La seule petite difficulté rencontrée a été de trouver comment écrire le script. Il n’y a en effet pas de bouton dans Drive pour cela. Personnellement, je suis passé par Google Documents > feuille de calcul > créer un script
pour me retrouver dans des pages qui m’ont conduit à Google Scripts.
Arbiel
S’il n’y a pas de boutons il faut le faire afficher.
Dans “Créer” choisir “Connecter plus d’applications”. Parmi les options disponibles tu devrais trouver “Script in Google Drive”. Le bouton est ainsi installé pour les prochains besoins!
Cela dit ta solution permet d’arriver à ses fins.
Ce script fonctionne très bien, félicitation mais j’ai un problème, je teste en ce moment avec un mail et un check toutes les 10 minutes…
Si je ne supprime pas le mail, je reçois un sms même si j’en avais déjà reçu un… Il n’y a pas un moyen de ne pas recevoir de SMS si celui ci à déjà été envoyé (sans effacer les mails reçus) ?
J’ai trouvé pour les envoies répétitifs.
Il faut mettre l’email reçu dans la corbeille et du coup il ne sera plus traité.
Alors dans le script il suffit simplement de faire effacer cet email en rajoutant :
for(i in threads){
CalendarApp.createEvent(‘DOMO : ‘+threads[i].getFirstMessageSubject(), new Date(now+60000), new Date(now+60000)).addSmsReminder(0);
threads[i].moveToTrash();
}
Voilà ++
Merci! J’ai mis la suppression du mail en place. Je vais voir à l’usage.
bonjour,je ne parvient pas a recevoir le moindre sms,car il me dit que j’ai une erreur voici le code que j’ai mis en copier coller si quelqu’un peut m aider c’est pour recevoir les alertes camera ip immédiatement. merci d’avance
function EnvoiSMS() {
var label = GmailApp.getUserLabelByName(‘Envoi SMS’);
var threads = label.getThreads();
var now = new Date().getTime();
for(i in threads){
CalendarApp.createEvent(‘DOMO’+threads[i].getFirstMessageSubject(), new Date(now+60000), new Date(now+60000)).addSmsReminder(0);
}
label.removeFromThreads(threads);
}
voici l’erreur.
TypeError: Impossible d’appeler la méthode “getThreads” de null. (ligne 5, fichier “Code”)
resolu merci
bonjour,
idem pour moi, pourriez vous me donner la solution
merci
Bonjour
Moi j’ai le même problème
TypeError: Impossible d’appeler la méthode « getThreads » de null. (ligne 5, fichier « Code »)
Y a t-il une solution de de corrections??
Bonjour, ce script est vraiment super. Curieusement, je reçois aussi 2 sms malgré l’astuce de jorka57.
bonjour,moi aussi je reçoit 2 SMS malgré l’astuce de jorka57.
quelqu’un a une solution.
merci a vous tous.
nando8191
La réponse a été donnée par Hervé plus haut :
« Il me semble que j’avais eu ce souci et que j’avais une option dans les paramètres de l’agenda qui demandait qu’un SMS me soit envoyé en rappel du rendez-vous. Cette option dans le paramétrage de l’agenda + le code de notification fait que je les recevait en double… »
Il suffit donc de le supprimer dans l’onglet Rappels et Notifications.
Moi aussi je reçois 2 SMS (comme vous eric et nando8191).
Un premier après environ 1min30sec après la réception du mail.
Un second 1 minute après le premier SMS.
Avez-vous trouvez la solution pour ne pas recevoir le deuxième SMS ?
Et le délai d’1min30sec pour recevoir le premier SMS est-il normal ? Vous êtes dans le même cas ?
PS: Je n’ai pas trouvé de notification SMS active dans les options de Google Calendar.
Super, çà marche impeccable. Merci
bonjour,
super le script !
est ce que quelqu’un sait comment on pourrait aussi rajouter le début du mail (en profitant des 160 caractéres du sms de notification). J’ai essayé en rajoutant ceci :
CalendarApp.createEvent(threads[i].getFirstMessageSubject()+
threads[i].getPlainBody(), new Date(v_maint+60000), new Date(v_maint+60000)).addSmsReminder(0);
}
Mais ça ne fonctionne pas ! Help !
Bonjour,
J’ai reçu ce matin un récapitulatif des erreurs scripts :
Connexion à Gmail impossible. (ligne 3, fichier “Code”) comptage 4
Erreurs ayant eu lieu hier matin entre 8h et 8h15. Est-ce juste dû à une inaccessibilité de Gmail dû à un problème interne de Gmail ?
Merci
Bonjour,
J’en reçoit également de temps en temps. Je ne peux pas dire si le souci vient de Gmail ou autre chose. On peut penser également à un quota alloué par Google aux programmes exécutés par les utilisateurs sur ses serveurs…
ok, merci
bonjour,je ne parvient pas a recevoir le moindre sms,car il me dit que j’ai une erreur voici le code que j’ai mis en copier coller si quelqu’un peut m aider c’est pour recevoir les alertes camera ip immédiatement. merci d’avance
function EnvoiSMS() {
var label = GmailApp.getUserLabelByName(‘Envoi SMS’);
var threads = label.getThreads();
var now = new Date().getTime();
for(i in threads){
CalendarApp.createEvent(‘DOMO’+threads[i].getFirstMessageSubject(), new Date(now+60000), new Date(now+60000)).addSmsReminder(0);
}
label.removeFromThreads(threads);
}
voici l’erreur.
TypeError: Impossible d’appeler la méthode « getThreads » de null. (ligne 5, fichier « Code »)
ca ne fonctionne toujours pas, à savoir:
je n’ai pas de message d’erreur (déjà c’est pas mal) mais je ne reçois des sms que lorsque j’interroge mon adresse mail. le truc qui sert à rien!
ca prouve bien que les sms passent mais uniquement si je v voir moi même mes mails! complêtement inutile sauf pour être encombrer de sms arrivés trop tard.
ps: j’ai bien tout fais comme qui dit: envoi sms à chaque minute etc… mais a marche pas (enfin trop tard)
J’ai remis le code en ligne dans l’article. Il n’a pas changé mais est mis en forme différemment car je soupçonne un problème lors du copier/coller. Pourriez-vous retenter?
Bonjour,
Vraiment très utile. Merci pour votre tuto et script très clair.
On aime trouver des howto comme cela sur le web.
Merci pour ce message d’encouragement! 🙂
Alors là, j’applaudis des 2 mains (et des 2 pieds… 🙂 ).
Merci pour cette astuce. Depuis des années, je payais une passerelle SMS pour me fournir ce genre de service (pour de la surveillance de serveur web). Et là, avec ce script et la bonté de sieur Google, c’est gratos.
Tout marche nikel ! Merci encore.
j’ai le meme probleme que certains mais pas la solution
merci de votre aide
TypeError: Impossible d’appeler la méthode « getThreads » de null. (ligne 5, fichier « Code »)
resolu, problème de nom de libellé … merci pour ce script
Bonsoir,
j’ai tout fait plusieurs fois, j’ai revu chaque détail et pourtant en test je reçois toujours ces mots clefs dans “Boite de réception” et non pas dans “Envoi SMS”, quelque peut-il m’aider svp, merci.
Moi aussi je reçois 2 SMS (comme vous eric et nando8191).
Un premier après environ 1min30sec après la réception du mail.
Un second 1 minute après le premier SMS.
Avez-vous trouvez la solution pour ne pas recevoir le deuxième SMS ?
Et le délai d’1min30sec pour recevoir le premier SMS est-il normal ? Vous êtes dans le même cas ?
PS: Je n’ai pas trouvé de notification SMS active dans les options de Google Calendar.
bonsoir
dans agenda,
paramètres
agenda
sous notifications:rappel et notifications
aucun rappel défini..
j’avais le même problème et maintenant tout est OK.
Joyeux Noël à tous
Bonjour et merci pour cette excellente procédure.
Malheureusement je suis bloqué à l’étape créer un script.
lorsque j’ouvre Google drive ,en dessous de créer j’ai:
mon drive
partager avec moi
suivis
récents
corbeille
plus.
si je clique sur plus il n’y a pas la ligne pour créer un script.
puis-je avoir de l’aide svp?
Bonjour,
super, j’ai juste quelques remarques/questions :
– Je ne vois pas l’interet d’avoir ajouter le “moveToTrash()”, en effet, la dernière commande “label.removeFromThreads(threads);” enleve le libellé qui avait été posé en début de script, donc il n’y a pas de raison que l’on soit alerté indéfiniment du mail (le filtre pose un libellé, le script envoie un sms pour tous les mails avec ce libellé et enlève le libellé).
– en ce qui concerne la réception de 2 sms, ce sont en effet les notification qui en sont la cause mais se passé des notifications (pour les vrai RDV) serait dommage… Je pense que l’idée est donc bien (comme évoqué plus haut par toniolol et J1) de créer ces événements dans un agenda spécifique… et d’enlever les notifications uniquement pour cet agenda.
– Comme toniolol et J1 ne nous ont pas donné la technique, j’ai cherché un peu et je vous donne la méthode ci dessous.
Après avoir créé un nouvel agenda (que j’ai nommé ‘mail2sms’) et auquel je n’ai pas mis de notification d’alerte
J’ai modifié le script pour avoir ça au final
function EnvoiSMS() {
var label = GmailApp.getUserLabelByName(‘Envoi SMS’);
var threads = label.getThreads();
var now = new Date().getTime();
var calendars = CalendarApp.getCalendarsByName(‘mail2sms’);
for(i in threads){
calendars[0].createEvent(‘Mail recus ‘+threads[i].getFirstMessageSubject(), new Date(now+60000), new Date(now+60000)).addSmsReminder(0);
}
label.removeFromThreads(threads);
}
Bonsoir,
j’ai essayé moult fois et vérifié l’orthographe et j’ai toujours la même erreur à l’exécution du script:
“TypeError: Fonction getUserLabelByName introuvable dans l’objet GmailApp.(ligne2, fichier”Code””.
Alors que le libellé fonctionne très bien dans Gmail avec plusieurs essais.
Qui pourra me dépanner ?
Merci d’avance
En voici un qui marche : 1 seul SMS, pas d’erreur et événement supprimé de l’agenda après l’envoie du SMS.
function EnvoiSMS() {
var label = GmailApp.getUserLabelByName(‘EnvoiSMS’);
var threads = label.getThreads();
var now = new Date().getTime();
for(i in threads){
var test=CalendarApp.createEvent(threads[i].getFirstMessageSubject(), new Date(now+60000), new Date(now+60000));
test.removeAllReminders();
test.addSmsReminder(0);
threads[i].moveToTrash();
Utilities.sleep(90000);
test.deleteEvent();
}
label.removeFromThreads(threads);
}
Re,
ci-dessous, le même que précédemment, mais celui-ci conserve le mail et il ne sera pas retraité car on lui retire le label.
function EnvoiSMS() {
var label = GmailApp.getUserLabelByName(‘EnvoiSMS’);
var threads = label.getThreads();
var now = new Date().getTime();
for(i in threads){
var test=CalendarApp.createEvent(threads[i].getFirstMessageSubject(), new Date(now+60000), new Date(now+60000));
test.removeAllReminders();
test.addSmsReminder(0);
//threads[i].moveToTrash();
threads[i].removeLabel(label);
Utilities.sleep(90000);
test.deleteEvent();
}
label.removeFromThreads(threads);
}
Bonjour et merci Franck,
J’ai essayé et testé ta deuxième version et ça avance :
– Le label fonctionne dans Gmail
– Le script s’exécute sans erreur, il me retire le label mais conserve le mail,
– Seul souci : je ne reçoit pas de SMS !!!
Dans cette version faut-il reconfigurer les agendas pour les rappels et notifications, utiliser un agenda pa
Félicitation pour ce post, car même s’il date déjà un peu, il m’a été très utile.
Je me suis permis de l’améliorer pour mon cas (et de commenter au passage 😉 ), donc j’en fait profiter à tout le monde.. ca peut toujours intéresser qq1..
Fonctionnalités nouvelles:
– Création des alertes dans un agenda particulier (à créer préalablement), et non dans l’agenda par défaut.
– Supprime les alertes par défaut avant de rajouter la notification par SMS.
– Notifications SMS personnalisées en fonction de l’objet du mail envoyé.
function EnvoiSMS() {
//Fait pointer sur le libellé "Envoi SMS" dans Gmail
var label = GmailApp.getUserLabelByName('Envoi SMS');
//Récupère la liste des objets dans ce libellé
var threads = label.getThreads();
//Récupère la date et l'heure actuelle
var now = new Date().getTime();
//Parcourt la liste des objets du libellé "Envoi SMS" dans gmail
for(i in threads){
//Fait pointer sur l'agenda portant le nom "Envoi SMS"
var cal=CalendarApp.getCalendarsByName('Envoi SMS')[0];
//Récupère le sujet du message à traiter
var sujet=threads[i].getFirstMessageSubject();
//fonction qui ajoute un événement dans l'agenda avec un rappel SMS
function ajoutAgenda(intitule){
//Ajoute un événement dans l'agenda _SMS à la date actuelle + 1minute avec un seul rappel qui se déclanchera 1 minute après l'insertion
cal.createEvent(intitule, new Date(now+60000), new Date(now+60000)).removeAllReminders().addSmsReminder(0);
}
//Bloc de conditions à adapter selon l'objet des mails et la notification SMS souhaitée
//Ajoute un événement (titre personnalisé) dans l'agenda en fonction de l'objet du mail reçu
if (sujet == 'motion alarm mac=xxxxxxx') {
ajoutAgenda('Détection présence CAM1');
}
else if (sujet == 'motion alarm mac=yyyyyyy') {
ajoutAgenda('Détection présence CAM2');
}
else if (sujet == 'motion alarm mac=zzzzzzz') {
ajoutAgenda('Détection présence CAM3');
}
else {
cal.createEvent(threads[i].getFirstMessageSubject(), new Date(now+60000), new Date(now+60000)).removeAllReminders().addSmsReminder(1);
}
//Commande à décommenter si on souhaite supprimer les mails après traitement
//threads[i].moveToTrash();
}
//Ferme le pointeur
label.removeFromThreads(threads);
}
Vous pouvez enlever ou rajouter les blocs :
if (sujet == '....') {
ajoutAgenda('....');
}
en fonction du nombre de conditions souhaitées.
ATTENTION
Je vois que mon post du code à été découpé en morceau avec des ascenseurs au milieu.
Le code complet est :
Félicitation pour ce post, car même s’il date déjà un peu, il m’a été très utile.
Je me suis permis de l’améliorer pour mon cas (et de commenter au passage 😉 ), donc j’en fait profiter à tout le monde.. ca peut toujours intéresser qq1..
Fonctionnalités nouvelles:
– Création des alertes dans un agenda particulier (à créer préalablement), et non dans l’agenda par défaut.
– Supprime les alertes par défaut avant de rajouter la notification par SMS.
– Notifications SMS personnalisées en fonction de l’objet du mail envoyé.
function EnvoiSMS() {
//Fait pointer sur le libellé "Envoi SMS" dans Gmail
var label = GmailApp.getUserLabelByName('Envoi SMS');
//Récupère la liste des objets dans ce libellé
var threads = label.getThreads();
//Récupère la date et l'heure actuelle
var now = new Date().getTime();
//Parcourt la liste des objets du libellé "Envoi SMS" dans gmail
for(i in threads){
//Fait pointer sur l'agenda portant le nom "Envoi SMS"
var cal=CalendarApp.getCalendarsByName('Envoi SMS')[0];
//Récupère le sujet du message à traiter
var sujet=threads[i].getFirstMessageSubject();
//fonction qui ajoute un événement dans l'agenda avec un rappel SMS
function ajoutAgenda(intitule){
//Ajoute un événement dans l'agenda _SMS à la date actuelle + 1minute avec un seul rappel qui se déclanchera 1 minute après l'insertion
cal.createEvent(intitule, new Date(now+60000), new Date(now+60000)).removeAllReminders().addSmsReminder(0);
}
//Bloc de conditions à adapter selon l'objet des mails et la notification SMS souhaitée
//Ajoute un événement (titre personnalisé) dans l'agenda en fonction de l'objet du mail reçu
if (sujet == 'motion alarm mac=xxxxxxx') {
ajoutAgenda('Détection présence CAM1');
}
else if (sujet == 'motion alarm mac=yyyyyyy') {
ajoutAgenda('Détection présence CAM2');
}
else if (sujet == 'motion alarm mac=zzzzzzz') {
ajoutAgenda('Détection présence CAM3');
}
else {
cal.createEvent(threads[i].getFirstMessageSubject(), new Date(now+60000), new Date(now+60000)).removeAllReminders().addSmsReminder(1);
}
//Commande à décommenter si on souhaite supprimer les mails après traitement
//threads[i].moveToTrash();
}
//Ferme le pointeur
label.removeFromThreads(threads);
}
Vous pouvez enlever ou rajouter les blocs :
if (sujet == '....') {
ajoutAgenda('....');
}
en fonction du nombre de conditions souhaitées.
Merci pour ce script, il fonctionne impec.
Avec l’ancien, je recevais des mails me disant “connexion impossible”. je verrai avec celui-ci.
Le seul bémol (qui me gêne un peu) est le délais de réception du SMS.
Bonjour. Merci pour ce tuto qui fonctionne super bien quand on veut récupérer le sujet d’un mail et le transférer par SMS.
Etant néophyte en programmation je n’arrive pas à adapter le script pour pouvoir récupérer le corps d’un message (dans mon cas présent mes messages à transférer font 100 caractères tout au plus).
J’ai bien gratté un peu du côté de la fonction getPlainBody mais je ne parviens pas à l’inclure dans le script de départ.
Si une âme charitable a une petite idée … ?
Grand merci d’avance.
regarde le code que j’ai fourni, il y a la réponse à ta demande.
Cordialement, eziel
Bonjour à tous,
Tout d’abord merci pour ce script.
A noter que Free mobile propose depuis peu la Notifications par SMS :
http://www.freenews.fr/spip.php?article14817
Si vous avez un forfait Free mobile,
vous pouvez donc passer par free pour vous envoyer le SMS
sans utiliser la notification par SMS de Google.
Voici ci-dessous un exemple de script que j’ai pris à partir de cette URL :
http://myfox.forumactif.org/t1813-tutoriel-utiliser-google-pour-envoyer-un-sms-a-la-reception-dune-alerte-mail
et que j’ai adapté :
// Script permettant de m’envoyer un SMS avec l’URL fournie par Free
/* Un mail arrive dans ma boîte aux lettres : votreAdresseMail@gmail.com
Ce mail provient de l’adresse : expediteur@domaine.com
A la réception de ce mail, celui-ci est déclaré comme important par le filtre mis en place dans Gmail
Si les critères paramétrés dans le filtre correspondent aux caractéristiques du mail, c’est à dire :
– émetteur : expediteur@domaine.com
– sujet :
– mots dans le corps du message :
Alors, le filtre applique le label EnvoiSmsFree
Ce script est lancé toutes les minutes avec le déclencheur de Google Drive qui le traite et envoi un SMS avec l’URL fournie par Free */
function EnvoiSMSFree()
{
// c’est le libelle crée dans votre boite mail
var libelle = “EnvoiSmsFree”;
// c’est l’URL fournie par Free que vous devez compléter avec votre user, votre mot de passe et votre numéro de téléphone portable Free
var urlFree = “https://smsapi.free-mobile.fr/sendmsg?user=votreUser&pass=votreMotDePasse&to=votreNumeroDeTelephonePortableFree&msg=”;
// label est un objet de type GmailLabel (A user-created label in a user’s Gmail account)
var label = GmailApp.getUserLabelByName( libelle );
Logger.log( “le label qui a ete retourne par la methode getUserLabelByName est : ” + label.getName() );
// J’ai placé le test ci-dessous car de temps en temps, le script n’arrive pas à se connecter à Gmail et il m’envoie un mail pour me l’indiquer
if ( label == null )
{
/* UrlFetchApp est une classe de l’API :
(Fetch resources and communicate with other hosts over the Internet.
This service allows scripts to communicate with other applications or access other resources on the web by fetching URLs.
A script can use the URL Fetch service to issue HTTP and HTTPS requests and receive responses.
The URL Fetch service uses Google’s network infrastructure for efficiency and scaling purposes) */
// reponse est un objet de type HTTPResponse (This class allows users to access specific information on HTTP responses)
var reponse = UrlFetchApp.fetch( urlFree + “Connexion%20à%20Gmail%20impossible” );
Logger.log( “Connexion a Gmail impossible. le code HTTP recu est : ” + reponse.getResponseCode() );
}
else
{
// threads est un objet de type GmailThread (A thread in a user’s Gmail account)
var threads = label.getThreads();
Logger.log( “valeur de threads : %s”, threads.length );
for (var i = 0; i < threads.length; i++)
{
Logger.log( "i est egal a : %s", i );
var courrier = threads[i].getMessages()[0];
var expediteur = courrier.getFrom();
var objet = courrier.getSubject();
var contenu = courrier.getPlainBody()
var dateCourrier = courrier.getDate();
Logger.log( "mail provenant de : %s", expediteur );
Logger.log( "l objet du mail est : %s", objet );
Logger.log( "le contenu du mail est : %s", contenu );
Logger.log( "le mail date de : %s", dateCourrier );
/*
var dateFormatee = Utilities.formatDate( new Date(), "GMT+01:00", "dd MM yyyy" );
// heureFormatee donne l'heure d'hiver pour la France
var heureFormatee = Utilities.formatDate( new Date(), "GMT+01:00", "HH mm ss" );
Logger.log( dateFormatee );
Logger.log( heureFormatee );
*/
var reponse = UrlFetchApp.fetch( urlFree + " objet : " + objet + ". Recu le : " + dateCourrier + '.' );
Logger.log( "le code HTTP recu est : " + reponse.getResponseCode() );
// place le mail que j'ai recu de expediteur@domaine.com a l'adresse : votreAdresseMail@gmail.com à la poubelle
//threads[i].moveToTrash();
}
label.removeFromThreads( threads );
}
}
Bonjour,
J’ai copié texto le script et lorsque je veux l’exécuter, il m’affiche l’erreur suivante :
TypeError: Impossible d’appeler la méthode “getName” de null. (ligne 19, fichier “Code”
Bonjour, J’ai réussi à faire fonctionner le script.
J’aimerai afficher l’expéditeur mais cela ne fonctionne pas. Avez-vous fait un essai?
Excellent tuto !
Plutôt que de mettre à la poubelle le mail, je le mets en “lu”.
Plutôt que de prendre le premier mail de la conversation, je prends le dernier
On ajoute l’émetteur
Et en français pour une meilleure compréhension
//adaptation Steelson forum myfox, libre de droits
function EnvoiSMS() {
var libelle = GmailApp.getUserLabelByName('Envoi SMS');
var conversation = libelle.getThreads();
var maintenant = new Date().getTime();
var calendrier = CalendarApp.getCalendarsByName('alertes');
for(i in conversation){
if(conversation[i].isUnread()){
var message = conversation[i].getMessages()[Number(conversation[i].getMessageCount()-1)];
calendrier[0].createEvent('Réception de : '+message.getFrom()+' : '+message.getSubject(), new Date(maintenant+60000), new Date(maintenant+60000)).addSmsReminder(0);
}
}
}
Ne pas oublier de supprimer les événements, voici un script à faire tourner tous les jours :
function SupprimerEvenements() {
var maintenant = new Date().getTime();
var debut = new Date("January 1, 2014 GMT");
var fin = new Date(maintenant-86400000);
var moncalendrierID = "xxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com";
var moncalendrier=CalendarApp.getCalendarById(moncalendrierID);
var evenements = moncalendrier.getEvents(debut, fin);
for (i in evenements) {
evenements[i].deleteEvent();
}
}
-86400000 signifie -24h, c’est à dire que tous les événements passés il y a plus d’un jour seront supprimés !
xxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com est à remplacer par l’identifiant de votre calendrier, l’application vous l’indique mais ce n’est pas évident à trouver.
Merci à Hervé , Esiel, Steelson et Co pour toutes ces infos.
On peut appliquer un “filtre textuel” sur la liste des events générés dans l’agenda (et qui seront supprimés) :
var evenements = CalendarApp.getEvents(debut, fin, {search: ‘DOMO-‘});
C’est plus propre, et cela cible les events à supprimer.
A appliquer lorsque l’on n’utilise pas un agenda dédié aux SMS comme par exemple “alertes” (cf code de Steelson).
Encore merci à tous.
Attention, le post du message a été tronqué, il faut bien sûr mettre le mail en lu
if(conversation[i].isUnread()){
var message = conversation[i].getMessages()[Number(conversation[i].getMessageCount()-1)];
calendrier[0].createEvent('Réception message : '+message.getSubject(), new Date(maintenant+60000), new Date(maintenant+60000)).addSmsReminder(0);
message.markRead();
}
Bonjour à tous et merci pour ce tuto.
J’ai créé deux scripts pour deux expéditeurs différents. Tout marche bien sauf qu’en recevant les sms j’aimerai connaitre l’expéditeur.
Quelqu’un a une idée ?
Bonjour à tous,
Merci pour toutes ces infos !
Je vais avoir besoin de vos lumières SVP car je patauge un peu :
– J’ai créé l’alerte en suivant le tuto : tout va bien chez moi :
* 1 seul SMS reçu
* le message disparaît, mis à la corbeille de GMail.
C’est ça qui m’embête : j’ai besoin de garder le message et je me suis dit qu’en supprimant le libellé, ça devrait suffire.
Sauf que je ne retrouve pas mon script dans GDrive !!!
Où est-il planqué nom d’un chien ?!
Il fonctionne toujours, j’ai testé. Mais j’aimerais le modifier comme le proposent plusieurs gentils contributeurs…
Bref, help !
Merci !
OK, j’ai pigé :
J’avais créé le script à partir d’une feuille de calcul.
J’ai ensuite mis cette feuille de calcul (qui paraissait vide) à la corbeille.
Impossible par la suite de retrouver le script.
J’ai récupéré la feuille de calcul, je retourne par son intermédiaire dans “Outils -> Editeur de scripts”, et là, miracle, je retrouve mon script “Envoi SMS”.
Yes !
Reste maintenant à faire la modif pour ne plus effacer les mails…
Encore merci pour le script et le tuto !
C’est encore moi.
J’ai approfondi ma lecture des messages précédents et j’ai pu bloquer la suppression des mails en remplaçant :
threads[i].moveToTrash();
par
//threads[i].moveToTrash();
(pour les néophytes comme moi, j’explique : la commande n’est plus interprétée, elle est considérée comme un commentaire.)
Au final, les messages restent présents dans ma BAL et je reçois bien le SMS.
Je vais étudier le truc pour que les évènements soient effacés car cela va polluer mon agenda. Mais je crois que la réponse est déjà un peu plus haut.
Pour effacer les events de l’agenda (à affiner avec ton texte) :
var evenements = CalendarApp.getEvents(debut, fin, {search: ‘DOMO-‘});
Bonjour,
J’ai entendu parler d’un script qui permet de sauvegarder les captures des caméras IP sur google drive ou Dropbox.
Cela évite le NAS…
Auriez vous des infos sur un tel script svp ?
Voici ma personnalisation du script de STY (cf plus haut) dans le cadre de l’alarme via Blyss Box :
function EnvoiSMS() {
//Fait pointer sur le libellé “Envoi SMS” dans Gmail
var label = GmailApp.getUserLabelByName(‘Envoi SMS’);
//Récupère la liste des objets dans ce libellé
var threads = label.getThreads();
//Récupère la date et l’heure actuelle
var now = new Date().getTime();
//Parcourt la liste des objets du libellé “Envoi SMS” dans gmail
for(i in threads){
//Fait pointer sur l’agenda portant le nom “MailToSMS”
var cal = CalendarApp.getCalendarsByName(‘MailToSMS’)[0];
//Récupère le sujet du message à traiter
var sujet = threads[i].getFirstMessageSubject();
//fonction qui ajoute un événement dans l’agenda avec un rappel SMS
function ajoutAgenda(intitule){
//Ajoute un événement dans l’agenda _SMS à la date actuelle + 1minute avec un seul rappel qui se déclanchera 1 minute après l’insertion
cal.createEvent(intitule, new Date(now+60000), new Date(now+60000)).removeAllReminders().addSmsReminder(0);
}
//Bloc de conditions à adapter selon l’objet des mails et la notification SMS souhaitée
//Ajoute un événement avec un titre automatiquement personnalisé dans l’agenda en fonction de l’objet du mail reçu
//Si l’objet du mail recu ne contient pas le texte recherché, il sera envoyé sans personnalisation.
var testalerte = sujet.indexOf(‘ALERTE INTRUSION Blyssbox’);
if (testalerte !== -1){
var rechercheprems = sujet.indexOf(‘”‘);
var accessoire = sujet.substring(rechercheprems+1,sujet.indexOf(‘”‘,rechercheprems+1));
ajoutAgenda(‘ALERTE INTRUSION signalée par ‘+accessoire);
}
else {
cal.createEvent(threads[i].getFirstMessageSubject(), new Date(now+60000), new Date(now+60000)).removeAllReminders().addSmsReminder(0);
}
//Commande à commenter si on souhaite ne pas supprimer les mails après traitement
threads[i].moveToTrash();
}
//Retire le libellé du mail
label.removeFromThreads(threads);
}
Bonjour
je teste en ce moment la fonction smsapi de freemobile et je ne parviens pas a comprendre la limite du service vis à vis du contenu du message.
pour piloter une alarme a distance via sms , j’ai besoin de faire arriver un 0 à la centrale via sms .
J’ai essaye pas mal de truc mais il est Impossible de pouvoir envoyer le chiffre 0 via ce service .
Tout type de message a été testé ( numérique 1 ou 2 ou 3 ) mais le 0 ne passe pas . J’ai essayé le methode vis url
en mettant &msg=0 ou &msg=”0″ ou &msg=’0′ ou &msg=%30
rine n’y fait , aucun sms n’est envoyé …
Arriez vous une idée, une astuce, un mode de contournnement de cette limite ….
merci
Bonjour et merci Hervé
Ca marche très bien mais j’ai une question : le contenu du mail ne peut pas être transféré avec?
En fait moi ce sont des mails d’alertes style “alarme défaut…” et le contenu a son importance.
Enfin de toute façon c’est du très bon boulot merci encore.
Un grand merci Hervé,
Cette découverte va changer ma vie !!!!
Bonjour Cali,
Si le changement est en mieux c’est le but de ce partage! 😉
Google supprime les alertes par SMS à compté du 27/06/2015.
Du coup, il faut maintenant utiliser les notifications de l’agenda. D’accord c’est bien moins fiable si vous êtes dans une zone sans 3G mais en attendant de mieux, voici le script modifié pour les notifications.
Ce script ne créer pas de rappel, donc il faut aller dans les paramètres de l’agenda afin d’y indiquer que tout nouvel évènement aura un rappel par notification 1 minute avant.
function EnvoiNotification() {
//Fait pointer sur le libellé “Envoi Notification” dans Gmail
var label = GmailApp.getUserLabelByName(‘Envoi Notification’);
//Récupère la liste des objets dans ce libellé
var threads = label.getThreads();
//Récupère la date et l’heure actuelle
var now = new Date().getTime();
//Parcourt la liste des objets du libellé “Envoi Notification” dans Gmail
for(i in threads){
//Fait pointer sur l’agenda portant le nom “MailToNotification”
var cal = CalendarApp.getCalendarsByName(‘MailToNotification’)[0];
//Récupère le sujet du message à traiter
var sujet = threads[i].getFirstMessageSubject();
//fonction qui ajoute un événement dans l’agenda.
function ajoutAgenda(intitule){
//Ajoute un événement dans l’agenda MailToNotification à la date actuelle + 1minute avec un seul rappel qui se déclanchera 1 minute après l’insertion
cal.createEvent(intitule, new Date(now+60000), new Date(now+60000));
}
//Bloc de conditions à adapter selon l’objet des mails et la notification souhaitée
//Ajoute un événement avec un titre automatiquement personnalisé dans l’agenda en fonction de l’objet du mail reçu
//Si l’objet du mail recu ne contient pas le texte recherché, il sera envoyé sans personnalisation.
var testalerte = sujet.indexOf(‘ALERTE INTRUSION Blyssbox’);
if (testalerte !== -1){
var rechercheprems = sujet.indexOf(‘”‘);
var accessoire = sujet.substring(rechercheprems+1,sujet.indexOf(‘”‘,rechercheprems+1));
ajoutAgenda(‘ALERTE INTRUSION signalée par ‘+accessoire);
}
else {
cal.createEvent(threads[i].getFirstMessageSubject(), new Date(now+60000), new Date(now+60000));
}
//Commande à commenter si on souhaite ne pas supprimer les mails après traitement
threads[i].moveToTrash();
}
//Retire le libellé du mail
label.removeFromThreads(threads);
}
Bonjour, merci Ninouness pour ta solution de remplacement !
Cependant je n’arrive pas a faire foncionner le script, j’ai des erreurs du type “Caractère incorrect. (ligne 27, fichier “Code”)Ignorer”
J’ai bien créé l’agenda MailToNotification ainsi qu’ajouté un rappel par événement.
Aurais-tu une piste sur ce que j’ai loupé ?
Merci
Ce sont les guillemets qui ne passent pas, il faut les réécrire. Mais quand bien même, ça ne fonctionne pas pour moi.
Le service n’est plus opérationnel:
http://www.abavala.com/vers-la-fin-des-sms-gratuits-avec-google-agenda/
Oui mais Ninouness montrait justement une alternative. Bref, j’utilise maintenant IFTTT, dont j’ai entendu parler sur votre site. Merci !
Bonjour,
Plus simple il me semble : notification Free Mobile et Pushingbox
On peut utiliser smsapi de Free mobile en l’associant à Pushingbox via un scenario simple et leur mail Api. Cela crée une adresse mail que l’on peut renseigner dans tout logiciel, ça marche donc pour la Blyssbox en modifiant vos alertes sur https://www.liveez.castorama.fr/, et ainsi quand le mail d’alerte intrusion est envoyé on reçoit un sms dans la minute.