Logo TelegramTelegram
Programmation de messages

Comment programmer l'envoi de messages sur Telegram avec un bot ?

Par Telegram Équipe officielle
programmer envoi messages Telegram, configurer bot Telegram pour envoi programmé, API Telegram envoyer message, automatiser envoi Telegram, limites de débit bot Telegram, comment programmer envoi Telegram, erreur envoi programmé Telegram, différence bot et script Telegram, meilleures pratiques envoi programmé, envoyer message programme Telegram

Introduction : automatiser les messages Telegram avec un bot

La possibilité de programmer l'envoi de messages via un bot Telegram ouvre la voie à de nombreux scénarios : rappels quotidiens, alertes de surveillance, notifications de tâches ou envois périodiques d’informations. Contrairement aux applications de messagerie classiques, Telegram offre une API flexible qui permet à un bot d’expédier des messages à n’importe quel moment, pourvu qu’il dispose du bon token et des droits nécessaires. Cet article vous guide pas à pas dans la mise en place d’un système fiable de programmation d’envoi, depuis la création du bot jusqu’aux scripts automatisés, en passant par les précautions à prendre pour sécuriser vos échanges.

Prérequis : créer votre bot Telegram

Avant de programmer quoi que ce soit, vous devez disposer d’un bot Telegram et de son jeton d’authentification (token). Le processus est simple et ne nécessite qu’un compte Telegram actif. Une fois le bot créé, vous pourrez l'utiliser comme point de départ de vos automatisations.

Étapes de création avec BotFather

Ouvrez Telegram et recherchez le contact officiel @BotFather. Lancez la commande /newbot, suivez les instructions pour choisir un nom et un nom d’utilisateur (qui doit se terminer par bot). Une fois le bot créé, BotFather vous fournira un token HTTP API – une chaîne de caractères unique qui permet à votre code de contrôler le bot. Gardez ce token secret, car quiconque le possède peut agir à la place de votre bot ; nous verrons plus loin comment le protéger efficacement.

Pensez également à configurer le bot pour qu’il puisse lire les messages privés ou rejoindre des groupes. Pour un usage programmé, le bot n’a pas besoin de recevoir des commandes ; il peut simplement envoyer des messages de manière proactive. Vous pouvez désactiver le mode « confidentialité » dans les paramètres de bot si nécessaire, mais pour l’envoi simple, ce n’est pas obligatoire. Cela permet au bot de voir tous les messages du groupe, ce qui peut être utile pour des fonctionnalités avancées.

Comprendre l’API Bot Telegram

L’API Bot Telegram expose une interface RESTful. L’opération principale pour envoyer un message est la méthode sendMessage accessible via l’URL : https://api.telegram.org/bot<TOKEN>/sendMessage. Les paramètres obligatoires sont chat_id (l’identifiant numérique de la conversation) et text (le contenu du message). Vous pouvez fournir d’autres options comme parse_mode (HTML ou MarkdownV2), disable_notification ou reply_markup pour des boutons, ce qui enrichit l'interaction.

Pour obtenir un chat_id, vous pouvez envoyer un message à votre bot depuis votre compte personnel, puis interroger les mises à jour via getUpdates. Vous pouvez aussi utiliser l’API pour lister les chats récents. Une méthode courante consiste à utiliser un filtre getUpdates?offset=-1 pour récupérer la dernière interaction, ce qui évite de parcourir tout l'historique.

Premier envoi avec curl

Un test rapide peut être réalisé en ligne de commande avec curl. Remplacez TOKEN et CHAT_ID par vos valeurs :

curl -X POST "https://api.telegram.org/botTOKEN/sendMessage" -d "chat_id=CHAT_ID&text=Coucou%20depuis%20mon%20bot"

Si tout fonctionne, vous recevez un message dans la conversation ciblée. Cette même requête, intégrée dans un script périodique, devient la brique de base de la programmation. Elle peut être déclinée pour envoyer des données variables ou des contenus formatés.

Programmer l’envoi : approches possibles

Une fois le bot opérationnel, il faut déclencher l’envoi à des moments précis. Plusieurs stratégies existent selon votre environnement technique et vos besoins : utilisation d'un planificateur système, d'une bibliothèque Python dédiée, ou de services cloud. Le choix dépend de la fréquence, de la criticité et des ressources disponibles.

Utiliser un serveur avec cron (Linux/macOS)

Sur un serveur ou un poste allumé en continu, le planificateur cron s’avère idéal. Écrivez un script (par exemple en Python ou en bash) qui appelle l’API, puis créez une tâche cron. L'exemple ci-dessous illustre un script Python minimaliste utilisant la bibliothèque requests :

#!/usr/bin/env python3
import requests

TOKEN = "votre_token"
CHAT_ID = "123456789"
URL = f"https://api.telegram.org/bot{TOKEN}/sendMessage"
payload = {"chat_id": CHAT_ID, "text": "Rappel : réunion à 14h"}
requests.post(URL, data=payload)

Sauvegardez ce fichier (par exemple rappel.py), rendez-le exécutable avec chmod +x, puis ajoutez une ligne dans votre crontab :

0 9 * * * /chemin/vers/rappel.py

Cette commande envoie le message tous les jours à 9h00. Vous pouvez bien sûr adapter l’horaire et le texte en utilisant des variables d’environnement ou un fichier de configuration, ce qui évite de modifier le script à chaque changement.

Utiliser un script Python avec la bibliothèque schedule

Pour ceux qui préfèrent une solution tout-en-un sans configurer cron, la bibliothèque schedule permet de programmer des tâches directement dans le script. Installez-la avec pip install schedule. Voici un exemple complet :

import schedule
import time
import requests

TOKEN = "..."
CHAT_ID = "..."

def envoyer_message():
    requests.post(f"https://api.telegram.org/bot{TOKEN}/sendMessage",
                  data={"chat_id": CHAT_ID, "text": "Bonjour journalier"})

schedule.every().day.at("09:00").do(envoyer_message)

while True:
    schedule.run_pending()
    time.sleep(60)

Ce script reste en mémoire et déclenche l’envoi à l’heure dite. Attention : il doit tourner en continu. Pour une solution plus robuste, combinez-le avec un superviseur comme systemd ou supervisor qui redémarrera le script en cas d'arrêt inopiné. C'est une approche simple pour des environnements où cron n'est pas disponible.

Utiliser des services hébergés (GitHub Actions)

Si vous ne souhaitez pas maintenir votre propre serveur, des plateformes CI/CD comme GitHub Actions ou GitLab CI permettent d’exécuter des scripts selon un emploi du temps. Créez un dépôt contenant votre script d’envoi, puis définissez un fichier YAML dans .github/workflows avec un déclencheur schedule utilisant la syntaxe cron. Exemple de workflow :

name: Envoi programme
on:
  schedule:
    - cron: '0 9 * * *'
jobs:
  send:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Send message
        run: python script.py
        env:
          TOKEN: ${{ secrets.TELEGRAM_TOKEN }}
          CHAT_ID: ${{ secrets.CHAT_ID }}

Stockez vos secrets dans les paramètres du dépôt. Cette approche évite d’exposer votre token et vous offre une exécution sans coût supplémentaire dans la limite des quotas GitHub. Elle est particulièrement adaptée pour des envois peu fréquents (quotidiens ou hebdomadaires).

Cas d’usage concrets

La programmation des messages s’applique à de nombreuses situations quotidiennes. Voici deux exemples typiques qui illustrent la flexibilité du système.

Rappel quotidien de tâche

Imaginez que vous devez prendre un médicament tous les jours à 20h. Votre bot vous envoie un message avec un rappel et peut même inclure un bouton « J’ai pris » grâce au InlineKeyboardMarkup. Le script vérifie l’heure, envoie le message, puis attend votre confirmation éventuelle via la gestion des callbacks. Cela transforme un simple envoi programmé en une interaction utile, renforçant l'engagement de l'utilisateur.

Notification de prix d’une crypto-monnaie

Un script peut interroger une API de prix (CoinGecko, Binance) toutes les heures et comparer la valeur actuelle à un seuil. Si le seuil est dépassé, il envoie une alerte. Par exemple : « Bitcoin a dépassé 60 000 € ». Le déclencheur est ici conditionnel, ce qui nécessite une logique de programmation plus fine (intervalle régulier + condition). Cette approche peut être étendue à d'autres indicateurs : météo, cours de bourse, niveaux de stock, etc.

Limites et bonnes pratiques

Automatiser les envois n’est pas sans contraintes. Il faut anticiper les erreurs et respecter les règles de fair use pour garantir un fonctionnement fiable sur le long terme.

Respecter les limites de taux (rate limiting)

L’API Telegram impose des limites : environ 30 messages par seconde par chat pour les groupes, et des restrictions globales. En pratique, pour des envois programmés peu fréquents (toutes les minutes ou plus), vous ne rencontrerez pas de problème. Si vous devez envoyer des messages à des milliers d’utilisateurs, espacez vos appels d'au moins 1/30 seconde et gérez les réponses d’erreur HTTP 429 (Too Many Requests) avec un backoff exponentiel. Une bonne pratique consiste également à regrouper les messages vers un même chat via des techniques de throttling.

Sécuriser votre token

Ne jamais inclure le token en dur dans un script partagé ou un dépôt public. Utilisez des variables d’environnement ou un gestionnaire de secrets. En cas de compromission, révoquez immédiatement le token via BotFather (/revoke) et générez-en un nouveau. Pensez également à limiter les permissions du bot : s'il n'a pas besoin d'être administrateur, ne lui accordez que les droits minimaux nécessaires.

Gérer les erreurs et la fiabilité

Un script programmé peut échouer : indisponibilité du réseau, changement de token, suppression du bot d’un groupe. Ajoutez une gestion des exceptions (try/except) et enregistrez les logs avec la bibliothèque standard logging. Pour les envois critiques, mettez en place un mécanisme de rattrapage : si l’envoi échoue, réessayez après un délai (par exemple 5 minutes) jusqu'à trois tentatives. Cela évite de perdre définitivement une notification importante.

Dépannage courant

Voici les problèmes les plus fréquents et leurs solutions. Si votre bot n'envoie pas les messages comme prévu, parcourez cette liste avant de creuser plus loin.

  • Le message n’arrive pas : vérifiez que le chat_id est correct. Si vous utilisez un groupe, le bot doit être administrateur ou avoir été ajouté avec les droits d’envoi de messages. Pour un chat privé, l'utilisateur doit avoir initié une conversation avec le bot.
  • Erreur 403 Forbidden : le bot a été bloqué par l’utilisateur ou retiré du groupe. Supprimez le chat_id correspondant de votre configuration.
  • Le script cron ne s’exécute pas : vérifiez les permissions du fichier (exécutable), le chemin absolu vers l’interpréteur (ex. /usr/bin/python3), et consultez les logs système (grep CRON /var/log/syslog). Assurez-vous aussi que l'utilisateur cron a accès aux variables d'environnement nécessaires.
  • Les messages sont dédoublés : un même script peut être exécuté plusieurs fois si la tâche cron chevauche la précédente. Utilisez un verrou (flock) ou espacez les exécutions d'au moins une minute.

Autres méthodes : utiliser des bots d’automatisation tiers

Si écrire du code n’est pas votre priorité, il existe des bots tiers qui proposent de programmer des messages, par exemple via une interface de commandes. Il s’agit généralement de bots qui, une fois ajoutés à une conversation, répondent à des commandes comme /schedule ou /later. Attention cependant : ces services ont accès à vos conversations et à vos droits d’envoi. Vérifiez leur réputation et les permissions demandées avant de les intégrer. Pour des usages sensibles, préférez votre propre bot qui vous donne un contrôle total sur les données.

Conclusion

Programmer l’envoi de messages Telegram avec un bot est à la fois simple à mettre en œuvre et extrêmement flexible. Que vous utilisiez un serveur dédié avec cron, un script Python avec la bibliothèque schedule, ou un service cloud comme GitHub Actions, les possibilités d’automatisation sont vastes : rappels, alertes météo, notifications de trading, suivi de processus, etc. Les points clés à retenir : créez votre bot avec BotFather, récupérez le chat_id, choisissez le bon planificateur selon votre environnement, et sécurisez votre token avec des variables d'environnement ou des secrets. Avec ces bases, vous pouvez construire des systèmes d’alerte sur mesure, sans dépendre d’applications externes, et les faire évoluer selon vos besoins.

Questions fréquentes

Puis-je programmer l’envoi d’un message à un groupe sans coder ?

Oui, il existe des bots tiers qui offrent une interface pour planifier des messages, par exemple en tapant une commande comme /remind. Toutefois, ces bots nécessitent généralement d’être administrateur du groupe et de lui accorder des permissions d’envoi. Pour une solution fiable et sans dépendance externe, créer votre propre bot reste recommandé.

Comment obtenir le chat_id d’une conversation ?

Le moyen le plus simple : envoyez un message à votre bot, puis interrogez l’API avec https://api.telegram.org/bot<TOKEN>/getUpdates. Lisez le JSON dans votre navigateur ; le champ chat.id contient l’identifiant. Pour un groupe, ajoutez d’abord le bot au groupe, envoyez un message, puis récupérez les mises à jour. Vous pouvez aussi utiliser l'option ?offset=-1 pour ne récupérer que la dernière interaction.

Puis-je envoyer un message programmé avec un formatage riche (Markdown, HTML) ?

Oui. Ajoutez le paramètre parse_mode à votre requête, avec la valeur « HTML » ou « MarkdownV2 ». Utilisez les balises HTML classiques (<b>, <i>, <a href="...">) ou la syntaxe Markdown. Veillez à échapper les caractères spéciaux pour MarkdownV2, sinon l'envoi échouera. Par exemple, pour écrire un astérisque, utilisez \*.

Le bot peut-il envoyer des messages à plusieurs chats à la fois ?

Oui, votre script peut itérer sur une liste de chat_id et appeler l’API pour chacun. Attention aux limites de taux : espacer les appels d’au moins 1/30 seconde pour éviter d'être bloqué. Pour des envois massifs, préférez les diffusions via des chaînes Telegram où le bot est administrateur, car cela évite de multiplier les appels individuels.

#Bot Telegram#API Telegram#Programmation#Automatisation#Envoi programmé