SlideShare uma empresa Scribd logo
1 de 18
Baixar para ler offline
Document libre Blog sonzahi.blogspot.com
Mise en place d'une plate-forme SMS avec
exemple de traitement automatique de contenu
Sommaire
Introduction
1- Installation
** Nos besoins matériels
** Aménageons notre environnement de travail
** Configurons notre modem
2- Mise en place de notre serveur sms
** La configuration du Daemon de gammu
** Envoi de sms
** Réception et stockage des messages
3- Traitement automatique des sms
** Modification de la base de données
** Création des fichiers nécessaires à l'exécution automatique
** Modification du daemon de gammu
** Modification du fichier ''connexion.php''
** Modification du fichier ''bonheur.php''
4- Tirage au sort automatique des gagnants
** Création du fichier ''gagnant.php''
** Exécution automatique: tous les jours à 18h 00mn 00s
5- Conclusion
Erreur courantes
- RunOnReceive ne fonctionne pas
- Messages en ligne de commande ne passe pas
Introduction
Depuis l'envoi du premier sms, le 03 Décembre 1992, par Neil Papworth, la technologie des
messages à 160 caractères a connue un fulgurant essor.
L'envoi d'un sms est devenu un fait ordinaire et courant à tous les niveaux de l'échelle social.
Simple d'utilisation et pratique, il se revêt être un outil efficient pour une campagne à grande
échelle.
Document libre Blog sonzahi.blogspot.com
Le tutoriel ci-dessous vise à permettre à toute personne l'appliquant de posséder une base solide
dans la conception de serveur sms avec traitement du contenu des messages, ce avec la conception
d'une plate-forme sms simulant un jeux simple par sms.
Notre jeux durera juste une semaine et consistera à envoyer par sms « jeu*bonheur » afin de
participer à un jeu qui donne des millions.
Et disons que quotidiennement on tirera au sort un participant à qui on enverra via notre plate-forme
un message pour qu'il récupère son lot.
Et le vendredi, on tire au sort un participant qui remportera la grande cagnotte de 5.000.000 FCFA,
(faisons lui une fleur pour son week-end, dans tous les cas on y perd rien en fait!!!).
1- Installation
Afin de réaliser notre application, des pré-requis s'imposent.
Tout d'abord précisons que nous travaillerons sur des logiciels libres.
Donc vous n'aurez rien à débourser.
Voilà qui nous réjouit, maintenant !
Ces derniers sont les suivants :
- Gammu : Pour gérer le modem (l'envoi
de SMS, la gestion du répertoire , la gestion des appels, la création de sauvegardes des messages, et
répertoire…)
- Wammu : Interface graphique pour Gammu
- Apache : Notre serveur web
- PHP 5 : Notre langage de programmation
- MySQL : Notre système de gestion de bases de données
- PhpMyAdmin : l'interface web pour la gestion graphique de notre base de données
- Gammu-smsd : Le Daemon de Gammu, il permet le stockage, la réception et l'envoi des SMS.
** Nos besoins matériels
Bref ! De quoi à t-on besoin pour commencer ?
Ok ! Au niveau du matériel, pas grand-chose juste :
- un ordinateur avec une distribution GNU/Linux
(ici, afin que nous ayons le même rendu, je préconise Ubuntu 14.04 LTS, sur lequel se fera ledit
tutoriel.
Bon ! Chacun est libre de choisir sa distribution à ses risques et périls ! Beuf!)
- Un téléphone portable pouvant servir de modem ou une clé internet avec une carte SIM.
(Juste un coucou à nos friands des téléphones « Chine-toc », veuillez vous abstenir SVP! Sinon
essayez pour voir, c'est peut-être votre jour de chance !)
- Un câble USB pour relier le modem ou téléphone à l'ordinateur.
- Créditer votre carte SIM d'au moins 5 sms pour les testes.
Voilà juste ça pour le matériel.
** Aménageons notre environnement de travail
Ensuite nous déployons notre environnement de travail avec les instructions suivantes :
Document libre Blog sonzahi.blogspot.com
- On met à jour nos paquets
serenite@Serenity:~$ sudo apt-get update
- On met à jour notre distribution
serenite@Serenity:~$ sudo apt-get upgrade
- On déploie notre environnement web (apache, serveur mysql, php5 et phpmyadmin)
serenite@Serenity:~$ sudo apt-get install apache2 libapache2 mod-php5 php5 mysql-server
php5-mysql phpmyadmin
- On installe Gammu, Wammu, Wvdial, Gammu-smsd
serenite@Serenity:~$ sudo apt-get install gammu
serenite@Serenity:~$ sudo apt-get install wammu
serenite@Serenity:~$ sudo apt-get install wvdial
serenite@Serenity:~$ sudo apt-get install gammu-smsd
Ouf ! Enfin, fini les longues attentes, on peut commencer à travailler !!!
Configurons notre modem
NB : j'utiliserais le terme « modem » pour désigner votre téléphone portable ou votre clé.
Connectez votre modem à votre ordinateur.
1- On lance l'assistant de configuration de wammu
serenite@Serenity:~$ sudo wammu-configure
- Alors, on obtient cette fenêtre
- cliquer sur « Next > »
Document libre Blog sonzahi.blogspot.com
- choisissez l'option "recherche automatique de téléphones" et cliquez sur "Next".
- choisissez l'option « recherche de connexion » et patientez pendant 10 à 15 minutes.
- Cette fenêtre s'ouvre avec la dernière ligne indiquant le nombre de téléphones détectés. Si au
moins un modem est détecté, cliquer sur « Next » sinon reprenez le processus de recherche (fenêtre
« recherche automatique de téléphones) en choisissant d'autre option.
- Ici on choisi un modem, tout en mentionnant au brouillon les parties « /dev/tty… utilisant at... »,
puis on valide.
Document libre Blog sonzahi.blogspot.com
- Vérifions que notre modem a bien été détecté par gammu
Deux possibilités s'offrent à nous :
* serenite@Serenity:~$ sudo gammu --identify
Périphérique : /dev/ttyUSB0
Fabricant : Huawei
Modèle : unknown (EG162G)
Firmware : 11.001.10.00.000
IMEI : 353474023727472
SIM IMSI : 612030207358750
* serenite@Serenity:~$ sudo wvdialconf
Editing `/etc/wvdial.conf'.
Scanning your serial ports for a modem.
ttyS0<*1>: ATQ0 V1 E1 -- failed with 2400 baud, next try: 9600 baud
ttyS0<*1>: ATQ0 V1 E1 -- failed with 9600 baud, next try: 115200 baud
ttyS0<*1>: ATQ0 V1 E1 -- and failed too at 115200, giving up.
Modem Port Scan<*1>: S1 S2 S3 S4 S5 S6 S7 S8
Modem Port Scan<*1>: S9 S10 S11 S12 S13 S14 S15 S16
Modem Port Scan<*1>: S17 S18 S19 S20 S21 S22 S23 S24
Modem Port Scan<*1>: S25 S26 S27 S28 S29 S30 S31
ttyUSB0<*1>: ATQ0 V1 E1 -- OK
ttyUSB0<*1>: ATQ0 V1 E1 Z -- OK
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 -- OK
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 -- OK
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 -- OK
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK
ttyUSB0<*1>: Modem Identifier: ATI -- Manufacturer: huawei
ttyUSB0<*1>: Speed 9600: AT -- OK
ttyUSB0<*1>: Max speed is 9600; that should be safe.
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK
ttyUSB1<*1>: ATQ0 V1 E1 -- failed with 2400 baud, next try: 9600 baud
ttyUSB1<*1>: ATQ0 V1 E1 -- failed with 9600 baud, next try: 9600 baud
ttyUSB1<*1>: ATQ0 V1 E1 -- and failed too at 115200, giving up.
ttyUSB2<*1>: ATQ0 V1 E1 -- OK
ttyUSB2<*1>: ATQ0 V1 E1 Z -- OK
ttyUSB2<*1>: ATQ0 V1 E1 S0=0 -- OK
ttyUSB2<*1>: ATQ0 V1 E1 S0=0 &C1 -- OK
ttyUSB2<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 -- OK
ttyUSB2<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK
ttyUSB2<*1>: Modem Identifier: ATI -- Manufacturer: huawei
ttyUSB2<*1>: Speed 9600: AT -- OK
ttyUSB2<*1>: Max speed is 9600; that should be safe.
ttyUSB2<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK
Found a modem on /dev/ttyUSB0.
Modem configuration written to /etc/wvdial.conf.
ttyUSB0<Info>: Speed 9600; init "ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0"
ttyUSB2<Info>: Speed 9600; init "ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0"
Document libre Blog sonzahi.blogspot.com
Nous constatons que notre modem est bien détecté.
2- Mise en place de notre serveur sms
La configuration du Daemon de gammu
Nous allons, maintenant configurer le Daemon de gammu (gammu-smsd)
serenite@Serenity:~$ sudo gedit /etc/gammu-smsdrc
Voici la configuration de notre fichier
il est composé de deux grandes parties
1- [gammu] : pour la configuration de la librairie de gammu (le modem)
2- [smsd] : partie des instructions à réaliser par le daemon
*********** debut du fichier gammu-smsdrc **********
# Configuration file for Gammu SMS Daemon
# Gammu library configuration, see gammurc(5)
[gammu]
# Please configure this!
//modifier en fonction des données renvoyées par gammu – - identify ou wvdialconf
port = /dev/ttyUSB0
connection = at19200
# Debugging
#logformat = textall
# SMSD configuration, see gammu-smsdrc(5)
[smsd]
Service = SQL
Driver = native_mysql // Driver de la base de données MySql
logfile = /var/log/gammu.log // fichier journal
#pin = 0000 // code pin de la SIM
#Accès à la base de données Mysql
User = root // identifiant administrateur pour phpmyadmin
Password = JdEElaor14789 // mot de passe pour phpmyadmin
PC = localhost // indique la station ou est installé notre serveur
Database = jeu // la base de données
#Gestion des temps de connexion
MaxRetries = 3 // nombre d'essai
checksecurity = 0
PhoneID = Huawei // nom du modem
transmitformat = auto
# Increase for debugging information
debuglevel = 1
Document libre Blog sonzahi.blogspot.com
# Paths where messages are stored
inboxpath = /var/spool/gammu/inbox/
outboxpath = /var/spool/gammu/outbox/
sentsmspath = /var/spool/gammu/sent/
errorsmspath = /var/spool/gammu/error/
************ fin gammu-smsdrc **********************
Pour plus d'info sur les possibilités pour la configuration de ce fichier, visitez la page détaillant la
configuration du daemon de gammu à cette adresse (c'est en anglais, mais assez compréhensible.):
SMSD Configuration File
Pour approfondir vos connaissances sur gammu, visitez le manuel de gammu, ici.
A ce niveau gammu à plein accès à notre modem.
On peut déjà
- Lister les messages stockés, dans la boîte de reception avec :
« gammu --getallsms »
- Lister les numéros de notre répertoire téléphonique avec :
« gammu --getallmemory SM »
Et bien d'autres encore… Si vous en voulez plus, n'hésitezz pas de vous reférer au manuel de
gammu. Ou dans votre terminal, entrez '' man gammu ''.
** Envoi de sms
Notre système est maintenant prêt à envoyer des sms. En ce qui concerne la réception de sms, on
n'est pas tout à fait prêt, car il nous faudra créer une base de données avec les schemas de gammu,
ce qu'on fera dans peu de temps.
Pour l'instant testons l'envoie de sms à partir de notre terminal,
avec la commande suivante :
serenite@Serenity:~$ echo "bonsoir test d'envoi par cmd" | gammu --sendsms TEXT
+22507xxxxxx If you want break, press Ctrl+C...
Sending SMS 1/1....waiting for network answer..OK, message reference=66
Formidable !!! Message bien envoyé.
Cette ligne « Sending SMS 1/1....waiting for network answer..OK, message reference=66 »
Nous donne le nombre de message transmis et nous indique la réponse du réseaux à notre requête,
qui est ici, « OK ».
** Réception et stockage des messages
Maintenant, que notre système peut envoyer des sms, nous allons créer notre base de données afin
de stocker les messages que nous recevrons.
Pour cela, allons un peu en mode graphique. Cela ne veut en aucun cas dire que ce n'est pas possible
de le faire en ligne de commande. A bon entendeur… salut !
Document libre Blog sonzahi.blogspot.com
Bien, ouvrons Firefox, et dans la barre d'adresse, entrons : « localhost/phpmyadmin », ce qui nous
ouvre cette page.
Ensuite entrons notre mot de passe et validons, pour accéder à cette page.
Entrons le nom de notre base de données à créer. Dans notre cas, entrons « jeux », et cliquons sur
créer.
Document libre Blog sonzahi.blogspot.com
Cool ! Notre base de données est créée.
Maintenant importons les schemas de gammu pour la base de données.
Cliquez sur l'onglet « importer », ensuite sur le boutons parcourir et importons le fichier
''mysql.sql.gz'' dans /usr/share/doc/gammu/examples/sql/, puis cliquez sur exécuter.
Notre base de données « jeux » est enfin prête. Testons, maintenant la sauvegarde de nos
messages reçus dans cette dernière.
C'est simple, envoyez juste un message au numéro de la puce se trouvant dans votre modem.
Ensuite actualiser la page de PhpMyAdmin (si vous ne l'aviez pas fermée), sinon ouvrez la à
nouveau. Et vérifier que votre message se trouve bien dans la table ''inbox'' de votre base de
données ''jeux''.
Si votre message ne s'y trouve pas, prière de vérifier à nouveau la configuration de votre fichier ''
gammu-smsdrc '', principalement dans la partie '' Accès à la base de données MySql ''.
Ok ! Ici, tous marche bien.
En somme notre système est capable d'envoyer, de recevoir et de stocker dans une base de
données nos sms.
Notre serveur sms est fin prêt et opérationnel.
Dans la partie suivante nous verrons comment automatiser un traitement du contenu des messages
reçus, afin de générer des messages prédéfinis.
3- Traitement automatique des sms
C'est à ce niveau que comment les choses amusantes et sérieuses aussi. C'est là que
notre jeux ou notre système prend toute son importance.
Dans cette partie nous automatiserons l'exécution d'un script, nous créerons la ou les
tables adéquates dans notre base de données et configurerons notre script selon notre
convenance, afin de réaliser notre objectif.
Document libre Blog sonzahi.blogspot.com
** Modification de la base de données
Pour notre jeu, on aura juste besoin d'une seule table qu'on nommera '' bonheur '' avec
les champ suivants :
id : identifiant du sms
numero : Numéro du participant
jour : la date de réception du sms
Ouvrez votre table dans PhpMyAdmin et cliquez sur l'onglet ''SQL'', puis collez-y le
code sql suivant et exécutez.
Code sql :
CREATE TABLE bonheur
(
id bigint(20) NOT NULL AUTO_INCREMENT,
numero varchar(15) NOT NULL,
jour varchar(10) NOT NULL,
PRIMARY KEY (id)
)
** Création des fichiers nécessaires à l'exécution automatique
- rendez vous dans votre localhost
serenite@Serenity:~$ cd /var/www/html
Dans votre localhost (/var/www/html/) créer les éléments suivants :
- le dossier jeu
$ mkdir jeu
Document libre Blog sonzahi.blogspot.com
- rendez vous dans ce dossier
$ cd jeu
- créez
$ nano connexion.php
entrez les 2 lignes suivantes
1- <?php
2- ?>
Enregistrez (ctrl+x)
$ nano bonheur.php
entrez les 3 lignes suivantes
1- # !/usr/bin/php
2- <?php
3- ?>
Enregistrez (ctrl+x)
$ nano daemon.sh
Entrez les 06 lignes suivantes
1- #!/bin/sh
2- # Configure this (use absolute path)
3- PHP=/usr/bin/php
4- DAEMON=/var/www/html/jeu/daemon.php
5- # Execute
6- $PHP $DAEMON
Enregistrez (ctrl+x)
Exemple:
Document libre Blog sonzahi.blogspot.com
** Modification du daemon de gammu
- ouvrez le fichier gammu-smsdrc
serenite@Serenity:~$ sudo /etc/gammu-smsdrc
- Ajoutez-y les lignes suivantes dans la partie [smsd]
1- # Action à exécuter dès réception d'un sms
2- RunOnReceive=/var/www/html/jeu/daemon.sh
** Modification du fichier ''connexion.php''
Ouvrez le fichier ''connexion.php'' et collez-y les lignes suivantes :
N'oubliez pas de modifier ''root'' par votre identifiant et '' JdEElaor14789'' par votre mot
de passe d'accès à phpmyadmin.
***** début connexion.php *******
/*
* Connexion à la Base de données
*/
global $db;
$db = null;
try {
$db = new PDO('mysql:host=localhost;dbname=jeu;charset=utf8', 'root',
'JdEElaor14789');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (Exception $e) {
error_log($e->getMessage());
}
********** fin fichier ***********
** Modification du fichier ''bonheur.php''
Ce fichier est extrêmement important, dans la réussite de votre projet.
Je vous demanderais donc de lui accorder une attention toute particulière.
On l'expliquera, ne vous en faite pas !
Mais je vous demanderez de ne pas faire de copier-coller à ce niveau, il est possible
que vous ayez des bugs.
Ainsi je vous conseille de le construire méticuleusement, étape par étape.
********** début bonheur.php ***********
#!/usr/bin/php
<?php
/*
|---------------------------------------------------------------
| Sms Application (SA) --- Serenite 489
Document libre Blog sonzahi.blogspot.com
|---------------------------------------------------------------
*/
/* –------- partie 1 –------- */
require('db_connect.php');
$nb=null;
$requete="SELECT ID, TextDecoded, SenderNumber from inbox where readed='false';";
$donne=$db->prepare($requete);
$donne->execute();
$nb=$donne->rowCount();
/*---------fin partie 1 --------- */
/* -------- partie 2 ------------ */
if ($nb!=0) /* marqueur 1 */
{
/* marqueur 2 */
while ($value=$donne->fetch(PDO::FETCH_OBJ))
{
/* –------- marqueur 3 –------ */
$SenderNumber=$value->SenderNumber;
$TextDecoded_1=trim($value->TextDecoded);
$ID=$value->ID;
list($TextDecoded, $Var_1)=explode("*",$TextDecoded_1);
$keyword=strtolower($Var_1);
$TextDecoded=strtolower($TextDecoded);
/* –------- fin marqueur 3 –------ */
/* –------- marqueur 4 –------ */
if ($TextDecoded=="jeu"){ //Verification de syntaxe "jeu"
if ($keyword=="bonheur"){ //Verification de syntaxe "bonheur"
$date = gmdate("Y-m-d ») ;
$text = utf8_decode("LSA | Jeu Bonheur : Votre inscription a bien été prise en compte.
Augmentez vos chances en jouant encore plus.");
$sql="INSERT INTO bonheur (numero, jour) values('$SenderNumber', $date)";
$inserer=$db->prepare($sql);
$inserer->execute();
shell_exec ('echo "'.$text.'" | gammu --sendsms TEXT '.$SenderNumber);
} else{ // si different de bonheur
$text = utf8_decode("Votre message ne peut pas être traité par la plateforme Jeu du
bonheur, car il ne respecte pas la syntaxe prédéfinie. Envoyez plutôt « jeu*bonheur »");
shell_exec ('echo "'.$text.'" | gammu --sendsms TEXT '.$SenderNumber);
}
} else{ // si different de jeu
$text = utf8_decode("Votre message ne peut pas être traité par la plateforme Jeu du bonheur,
car il ne respecte pas la syntaxe prédéfinie. Envoyez plutôt « jeu*bonheur »");
shell_exec ('echo "'.$text.'" | gammu --sendsms TEXT '.$SenderNumber);
}
/* –------- fin marqueur 4 –------ */
/* –------- marqueur 5 –------ */
Document libre Blog sonzahi.blogspot.com
$maj="UPDATE inbox SET (readed=:read) where ID=:id ";
$result=$db->prepare($maj);
$result->execute(":id"=>$ID, ":read"=>"true");
/* –------- fin marqueur 5 –------ */
} /* fin marqueur 2 */
} /* –------- fin marqueur 1 –------ */
/* –------- fin partie 2 –------ */
?>
*************** fin fichier ***********
Partie 1 : Dans cette partie, on va rechercher dans chaque ligne de la table ''inbox'' de notre base
de données les lignes où readed='false'. C'est à dire on récupère l'ensemble des messages n'ayant pas
encore été lus. Et la variable $nb, pour en déterminer le nombre.
Partie 2: Ici, nous allons traiter les données réçus de la base de données.
Marqueur 1 : On vérifie si la requête envoyée à a base de données nous ramène bien des lignes
d'informations avant de penser à les traiter.
Logique non ?
Marqueur 2: Convaincu, d'avoir reçu au moins une ligne d'informations de la base de
données. On peut maintenant les traiter. Alors on fait une boucle avec ''while'' pour
traiter chacune des lignes reçues.
Marqueur 3: Dans les lignes 1 à 3, on range dans des variables les données d'une ligne
données. Dans la 4ème ligne on décompose le message envoyé et qu'on a stocker dans la
variable ''$TextDecoded'', en fonction du délimiteur que nous avons choisi. Dans notre
cas le délimiteur est ''*''. Ensuite, on stocke dans des variables différentes les éléments de
part et d'autre du délimiteur.
Dans notre cas, nous devons avoir 2 variables. '$TextDecoded' qui devra contenir 'jeu', et
'Var_1' contiendra 'bonheur'.
Marqueur 4 : Ici, commence le véritable traitement des messages. Tout d'abord, on
vérifie que $TextDecoded contient bien le mot 'jeu', sinon on ramène un message
d'erreur au numero ayant envoyé le message.
Si $TextDecoded contient bien le mot 'jeu', alors continu le traitement.
Ensuite, on vérifie que la deuxième variable '$Var_1' contient le mot 'bonheur', sinon on
ramène un message d'erreur au numero ayant envoyé le message.
Si $Var_1 contient bien le mot 'bonheur', alors on commence le traitement.
On enregistre d'abord le numéro de l'envoyeur dans la table 'bonheur', puis on lui envoie
un message de confirmation de de réception de son inscription.
Document libre Blog sonzahi.blogspot.com
Marqueur 5 : Dans cette partie, nous allons modifier le champs 'readed' de la ligne que
nous venons de traiter en lui affectant la valeur 'true'. De sorte à éviter qu'elle soit prise
en compte à nouveau lors du prochain scanne de la base de données.
Maintenant notre système est prêt à 90 %. Il peut recevoir des sms, les traiter et
répondre à l'envoyeur en fonction du contenu de son message.
Pour cela il suffit juste pour nous de connecter notre modem et de lancer le daemon de
gammu
($ sudo /etc/init.d/gammu-smsd start).
Et nous sommes opérationnel.
4- Tirage au sort automatique des gagnants
Dans cette partie, nous allons créer un script qui se lancera tous les jours à 18h 00mn
00s pour le tirage au sort du gagnant du jour.
** Création du fichier ''gagnant.php''
Toujours dans notre dossier 'jeu', on crée le fichier 'gagnant.php'
$ nano gagnant.php
-------–- contenu du fichier –------------
#!/usr/bin/php
<?php
require('db_connect.php');
$date = gmdate("Y-m-d'') ;
$donne=null;
$sql="SELECT numero from bonheur where jour=".$date.";";
$donne=$db->prepare($sql);
$donne->execute();
$nb=$donne->rowCount();
$i=0;
while ($value=$donne->fetch(PDO::FETCH_OBJ))
{
$result[$i]=$value->numero;
$i++;
}
$winner=rand(0, $nb); // on génère un numero au hasard, qui sera celui du gagnant
$num_winner=$result[$winner];
$jr=date('l') ;
Document libre Blog sonzahi.blogspot.com
if ($jr=='friday'){
$text = utf8_decode("SA | Jeu Bonheur : FELICITATION!!! Vous venez de
remportez 5.000.000 FCFA. Passez à Bonheur-du-code récupérer votre Lot.");
} else {
$text = utf8_decode("SA | Jeu Bonheur : FELICITATION!!! Vous venez de
remportez 50.000 FCFA. Passez à Bonheur-du-code récupérer votre Lot.");
}
shell_exec ('echo "'.$text.'" | gammu --sendsms TEXT
'.$num_winner);
?>
Enregistrez (ctrl+x)
-------------------------- fin fichier ---------------------------------
** Programmation de l'exécution automatique tous les jours à 18h 00mn 00s
Tout d'abord, on rend notre script exécutable :
$ chmod +x /var/www/html/jeu/gagnant.php
Ensuite, on entre la commande suivante :
$ crontab -e
Ce qui nous donne ceci :
no crontab for alex - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/ed
2. /bin/nano <---- easiest
3. /usr/bin/vim.tiny
Choose 1-3 [2]:
A ce niveau on choisi le numero, correspondant à notre éditeur préferé. Pour ma part,
je vous conseil, 'nano', donc le numéro 2.
Puis utilisez la flèche de direction vers le bas pour vous rendre à la fin du fichier. Au
niveau de cette ligne :
# m h dom mon dow command
En dessous entrez la ligne suivante :
0 18 * * * /var/www/html/jeu/gagnant.php
Conclusion
Et voilà ! On est prêt à 100 %.
Notre système, reçoit, stocke, traite, sauvegarde, repond à tous les sms qui lui sont
transmis. Et la cérise sur le gateau, tous les jours à 18h 00mn 00s il tire au sort un
gagnant et lui envoi un message. Tout ça sans l'intervention de quiconque.
Vous savez déjà comment lancer votre système.
Alors Bonne pratique.
Document libre Blog sonzahi.blogspot.com
------------------------------------------------------------------------
Erreurs courantes
** RunOnReceive ne fonctionne pas alors :
1- Dans le daemon de gammu (/etc/gammu-smsdrc), supprimer la ligne du
RunOnReceive
2- Dans votre script ''daemon.sh'' (/var/www/html/jeu/daemon.sh), ajoutez ne boucle
infinie qui encadrera la partie #Execute.
Le code :
while :
do
# Execute
$PHP $DAEMON
sleep 5
done
3- Maintenant pour lancer votre système, après avoir connecté votre modem, il vous
faudra : lancer le daemon de gammu et votre script daemon.sh.
- $ sudo /etc/init.d/gammu-smd start
- $ cd /var/www/html/jeu
- /var/www/html/jeu/ $ sudo bash daemon.sh
Et voilà, C'est pas trop jolie joie, mais ça fait l'affaire !!!
** Messages en ligne de commande ne passe pas
si vous n'arrivez pas à envoyer des messages en ligne de commande, alors exécutez les
commandes suivantes.
Si le message d'erreur est :
Erreur à l'ouverture du périphérique: il n'existe pas.
Essayez de repositionner votre carte SIM et reconnectez votre modem.
Si cela ne marche toujours pas alors exécutez les commandes suivantes :
1- $ sudo groups | grep -q dialout || sudo adduser $USER dialout
2- $ sudo apt-get autoclean
3- $ sudo apt-get clean
4- $ sudo reeboot
5- et relancer les services
Document libre Blog sonzahi.blogspot.com
Voilà, nous sommes à la fin de notre tutoriel. Et j'espère sincèrement vous avoir apporté
ne serait-ce qu'un petit plus!
Ce document peut contenir des bugs ou imperfections, alors je me tiens à votre
disposition pour tout apport, afin de l'améliorer.

Mais conteúdo relacionado

Mais procurados

Rapport installation round cube centos 7
Rapport installation round cube centos 7Rapport installation round cube centos 7
Rapport installation round cube centos 7Mame Cheikh Ibra Niang
 
Mise en place d'un système de messagerie sécurisée pour une PME/PMI
Mise en place d'un système de messagerie sécurisée pour une PME/PMIMise en place d'un système de messagerie sécurisée pour une PME/PMI
Mise en place d'un système de messagerie sécurisée pour une PME/PMIPapa Cheikh Cisse
 
Rapport d’installation d’un serveur de messagerie avec le Webmail Roundcube
Rapport d’installation d’un serveur de  messagerie avec le Webmail RoundcubeRapport d’installation d’un serveur de  messagerie avec le Webmail Roundcube
Rapport d’installation d’un serveur de messagerie avec le Webmail RoundcubeBalla Moussa Doumbouya
 
Mise en place d’un serveur de messagerie sous Windows
Mise en place d’un serveur de messagerie sous WindowsMise en place d’un serveur de messagerie sous Windows
Mise en place d’un serveur de messagerie sous WindowsJeff Hermann Ela Aba
 
Installation et Configuration de Pfsense
Installation et Configuration de PfsenseInstallation et Configuration de Pfsense
Installation et Configuration de PfsenseIsmail Rachdaoui
 
Mise en oeuvre de la VoIP sous Trixbox - Installation et configurations
Mise en oeuvre de la VoIP sous Trixbox - Installation et configurationsMise en oeuvre de la VoIP sous Trixbox - Installation et configurations
Mise en oeuvre de la VoIP sous Trixbox - Installation et configurationsStephen Salama
 
Mise en place solution de communication Unifiée avec SIPXCOM
Mise en place solution de communication Unifiée avec SIPXCOMMise en place solution de communication Unifiée avec SIPXCOM
Mise en place solution de communication Unifiée avec SIPXCOMbamaemmanuel
 
Mise en place du Firewall IPCop
Mise en place du Firewall IPCopMise en place du Firewall IPCop
Mise en place du Firewall IPCopMohammed Zaoui
 
Trunk VoiP Asterisk strongsawn openvpn
Trunk VoiP Asterisk strongsawn openvpnTrunk VoiP Asterisk strongsawn openvpn
Trunk VoiP Asterisk strongsawn openvpnYaya N'Tyeni Sanogo
 
Mise en place d'une solution VOIP sécurisée
Mise en place d'une solution VOIP sécuriséeMise en place d'une solution VOIP sécurisée
Mise en place d'une solution VOIP sécuriséeOlivierMawourkagosse
 
Mise en place d'un système de messagerie sécurisée pour une PME/PMI
Mise en place d'un système de messagerie sécurisée pour une PME/PMIMise en place d'un système de messagerie sécurisée pour une PME/PMI
Mise en place d'un système de messagerie sécurisée pour une PME/PMIPapa Cheikh Cisse
 
Tp securité des reseaux
Tp securité des reseauxTp securité des reseaux
Tp securité des reseauxAchille Njomo
 
Vpn d’acces avec cisco asa 5500 et client
Vpn d’acces avec cisco asa 5500 et clientVpn d’acces avec cisco asa 5500 et client
Vpn d’acces avec cisco asa 5500 et clientManassé Achim kpaya
 
Rapport de Stage -Finale.pdf
Rapport de Stage -Finale.pdfRapport de Stage -Finale.pdf
Rapport de Stage -Finale.pdfWaelTOUMI2
 
Sécurité asterisk web
Sécurité asterisk webSécurité asterisk web
Sécurité asterisk webAgarik
 
Mise en place d'un système de messagerie roundcube sous cent os 7
Mise en place d'un système de messagerie roundcube sous cent os 7Mise en place d'un système de messagerie roundcube sous cent os 7
Mise en place d'un système de messagerie roundcube sous cent os 7Ousmane BADJI
 

Mais procurados (20)

Rapport installation round cube centos 7
Rapport installation round cube centos 7Rapport installation round cube centos 7
Rapport installation round cube centos 7
 
Mise en place d'un système de messagerie sécurisée pour une PME/PMI
Mise en place d'un système de messagerie sécurisée pour une PME/PMIMise en place d'un système de messagerie sécurisée pour une PME/PMI
Mise en place d'un système de messagerie sécurisée pour une PME/PMI
 
Rapport d’installation d’un serveur de messagerie avec le Webmail Roundcube
Rapport d’installation d’un serveur de  messagerie avec le Webmail RoundcubeRapport d’installation d’un serveur de  messagerie avec le Webmail Roundcube
Rapport d’installation d’un serveur de messagerie avec le Webmail Roundcube
 
Mise en place d’un serveur de messagerie sous Windows
Mise en place d’un serveur de messagerie sous WindowsMise en place d’un serveur de messagerie sous Windows
Mise en place d’un serveur de messagerie sous Windows
 
Installation et Configuration de Pfsense
Installation et Configuration de PfsenseInstallation et Configuration de Pfsense
Installation et Configuration de Pfsense
 
Mise en oeuvre de la VoIP sous Trixbox - Installation et configurations
Mise en oeuvre de la VoIP sous Trixbox - Installation et configurationsMise en oeuvre de la VoIP sous Trixbox - Installation et configurations
Mise en oeuvre de la VoIP sous Trixbox - Installation et configurations
 
Mise en place d’un OpenVPN sous PfSense
Mise en place d’un OpenVPN sous PfSenseMise en place d’un OpenVPN sous PfSense
Mise en place d’un OpenVPN sous PfSense
 
Memoire final sfallou
Memoire final sfallouMemoire final sfallou
Memoire final sfallou
 
Gestion de soutenance
Gestion de soutenanceGestion de soutenance
Gestion de soutenance
 
Mise en place solution de communication Unifiée avec SIPXCOM
Mise en place solution de communication Unifiée avec SIPXCOMMise en place solution de communication Unifiée avec SIPXCOM
Mise en place solution de communication Unifiée avec SIPXCOM
 
Mise en place du Firewall IPCop
Mise en place du Firewall IPCopMise en place du Firewall IPCop
Mise en place du Firewall IPCop
 
Trunk VoiP Asterisk strongsawn openvpn
Trunk VoiP Asterisk strongsawn openvpnTrunk VoiP Asterisk strongsawn openvpn
Trunk VoiP Asterisk strongsawn openvpn
 
Mise en place d'une solution VOIP sécurisée
Mise en place d'une solution VOIP sécuriséeMise en place d'une solution VOIP sécurisée
Mise en place d'une solution VOIP sécurisée
 
Mise en place d'un système de messagerie sécurisée pour une PME/PMI
Mise en place d'un système de messagerie sécurisée pour une PME/PMIMise en place d'un système de messagerie sécurisée pour une PME/PMI
Mise en place d'un système de messagerie sécurisée pour une PME/PMI
 
Tp securité des reseaux
Tp securité des reseauxTp securité des reseaux
Tp securité des reseaux
 
Vpn d’acces avec cisco asa 5500 et client
Vpn d’acces avec cisco asa 5500 et clientVpn d’acces avec cisco asa 5500 et client
Vpn d’acces avec cisco asa 5500 et client
 
Rapport de Stage -Finale.pdf
Rapport de Stage -Finale.pdfRapport de Stage -Finale.pdf
Rapport de Stage -Finale.pdf
 
Sécurité asterisk web
Sécurité asterisk webSécurité asterisk web
Sécurité asterisk web
 
GNS3, VoIP, ToIP
GNS3, VoIP, ToIPGNS3, VoIP, ToIP
GNS3, VoIP, ToIP
 
Mise en place d'un système de messagerie roundcube sous cent os 7
Mise en place d'un système de messagerie roundcube sous cent os 7Mise en place d'un système de messagerie roundcube sous cent os 7
Mise en place d'un système de messagerie roundcube sous cent os 7
 

Destaque

Conception et développement d’un système d’alerte et notification d’une tou...
Conception et développement  d’un système d’alerte et notification  d’une tou...Conception et développement  d’un système d’alerte et notification  d’une tou...
Conception et développement d’un système d’alerte et notification d’une tou...Bilel Khaled ☁
 
Atelier au Labtic : Mise en place d'un serveur SMS Open Source sous GAMMU / G...
Atelier au Labtic : Mise en place d'un serveur SMS Open Source sous GAMMU / G...Atelier au Labtic : Mise en place d'un serveur SMS Open Source sous GAMMU / G...
Atelier au Labtic : Mise en place d'un serveur SMS Open Source sous GAMMU / G...Florent YOUZAN
 
serveur kanne passerelle-sms
serveur kanne  passerelle-smsserveur kanne  passerelle-sms
serveur kanne passerelle-smsKomaps99
 
JDLL 2014 - Introduction aux annuaires LDAP
JDLL 2014 - Introduction aux annuaires LDAPJDLL 2014 - Introduction aux annuaires LDAP
JDLL 2014 - Introduction aux annuaires LDAPClément OUDOT
 
Kannel configuration step by step with Motorolla Razer
Kannel configuration step by step with Motorolla RazerKannel configuration step by step with Motorolla Razer
Kannel configuration step by step with Motorolla RazerMahtab Rasheed
 
SMS Based Applications: Behind the scene
SMS Based Applications: Behind the sceneSMS Based Applications: Behind the scene
SMS Based Applications: Behind the scenePrawesh Shrestha
 
Directory Servers and LDAP
Directory Servers and LDAPDirectory Servers and LDAP
Directory Servers and LDAPWildan Maulana
 
How to set up and Configure Kannel, A quick start
How to set up and Configure Kannel, A quick startHow to set up and Configure Kannel, A quick start
How to set up and Configure Kannel, A quick startMobME Technical
 
Programmation événementielle avec Windev
Programmation événementielle avec WindevProgrammation événementielle avec Windev
Programmation événementielle avec WindevGuillaume Cabanac
 
Configuration ldap
Configuration ldapConfiguration ldap
Configuration ldapAli Baba
 
Administration reseau linux
Administration reseau linuxAdministration reseau linux
Administration reseau linuxRiadh Briki
 
Open Ldap Integration and Configuration with Lifray 6.2
Open Ldap Integration and Configuration with Lifray 6.2Open Ldap Integration and Configuration with Lifray 6.2
Open Ldap Integration and Configuration with Lifray 6.2Vinaykumar Hebballi
 
Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Kristen Le Liboux
 

Destaque (20)

Conception et développement d’un système d’alerte et notification d’une tou...
Conception et développement  d’un système d’alerte et notification  d’une tou...Conception et développement  d’un système d’alerte et notification  d’une tou...
Conception et développement d’un système d’alerte et notification d’une tou...
 
Envoi SMS JAVA
Envoi SMS JAVAEnvoi SMS JAVA
Envoi SMS JAVA
 
Atelier au Labtic : Mise en place d'un serveur SMS Open Source sous GAMMU / G...
Atelier au Labtic : Mise en place d'un serveur SMS Open Source sous GAMMU / G...Atelier au Labtic : Mise en place d'un serveur SMS Open Source sous GAMMU / G...
Atelier au Labtic : Mise en place d'un serveur SMS Open Source sous GAMMU / G...
 
serveur kanne passerelle-sms
serveur kanne  passerelle-smsserveur kanne  passerelle-sms
serveur kanne passerelle-sms
 
Ldap
LdapLdap
Ldap
 
JDLL 2014 - Introduction aux annuaires LDAP
JDLL 2014 - Introduction aux annuaires LDAPJDLL 2014 - Introduction aux annuaires LDAP
JDLL 2014 - Introduction aux annuaires LDAP
 
Kannel configuration step by step with Motorolla Razer
Kannel configuration step by step with Motorolla RazerKannel configuration step by step with Motorolla Razer
Kannel configuration step by step with Motorolla Razer
 
SMS Based Applications: Behind the scene
SMS Based Applications: Behind the sceneSMS Based Applications: Behind the scene
SMS Based Applications: Behind the scene
 
Directory Servers and LDAP
Directory Servers and LDAPDirectory Servers and LDAP
Directory Servers and LDAP
 
How to set up and Configure Kannel, A quick start
How to set up and Configure Kannel, A quick startHow to set up and Configure Kannel, A quick start
How to set up and Configure Kannel, A quick start
 
Programmation événementielle avec Windev
Programmation événementielle avec WindevProgrammation événementielle avec Windev
Programmation événementielle avec Windev
 
Configuration ldap
Configuration ldapConfiguration ldap
Configuration ldap
 
Exposé MSAP
Exposé MSAPExposé MSAP
Exposé MSAP
 
Rhel6
Rhel6Rhel6
Rhel6
 
Administration reseau linux
Administration reseau linuxAdministration reseau linux
Administration reseau linux
 
Open Ldap Integration and Configuration with Lifray 6.2
Open Ldap Integration and Configuration with Lifray 6.2Open Ldap Integration and Configuration with Lifray 6.2
Open Ldap Integration and Configuration with Lifray 6.2
 
Tp4 matlab
Tp4 matlabTp4 matlab
Tp4 matlab
 
Tp2 matlab
Tp2 matlab Tp2 matlab
Tp2 matlab
 
radius
radiusradius
radius
 
Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5
 

Semelhante a Serveur sms avec traitement de contenu, avec Gammu

Rapport TME_semaine_7_KAID_NHEK
Rapport TME_semaine_7_KAID_NHEKRapport TME_semaine_7_KAID_NHEK
Rapport TME_semaine_7_KAID_NHEKBelkacem KAID
 
Manuel d'installation Sagem fast 2604
Manuel d'installation Sagem fast 2604Manuel d'installation Sagem fast 2604
Manuel d'installation Sagem fast 2604ventdest
 
Presentation de nagios mohamed bouhamed
Presentation de nagios mohamed bouhamedPresentation de nagios mohamed bouhamed
Presentation de nagios mohamed bouhamedTECOS
 
Socket tcp ip client server on langace c
Socket tcp ip client server on langace c Socket tcp ip client server on langace c
Socket tcp ip client server on langace c mouad Lousimi
 
Rapport administration systèmes et supervision réseaux tp4 diabang master1 tr
Rapport administration systèmes et supervision réseaux tp4 diabang master1 trRapport administration systèmes et supervision réseaux tp4 diabang master1 tr
Rapport administration systèmes et supervision réseaux tp4 diabang master1 trCheikh Tidiane DIABANG
 
Cisco et-le-simulateur-packet-tracer
Cisco et-le-simulateur-packet-tracerCisco et-le-simulateur-packet-tracer
Cisco et-le-simulateur-packet-tracerMed Ali Bhs
 
F5 ltm administering big ip v11
F5 ltm administering big ip v11F5 ltm administering big ip v11
F5 ltm administering big ip v11Amine Haddanou
 
Bible Fte Maximal S100 And Clones
Bible Fte Maximal S100 And ClonesBible Fte Maximal S100 And Clones
Bible Fte Maximal S100 And ClonesSais Abdelkrim
 
Les commandes CISCO (routeur)
Les commandes CISCO (routeur)Les commandes CISCO (routeur)
Les commandes CISCO (routeur)EL AMRI El Hassan
 
Installation d'openerp 6.1 rc1
Installation d'openerp 6.1 rc1Installation d'openerp 6.1 rc1
Installation d'openerp 6.1 rc1easyopenerp
 
Mise en place d’un système de détection
Mise en place d’un système de détectionMise en place d’un système de détection
Mise en place d’un système de détectionManassé Achim kpaya
 
20170222 zimbra et-l'industrialisation-v2
20170222 zimbra et-l'industrialisation-v220170222 zimbra et-l'industrialisation-v2
20170222 zimbra et-l'industrialisation-v2Cloud Temple
 

Semelhante a Serveur sms avec traitement de contenu, avec Gammu (20)

Rapport TME_semaine_7_KAID_NHEK
Rapport TME_semaine_7_KAID_NHEKRapport TME_semaine_7_KAID_NHEK
Rapport TME_semaine_7_KAID_NHEK
 
kaid_nhek
kaid_nhekkaid_nhek
kaid_nhek
 
Manuel d'installation Sagem fast 2604
Manuel d'installation Sagem fast 2604Manuel d'installation Sagem fast 2604
Manuel d'installation Sagem fast 2604
 
Presentation de nagios mohamed bouhamed
Presentation de nagios mohamed bouhamedPresentation de nagios mohamed bouhamed
Presentation de nagios mohamed bouhamed
 
Socket tcp ip client server on langace c
Socket tcp ip client server on langace c Socket tcp ip client server on langace c
Socket tcp ip client server on langace c
 
Rapport des travaux
Rapport des travauxRapport des travaux
Rapport des travaux
 
Rapport administration systèmes et supervision réseaux tp4 diabang master1 tr
Rapport administration systèmes et supervision réseaux tp4 diabang master1 trRapport administration systèmes et supervision réseaux tp4 diabang master1 tr
Rapport administration systèmes et supervision réseaux tp4 diabang master1 tr
 
chapitre-2.pptx.pdf
chapitre-2.pptx.pdfchapitre-2.pptx.pdf
chapitre-2.pptx.pdf
 
Rapport du stage
Rapport du stageRapport du stage
Rapport du stage
 
Cisco et-le-simulateur-packet-tracer
Cisco et-le-simulateur-packet-tracerCisco et-le-simulateur-packet-tracer
Cisco et-le-simulateur-packet-tracer
 
F5 ltm administering big ip v11
F5 ltm administering big ip v11F5 ltm administering big ip v11
F5 ltm administering big ip v11
 
SEMAINE_6 LI350
SEMAINE_6 LI350SEMAINE_6 LI350
SEMAINE_6 LI350
 
TomatoUSB asus rtn66
TomatoUSB asus rtn66TomatoUSB asus rtn66
TomatoUSB asus rtn66
 
Bible Fte Maximal S100 And Clones
Bible Fte Maximal S100 And ClonesBible Fte Maximal S100 And Clones
Bible Fte Maximal S100 And Clones
 
Nagios twil
Nagios twilNagios twil
Nagios twil
 
Les commandes CISCO (routeur)
Les commandes CISCO (routeur)Les commandes CISCO (routeur)
Les commandes CISCO (routeur)
 
Installation d'openerp 6.1 rc1
Installation d'openerp 6.1 rc1Installation d'openerp 6.1 rc1
Installation d'openerp 6.1 rc1
 
Configuration rnis
Configuration rnisConfiguration rnis
Configuration rnis
 
Mise en place d’un système de détection
Mise en place d’un système de détectionMise en place d’un système de détection
Mise en place d’un système de détection
 
20170222 zimbra et-l'industrialisation-v2
20170222 zimbra et-l'industrialisation-v220170222 zimbra et-l'industrialisation-v2
20170222 zimbra et-l'industrialisation-v2
 

Serveur sms avec traitement de contenu, avec Gammu

  • 1. Document libre Blog sonzahi.blogspot.com Mise en place d'une plate-forme SMS avec exemple de traitement automatique de contenu Sommaire Introduction 1- Installation ** Nos besoins matériels ** Aménageons notre environnement de travail ** Configurons notre modem 2- Mise en place de notre serveur sms ** La configuration du Daemon de gammu ** Envoi de sms ** Réception et stockage des messages 3- Traitement automatique des sms ** Modification de la base de données ** Création des fichiers nécessaires à l'exécution automatique ** Modification du daemon de gammu ** Modification du fichier ''connexion.php'' ** Modification du fichier ''bonheur.php'' 4- Tirage au sort automatique des gagnants ** Création du fichier ''gagnant.php'' ** Exécution automatique: tous les jours à 18h 00mn 00s 5- Conclusion Erreur courantes - RunOnReceive ne fonctionne pas - Messages en ligne de commande ne passe pas Introduction Depuis l'envoi du premier sms, le 03 Décembre 1992, par Neil Papworth, la technologie des messages à 160 caractères a connue un fulgurant essor. L'envoi d'un sms est devenu un fait ordinaire et courant à tous les niveaux de l'échelle social. Simple d'utilisation et pratique, il se revêt être un outil efficient pour une campagne à grande échelle.
  • 2. Document libre Blog sonzahi.blogspot.com Le tutoriel ci-dessous vise à permettre à toute personne l'appliquant de posséder une base solide dans la conception de serveur sms avec traitement du contenu des messages, ce avec la conception d'une plate-forme sms simulant un jeux simple par sms. Notre jeux durera juste une semaine et consistera à envoyer par sms « jeu*bonheur » afin de participer à un jeu qui donne des millions. Et disons que quotidiennement on tirera au sort un participant à qui on enverra via notre plate-forme un message pour qu'il récupère son lot. Et le vendredi, on tire au sort un participant qui remportera la grande cagnotte de 5.000.000 FCFA, (faisons lui une fleur pour son week-end, dans tous les cas on y perd rien en fait!!!). 1- Installation Afin de réaliser notre application, des pré-requis s'imposent. Tout d'abord précisons que nous travaillerons sur des logiciels libres. Donc vous n'aurez rien à débourser. Voilà qui nous réjouit, maintenant ! Ces derniers sont les suivants : - Gammu : Pour gérer le modem (l'envoi de SMS, la gestion du répertoire , la gestion des appels, la création de sauvegardes des messages, et répertoire…) - Wammu : Interface graphique pour Gammu - Apache : Notre serveur web - PHP 5 : Notre langage de programmation - MySQL : Notre système de gestion de bases de données - PhpMyAdmin : l'interface web pour la gestion graphique de notre base de données - Gammu-smsd : Le Daemon de Gammu, il permet le stockage, la réception et l'envoi des SMS. ** Nos besoins matériels Bref ! De quoi à t-on besoin pour commencer ? Ok ! Au niveau du matériel, pas grand-chose juste : - un ordinateur avec une distribution GNU/Linux (ici, afin que nous ayons le même rendu, je préconise Ubuntu 14.04 LTS, sur lequel se fera ledit tutoriel. Bon ! Chacun est libre de choisir sa distribution à ses risques et périls ! Beuf!) - Un téléphone portable pouvant servir de modem ou une clé internet avec une carte SIM. (Juste un coucou à nos friands des téléphones « Chine-toc », veuillez vous abstenir SVP! Sinon essayez pour voir, c'est peut-être votre jour de chance !) - Un câble USB pour relier le modem ou téléphone à l'ordinateur. - Créditer votre carte SIM d'au moins 5 sms pour les testes. Voilà juste ça pour le matériel. ** Aménageons notre environnement de travail Ensuite nous déployons notre environnement de travail avec les instructions suivantes :
  • 3. Document libre Blog sonzahi.blogspot.com - On met à jour nos paquets serenite@Serenity:~$ sudo apt-get update - On met à jour notre distribution serenite@Serenity:~$ sudo apt-get upgrade - On déploie notre environnement web (apache, serveur mysql, php5 et phpmyadmin) serenite@Serenity:~$ sudo apt-get install apache2 libapache2 mod-php5 php5 mysql-server php5-mysql phpmyadmin - On installe Gammu, Wammu, Wvdial, Gammu-smsd serenite@Serenity:~$ sudo apt-get install gammu serenite@Serenity:~$ sudo apt-get install wammu serenite@Serenity:~$ sudo apt-get install wvdial serenite@Serenity:~$ sudo apt-get install gammu-smsd Ouf ! Enfin, fini les longues attentes, on peut commencer à travailler !!! Configurons notre modem NB : j'utiliserais le terme « modem » pour désigner votre téléphone portable ou votre clé. Connectez votre modem à votre ordinateur. 1- On lance l'assistant de configuration de wammu serenite@Serenity:~$ sudo wammu-configure - Alors, on obtient cette fenêtre - cliquer sur « Next > »
  • 4. Document libre Blog sonzahi.blogspot.com - choisissez l'option "recherche automatique de téléphones" et cliquez sur "Next". - choisissez l'option « recherche de connexion » et patientez pendant 10 à 15 minutes. - Cette fenêtre s'ouvre avec la dernière ligne indiquant le nombre de téléphones détectés. Si au moins un modem est détecté, cliquer sur « Next » sinon reprenez le processus de recherche (fenêtre « recherche automatique de téléphones) en choisissant d'autre option. - Ici on choisi un modem, tout en mentionnant au brouillon les parties « /dev/tty… utilisant at... », puis on valide.
  • 5. Document libre Blog sonzahi.blogspot.com - Vérifions que notre modem a bien été détecté par gammu Deux possibilités s'offrent à nous : * serenite@Serenity:~$ sudo gammu --identify Périphérique : /dev/ttyUSB0 Fabricant : Huawei Modèle : unknown (EG162G) Firmware : 11.001.10.00.000 IMEI : 353474023727472 SIM IMSI : 612030207358750 * serenite@Serenity:~$ sudo wvdialconf Editing `/etc/wvdial.conf'. Scanning your serial ports for a modem. ttyS0<*1>: ATQ0 V1 E1 -- failed with 2400 baud, next try: 9600 baud ttyS0<*1>: ATQ0 V1 E1 -- failed with 9600 baud, next try: 115200 baud ttyS0<*1>: ATQ0 V1 E1 -- and failed too at 115200, giving up. Modem Port Scan<*1>: S1 S2 S3 S4 S5 S6 S7 S8 Modem Port Scan<*1>: S9 S10 S11 S12 S13 S14 S15 S16 Modem Port Scan<*1>: S17 S18 S19 S20 S21 S22 S23 S24 Modem Port Scan<*1>: S25 S26 S27 S28 S29 S30 S31 ttyUSB0<*1>: ATQ0 V1 E1 -- OK ttyUSB0<*1>: ATQ0 V1 E1 Z -- OK ttyUSB0<*1>: ATQ0 V1 E1 S0=0 -- OK ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 -- OK ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 -- OK ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK ttyUSB0<*1>: Modem Identifier: ATI -- Manufacturer: huawei ttyUSB0<*1>: Speed 9600: AT -- OK ttyUSB0<*1>: Max speed is 9600; that should be safe. ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK ttyUSB1<*1>: ATQ0 V1 E1 -- failed with 2400 baud, next try: 9600 baud ttyUSB1<*1>: ATQ0 V1 E1 -- failed with 9600 baud, next try: 9600 baud ttyUSB1<*1>: ATQ0 V1 E1 -- and failed too at 115200, giving up. ttyUSB2<*1>: ATQ0 V1 E1 -- OK ttyUSB2<*1>: ATQ0 V1 E1 Z -- OK ttyUSB2<*1>: ATQ0 V1 E1 S0=0 -- OK ttyUSB2<*1>: ATQ0 V1 E1 S0=0 &C1 -- OK ttyUSB2<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 -- OK ttyUSB2<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK ttyUSB2<*1>: Modem Identifier: ATI -- Manufacturer: huawei ttyUSB2<*1>: Speed 9600: AT -- OK ttyUSB2<*1>: Max speed is 9600; that should be safe. ttyUSB2<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK Found a modem on /dev/ttyUSB0. Modem configuration written to /etc/wvdial.conf. ttyUSB0<Info>: Speed 9600; init "ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0" ttyUSB2<Info>: Speed 9600; init "ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0"
  • 6. Document libre Blog sonzahi.blogspot.com Nous constatons que notre modem est bien détecté. 2- Mise en place de notre serveur sms La configuration du Daemon de gammu Nous allons, maintenant configurer le Daemon de gammu (gammu-smsd) serenite@Serenity:~$ sudo gedit /etc/gammu-smsdrc Voici la configuration de notre fichier il est composé de deux grandes parties 1- [gammu] : pour la configuration de la librairie de gammu (le modem) 2- [smsd] : partie des instructions à réaliser par le daemon *********** debut du fichier gammu-smsdrc ********** # Configuration file for Gammu SMS Daemon # Gammu library configuration, see gammurc(5) [gammu] # Please configure this! //modifier en fonction des données renvoyées par gammu – - identify ou wvdialconf port = /dev/ttyUSB0 connection = at19200 # Debugging #logformat = textall # SMSD configuration, see gammu-smsdrc(5) [smsd] Service = SQL Driver = native_mysql // Driver de la base de données MySql logfile = /var/log/gammu.log // fichier journal #pin = 0000 // code pin de la SIM #Accès à la base de données Mysql User = root // identifiant administrateur pour phpmyadmin Password = JdEElaor14789 // mot de passe pour phpmyadmin PC = localhost // indique la station ou est installé notre serveur Database = jeu // la base de données #Gestion des temps de connexion MaxRetries = 3 // nombre d'essai checksecurity = 0 PhoneID = Huawei // nom du modem transmitformat = auto # Increase for debugging information debuglevel = 1
  • 7. Document libre Blog sonzahi.blogspot.com # Paths where messages are stored inboxpath = /var/spool/gammu/inbox/ outboxpath = /var/spool/gammu/outbox/ sentsmspath = /var/spool/gammu/sent/ errorsmspath = /var/spool/gammu/error/ ************ fin gammu-smsdrc ********************** Pour plus d'info sur les possibilités pour la configuration de ce fichier, visitez la page détaillant la configuration du daemon de gammu à cette adresse (c'est en anglais, mais assez compréhensible.): SMSD Configuration File Pour approfondir vos connaissances sur gammu, visitez le manuel de gammu, ici. A ce niveau gammu à plein accès à notre modem. On peut déjà - Lister les messages stockés, dans la boîte de reception avec : « gammu --getallsms » - Lister les numéros de notre répertoire téléphonique avec : « gammu --getallmemory SM » Et bien d'autres encore… Si vous en voulez plus, n'hésitezz pas de vous reférer au manuel de gammu. Ou dans votre terminal, entrez '' man gammu ''. ** Envoi de sms Notre système est maintenant prêt à envoyer des sms. En ce qui concerne la réception de sms, on n'est pas tout à fait prêt, car il nous faudra créer une base de données avec les schemas de gammu, ce qu'on fera dans peu de temps. Pour l'instant testons l'envoie de sms à partir de notre terminal, avec la commande suivante : serenite@Serenity:~$ echo "bonsoir test d'envoi par cmd" | gammu --sendsms TEXT +22507xxxxxx If you want break, press Ctrl+C... Sending SMS 1/1....waiting for network answer..OK, message reference=66 Formidable !!! Message bien envoyé. Cette ligne « Sending SMS 1/1....waiting for network answer..OK, message reference=66 » Nous donne le nombre de message transmis et nous indique la réponse du réseaux à notre requête, qui est ici, « OK ». ** Réception et stockage des messages Maintenant, que notre système peut envoyer des sms, nous allons créer notre base de données afin de stocker les messages que nous recevrons. Pour cela, allons un peu en mode graphique. Cela ne veut en aucun cas dire que ce n'est pas possible de le faire en ligne de commande. A bon entendeur… salut !
  • 8. Document libre Blog sonzahi.blogspot.com Bien, ouvrons Firefox, et dans la barre d'adresse, entrons : « localhost/phpmyadmin », ce qui nous ouvre cette page. Ensuite entrons notre mot de passe et validons, pour accéder à cette page. Entrons le nom de notre base de données à créer. Dans notre cas, entrons « jeux », et cliquons sur créer.
  • 9. Document libre Blog sonzahi.blogspot.com Cool ! Notre base de données est créée. Maintenant importons les schemas de gammu pour la base de données. Cliquez sur l'onglet « importer », ensuite sur le boutons parcourir et importons le fichier ''mysql.sql.gz'' dans /usr/share/doc/gammu/examples/sql/, puis cliquez sur exécuter. Notre base de données « jeux » est enfin prête. Testons, maintenant la sauvegarde de nos messages reçus dans cette dernière. C'est simple, envoyez juste un message au numéro de la puce se trouvant dans votre modem. Ensuite actualiser la page de PhpMyAdmin (si vous ne l'aviez pas fermée), sinon ouvrez la à nouveau. Et vérifier que votre message se trouve bien dans la table ''inbox'' de votre base de données ''jeux''. Si votre message ne s'y trouve pas, prière de vérifier à nouveau la configuration de votre fichier '' gammu-smsdrc '', principalement dans la partie '' Accès à la base de données MySql ''. Ok ! Ici, tous marche bien. En somme notre système est capable d'envoyer, de recevoir et de stocker dans une base de données nos sms. Notre serveur sms est fin prêt et opérationnel. Dans la partie suivante nous verrons comment automatiser un traitement du contenu des messages reçus, afin de générer des messages prédéfinis. 3- Traitement automatique des sms C'est à ce niveau que comment les choses amusantes et sérieuses aussi. C'est là que notre jeux ou notre système prend toute son importance. Dans cette partie nous automatiserons l'exécution d'un script, nous créerons la ou les tables adéquates dans notre base de données et configurerons notre script selon notre convenance, afin de réaliser notre objectif.
  • 10. Document libre Blog sonzahi.blogspot.com ** Modification de la base de données Pour notre jeu, on aura juste besoin d'une seule table qu'on nommera '' bonheur '' avec les champ suivants : id : identifiant du sms numero : Numéro du participant jour : la date de réception du sms Ouvrez votre table dans PhpMyAdmin et cliquez sur l'onglet ''SQL'', puis collez-y le code sql suivant et exécutez. Code sql : CREATE TABLE bonheur ( id bigint(20) NOT NULL AUTO_INCREMENT, numero varchar(15) NOT NULL, jour varchar(10) NOT NULL, PRIMARY KEY (id) ) ** Création des fichiers nécessaires à l'exécution automatique - rendez vous dans votre localhost serenite@Serenity:~$ cd /var/www/html Dans votre localhost (/var/www/html/) créer les éléments suivants : - le dossier jeu $ mkdir jeu
  • 11. Document libre Blog sonzahi.blogspot.com - rendez vous dans ce dossier $ cd jeu - créez $ nano connexion.php entrez les 2 lignes suivantes 1- <?php 2- ?> Enregistrez (ctrl+x) $ nano bonheur.php entrez les 3 lignes suivantes 1- # !/usr/bin/php 2- <?php 3- ?> Enregistrez (ctrl+x) $ nano daemon.sh Entrez les 06 lignes suivantes 1- #!/bin/sh 2- # Configure this (use absolute path) 3- PHP=/usr/bin/php 4- DAEMON=/var/www/html/jeu/daemon.php 5- # Execute 6- $PHP $DAEMON Enregistrez (ctrl+x) Exemple:
  • 12. Document libre Blog sonzahi.blogspot.com ** Modification du daemon de gammu - ouvrez le fichier gammu-smsdrc serenite@Serenity:~$ sudo /etc/gammu-smsdrc - Ajoutez-y les lignes suivantes dans la partie [smsd] 1- # Action à exécuter dès réception d'un sms 2- RunOnReceive=/var/www/html/jeu/daemon.sh ** Modification du fichier ''connexion.php'' Ouvrez le fichier ''connexion.php'' et collez-y les lignes suivantes : N'oubliez pas de modifier ''root'' par votre identifiant et '' JdEElaor14789'' par votre mot de passe d'accès à phpmyadmin. ***** début connexion.php ******* /* * Connexion à la Base de données */ global $db; $db = null; try { $db = new PDO('mysql:host=localhost;dbname=jeu;charset=utf8', 'root', 'JdEElaor14789'); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (Exception $e) { error_log($e->getMessage()); } ********** fin fichier *********** ** Modification du fichier ''bonheur.php'' Ce fichier est extrêmement important, dans la réussite de votre projet. Je vous demanderais donc de lui accorder une attention toute particulière. On l'expliquera, ne vous en faite pas ! Mais je vous demanderez de ne pas faire de copier-coller à ce niveau, il est possible que vous ayez des bugs. Ainsi je vous conseille de le construire méticuleusement, étape par étape. ********** début bonheur.php *********** #!/usr/bin/php <?php /* |--------------------------------------------------------------- | Sms Application (SA) --- Serenite 489
  • 13. Document libre Blog sonzahi.blogspot.com |--------------------------------------------------------------- */ /* –------- partie 1 –------- */ require('db_connect.php'); $nb=null; $requete="SELECT ID, TextDecoded, SenderNumber from inbox where readed='false';"; $donne=$db->prepare($requete); $donne->execute(); $nb=$donne->rowCount(); /*---------fin partie 1 --------- */ /* -------- partie 2 ------------ */ if ($nb!=0) /* marqueur 1 */ { /* marqueur 2 */ while ($value=$donne->fetch(PDO::FETCH_OBJ)) { /* –------- marqueur 3 –------ */ $SenderNumber=$value->SenderNumber; $TextDecoded_1=trim($value->TextDecoded); $ID=$value->ID; list($TextDecoded, $Var_1)=explode("*",$TextDecoded_1); $keyword=strtolower($Var_1); $TextDecoded=strtolower($TextDecoded); /* –------- fin marqueur 3 –------ */ /* –------- marqueur 4 –------ */ if ($TextDecoded=="jeu"){ //Verification de syntaxe "jeu" if ($keyword=="bonheur"){ //Verification de syntaxe "bonheur" $date = gmdate("Y-m-d ») ; $text = utf8_decode("LSA | Jeu Bonheur : Votre inscription a bien été prise en compte. Augmentez vos chances en jouant encore plus."); $sql="INSERT INTO bonheur (numero, jour) values('$SenderNumber', $date)"; $inserer=$db->prepare($sql); $inserer->execute(); shell_exec ('echo "'.$text.'" | gammu --sendsms TEXT '.$SenderNumber); } else{ // si different de bonheur $text = utf8_decode("Votre message ne peut pas être traité par la plateforme Jeu du bonheur, car il ne respecte pas la syntaxe prédéfinie. Envoyez plutôt « jeu*bonheur »"); shell_exec ('echo "'.$text.'" | gammu --sendsms TEXT '.$SenderNumber); } } else{ // si different de jeu $text = utf8_decode("Votre message ne peut pas être traité par la plateforme Jeu du bonheur, car il ne respecte pas la syntaxe prédéfinie. Envoyez plutôt « jeu*bonheur »"); shell_exec ('echo "'.$text.'" | gammu --sendsms TEXT '.$SenderNumber); } /* –------- fin marqueur 4 –------ */ /* –------- marqueur 5 –------ */
  • 14. Document libre Blog sonzahi.blogspot.com $maj="UPDATE inbox SET (readed=:read) where ID=:id "; $result=$db->prepare($maj); $result->execute(":id"=>$ID, ":read"=>"true"); /* –------- fin marqueur 5 –------ */ } /* fin marqueur 2 */ } /* –------- fin marqueur 1 –------ */ /* –------- fin partie 2 –------ */ ?> *************** fin fichier *********** Partie 1 : Dans cette partie, on va rechercher dans chaque ligne de la table ''inbox'' de notre base de données les lignes où readed='false'. C'est à dire on récupère l'ensemble des messages n'ayant pas encore été lus. Et la variable $nb, pour en déterminer le nombre. Partie 2: Ici, nous allons traiter les données réçus de la base de données. Marqueur 1 : On vérifie si la requête envoyée à a base de données nous ramène bien des lignes d'informations avant de penser à les traiter. Logique non ? Marqueur 2: Convaincu, d'avoir reçu au moins une ligne d'informations de la base de données. On peut maintenant les traiter. Alors on fait une boucle avec ''while'' pour traiter chacune des lignes reçues. Marqueur 3: Dans les lignes 1 à 3, on range dans des variables les données d'une ligne données. Dans la 4ème ligne on décompose le message envoyé et qu'on a stocker dans la variable ''$TextDecoded'', en fonction du délimiteur que nous avons choisi. Dans notre cas le délimiteur est ''*''. Ensuite, on stocke dans des variables différentes les éléments de part et d'autre du délimiteur. Dans notre cas, nous devons avoir 2 variables. '$TextDecoded' qui devra contenir 'jeu', et 'Var_1' contiendra 'bonheur'. Marqueur 4 : Ici, commence le véritable traitement des messages. Tout d'abord, on vérifie que $TextDecoded contient bien le mot 'jeu', sinon on ramène un message d'erreur au numero ayant envoyé le message. Si $TextDecoded contient bien le mot 'jeu', alors continu le traitement. Ensuite, on vérifie que la deuxième variable '$Var_1' contient le mot 'bonheur', sinon on ramène un message d'erreur au numero ayant envoyé le message. Si $Var_1 contient bien le mot 'bonheur', alors on commence le traitement. On enregistre d'abord le numéro de l'envoyeur dans la table 'bonheur', puis on lui envoie un message de confirmation de de réception de son inscription.
  • 15. Document libre Blog sonzahi.blogspot.com Marqueur 5 : Dans cette partie, nous allons modifier le champs 'readed' de la ligne que nous venons de traiter en lui affectant la valeur 'true'. De sorte à éviter qu'elle soit prise en compte à nouveau lors du prochain scanne de la base de données. Maintenant notre système est prêt à 90 %. Il peut recevoir des sms, les traiter et répondre à l'envoyeur en fonction du contenu de son message. Pour cela il suffit juste pour nous de connecter notre modem et de lancer le daemon de gammu ($ sudo /etc/init.d/gammu-smsd start). Et nous sommes opérationnel. 4- Tirage au sort automatique des gagnants Dans cette partie, nous allons créer un script qui se lancera tous les jours à 18h 00mn 00s pour le tirage au sort du gagnant du jour. ** Création du fichier ''gagnant.php'' Toujours dans notre dossier 'jeu', on crée le fichier 'gagnant.php' $ nano gagnant.php -------–- contenu du fichier –------------ #!/usr/bin/php <?php require('db_connect.php'); $date = gmdate("Y-m-d'') ; $donne=null; $sql="SELECT numero from bonheur where jour=".$date.";"; $donne=$db->prepare($sql); $donne->execute(); $nb=$donne->rowCount(); $i=0; while ($value=$donne->fetch(PDO::FETCH_OBJ)) { $result[$i]=$value->numero; $i++; } $winner=rand(0, $nb); // on génère un numero au hasard, qui sera celui du gagnant $num_winner=$result[$winner]; $jr=date('l') ;
  • 16. Document libre Blog sonzahi.blogspot.com if ($jr=='friday'){ $text = utf8_decode("SA | Jeu Bonheur : FELICITATION!!! Vous venez de remportez 5.000.000 FCFA. Passez à Bonheur-du-code récupérer votre Lot."); } else { $text = utf8_decode("SA | Jeu Bonheur : FELICITATION!!! Vous venez de remportez 50.000 FCFA. Passez à Bonheur-du-code récupérer votre Lot."); } shell_exec ('echo "'.$text.'" | gammu --sendsms TEXT '.$num_winner); ?> Enregistrez (ctrl+x) -------------------------- fin fichier --------------------------------- ** Programmation de l'exécution automatique tous les jours à 18h 00mn 00s Tout d'abord, on rend notre script exécutable : $ chmod +x /var/www/html/jeu/gagnant.php Ensuite, on entre la commande suivante : $ crontab -e Ce qui nous donne ceci : no crontab for alex - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/ed 2. /bin/nano <---- easiest 3. /usr/bin/vim.tiny Choose 1-3 [2]: A ce niveau on choisi le numero, correspondant à notre éditeur préferé. Pour ma part, je vous conseil, 'nano', donc le numéro 2. Puis utilisez la flèche de direction vers le bas pour vous rendre à la fin du fichier. Au niveau de cette ligne : # m h dom mon dow command En dessous entrez la ligne suivante : 0 18 * * * /var/www/html/jeu/gagnant.php Conclusion Et voilà ! On est prêt à 100 %. Notre système, reçoit, stocke, traite, sauvegarde, repond à tous les sms qui lui sont transmis. Et la cérise sur le gateau, tous les jours à 18h 00mn 00s il tire au sort un gagnant et lui envoi un message. Tout ça sans l'intervention de quiconque. Vous savez déjà comment lancer votre système. Alors Bonne pratique.
  • 17. Document libre Blog sonzahi.blogspot.com ------------------------------------------------------------------------ Erreurs courantes ** RunOnReceive ne fonctionne pas alors : 1- Dans le daemon de gammu (/etc/gammu-smsdrc), supprimer la ligne du RunOnReceive 2- Dans votre script ''daemon.sh'' (/var/www/html/jeu/daemon.sh), ajoutez ne boucle infinie qui encadrera la partie #Execute. Le code : while : do # Execute $PHP $DAEMON sleep 5 done 3- Maintenant pour lancer votre système, après avoir connecté votre modem, il vous faudra : lancer le daemon de gammu et votre script daemon.sh. - $ sudo /etc/init.d/gammu-smd start - $ cd /var/www/html/jeu - /var/www/html/jeu/ $ sudo bash daemon.sh Et voilà, C'est pas trop jolie joie, mais ça fait l'affaire !!! ** Messages en ligne de commande ne passe pas si vous n'arrivez pas à envoyer des messages en ligne de commande, alors exécutez les commandes suivantes. Si le message d'erreur est : Erreur à l'ouverture du périphérique: il n'existe pas. Essayez de repositionner votre carte SIM et reconnectez votre modem. Si cela ne marche toujours pas alors exécutez les commandes suivantes : 1- $ sudo groups | grep -q dialout || sudo adduser $USER dialout 2- $ sudo apt-get autoclean 3- $ sudo apt-get clean 4- $ sudo reeboot 5- et relancer les services
  • 18. Document libre Blog sonzahi.blogspot.com Voilà, nous sommes à la fin de notre tutoriel. Et j'espère sincèrement vous avoir apporté ne serait-ce qu'un petit plus! Ce document peut contenir des bugs ou imperfections, alors je me tiens à votre disposition pour tout apport, afin de l'améliorer.