G-SMS · Cas d’usage
Rappels de rendez-vous par SMS au Cameroun
Un créneau réservé et non honoré ne se rattrape pas : il est simplement perdu. Voici comment envoyer un rappel la veille depuis une tâche planifiée, ce que cela coûte par rendez-vous, et la limite qu’il faut connaître avant d’écrire le message.
Le problème : le rendez-vous est pris, puis oublié
Dans un cabinet dentaire, un garage ou un centre de formation, le rendez-vous se prend le plus souvent de vive voix ou par téléphone, parfois plusieurs semaines à l’avance, et se note sur un agenda qui n’envoie rien à personne. Entre la prise et la date, rien ne rappelle au client qu’il a réservé un créneau.
Le rappel manuel, lui, ne passe pas à l’échelle : appeler cinquante personnes la veille occupe une demi-journée d’accueil, et la moitié des appels tombent sur une messagerie.
Ce que coûte une absence
Prenez vos propres chiffres du mois dernier plutôt qu’un taux moyen trouvé ailleurs : comptez les créneaux réservés qui sont restés vides. Sur 200 rendez-vous mensuels, trente absences représentent, à 10 000 F le créneau, 300 000 F de recettes qui ne rentrent pas — pour un praticien qui était pourtant présent et payé.
Le créneau vide coûte deux fois : la recette perdue, et le patient suivant qui aurait pu l’occuper s’il avait été prévenu qu’une place se libérait.
La solution en trois étapes
1. Choisir le moment, une fois pour toutes
La veille, en fin d’après-midi : le client a encore le temps d’annuler, et vous avez encore le temps de proposer le créneau à quelqu’un d’autre. Un second rappel deux heures avant se justifie pour les rendez-vous longs ou coûteux ; au-delà de deux messages, le rappel devient une nuisance et sera ignoré.
Un rappel n’est pas un code de vérification : il ne contient aucun secret et n’a aucune urgence. Ce qui compte n’est pas qu’il parte tout de suite, mais qu’il arrive au bon moment.
2. Envoyer depuis une tâche planifiée
import logging
import os
import time
from datetime import date, timedelta
import requests
API = 'https://api.sms.gworldship.com/v1/sms'
CLE = os.environ['GSMS_API_KEY']
CABINET = 'Cabinet Akwa'
ACCUEIL = '233 42 10 10'
demain = date.today() + timedelta(days=1)
def poster(charge_utile):
return requests.post(API, timeout=10, json=charge_utile,
headers={'Authorization': f'Bearer {CLE}'})
for rdv in rendez_vous_du(demain):
texte = (f'Rappel : votre rendez-vous est demain {demain:%d/%m} '
f'à {rdv.heure} au {CABINET}. Pour annuler, appelez le {ACCUEIL}.')
reponse = poster({
'to': rdv.telephone, # +237690000000
'text': texte,
# Un rappel par rendez-vous et par date : si la tâche repasse, l'API
# répond 409 avec le message déjà envoyé, sans second envoi ni débit.
'clientReference': f'rappel-{rdv.id}-{demain:%Y%m%d}',
})
if reponse.status_code in (202, 409):
rdv.enregistrer_rappel(reponse.json()['messageId'])
else:
logging.warning('G-SMS %s %s', reponse.status_code,
reponse.json().get('code'))
time.sleep(0.2) # 10 requêtes/seconde par clé : on reste sous la limiteLe message d’exemple fait 107 caractères en alphabet standard : un seul segment, 53 caractères de marge. La référence client contient la date, ce qui rend la tâche rejouable : relancée deux fois le même jour, elle n’envoie pas deux rappels. Comment fonctionne l’idempotence →
3. Reprendre à la main ce qui n’est pas passé
# Le matin même : qui n'a pas reçu son rappel ?
#
# Attention au sens de 'from' : il borne la date de CRÉATION du message, pas
# celle du rendez-vous. Les rappels ont été postés la veille — interroger à
# partir de la date du rendez-vous ne remonterait jamais rien.
envoi = date.today() - timedelta(days=1)
echecs = requests.get(
API,
timeout=10,
headers={'Authorization': f'Bearer {CLE}'},
params={'status': 'FAILED', 'from': f'{envoi:%Y-%m-%d}T00:00:00Z', 'size': 100},
).json()
# Le lot du jour se reconnaît au suffixe de la référence client.
suffixe = f'{date.today():%Y%m%d}'
for message in echecs['content']:
if not (message.get('clientReference') or '').endswith(suffixe):
continue
# Le crédit est déjà remboursé : ce qui reste à faire est humain.
file_appels.ajouter(message['clientReference'], message['to'])Un numéro injoignable reste un numéro injoignable : le SMS en échec est recrédité automatiquement, mais c’est l’accueil qui rappellera. La liste est courte, et c’est justement l’intérêt : le travail manuel ne porte plus que sur les cas qui le méritent.
Le coût réel, en francs CFA
Hypothèse : 200 rendez-vous par mois. Tarif moyen pondéré de 5,30 F, obtenu avec 85 % d’envois vers Orange et MTN à 5 F et 15 % vers Camtel et Nexttel à 7 F.
| Rappel | Volume mensuel | Coût mensuel |
|---|---|---|
| Rappel la veille, à 17 h | 200 | 1 060 F |
| Second rappel, deux heures avant (facultatif) | 200 | 1 060 F |
| Les deux rappels | 400 SMS | 2 120 F |
Soit 5,30 F par rendez-vous rappelé une fois. Un seul créneau facturé 10 000 F sauvé par le rappel paie plus de neuf mois d’envois.
Bonnes pratiques
- Entre 8 h et 19 h, jamais au-delà. Un rappel reçu à 22 h agace et n’est plus lu le lendemain.
- Deux rappels au maximum, et un seul dans la plupart des cas. Le troisième message transforme un service en harcèlement.
- Tout dans une phrase : la date, l’heure, le lieu et le moyen d’annuler. Le client ne relira pas le message deux fois.
- Nommez l’établissement. L’expéditeur affiché est un numéro, pas un nom : sans cela le destinataire ignore qui lui écrit.
- Donnez un numéro qui décroche. Le rappel sert à récupérer les annulations : s’il n’y a personne au bout du fil, le créneau reste perdu.
- Une référence client qui contient la date du rendez-vous, pas seulement son identifiant : un rendez-vous déplacé doit pouvoir être rappelé de nouveau.
- N’envoyez qu’aux rendez-vous encore actifs. Relisez l’agenda au moment de l’envoi, pas la veille au soir d’une extraction figée.
- Restez sous 10 requêtes par seconde et par clé. Un court délai entre deux envois suffit ; au-delà, l’API répond 429 avec un en-tête
Retry-After.
Ce que G-SMS ne fait pas
- Pas de réception de SMS, donc pas de confirmation par réponse. Le schéma « répondez OUI pour confirmer » est impossible : aucun message entrant n’est lu. C’est un choix de conception définitif, pas une fonctionnalité en attente. Indiquez un numéro à appeler ou un lien, et concevez le rappel comme une information, pas comme une question.
- Pas de nom d’expéditeur personnalisé. Le destinataire voit le numéro de la SIM d’envoi. D’où la règle précédente : votre nom doit figurer dans le texte.
- Pas de planification côté G-SMS. Il n’existe pas de champ « envoyer à telle heure » : c’est votre tâche planifiée qui décide du moment. L’API envoie quand on l’appelle.
- Pas de gestion d’agenda. G-SMS ne connaît ni vos créneaux ni vos patients : il reçoit un numéro et un texte, et rend un statut de livraison.
Questions fréquentes
Combien coûte un rappel de rendez-vous par SMS au Cameroun ?
5 F CFA par segment vers Orange et MTN, 7 F vers Camtel et Nexttel. Un rappel d’une centaine de caractères tient dans un seul segment : comptez 5 à 7 F par rendez-vous rappelé.
Quand faut-il envoyer le rappel ?
La veille en fin d’après-midi, quand le patient peut encore libérer ou déplacer son créneau. Un rappel envoyé le matin même ne laisse plus le temps de réorganiser la journée.
Le patient peut-il confirmer en répondant au SMS ?
Non : G-SMS n’a pas de réception de messages, c’est un choix de conception. Indiquez dans le texte un numéro à appeler ou un lien pour annuler — et vérifiez que ce numéro est réellement décroché.
Prêt à envoyer ton premier SMS ?
Crée un compte, reçois 100 F de crédit et une clé API immédiate.