TUTORIEL : Un petit topo sur les SMS … de quoi comprendre le pourquoi du comment !

Voir le sujet précédent Voir le sujet suivant Aller en bas

TUTORIEL : Un petit topo sur les SMS … de quoi comprendre le pourquoi du comment !

Message  Steelson le 2/9/2014, 10:15 pm

160, 320, 480 caractères ?
La taille d’un sms est de 160 caractères. Lorsque l’on envoie un message plus long, alors il s’agit de 2 voire 3 sms à la file. Certains téléphones genre smartphone concatènent cette série de sms et donc cela devient transparent pour nous, d’autant que les forfaits intègrent généralement des sms illimités quand on les émet (certains téléphones préviennent encore quand il s’agit d’un sms double).

Pourquoi un message est-il parfois reçu en 3 fois sur des téléphones non smartphone ?
En réalité, la taille d’un sms est de 1120 digits ou bits. Les caractères étant codés sur 7 bits, cela fait bien 1120/7 = 160 caractères.
MAIS dans le cas où il y a au moins un caractère « plus élaboré » comme un « ç », alors tous les caractères sont codés de façon étendue sur 16 digits, ce qui fait 1120/16=70 caractères. Ce n’est pas tout à fait de l’unicode mais presque. Donc un message de 160 caractères fera dans ce cas l’objet de 3 messages = 70+70+20 ! CQFD

Quels sont les caractères reconnus dans la table du codage 7 bits par défaut ?
Il faut rester court (sms = Short Message Service) ! Les étrangers ont parfois des tables qui se substituent à celle-ci, de quoi rester au plus près de la notion de message « court » sans passer par une codification étendue.
Les caractères reconnus dans la table du codage 7 bits par défaut sont les suivants :

  • Les lettres a->z et A->Z, les chiffres 0->9.
  • La ponctuation et un peu plus du reste : ¡ ! ¿ ? _ " # & ' ( ) * , . : ; §, et là-dedans j’aime beaucoup ces 2 là ¡¿
  • Les symboles arithmétiques :  % + - / < = >
  • Les symboles monétaires £ $ ¥ ¤, mais pas l’euro !
  • Des majuscules empruntées à l’alphabet grec : Δ Φ Γ Λ Ω Π Ψ Σ Θ Ξ, mais pas les minuscules !
  • L’arobase @
  • Le ß
  • Et quelques caractères latins étendus (diacritiques ou non) è é ù ì ò Ç ä ö ñ ü à É Ä Ö Ñ Ü Ø ø Å å Æ æ. Il y a bien le Ç mais pas le ç, il n’y a ni le ê, ni le û, ni d’autres. Curieux choix, mais c’est comme cela !

Il faudra donc prendre parti : rester condensé et pouvoir transmettre un maximum d’informations, ou être puriste et émettre en « unicode ». Le problème est que, même en unicode tous les caractères ne passent pas toujours. Je m’autorise donc à faire une grosse entrave, un coup de canif dans mon dogme d’écriture unicode en privilégiant les aspects efficacité.

Dans ce cas, l’expression régulière se baserait sur l’exclusion suivante :
Code:
[^0-9a-zA-Z£$¥@ΔΦΓΛΩΠΨΣΘΞßèéùìòÇäöñüàÉÄÖÑÜØøÅåÆæ¡!¿?_"#¤%&'()*+-.\/:;<=>§ ]
pour neutraliser les caractères qui ne font pas partie de cette série ; je préfère alors les remplacer par _ que laisser un ? se mettre à la place du caractère.

En réalité, cela ne se passe pas comme cela pour certains caractères pourtant dûment répertoriés. L'explication est contenue dans l'image plus bas (voir autre message ci-après). J’ai donc retenu l’expression régulière entre crochets :
Code:
[^0-9a-zA-Z£$¥@èéùàØø!?_"%'()*+-.\/:;<=> ]

Comment émettre un sms à partir d’un mail reçu de myfox (ou d’une caméra IP par exemple, ce qui est mon cas) ?

3  faÇons …

google calendrier : pas plus de 2 ou 3 sms / jour ; de plus le sms est chargé par des commentaires comme « rappel » et la date de pseudo-réunion, donc il n’y a plus beaucoup de place au contenu du message ! mais c’est du « push » en ce sens que c’est google qui a l’info et émet le sms.

IFTTT illimité et on peut aussi pas mal paramétrer : le corps ne passe pas vers les sms, il faut donc au préalable switcher entre titre et corps pour pouvoir activer la recette, donc très bien aujourd’hui, ... mais je reste plus que dubitatif à moyen terme pour 2 raisons :

  1. quel est leur modèle économique, qu’est-ce qui leur permet financièrement de donner un tel service (j’espère que ce n’est pas en exploitant le contenu et les n° de tel) ?
  2. comment techniquement ils arrivent à balayer les milliards de connecteurs en temps réel, car cela n’a pas l’air d’être du push à partir de gmail, mais bien du pull de leur part et c’est pour cela que parfois ils peut s’écouler un certain temps et même un temps certain pour effectuer la « recette »

notification free : cela reste à mes yeux encore aujourd’hui la meilleure solution ! c'est illimité et du temps réel car du push (sauf saturation des réseaux) mais il faut avoir la carte free (2€/mois c’est pas trop cher quand même !)

Je n’ai pas forcément la science infuse, si d’autres avaient des inputs, ils sont bienvenus.


How to ?
La manière d’opérer est alors la suivante :

  1. A la réception d’un mail, gmail va filtrer et renvoyer vers un libellé (label)
  2. Un script dont l’exécution est programmée (toutes les minutes par exemple) va balayer les messages non lus et s’exécuter :

    • soit créer un rendez-vous avec rappel immédiat par sms (solution calendrier),
    • soit transformer le mail en switchant contenu et texte de façon à permettre à IFTTT d’exécuter une recette sur le titre du mail (solution IFTTT) ; il faudra se renvoyer le mail transformé, le re-filtrer, lui donner un autre libellé (par exemple IFTTT) et brancher la recette sur ce libellé
    • soit lancer une requête https avec l’api sms de free (solution free).



Voici mes 3 scripts :

  1. Google calendar (j'ai choisi de ne pas traiter le texte, c'est ici le titre du message qui est transmis)
    Code:
    function EnvoiSMS() {
      var libelle = GmailApp.getUserLabelByName('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(message.getSubject(), new Date(maintenant+60000), new Date(maintenant+60000)).addSmsReminder(0);  
          conversation[i].markRead();
        }
      }
    }

  2. sms free (je ne retiens que les caractères alphanumériques et l'espace, c'est le contenu du message et non le titre qui est transmis)
    Code:
    function freeSMS() {
      var libelle = GmailApp.getUserLabelByName('SMS');
      var conversation = libelle.getThreads();
      for(i in conversation){
        if(conversation[i].isUnread()){
          var message = conversation[i].getMessages()[Number(conversation[i].getMessageCount()-1)];
          
          var texte = message.getPlainBody().replace(/(\r\n|\n|\r)/gm," ");
          texte = texte.replace(/([ ]){1,})/gm," "); // bien mettre & n b s p ; sans espace entre les crochets, ce message peut être mal écrit si le navigateur interprête cela comme un blanc (insécable)
          texte = texte.replace(/(\s{2,})/gm," ");

          texte = texte.replace(/([^a-zA-Z0-9 ])/gm,"_");
          
          // depuis xxxxxx inclus jusque zzzzzz exclus (si non trouvé, totalité du message jusqu'à hauteur de 160 caractères)
          var depuis = Math.max(texte.indexOf("xxxxxx"),0);
          var jusque = Math.min(((texte.indexOf("zzzzzz")>0)?texte.indexOf("zzzzzz"):160),160 + depuis);
          texte = texte.substring(depuis,jusque);

          var response = UrlFetchApp.fetch("https://smsapi.free-mobile.fr/sendmsg?user=xxxxxxxx&pass=xyxyxyxyxyx&msg="+encodeURIComponent(texte));
          conversation[i].markRead();
        }
      }
    }

    Ne pas oublier que dans l'api sms de free, les paramètres du sms sont passés dans l'URL (méthode get). Cela a pour conséquence de devoir neutraliser les retours à la ligne, et supprimer tout & qui est le délimiteur des paramètres (or & est présent par exemple dans le blanc insécable & n b s p ; ).
    J'ai étendu ce point aux autres scripts.

  3. IFTTT (où le traitement est un poil plus élaboré : le contenu du message est remonté en titre après traitement car la recette ne permet pas de toute façon d'envoyer le contenu d'un message en sms, mais uniquement le titre)
    Code:
    function EmailInversionCorpsTitre() {
      var libelle = GmailApp.getUserLabelByName('SMS');
      var conversation = libelle.getThreads();
      for(i in conversation){
        if(conversation[i].isUnread()){
          var message = conversation[i].getMessages()[Number(conversation[i].getMessageCount()-1)];

          var texte = message.getPlainBody().replace(/(\r\n|\n|\r)/gm," ");
          texte = texte.replace(/([&nbsp;]){1,})/gm," ");
          texte = texte.replace(/(\s{2,})/gm," ");
          
          texte = texte.replace(/([^0-9a-zA-Z£$¥@èéùàØø!?_"%'()*+-.\/:;<=> ])/gm,"_");

          // depuis xxxxxx inclus jusque zzzzzz exclus (si non trouvé, totalité du message jusqu'à hauteur de 160 caractères)
          var depuis = Math.max(texte.indexOf("xxxxxx"),0);
          var jusque = Math.min(((texte.indexOf("zzzzzz")>0)?texte.indexOf("zzzzzz"):160),160 + depuis);
          texte = texte.substring(depuis,jusque);
          
          // "IFTTT_Gmail_>_SMS" permet de créer un filtre pour ranger le mail dans un "label" ("IFTTT") et déclencher la recette IFTTT
          MailApp.sendEmail(Session.getActiveUser().getEmail(), texte, "IFTTT_Gmail_>_SMS " +message.getSubject());

          conversation[i].markRead();
        }
      }
    }


Mais on peut bien évidemment mixer les types de traitement des chaînes de caractères !


Dernière édition par Steelson le 3/9/2014, 1:54 pm, édité 6 fois
avatar
Steelson
Habitué
Habitué

Messages : 137
Date d'inscription : 02/08/2014

http://www.geodelos.com

Revenir en haut Aller en bas

Re: TUTORIEL : Un petit topo sur les SMS … de quoi comprendre le pourquoi du comment !

Message  steph44 le 3/9/2014, 11:40 am

Merci à toi Steelson pour cette longue explication de texte study
avatar
steph44
Modérateur

Messages : 2897
Date d'inscription : 30/10/2012
Localisation : 44

Revenir en haut Aller en bas

Re: TUTORIEL : Un petit topo sur les SMS … de quoi comprendre le pourquoi du comment !

Message  Steelson le 3/9/2014, 1:50 pm

Merci, et pour continuer, voici une des raisons pour lesquelles c'est le bazar :



La codification entre ASCII/Unicode (celle que l'on emploie dans nos documents et sur internet) n'est la même que pour les sms !
Temps (ou tant ?) que l'on reste dans le monde téléphones portables, c'est ok. Mais quand on veut traduire du texte écrit sur un PC ou reçus par courriel en texte compréhensible dans un sms, on comprend mieux que les caractères ne passent pas toujours. Et là où c'est complexe, c'est que ce n'est pas le cas pour tous (les opérateurs font des transcodifications dans certains cas).
avatar
Steelson
Habitué
Habitué

Messages : 137
Date d'inscription : 02/08/2014

http://www.geodelos.com

Revenir en haut Aller en bas

Re: TUTORIEL : Un petit topo sur les SMS … de quoi comprendre le pourquoi du comment !

Message  steph44 le 3/9/2014, 2:20 pm

Steelson a écrit:google calendrier : pas plus de 2 ou 3 sms / jour
J'avoue que sur ce point, je ne suis pas tout à fait d'accord.
Par exemple ,aujourd'hui j'ai reçu (pour l'instant car la journée n'est pas terminée) 6 SMS via le script que j'ai décrit :


=> Où as-tu vu cette limitation à 2 ou 3 SMS/jour ?
avatar
steph44
Modérateur

Messages : 2897
Date d'inscription : 30/10/2012
Localisation : 44

Revenir en haut Aller en bas

Re: TUTORIEL : Un petit topo sur les SMS … de quoi comprendre le pourquoi du comment !

Message  Steelson le 3/9/2014, 2:23 pm

Tu as de la chance !!! moi cela coupe.
En parallèle j'avais IFTTT et Google calendrier ... au bout d'un moment Google flanchait !
Je vais refaire des tests, ce serait une bonne nouvelle alors !

Reste le problème de jamaique62 alors ...
avatar
Steelson
Habitué
Habitué

Messages : 137
Date d'inscription : 02/08/2014

http://www.geodelos.com

Revenir en haut Aller en bas

Re: TUTORIEL : Un petit topo sur les SMS … de quoi comprendre le pourquoi du comment !

Message  steph44 le 3/9/2014, 2:27 pm

Steelson a écrit:Tu as de la chance !!!
Je ne suis pas un expert, mais je ne pense pas qu'il s'agit de chance Very Happy
Sais-tu s'il existe un historique des alertes SMS envoyées par google quelque part ?
avatar
steph44
Modérateur

Messages : 2897
Date d'inscription : 30/10/2012
Localisation : 44

Revenir en haut Aller en bas

Re: TUTORIEL : Un petit topo sur les SMS … de quoi comprendre le pourquoi du comment !

Message  jamaique62 le 3/9/2014, 2:32 pm

Si je comprend bien, le fait que le mail google soit estampillé " Envoi SMS" signifie bien que le script a été exécuté correctement et le SMS envoyé, non?

jamaique62
Habitué
Habitué

Messages : 63
Date d'inscription : 14/01/2014
Localisation : Pas de Calais

Revenir en haut Aller en bas

Re: TUTORIEL : Un petit topo sur les SMS … de quoi comprendre le pourquoi du comment !

Message  Steelson le 3/9/2014, 2:35 pm

Non cela ne suffit pas.
Il est estampillé par le filtre de Google à l'arrivée du message.

Ensuite le script doit s'exécuter à la fréquence définie (voir déclencheurs). Selon le script choisi, le mail change d'état (supprimé, ou non lu --> lu).
avatar
Steelson
Habitué
Habitué

Messages : 137
Date d'inscription : 02/08/2014

http://www.geodelos.com

Revenir en haut Aller en bas

Re: TUTORIEL : Un petit topo sur les SMS … de quoi comprendre le pourquoi du comment !

Message  Steelson le 3/9/2014, 2:43 pm

steph44 a écrit:
Steelson a écrit:Tu as de la chance !!!
Je ne suis pas un expert, mais je ne pense pas qu'il s'agit de chance Very Happy
Sais-tu s'il existe un historique des alertes SMS envoyées par google quelque part ?
Je n'ai pas trouvé !

Par contre, voir ceci :
support google a écrit:
https://support.google.com/calendar/answer/36589?hl=en
You might have reached the limit for SMS notifications.
There is a limit to the number of SMS notifications you can receive each day. This limit shouldn't affect most users, but it's something to keep in mind if you've scheduled a large number of events and are no longer receiving SMS notifications.
Et ici la question posée ...
https://productforums.google.com/forum/#!topic/calendar/eYDE5H3Yu7s

avatar
Steelson
Habitué
Habitué

Messages : 137
Date d'inscription : 02/08/2014

http://www.geodelos.com

Revenir en haut Aller en bas

Re: TUTORIEL : Un petit topo sur les SMS … de quoi comprendre le pourquoi du comment !

Message  jamaique62 le 3/9/2014, 2:46 pm

Voici le script que j utilise
function EnvoiSMS() {
var label = GmailApp.getUserLabelByName('Envoi SMS');
var threads = label.getThreads();
var now = new Date().getTime();
var cal = CalendarApp.getCalendarsByName('myfox');
for(i in threads){
cal[0].createEvent('Alerte MYFOX '+threads[i].getFirstMessageSubject(), new Date(now+60000), new Date(now+60000)).addSmsReminder(0);
//threads[i].moveToTrash();
 }
 label.removeFromThreads(threads);
}

jamaique62
Habitué
Habitué

Messages : 63
Date d'inscription : 14/01/2014
Localisation : Pas de Calais

Revenir en haut Aller en bas

Re: TUTORIEL : Un petit topo sur les SMS … de quoi comprendre le pourquoi du comment !

Message  Steelson le 3/9/2014, 2:53 pm

En première lecture c'est ok.
Est- ce que le "pseudo rendez-vous" est bien créé dans l'agenda ?

Il peut s'agir d'un problème lié à une "suite" de la conversation puisqu'elle n'est pas supprimée !

J'aurais tendance à utiliser ceci (je laisse la conversation en place en la marquant lue) :

Code:
function EnvoiSMS() {
  var libelle = GmailApp.getUserLabelByName('Envoi SMS');
  var conversation = libelle.getThreads();
  var maintenant = new Date().getTime();
  var calendrier = CalendarApp.getCalendarsByName('myfox');
  for(i in conversation){
    if(conversation[i].isUnread()){
      var message = conversation[i].getMessages()[Number(conversation[i].getMessageCount()-1)];
      calendrier[0].createEvent('Alerte MYFOX '+message.getSubject(), new Date(maintenant+60000), new Date(maintenant+60000)).addSmsReminder(0);  
      conversation[i].markRead();
    }
  }
}
avatar
Steelson
Habitué
Habitué

Messages : 137
Date d'inscription : 02/08/2014

http://www.geodelos.com

Revenir en haut Aller en bas

Re: TUTORIEL : Un petit topo sur les SMS … de quoi comprendre le pourquoi du comment !

Message  steph44 le 3/9/2014, 3:04 pm

Steelson a écrit:
steph44 a écrit:
Steelson a écrit:Tu as de la chance !!!
Je ne suis pas un expert, mais je ne pense pas qu'il s'agit de chance Very Happy
Sais-tu s'il existe un historique des alertes SMS envoyées par google quelque part ?
Je n'ai pas trouvé !

Par contre, voir ceci :
support google a écrit:
https://support.google.com/calendar/answer/36589?hl=en
You might have reached the limit for SMS notifications.
There is a limit to the number of SMS notifications you can receive each day. This limit shouldn't affect most users, but it's something to keep in mind if you've scheduled a large number of events and are no longer receiving SMS notifications.
Et ici la question posée ...
https://productforums.google.com/forum/#!topic/calendar/eYDE5H3Yu7s

Merci pour les liens.
Il y a semble-t-il bien une limitation. Par contre, pas d'info sur la valeur de cette limitation.
Peut-être utilises-tu les alertes SMS via google pour d'autres applications qui consommeraient le crédit SMS ?
avatar
steph44
Modérateur

Messages : 2897
Date d'inscription : 30/10/2012
Localisation : 44

Revenir en haut Aller en bas

Re: TUTORIEL : Un petit topo sur les SMS … de quoi comprendre le pourquoi du comment !

Message  jamaique62 le 3/9/2014, 3:08 pm

OUI, je confirme que le pseudo RV est bien crée ds l agenda myfox....

jamaique62
Habitué
Habitué

Messages : 63
Date d'inscription : 14/01/2014
Localisation : Pas de Calais

Revenir en haut Aller en bas

Re: TUTORIEL : Un petit topo sur les SMS … de quoi comprendre le pourquoi du comment !

Message  Steelson le 3/9/2014, 4:05 pm

Donc ton script fonctionne parfaitement ! rien à changer.
Reste la limitation "fantomatique" des sms Google ! essaye ce soir ou demain.
avatar
Steelson
Habitué
Habitué

Messages : 137
Date d'inscription : 02/08/2014

http://www.geodelos.com

Revenir en haut Aller en bas

Re: TUTORIEL : Un petit topo sur les SMS … de quoi comprendre le pourquoi du comment !

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum