You are currently viewing Comment créer un bot Telegram

Comment créer un bot Telegram

Les chatbots sont souvent présentés comme une révolution dans la façon dont les utilisateurs interagissent avec la technologie et les entreprises. Elles ont une interface utilisateur relativement simple par rapport aux applications traditionnelles, car elles ne nécessitent qu’un chat des utilisateurs et les chatbots devraient au moins théoriquement comprendre et faire ce que l’utilisateur leur demande de faire.

De nombreuses industries déplacent leur service client vers des systèmes de chatbot. Cela est dû aux énormes économies de coûts par rapport aux humains, mais aussi à la robustesse et à la disponibilité constante. Les chatbots fournissent un certain niveau d’assistance aux utilisateurs sans coût supplémentaire significatif.

Les chatbots sont aujourd’hui utilisés dans de nombreux scénarios, allant de tâches simples telles que l’affichage de données temporelles et météorologiques à des opérations plus complexes telles qu’un diagnostic médical rudimentaire et une communication / assistance client. Vous pouvez développer un chatbot pour aider vos clients à poser des questions spécifiques sur votre produit, ou vous pouvez créer un assistant personnel de chatbot qui effectue des tâches de base et vous rappelle quand il est temps d’aller à une réunion ou à la salle de sport.

Il existe de nombreuses façons d’utiliser votre chatbot et l’une des utilisations les plus courantes est sur les plateformes de médias sociaux, car la plupart des gens les utilisent régulièrement. Il en va de même pour les applications de messagerie instantanée, mais avec quelques limitations.

télégramme est l’une des plates-formes de messagerie instantanée les plus populaires aujourd’hui car elle vous permet de stocker des messages dans le cloud au lieu de simplement votre appareil et a une bonne prise en charge multi-plateforme car vous pouvez avoir Telegram sur Android, iOS, Windows et à peu près n’importe quelle autre plate-forme que le Web la version peut prendre en charge. Créer un chatbot sur Telegram est assez simple, cela ne prend que quelques étapes qui prennent très peu de temps. Le chatbot peut être intégré aux groupes et canaux Telegram et fonctionne également de manière autonome.

Dans ce tutoriel, nous allons créer un bot Telegram qui vous donnera une image d’avatar. sont Avatars adorables. Dans notre exemple, un bot est créé avec Flask et déployé sur un serveur Heroku gratuit.

Pour terminer ce tutoriel, vous aurez besoin Python 3 est installé sur votre système, ainsi qu’une connaissance de Python. De plus, avoir une bonne compréhension du fonctionnement des applications serait un ajout intéressant, mais pas indispensable, car nous passerons en revue en détail la plupart des choses que nous présentons. Tu as aussi besoin Git installé sur votre système.

Bien entendu, le tutoriel nécessite également un compte Telegram, qui est gratuit. Vous pouvez vous connecter ici. Il nécessite également un compte Heroku, que vous pouvez obtenir gratuitement ici.

Donnez vie à votre bot Telegram

Pour créer un chatbot sur Telegram, vous devez contacter le Bot père, qui est essentiellement un bot utilisé pour créer d’autres bots.

La commande dont vous avez besoin est /newbot ce qui conduit aux étapes suivantes pour créer votre bot :

Tutoriel du bot Telegram - exemple de capture d'écran

Votre bot doit avoir deux attributs : un nom et un nom d’utilisateur. Le nom sera affiché pour votre bot, tandis que le nom d’utilisateur sera utilisé pour les mentions et le partage.

Après avoir sélectionné votre nom de bot et votre nom d’utilisateur – qui doivent se terminer par « bot » – vous recevrez un message avec votre jeton d’accès et, bien sûr, vous devrez enregistrer votre jeton d’accès et votre nom d’utilisateur pour plus tard car vous en aurez besoin.

Coder la logique du chatbot

Dans ce tutoriel, nous utilisons Ubuntu. Pour les utilisateurs de Windows, la plupart des commandes fonctionnent bien ici, mais si vous rencontrez des problèmes pour configurer l’environnement virtuel, veuillez contacter ce lien. Pour les utilisateurs de Mac, ce tutoriel devrait fonctionner correctement.

Tout d’abord, créons un environnement virtuel. Il permet d’isoler les besoins de votre projet de votre environnement Python global.

$ python -m venv botenv/

Maintenant, nous avons un botenv/ Répertoire qui contient toutes les bibliothèques Python que nous utilisons. Allez-y et activez virtualenv avec la commande suivante :

$ source botenv/bin/activate

Les bibliothèques dont nous avons besoin pour notre bot sont :

Vous pouvez les installer dans l’environnement virtuel à l’aide de la commande pip comme suit :

(telebot) $ pip install flask
(telebot) $ pip install python-telegram-bot
(telebot) $ pip install requests

Recherchons maintenant notre répertoire de projets.

.
├── app.py
├── telebot
│   ├── credentials.py
│   |   .
│   |   you can build your engine here
│   |   .
│   └── __init__.py
└── botenv

dans le credentials.py Fichier, nous avons besoin de trois variables :

bot_token = "here goes your access token from BotFather"
bot_user_name = "the username you entered"
URL = "the heroku app link that we will create later"

Revenons maintenant à notre app.py et parcourons le code étape par étape :

# import everything
from flask import Flask, request
import telegram
from telebot.credentials import bot_token, bot_user_name,URL
global bot
global TOKEN
TOKEN = bot_token
bot = telegram.Bot(token=TOKEN)

Nous avons maintenant l’objet bot qui sera utilisé pour chaque action que nous voulons que le bot entreprenne.

# start the flask app
app = Flask(__name__)

Nous devons également lier des fonctions à des routes spécifiques. En d’autres termes, nous devons dire à Flask quoi faire lorsqu’une adresse particulière est appelée. Vous pouvez trouver des informations plus détaillées sur Flask et les itinéraires ici.

Dans notre exemple, la fonction route répond à une URL qui est essentiellement /{token}, et c’est l’url que Telegram utilise pour obtenir des réponses aux messages envoyés au bot.

@app.route('/{}'.format(TOKEN), methods=['POST'])
def respond():
   # retrieve the message in JSON and then transform it to Telegram object
   update = telegram.Update.de_json(request.get_json(force=True), bot)

   chat_id = update.message.chat.id
   msg_id = update.message.message_id

   # Telegram understands UTF-8, so encode text for unicode compatibility
   text = update.message.text.encode('utf-8').decode()
   # for debugging purposes only
   print("got text message :", text)
   # the first time you chat with the bot AKA the welcoming message
   if text == "/start":
       # print the welcoming message
       bot_welcome = """
       Welcome to coolAvatar bot, the bot is using the service from http://avatars.adorable.io/ to generate cool looking avatars based on the name you enter so please enter a name and the bot will reply with an avatar for your name.
       """
       # send the welcoming message
       bot.sendMessage(chat_id=chat_id, text=bot_welcome, reply_to_message_id=msg_id)


   else:
       try:
           # clear the message we got from any non alphabets
           text = re.sub(r"W", "_", text)
           # create the api link for the avatar based on http://avatars.adorable.io/
           url = "https://api.adorable.io/avatars/285/{}.png".format(text.strip())
           # reply with a photo to the name the user sent,
           # note that you can send photos by url and telegram will fetch it for you
           bot.sendPhoto(chat_id=chat_id, photo=url, reply_to_message_id=msg_id)
       except Exception:
           # if things went wrong
           bot.sendMessage(chat_id=chat_id, text="There was a problem in the name you used, please enter different name", reply_to_message_id=msg_id)

   return 'ok'

La façon la plus intuitive de faire fonctionner cette fonctionnalité est de nous demander de l’appeler toutes les secondes pour qu’elle vérifie s’il y a un nouveau message, mais nous ne le ferons pas. Au lieu de cela, nous utilisons Webhook Cela nous donne un moyen de faire en sorte que le bot appelle notre serveur lorsqu’un message est appelé afin que nous n’ayons pas à laisser notre serveur souffrir dans une boucle while en attendant un message.

Nous allons donc créer une fonction que nous devrons nous appeler pour activer le webhook de Telegram, qui indique essentiellement à Telegram d’aller vers un lien spécifique lorsqu’un nouveau message arrive. Nous n’appellerons cette fonction qu’une seule fois lorsque nous créerons le bot pour la première fois. Si vous modifiez le lien de l’application, vous devrez réexécuter cette fonction avec le nouveau lien dont vous disposez.

L’itinéraire ici peut être n’importe quoi; c’est toi qui l’appelleras :

@app.route('/setwebhook', methods=['GET', 'POST'])
def set_webhook():
    # we use the bot object to link the bot to our app which live
    # in the link provided by URL
    s = bot.setWebhook('{URL}{HOOK}'.format(URL=URL, HOOK=TOKEN))
    # something to let us know things work
    if s:
        return "webhook setup ok"
    else:
        return "webhook setup failed"

Maintenant que tout est configuré, créons simplement une page d’accueil sophistiquée pour que nous sachions que le moteur fonctionne.

@app.route("https://www.toptal.com/")
def index():
    return '.'
if __name__ == '__main__':
    # note the threaded arg which allow
    # your app to have more than one thread
    app.run(threaded=True)

Jetons un coup d’œil à la version complète de app.py :

import re
from flask import Flask, request
import telegram
from telebot.credentials import bot_token, bot_user_name,URL


global bot
global TOKEN
TOKEN = bot_token
bot = telegram.Bot(token=TOKEN)

app = Flask(__name__)

@app.route('/{}'.format(TOKEN), methods=['POST'])
def respond():
   # retrieve the message in JSON and then transform it to Telegram object
   update = telegram.Update.de_json(request.get_json(force=True), bot)

   chat_id = update.message.chat.id
   msg_id = update.message.message_id

   # Telegram understands UTF-8, so encode text for unicode compatibility
   text = update.message.text.encode('utf-8').decode()
   # for debugging purposes only
   print("got text message :", text)
   # the first time you chat with the bot AKA the welcoming message
   if text == "/start":
       # print the welcoming message
       bot_welcome = """
       Welcome to coolAvatar bot, the bot is using the service from http://avatars.adorable.io/ to generate cool looking avatars based on the name you enter so please enter a name and the bot will reply with an avatar for your name.
       """
       # send the welcoming message
       bot.sendMessage(chat_id=chat_id, text=bot_welcome, reply_to_message_id=msg_id)


   else:
       try:
           # clear the message we got from any non alphabets
           text = re.sub(r"W", "_", text)
           # create the api link for the avatar based on http://avatars.adorable.io/
           url = "https://api.adorable.io/avatars/285/{}.png".format(text.strip())
           # reply with a photo to the name the user sent,
           # note that you can send photos by url and telegram will fetch it for you
           bot.sendPhoto(chat_id=chat_id, photo=url, reply_to_message_id=msg_id)
       except Exception:
           # if things went wrong
           bot.sendMessage(chat_id=chat_id, text="There was a problem in the name you used, please enter different name", reply_to_message_id=msg_id)

   return 'ok'

@app.route('/set_webhook', methods=['GET', 'POST'])
def set_webhook():
   s = bot.setWebhook('{URL}{HOOK}'.format(URL=URL, HOOK=TOKEN))
   if s:
       return "webhook setup ok"
   else:
       return "webhook setup failed"

@app.route("https://www.toptal.com/")
def index():
   return '.'


if __name__ == '__main__':
   app.run(threaded=True)

C’est le dernier morceau de code que vous écrirez dans notre tutoriel. Nous pouvons maintenant passer à la dernière étape et lancer notre application sur Heroku.

Démarrez notre application sur Heroku

Nous avons besoin de quelques éléments avant de créer notre application.

Heroku n’a aucun moyen de savoir quelles bibliothèques votre projet utilise, nous devons donc le faire avec le requirements.txt Fichier – un problème courant est l’orthographe incorrecte des demandes. Attention donc à bien générer le fichier requirements avec pip :

pip freeze > requirements.txt

Vous avez maintenant votre fichier d’exigences prêt.

Maintenant tu as besoin de ça Procfile ce que dit Heroku où commence notre application, alors créez-en une Procfile Fichier et ajoutez les éléments suivants :

web: gunicorn app:app

Une étape de rebond : vous pouvez a. Ajouter .gitignore Fichier dans votre projet afin que les fichiers inutilisés ne soient pas téléchargés dans le référentiel.

De votre Heroku tableau de bord, créez une nouvelle application. Une fois cela fait, vous serez envoyé au Déployer Page. Ensuite, ouvrez le idées Tabulez dans une nouvelle fenêtre et copiez le domaine de l’application, qui ressemblera à ceci https://appname.herokuapp.com/ et collez-le dans la variable url credentials.py.

Capture d'écran du tableau de bord Heroku

Retournez maintenant au Déployer Tab et continuez avec les étapes :

Noter: Les utilisateurs de Windows et macOS peuvent suivre les étapes décrites ici.

Connectez-vous à Heroku :

$ heroku login

Veuillez noter que cette méthode se bloque parfois waiting for loginsi cela vous arrive, essayez de vous connecter avec :

$ heroku login -i

Initialisez un dépôt git dans notre répertoire :

$ git init
$ heroku git:remote -a {heroku-project-name}

Déployez l’application :

$ git add .
$ git commit -m "first commit"
$ git push heroku master

À ce stade, vous pouvez voir la progression de la construction dans votre terminal. Si tout s’est bien passé, vous verrez quelque chose comme ceci :

remote: -----> Launching...
remote:        Released v6
remote:        https://project-name.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.

Allez maintenant sur la page de l’application (le lien du domaine que vous avez copié précédemment) et ajoutez à la fin du lien /setwebhook pour que l’adresse soit comme https://appname.herokuapp.com/setwebhook. Quand tu vois webhook setup okcela signifie que vous êtes prêt à partir !

Maintenant, parlez à votre bot

Version en direct du chatbot Telegram
Une version en direct du bot

Réglage fin, trucs et astuces

Votre bot Telegram est maintenant prêt à être utilisé 24h/24 et 7j/7 sans aucune intervention. Vous pouvez ajouter n’importe quelle logique au bot. Par exemple, voici comment vous pouvez rendre votre bot plus réaliste en ajoutant un statut « Saisir » et en envoyant un statut de photo, comme suit :

Le prochain extrait de code du respond() Une fonction:

   if text == "/start":
       # print the welcoming message
       bot_welcome = """
       Welcome to coolAvatar bot, the bot is using the service from http://avatars.adorable.io/ to generate cool looking avatars based on the name you enter so please enter a name and the bot will reply with an avatar for your name.
       """
       # send the welcoming message
       bot.sendChatAction(chat_id=chat_id, action="typing")
       sleep(1.5)
       bot.sendMessage(chat_id=chat_id, text=bot_welcome, reply_to_message_id=msg_id)


   else:
       try:
           # clear the message we got from any non alphabets
           text = re.sub(r"W", "_", text)
           # create the api link for the avatar based on http://avatars.adorable.io/
           url = "https://api.adorable.io/avatars/285/{}.png".format(text.strip())
           # reply with a photo to the name the user sent,
           # note that you can send photos by url and telegram will fetch it for you
           bot.sendChatAction(chat_id=chat_id, action="upload_photo")
           sleep(2)
           bot.sendPhoto(chat_id=chat_id, photo=url, reply_to_message_id=msg_id)
       except Exception:
           # if things went wrong
           bot.sendMessage(chat_id=chat_id, text="There was a problem in the name you used, please enter different name", reply_to_message_id=msg_id)

Comme vous pouvez le voir dans l’extrait, nous avons ajouté une action de toucher lorsque nous voulons envoyer les informations sur le bot au format texte et une action de téléchargement de photo lorsque nous envoyons une photo pour rendre le bot plus réaliste. D’autres actions peuvent être trouvées ici.

Vous pouvez également modifier l’image du bot et la description du canal BotFather pour le rendre plus convivial.

Vous pouvez trouver de nombreux exemples plus simples de bots Telegram sur le Bot de télégramme Python Page sur GitHub.

Vous pouvez vous appuyer sur notre bot et en faire le prochain super bot d’IA – tout ce que vous avez à faire est d’y intégrer votre logique respond() Une fonction. Par exemple, votre logique peut être située dans un module séparé et peut être appelée dans le respond() Fonctionne comme ceci :

.
├── app.py
├── telebot
│   ├── credentials.py
│   ├──ai.py
│   |   .
│   |   you can build your engine here
│   |   .
│   └── __init__.py
└── botenv

Et à l’intérieur à la.py :

def generate_smart_reply(text):
    # here we can do all our work
    return "this is a smart reply from the ai!"

Maintenant, importez-le dans le Application.py :

import re
from time import sleep
from flask import Flask, request
import telegram
From telebot.ai import generate_smart_reply
from telebot.credentials import bot_token, bot_user_name,URL

Ensuite, appelez-le simplement dans le respond() Code.

def respond():
   # retrieve the message in JSON and then transform it to Telegram object
   update = telegram.Update.de_json(request.get_json(force=True), bot)

   chat_id = update.message.chat.id
   msg_id = update.message.message_id

   # Telegram understands UTF-8, so encode text for unicode compatibility
   text = update.message.text.encode('utf-8').decode()
   # for debugging purposes only
   print("got text message :", text)
   # here call your smart reply message
   reply = generate_smart_reply(text)
   bot.sendMessage(chat_id=chat_id, text=reply, reply_to_message_id=msg_id)

Maintenant, vous pouvez faire fonctionner votre bot comme vous le souhaitez – allez-y et créez la prochaine grande chose !

J’espère que vous avez apprécié la création de votre premier bot Telegram.

Ressources additionnelles

Laisser un commentaire