本文概述
- 将聊天机器人包装在http服务器中
- 向用户发送消息
在本教程中, 你将完成在拥有超过10亿活跃用户的Facebook Messenger上部署聊天机器人所需的步骤。仅需几行代码, 你就可以吸引大量的受众。
有3个主要步骤可完成此操作。你需要:
- 创建一个服务器来侦听来自Facebook的消息(使用flask)
- 定义一个将消息发送回用户的功能(使用请求)
- 将https连接转发到本地计算机(使用ngrok)
请注意, 你在这篇文章中不会涉及的是你的机器人如何理解人们在说什么并做出适当的响应。要了解有关此内容的更多信息, 请查看Rasa NLU, Rasa Core和刚才提到的srcmini课程。
将聊天机器人包装在http服务器中第一步是创建一个http服务器, 该服务器侦听Facebook发送的消息, 获取对该消息的响应, 最后将响应发送回Facebook上的用户。我们将使用flask创建此服务器。基本思想如下:
- 创建一个烧瓶应用程序, 侦听发送到localhost:5000 / webhook的消息。在Facebook上发送消息时, 它们将以http请求的形式到达此URL。
- listen()函数处理这些http请求并检查它们是否包含有效的Facebook消息
- 如果消息有效, 则调用get_bot_response()函数, 并将响应发送回Facebook Messenger
最终脚本如下所示(将其保存在server.py下):
from flask import Flask, requestapp = 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"
在上面的脚本中, 尚未定义VERIFY_TOKEN和PAGE_ACCESS_TOKEN变量-因此你必须进行设置。 VERIFY_TOKEN可以是任何字符串, 它用作一种密码, 以使Facebook知道该服务器想要接收消息。使用长随机字符串是个好主意。你可以通过在终端中运行openssl rand -base64 32来快速执行此操作。
不必担心PAGE_ACCESS_TOKEN-你将在下面看到如何获得它!
向用户发送消息接下来, 你将编写一个函数, 该函数使用称为请求的python库将响应发送回Facebook Messenger。特别是, 你使用post()方法创建一个HTTP POST请求。 POST请求是将信息发送到服务器的典型方法。
你的函数应如下所示:
import requestsdef 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()
公开一个https端点并连接一个Facebook页面
【使用Python部署Facebook Messenger Bot】url localhost:5000仅适用于与正在运行的服务器在同一台计算机上创建的请求。因此, 你需要让Facebook知道如何访问烧瓶服务器。为此, 请首先安装ngrok。
转到此页面并为你的操作系统安装版本。如果你使用的是Mac并且使用自制软件, 则最快的安装ngrok的方法是使用brew cask install ngrok。
使用ngrok http 5000在终端中启动ngrok服务器。这将设置一个https终结点, 以转发到端口5000上的计算机, 例如https://51b6b3fa.ngrok.io。
请注意, 如果退出ngrok并重新启动, 则此URL将更改。
创建一个Facebook应用程序和页面
下一步是在Facebook上创建一个应用程序和一个页面。 Facebook提供了很好的文档, 但是你将在此处逐步完成主要步骤。
要创建该应用, 请转到此处
- 点击我的应用-> 添加新应用并输入名称
- 你将被重定向到该应用程序的仪表板
- 在产品下, 找到添加产品, 然后单击Messenger-> 设置
- 进行Messenger的设置, 向下滚动到Token Generation, 然后单击链接为你的应用创建新页面
启动你的机器人服务器
现在你已完成所有设置, 现在该启动你的聊天机器人服务器了!在单独的终端选项卡中, 运行
FLASK_APP=server.py flask run
设置网络挂钩
最后, 你需要在Facebook开发人员页面上注册Webhook。
- 再次转到产品中的Messenger选项卡, 然后向下滚动到Webhooks, 单击” 设置Webhooks”
- 在” 回调URL” 下方, 输入你的ngrok URL, 例如https://51b6b3fa.ngrok.io/webhook。此时, 必须运行烧瓶应用程序, 这一点很重要, 因为在下一步中将调用verify_token()
- 在” 验证令牌” 字段中, 将你指定的值放在server.py文件中
- 在” 订阅字段” 中, 确保已选中message和messages_postbacks。单击” 验证并保存” 以执行身份验证。
你的机器人现在可以通过Facebook Messenger发送和接收消息了。现在, 你的get_bot_response()函数仍然非常简单, 并且还不像真正的聊天机器人!要了解有关构建聊天机器人的所有信息, 请查看” Python srcmini中的构建聊天机器人” 课程, 以及Rasa NLU和Rasa Core python库。
推荐阅读
- R中的Web爬虫(rvest教程)
- 带有ElementTree的Python XML(新手指南)
- R与Boruta R包(特征选择)
- 从本地计算机到具有Terraform的Dask集群
- R教程(K均值聚类)
- 在Keras中实现自动编码器(权威教程)
- python 实现超快窗口截图,自动获取当前活动窗口并展示截图
- 机器学习教程|1-3 监督学习
- 双目摄像头|双目摄像头 三维坐标 python_聊聊三维重建-双目立体视觉原理