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>"defget_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)defverify_webhook(req):if req.args.get("hub.verify_token")== VERIFY_TOKEN:return req.args.get("hub.challenge")else:return"incorrect"defrespond(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)defis_user_message(message):"""Check if the message is a message from the user"""return(message.get('message')and
message['message'].get('text')andnot message['message'].get("is_echo"))@app.route("/webhook")deflisten():"""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"技术支持
当方式得当时,通过人类语言与计算机交互既强大又有趣。消息与语音控制设备正成为下一代重要平台,而对话式计算在打造引人入胜的增强与虚拟现实体验中将发挥重要作用。构建此类程序有不少独特挑战,例如:如何让我的聊天机器人对外可用?
在本教程中,您将逐步完成在 Facebook Messenger(其拥有逾 10 亿活跃用户)上部署聊天机器人的流程。只需几行代码,您就能触达海量受众。
完成此事主要有 3 个步骤。您需要:
flask)requests)https连接转发到您的本地机器(使用ngrok)如果您想进一步了解如何将人类语言转化为机器指令,请查看 DataCamp 课程 Building Chatbots in Python。
请注意,本文不会涉及让您的机器人理解用户表达并做出恰当回应的方法。若要了解这方面内容,请查看 Rasa NLU、Rasa Core,以及刚刚提到的 DataCamp 课程。
将您的聊天机器人封装到一个
http服务器中第一步是创建一个
http服务器,用于侦听由 Facebook 发送的消息,获取对此消息的响应,并最终将响应发回 Facebook 上的用户。我们将使用flask创建这个服务器。基本思路如下:flask应用,侦听发送到localhost:5000/webhook的消息。当在 Facebook 上发送消息时,它们会以http请求的形式到达该 URL。listen()函数处理这些http请求,并检查其是否包含有效的 Facebook 消息get_bot_response()函数,并将响应发送回 Facebook Messenger此外,您将创建一个名为
verify_webhook()的函数,用于处理 Facebook 与您的应用之间的初始身份验证。最终脚本如下所示(将其保存为
server.py):在上述脚本中,
VERIFY_TOKEN和PAGE_ACCESS_TOKEN变量尚未定义——因此您需要设置它们。VERIFY_TOKEN可以是任意字符串,用作一种密码,让 Facebook 知道该服务器希望接收消息。建议使用较长的随机字符串。您可以在终端中运行openssl rand -base64 32快速生成。暂时不用担心
PAGE_ACCESS_TOKEN——稍后您将看到如何获取它!将消息发回给用户
接下来,您将编写一个函数,使用名为
requests的 Python 库将响应发回 Facebook Messenger。具体而言,您将使用post()方法,它会创建一个HTTP POST请求。POST请求是向服务器发送信息的典型方式。您的函数应如下所示:
暴露一个
https端点并连接 Facebook 专页localhost:5000这个 URL 只对在与服务器同一台电脑上发起的请求有效。因此,您需要让 Facebook 知道如何访问您的flask服务器。为此,首先安装ngrok。前往 此页面 并安装适用于您操作系统的版本。如果您在 Mac 上并已安装
homebrew,最快的安装ngrok的方式是运行brew cask install ngrok。在终端中使用
ngrok http 5000启动 ngrok 服务器。这会设置一个https端点,转发到您机器的5000端口,例如https://51b6b3fa.ngrok.io。注意:如果您退出并重启
ngrok,该 URL 会发生变化。创建 Facebook 应用与专页
下一步是在 Facebook 上创建一个应用和一个专页。Facebook 提供了良好的文档,但这里也会带您走一遍主要步骤。
要创建应用,请前往 此处,然后
要创建专页,您需要:
创建专页后,返回 Token Generation 设置,从下拉菜单中选择该专页。将 Page Access Token 复制到上述
server.py中PAGE_ACCESS_TOKEN的占位位置。启动您的机器人服务器
现在一切就绪,是时候启动您的聊天机器人服务器了!在另一个终端标签页中运行
设置 webhook
最后,您需要在 Facebook 开发者页面上注册您的 webhook。
https://51b6b3fa.ngrok.io/webhook。此时务必确保您的flask应用正在运行,因为下一步会调用verify_token()server.py文件中指定的值messages和messaging_postbacks,点击 Verify and Save 以完成认证重要:返回 Products -> Messenger,在 Select a page to subscribe your webhook to the page events 下选择您的专页并点击 Subscribe。
大功告成!
您的机器人现在可以通过 Facebook Messenger 收发消息了。此刻,您的
get_bot_response()函数仍然非常简单,还不像一个真正的聊天机器人!若想全面学习如何构建聊天机器人,请查看 DataCamp 课程 Building Chatbots in Python 和教程 Building a Chatbot using Chatterbot in Python,以及 Python 库 Rasa NLU 与 Rasa Core。