Bonjour Messieurs,
Merci de votre travail sur ce projet.
Je résume ici mes échanges par mail avec un membre de votre équipe sous forme d'une proposition d'amélioration.
Il devrait être possible de gérer les accusés de réception au sein du projet.
gammu-smsd-monitor permet de gérer le statut des SMS envoyés.
Je cite la page d'information de Gammu :
The package includes also tool gammu-smsd-inject which will help you creating long text messages and gammu-smsd-monitor which allows you to monitor current status of SMS Daemon or phone.
Après quelques recherches, j'ai communiqué un début de piste prometteur via mail :
Dans RaspiSMS\controllers\internalConsole.php, en remplaçant la ligne 137 :
$commande_send_sms = 'gammu-smsd-inject TEXT ' . escapeshellarg($number) . ' -len ' . mb_strlen($text_sms) . ' -text ' . $text_sms;
par :
$commande_send_sms = 'gammu-smsd-inject TEXT ' . escapeshellarg($number) . ' -len ' . mb_strlen($text_sms) . ' -text ' . $text_sms . ' -report ';
C'est à dire, en ajoutant -report
à la fin de la commande gammu-smsd-inject, on active la fonction accusé de réception.
Pour information, on peut également ajouter -validity
( source pour les deux options )
Extrait man gammu
- report
- request delivery report for message
- validity HOUR|6HOURS|DAY|3DAYS|WEEK|MAX
- sets how long will be the message valid (SMSC will the discard the message after this time if it could not deliver it). Validity ne peut prendre qu'une des valeurs énumérées ci-dessus (HOUR, 6HOURS, DAY, 3DAYS, WEEK ou MAX)
Note :
Évidemment, cette modification du contrôleur n'est pas propre et il faudra que je continue à analyser le code et votre implémentation du MVC ( Cf. votre doc ) pour voir comment penser et inclure la possibilité de se servir des accusés de réception mais ça ne me semble pas trop complexe à faire. il faut savoir aussi que l'accusé de réception arrive comme un sms normal avec pour texte "Delivered" (par exemple, si le message est reçu) et comme numéro d'émetteur, le numéro du destinataire du SMS que l'on vient d'envoyer. Il va falloir réfléchir pour lier chaque accusé à son SMS (un accusé par portion de 160 caractères envoyés), sûrement supprimer directement cet accusé de réception pour éviter de polluer la boîte de réception. Si les sms ont une table à eux dans la base de données, le mieux serait peut-être d'ajouter une table accuse_de_reception (ou quelque chose du genre) avec en clef étrangère l'id du sms et de faire une jointure. Ensuite il faudrait colorer en jaune les sms envoyés avec accusés qui n'ont toujours pas été confirmés, en rouge les sms qui ont été envoyés avec accusé mais dont la durée de validité a été dépassée (même démarche pour la validité qui peut apporter un plus ) et bien sûr, les sms en vert seront ceux qui ont reçu un accusé (tout ceci n'est qu'une proposition, on peut très bien représenter l'information autrement).
Bien entendu, un simple ajout dans le formulaire d'envoi de SMS (cases à cocher) permettra de préciser si oui ou non on veut un accusé de réception et/ou une durée de validité pour le SMS au delà de laquelle le SMS sera considéré comme perdu.
Note : Il me faut aussi déterminer deux choses (si vous avez de infos, n'hésitez pas) :
- Pour chaque statut de message (accusé), il faut déterminé quel est le texte retourné.
Par exemple,
- Delivered : Message reçu
- ...
- Il me faudrait savoir à quoi ressemble un sms reçu (juste avant qu'il soit passé à la moulinette par le fichier parseSMS.sh), parseSMS.sh étant à l'interface entre Gammu et RaspiSMS.
La réponse à cette question déterminera si la gestion des acusés doit commencer dans le code php de RaspiSMS ou plus en amont dans parseSMS.sh. On pourrait aussi avoir une réponse quant au problème de lier chaque accusé à chaque sms précédemment envoyé (numéro de "série" ou id du SMS ? timestamp ?).
Ps : Je suis prêt à mettre les mains dans le cambouis.
Bien à vous,
Alexandre