Chat-bots en C++ : de la théorie au code prêt en une soirée

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

Introduction : pourquoi C++ pour les chat-bots n'est pas une folie

\n\n

Quand il s'agit de créer des chat-bots, on pense généralement à Python, JavaScript ou Node.js. Mais que diriez-vous si je vous disais que C++ peut être un outil tout aussi efficace pour cette tâche ? Oui, ce même C++ qui est associé aux pilotes, aux jeux et aux systèmes à haute charge.

\n\n

En réalité, les chat-bots en C++ sont une excellente solution lorsque :

\n
    \n
  • Vous avez besoin d'une performance maximale (traitement de milliers de requêtes par seconde) ;
  • \n
  • Vous travaillez dans un environnement embarqué ou sur des microcontrôleurs ;
  • \n
  • Vous souhaitez minimiser la consommation de mémoire ;
  • \n
  • Vous aimez simplement le C++ et voulez essayer quelque chose de nouveau.
  • \n
\n\n

Dans ce guide pratique, nous allons créer un chat-bot complet en C++ à partir de zéro. Nous utiliserons des bibliothèques réelles, écrirons du code fonctionnel et analyserons l'architecture qui permettra à votre bot de communiquer via l'API Telegram. À la fin de l'article, vous aurez non seulement de la théorie, mais un projet prêt à être exécuté et étendu.

\n\n

Ce dont nous aurons besoin : la boîte à outils

\n\n

Avant d'écrire du code, examinons les outils nécessaires. Pour la création d'un chat-bot en C++, nous aurons besoin de :

\n\n

Bibliothèques

\n
    \n
  • libcurl — pour les requêtes HTTP (envoi et réception de données depuis l'API Telegram) ;
  • \n
  • nlohmann/json — une bibliothèque légère pour travailler avec JSON (analyse des réponses du serveur) ;
  • Boost.Asio (optionnel) — pour le travail asynchrone avec le réseau ;
  • Support des threads (std::thread) — pour traiter plusieurs requêtes simultanément.
\n\n

Installation (Linux / macOS)

\n
sudo apt-get install libcurl4-openssl-dev  # Pour Linux\nbrew install curl                          # Pour macOS
\n

La bibliothèque nlohmann/json peut être incluse en tant que header-only (téléchargez simplement json.hpp et placez-la dans le projet).

\n\n

Structure du projet

\n
telegram_bot/\n├── main.cpp\n├── bot.hpp\n├── bot.cpp\n├── json.hpp\n└── Makefile (ou CMakeLists.txt)
\n\n

Étape 1 : Le squelette du bot — travail avec l'API Telegram

\n\n

L'API Telegram Bot est une API RESTful. Tout ce dont nous avons besoin est d'envoyer des requêtes HTTP à https://api.telegram.org/bot<TOKEN>/METHOD. Les méthodes les plus importantes sont getUpdates (obtenir les nouveaux messages) et sendMessage (envoyer une réponse).

\n\n

Créons une classe TelegramBot qui sera responsable de toute la communication.

\n\n

bot.hpp — fichier d'en-tête

\n
#ifndef BOT_HPP\n#define BOT_HPP\n\n#include <string>\n#include <vector>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nclass TelegramBot {\npublic:\n    explicit TelegramBot(const std::string& token);\n    \n    // Obtenir la liste des nouveaux messages (long polling)\n    std::vector<json> getUpdates(long offset = 0);\n    \n    // Envoyer un message texte\n    bool sendMessage(long chat_id, const std::string& text);\n    \n    // Traiter un message entrant\n    std::string handleMessage(const json& message);\n\nprivate:\n    std::string api_url_;\n    std::string httpGet(const std::string& url);\n    std::string httpPost(const std::string& url, const std::string& post_data);\n};\n\n#endif // BOT_HPP
\n\n

bot.cpp — implémentation

\n
#include "bot.hpp"\n#include <curl/curl.h>\n#include <sstream>\n\n// Callback pour écrire la réponse curl dans une chaîne\nstatic size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userp) {\n    ((std::string*)userp)->append((char*)contents, size * nmemb);\n    return size * nmemb;\n}\n\nTelegramBot::TelegramBot(const std::string& token) \n    : api_url_("https://api.telegram.org/bot" + token + "/") {}\n\nstd::string TelegramBot::httpGet(const std::                

Blogs

Book Recommendations