Cours
Bien conçu, l’échange en langage naturel avec un ordinateur est à la fois puissant et ludique. La messagerie et les appareils à commande vocale sont les prochaines grandes plateformes, et le conversationnel jouera un rôle clé dans des expériences de réalité augmentée et virtuelle engageantes. Mais ces programmes posent des défis spécifiques, par exemple : comment rendre mon chatbot accessible au monde extérieur ?
Dans ce tutoriel, vous allez suivre les étapes nécessaires pour déployer un chatbot sur Facebook Messenger, qui compte plus d’1 milliard d’utilisateurs actifs. Avec seulement quelques lignes de code, vous pouvez toucher une audience immense.
Trois grandes étapes suffisent :
- créer un serveur qui écoute les messages de Facebook (avec
flask) - définir une fonction pour renvoyer des messages aux utilisateurs (avec
requests) - rediriger une connexion
httpsvers votre machine locale (avecngrok)
Pour en savoir plus sur la transformation du langage humain en instructions pour la machine, découvrez le cours DataCamp Building Chatbots in Python.
Notez que cet article n’aborde pas la compréhension du langage par votre bot ni la génération de réponses adaptées. Pour cela, consultez Rasa NLU, Rasa Core, ainsi que le cours DataCamp cité ci‑dessus.
Encapsuler votre chatbot dans un serveur http
La première étape consiste à créer un serveur http qui écoute les messages envoyés par Facebook, obtient une réponse à ce message, puis renvoie cette réponse à l’utilisateur sur Facebook. Nous utiliserons flask pour créer ce serveur. L’idée générale est la suivante :
- créer une application
flaskqui écoute les messages envoyés àlocalhost:5000/webhook. Lorsque des messages sont envoyés sur Facebook, ils arrivent sous forme de requêteshttpà cette URL. - la fonction
listen()traite ces requêteshttpet vérifie qu’elles contiennent un message Facebook valide - si le message est valide, la fonction
get_bot_response()est appelée et la réponse est renvoyée à Facebook Messenger
En complément, vous allez créer une fonction appelée verify_webhook() qui gère l’authentification initiale entre Facebook et votre application.
Le script final ressemble à ceci (enregistrez‑le sous server.py) :
from flask import Flask, request
app = Flask(__name__)
FB_API_URL = 'https://graph.facebook.com/v2.6/me/messages'
VERIFY_TOKEN = ''# <paste your verify token here>
PAGE_ACCESS_TOKEN = ''# paste your page access token here>"
def get_bot_response(message):
"""This is just a dummy function, returning a variation of what
the user said. Replace this function with one connected to chatbot."""
return "This is a dummy response to '{}'".format(message)
def verify_webhook(req):
if req.args.get("hub.verify_token") == VERIFY_TOKEN:
return req.args.get("hub.challenge")
else:
return "incorrect"
def respond(sender, message):
"""Formulate a response to the user and
pass it on to a function that sends it."""
response = get_bot_response(message)
send_message(sender, response)
def is_user_message(message):
"""Check if the message is a message from the user"""
return (message.get('message') and
message['message'].get('text') and
not message['message'].get("is_echo"))
@app.route("/webhook")
def listen():
"""This is the main function flask uses to
listen at the `/webhook` endpoint"""
if request.method == 'GET':
return verify_webhook(request)
if request.method == 'POST':
payload = request.json
event = payload['entry'][0]['messaging']
for x in event:
if is_user_message(x):
text = x['message']['text']
sender_id = x['sender']['id']
respond(sender_id, text)
return "ok"
Dans le script ci‑dessus, les variables VERIFY_TOKEN et PAGE_ACCESS_TOKEN ne sont pas encore définies : vous devez donc les renseigner. Le VERIFY_TOKEN peut être n’importe quelle chaîne ; il sert de mot de passe pour indiquer à Facebook que ce serveur souhaite recevoir des messages. Il est recommandé d’utiliser une longue chaîne aléatoire. Vous pouvez en générer une rapidement en exécutant openssl rand -base64 32 dans votre terminal.
Ne vous préoccupez pas encore du PAGE_ACCESS_TOKEN : vous verrez ci‑dessous comment l’obtenir !
Renvoyer des messages aux utilisateurs
Ensuite, vous allez écrire une fonction qui envoie une réponse à Facebook Messenger à l’aide de la bibliothèque Python requests. En particulier, vous utiliserez la méthode post(), qui crée une requête HTTP POST. Une requête POST est la manière classique d’envoyer des informations à un serveur.
Votre fonction devrait ressembler à ceci :
import requests
def send_message(recipient_id, text):
"""Send a response to Facebook"""
payload = {
'message': {
'text': text
},
'recipient': {
'id': recipient_id
},
'notification_type': 'regular'
}
auth = {
'access_token': PAGE_ACCESS_TOKEN
}
response = requests.post(
FB_API_URL,
params=auth,
json=payload
)
return response.json()
Exposer un point de terminaison https et connecter une page Facebook
L’URL localhost:5000 ne fonctionne que pour des requêtes émises depuis la même machine que le serveur en cours d’exécution. Vous devez donc indiquer à Facebook comment joindre votre serveur flask. Pour cela, commencez par installer ngrok.
Rendez‑vous sur cette page et installez la version adaptée à votre système. Si vous êtes sur Mac et utilisez homebrew, le moyen le plus rapide d’installer ngrok est brew cask install ngrok.
Démarrez le serveur ngrok dans votre terminal avec ngrok http 5000. Cela mettra en place un point de terminaison https redirigé vers votre machine sur le port 5000, par exemple https://51b6b3fa.ngrok.io.
Remarque : si vous quittez puis relancez ngrok, cette URL changera.
Créer une application et une page Facebook
L’étape suivante consiste à créer une application et une page sur Facebook. La documentation Facebook est bien faite, mais voici les grandes lignes.
Pour créer l’application, allez ici et :
- cliquez sur My Apps -> Add a New App et saisissez un nom
- vous serez redirigé vers le tableau de bord de l’application
- dans Products, trouvez Add a Product puis cliquez sur Messenger -> Set Up
Pour créer la page, vous devez :
- aller dans les paramètres de Messenger, descendre jusqu’à Token Generation et cliquer sur le lien pour create a new page pour votre application
Une fois la page créée, revenez dans les paramètres Token Generation et sélectionnez cette page dans le menu déroulant. Copiez le Page Access Token dans l’emplacement prévu pour PAGE_ACCESS_TOKEN dans server.py ci‑dessus.
Démarrer le serveur de votre bot
Maintenant que tout est en place, il est temps de lancer votre serveur de chatbot ! Dans un autre onglet de terminal, exécutez
FLASK_APP=server.py flask run
Configurer le webhook
Pour finir, vous devez enregistrer votre webhook sur la page développeurs de Facebook.
- Retournez dans l’onglet Messenger de Products, faites défiler jusqu’à Webhooks et cliquez sur Setup Webhooks
- Dans Callback URL, saisissez votre URL ngrok, par exemple
https://51b6b3fa.ngrok.io/webhook. Il est important que votre applicationflasksoit en cours d’exécution à ce stade, carverify_token()sera appelé à l’étape suivante - Dans le champ Verify Token, indiquez la valeur que vous avez définie dans votre fichier
server.py - Dans Subscription Fields, assurez‑vous que
messagesetmessaging_postbackssont cochés. Cliquez sur Verify and Save pour effectuer l’authentification
Important : retournez dans Products -> Messenger et, sous Select a page to subscribe your webhook to the page events, sélectionnez votre page puis cliquez sur Subscribe.
C’est terminé !
Votre bot est désormais prêt à envoyer et recevoir des messages via Facebook Messenger. Pour l’instant, votre fonction get_bot_response() reste très simple et ne donne pas encore l’impression d’un vrai chatbot ! Pour tout apprendre sur la création de chatbots, consultez le cours DataCamp Building Chatbots in Python et le tutoriel Building a Chatbot using Chatterbot in Python, ainsi que les bibliothèques Python Rasa NLU et Rasa Core.
