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 :
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
.
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 login
si 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 ok
cela signifie que vous êtes prêt à partir !
Maintenant, parlez à votre 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.