Born to be wired
716865 visites
Uptime 53 days

Bonne année, <insert_name_here> !

 18 janvier 2013  Domotique  4 commentaires
tbird-addess-book

Avertissement  : le contenu suivant est susceptible de heurter la sensibilité des personnes pourvues d’un minimum de sens moral.

Quand on est djeun’s, qu’on a plus de 500 amis sur tous ses réseaux sociaux confondus, et un forfait avec SMS illimités (ce qui aujourd’hui est à portée d’à peu près tout le monde, vu que ça coûte 0 euros chez Free), on est soumis à une rude problématique le soir de la Saint Sylvestre : comment ne pas perdre trop de temps à envoyer des SMS de bonne année à tous ses contacts, pour profiter au maximum de la soirée sans rester pendu à son mobile, tout en montrant ostensiblement et avec classe sa présence sur les réseaux sociaux ?

Première possibilité, on peut envoyer le message « Salut Raoul, je te souhaite une bonne année, une bonne santé, amour et bonheur. » à Raoul, puis copier le même message à chacun de ses 499 autres contacts, en prenant bien soin de remplacer « Raoul » par le prénom de chaque destinataire. Mais rédiger 500 SMS de cette manière s’avère inexorablement fastidieux et chronophage.

Seconde possibilité, on peut envoyer le message « Je te souhaite une bonne année, une bonne santé, amour et bonheur. » en une seule fournée à ses 500 contacts, qui apprécieront certainement que vous ayez pensé à eux, mais qui n’étant pas dupes percevront le caractère un tantinet impersonnel du message, leur prénom n’y figurant pas.

La solution, c’est le bulk SMS automatisé, ou en d’autres termes, l’envoi automatisé de SMS en masse. Avec une subtilité, cet envoi est basé sur un template et le prénom du destinataire est inséré dans chaque message. Simplement machiavélique. En attendant la mise à disposition de ce type d’application sur votre smartphone préféré, voici une solution custom utilisant la technique de l’envoi de SMS automatisé expérimentée dans mon billet précédent.

Pour commencer, il est nécessaire d’avoir les informations de ses contacts accessibles, on distinguera en particulier leur prénom et numéro de téléphone mobile. On pourra se contenter d’une extraction CSV de son carnet d’adresses, par exemple. Mais comme j’aime bien relever les défis, je vais partir d’un peu plus loin.

Utilisation d’un annuaire LDAP

Je mûris l’idée depuis plusieurs mois de centraliser tous mes contacts dans un annuaire LDAP. Le premier  avantage, c’est la possibilité d’interconnexion de LDAP avec différents systèmes : logiciels de messagerie, webmail, téléphone mobile ou tablette via une plate-forme de synchronisation, téléphones SIP… Le second avantage, c’est la centralisation de ces informations, c’est à dire que les contacts à jour sont référencés à un seul et unique endroit. Leur modification s’opère soit manuellement sur cette base centrale, soit via une synchronisation avec d’autres appareils. Par exemple : si Luc change de numéro de téléphone, je mets à jour le n° de Luc dans mon mobile, qui est synchronisé à intervalles réguliers avec la base centrale, qui s’occupe de synchroniser à son tour mon Thunderbird et mes contacts Windows. Simple comme un coup de fil.

Pour commencer, j’ai donc installé un service OpenLDAP sur ma VM Debian de test et importé dans la structure de l’annuaire la classe mozillaAbPersonAlpha nécessaire à la création de contacts accessibles via Thunderbird. Je ne détaille volontairement pas cette étape, j’y reviendrai si jamais je décide de rédiger un article précis et sérieux sur l’intégration d’un annuaire LDAP avec d’autres types de services, ce qui est un de mes projets à terme.

Une fois le schéma créé, on peut se connecter à l’annuaire et commencer à créer des contacts. J’utilise JXplorer pour cela, mais n’importe quel outil de browsing LDAP conviendrait. J’ai créé deux contacts dans mon annuaire pour l’exemple : Jean-Philippe et Leslie.

jxplorer

Vous noterez certainement le caractère sensiblement en dessous de la ceinture en ce qui concerne le choix du nom de mes protagonistes cités en exemple, mais je me suis dit qu’il passeraient probablement mieux que d’autres inspirations, comme Ralph Duveldive, qui aurait pu paraitre assez politiquement incorrect.

Une fois mes contacts présents dans l’annuaire, je vérifie les possibilités d’intégration avec Thunderbird : j’ajoute un nouveau serveur d’annuaire au niveau de l’écran des carnets d’adresses, et je remplis les coordonnées d’accès de mon annuaire LDAP. Là encore, je ne détaille pas la procédure plus que cela. Ce qui est important, c’est que quand je lance une recherche dans les carnets d’adresses de Thunderbird, les contacts que j’ai créés dans l’annuaire LDAP soient trouvés.

tbird-addess-book

Récupération des informations de l’annuaire

Après avoir validé cette première possibilité d’intégration de l’annuaire LDAP pour le fun, passons au vif du sujet, c’est à dire l’envoi de SMS en masse. La problématique est toujours d’extraire les informations utiles (prénom et numéro de téléphone) de l’annuaire. Pour cela, on peut utiliser l’outil ldapsearch. Voyons un exemple de sortie avec quelques paramètres de recherche. Je commence par rechercher, à partir du nœud où je les ai créés, tous les enregistrements ayant la classe mozillaAbPersonAlpha, en d’autres termes tous mes contacts Thunderbird précédemment créés avec JXplorer, et j’affiche uniquement les informations qui m’intéressent, à savoir, si vous suivez un peu, le prénom et le numéro de mobile.

Commande :

ldapsearch -x -LLL -h dhalsim.alphak.net -b "cn=vince, ou=Contacts, dc=alphak, dc=net" 'objectClass=mozillaAbPersonAlpha' givenName mobile

Sortie :

dn: cn=Jean-Philippe Hervite-Monslip,cn=vince,ou=Contacts,dc=alphak,dc=net
givenName: Jean-Philippe
mobile: +33611223344

dn: cn=Leslie Pancuir-Sagrate,cn=vince,ou=Contacts,dc=alphak,dc=net
givenName: Leslie
mobile: +33699887766

Pas mal. Maintenant, on applique un léger formatage sur cette sortie afin de générer des données exploitables par le script de bulk SMS.

Commande :

ldapsearch -x -LLL -h dhalsim.alphak.net -b "cn=vince, ou=Contacts, dc=alphak, dc=net" 'objectClass=mozillaAbPersonAlpha' givenName mobile | grep -v ^dn: | sed 's/^.*: //' | gawk 'BEGIN{RS="\n\n";FS="\n";OFS=";"}{print $1,$2}' > /tmp/contacts.txt
cat /tmp/contacts.txt

Sortie :

Jean-Philippe;+33611223344
Leslie;+33699887766

Impec.

Envoi en masse

Il ne reste plus qu’à créer un script minimaliste qui lit ce fichier, dépile chaque ligne l’une après l’autre, parse les informations de prénom et de n° de mobile pour chaque ligne, et déclenche l’envoi de SMS grâce à gnokii. Ce script, nommé par exemple smsprank.sh,  pourrait ressembler à cela :

#/bin/bash

# smsprank.sh
# A useless and inglorious tool for sending bulk SMS based on a template
# Copyright (C) 2013 AlphaK - www.alphak.net
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

LOG=/tmp/sms.log
MSG='Une très bonne année à toi %N ! Que tous tes voeux se réalisent !'

for LINE in $(cat /tmp/contacts.txt) ; do

	# Split Name / phone number
	NAME=$(echo $LINE | cut -d';' -f1)
	TEL=$(echo $LINE | cut -d';' -f2)

	# Check that we have a non-empty first name and a valid phone number for France
	if [ -n "$NAME" -a -n "$TEL" -a "$(echo "$TEL" | cut -b1-4)" = '+336' ] ; then

		# Replace %N by the real name in bulk message
		REALMSG=$(echo $MSG | sed "s/%N/$NAME/")
		echo "$TEL => $REALMSG" | tee -a $LOG

		# Run the prank!
		echo "$REALMSG" | gnokii --sendsms "$TEL" >> $LOG 2>&1
	fi
done

C’est terminé, on peut maintenant lancer le script, admirer les SMS partir dans la nature à un rythme effréné, et mettre les doigts de pied en éventail en pensant au réconfort des destinataires lorsqu’ils liront ce message « personnalisé » !

smsprank

Évidemment, maintenant que cette technique d’odieux connard est en place, on peut « croniser » le déclenchement du script afin de le lancer tous les 31 décembre, 3 ou 4 minutes avant minuit, afin d’éviter l’habituel rush de communications entrainant la saturation des canaux téléphoniques des soirs de Saint Sylvestre (bien que les opérateurs aient fait beaucoup de progrès dans ce domaine par rapport à ce qu’on pouvait constater il y a une dizaine d’années).

Éventuellement, penser à changer le message du template tous les ans, histoire de pouvoir continuer à profiter de cette technique d’odieux connard dénué de moralité sans se faire griller.

Conclusion

Voila, c’était une expérience complètement idiote, amorale et inutile, mais je dois avouer que j’ai pris beaucoup de plaisir à imaginer et à mettre en place un tel concept, car cela montre un aperçu des innombrables possibilités offertes par le couplage d’une plate-forme d’envoi de SMS avec d’autres systèmes. Comme je l’avais déjà évoqué, l’un de mes intérêts principaux réside en réalité dans la possibilité de notification par SMS sur la base d’informations envoyées par mon système domotique en cours de mise en place (exemples : détection d’intrusion, détection de mouvement, coupure d’électricité, coupure d’internet…)

Avant de rendre l’antenne, il me reste une dernière chose à accomplir, puisque selon la coutume la date limite pour formuler ses vœux s’arrête fin janvier :

Une très bonne année à toi, lecteur ! Que tous tes vœux se réalisent !

4 commentaires pour “Bonne année, <insert_name_here> !”

  1. Jean Frémi - DOREUR

    Je me mefierai de tes sms d’anniversaire et de bonne année a present.

  2. AlphaK

    À plus forte raison si tu vois ton prénom à l’intérieur :)

  3. JNL

    Bjr,
    Au fil de mes recherches sur internet, je suis tombé sur vos articles. Evoluant dans le domaine de la logistique, je souhaite disposer d’un système d’envois de SMS (comparable à celui que vous venez de décrire) pour la notification d’arrivée d’expéditions à des destinataires distincts. Si sur le plan technique, j’ai bien compris le principe de votre démonstration, pouvez-vous m’éclairer sur le matériel dont je dois m’équiper pour la mise en place de cette plate forme (modem GSM…. )

  4. AlphaK

    Bonjour,
    C’est exact, le modem GSM est une bonne solution. J’ai moi-même investi dans un de ces appareils, pour gérer l’envoi de SMS (la gestion de la voix et des data ne m’intéresse pas). Ne souhaitant pas investir trop d’argent dans ce projet, j’ai opté pour un appareil du constructeur Wavecom (cheap au possible et adapté pour une solution custom avec peu de trafic, mais ne conviendrait peut-être pas pour une solution industrielle avec forte volumétrie de SMS).
    Je donnerai plus de détails sur l’utilisation de ce modem dans un prochain article.

Laisser un commentaire