Chatbots en Go : Créer un assistant rapide et fiable de zéro

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Pourquoi Go est-il le choix idéal pour les chatbots ?

\n\n

Si vous avez déjà écrit un chatbot en Python, vous savez : il fonctionne. Mais lorsque la charge atteint des milliers de requêtes par seconde, Python commence à « réfléchir ». Go (ou Golang) est conçu pour ne pas réfléchir — il agit simplement. Des performances élevées, une gestion réseau intégrée, des goroutines (threads légers) et une consommation mémoire minimale font de Go le meilleur langage pour créer des chatbots à forte charge.

\n\n

Dans ce guide, nous allons créer un bot Telegram complet en Go qui traitera les commandes, fonctionnera avec l'API et sera facilement évolutif. Vous obtiendrez non seulement de la théorie, mais un code prêt à être exécuté en 5 minutes.

\n\n

Qu'allons-nous construire ?

\n\n

Notre bot en Go sera capable de :

\n
    \n
  • Répondre à la commande /start par un message de bienvenue.
  • \n
  • Recevoir des messages texte et les retourner en majuscules (écho-bot avec du « caractère »).
  • \n
  • Gérer les erreurs et journaliser les actions.
  • \n
  • Fonctionner via l'API Telegram Bot (le scénario le plus populaire pour les chatbots).
  • \n
\n\n

Tout le code sera écrit en Go pur sans bibliothèques tierces (seulement la bibliothèque standard et le client HTTP), afin que vous compreniez comment tout fonctionne « sous le capot ».

\n\n

Étape 1 : Préparation de l'environnement

\n\n

Assurez-vous d'avoir Go installé (version 1.21+). Vérifiez avec la commande :

\n\n
go version
\n\n

Créez un nouveau répertoire pour le projet et initialisez le module :

\n\n
mkdir go-chat-bot\ncd go-chat-bot\ngo mod init github.com/votrenom/go-chat-bot
\n\n

Vous aurez besoin d'un token de bot. Si vous n'en avez pas :

\n
    \n
  1. Écrivez à @BotFather sur Telegram.
  2. \n
  3. Envoyez la commande /newbot et suivez les instructions.
  4. \n
  5. Copiez le token obtenu (il ressemble à : 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11).
  6. \n
\n\n

Enregistrez le token dans une variable d'environnement (ne stockez jamais les tokens dans le code !) :

\n\n
export BOT_TOKEN="votre_token_ici"
\n\n

Étape 2 : Structure de base du bot en Go

\n\n

Créez le fichier main.go. Nous commencerons par un serveur HTTP simple qui recevra les mises à jour de Telegram. Go est parfait pour cela grâce au package intégré net/http.

\n\n
package main\n\nimport (\n    "encoding/json"\n    "fmt"\n    "io"\n    "log"\n    "net/http"\n    "os"\n    "strings"\n)\n\n// Update — structure d'une mise à jour entrante de Telegram\ntype Update struct {\n    UpdateID int `json:"update_id"`\n    Message  struct {\n        Text string `json:"text"`\n        Chat struct {\n            ID int64 `json:"id"`\n        } `json:"chat"`\n    } `json:"message"`\n}\n\nfunc main() {\n    botToken := os.Getenv("BOT_TOKEN")\n    if botToken == "" {\n        log.Fatal("BOT_TOKEN non défini")\n    }\n\n    http.HandleFunc("/webhook", func(w http.ResponseWriter, r *http.Request) {\n        handleWebhook(w, r, botToken)\n    })\n\n    log.Println("Bot démarré sur :8080")\n    log.Fatal(http.ListenAndServe(":8080", nil))\n}\n\nfunc handleWebhook(w http.ResponseWriter, r *http.Request, token string) {\n    body, err := io.ReadAll(r.Body)\n    if err != nil {\n        log.Printf("Erreur de lecture du corps de la requête : %v", err)\n        http.Error(w, "Bad Request", http.StatusBadRequest)\n        return\n    }\n    defer r.Body.Close()\n\n    var update Update\n    if err := json.Unmarshal(body, &update); err != nil {\n        log.Printf("Erreur d'analyse JSON : %v", err)\n        http.Error(w, "Bad JSON", http.StatusBadRequest)\n        return\n    }\n\n    // Si le message est vide — on ignore\n    if update.Message.Text == "" {\n        return\n    }\n\n    log.Printf("Message reçu : %s", update.Message.Text)\n\n    // On forme la réponse\n    var replyText string\n    if strings.HasPrefix(update.Message.Text, "/start") {\n        replyText = "Bonjour ! Je suis un bot en Go. Écri"                

Blogs

Book Recommendations