\ 在本教程中,我将使用适用于 WhatsApp 的 Messagebird API 和适用于 Python 的 Flask 框架构建一个聊天机器人。
\ 第一步是获取使用 WhatsApp API 的访问权限,使用此链接获取访问权限,一旦您注册并在仪表板中导航到 WhatsApp 并按照说明设置您自己的号码以使用 API 进行操作。到目前为止,我们可以使用 Messagebird 沙箱来测试我们的机器人,所以让我们深入研究一下。
\ 将您的手机从 Messagebird 仪表板连接到沙盒,然后单击 WhatsApp,然后单击 WhatsApp 沙盒。
\
当您向该号码发送第一条消息时,您将被分配一个唯一的频道 ID,但是当您被验证使用自己的号码时,您还将获得自己的频道 ID,我们将使用该 ID 与我们的机器人进行通信。如果您已经安装了虚拟环境,请跳过步骤 1。
第 1 步:安装虚拟环境
在 Linux 上安装
sudo apt install python-virtualenv
\
在 Mac 上安装
sudo python2 -m pip install virtualenv
\
在 Windows 上安装
py -2 -m pip install virtualenv
\n步骤 2:创建环境
创建一个目录或文件夹,您将在其中使用机器上的某个版本的 python 创建环境。我将在本教程中使用 python3。
在 Linux 和 MacOS 中创建环境
在您的终端中导航到您在步骤 2 中创建的目录,然后输入以下命令,将 whatsappbot 替换为您自己的名称。
\
python3 -m venv whatsappbot
在 Windows 中创建环境
py -3 -m venv whatsappbot
第 3 步:激活环境
在 Linux 和 MacOS 中激活虚拟环境,将 whatsappbot 替换为您在步骤 2 中创建的环境的名称:
\
. whatsappbot/bin/activate
\ 对于 Windows,激活虚拟环境,将 whatsappbot 替换为您在步骤 2 中创建的环境的名称:
\
whatsappbot\Scripts\activate
第 4 步:安装 Flask
输入以下命令
\
pip install Flask messagebird requests gunicorn jinja2 werkzeug urllib3
\ 用代码编辑器打开你的文件夹,我的是 vscode,你的项目文件夹现在应该有 venv 文件夹,我的是 whatsappbot,在 venv 目录外的根文件夹中创建一个文件 bot.py。
\
在 bot.py 文件中添加以下代码,使打印“ Hello bot ”的应用程序保存文件并关闭:
\
from flask import Flask app = Flask(__name__) @app.route('/bot', methods=['POST']) def bot(): #webhook logic if __name__ == '__main__': app.run()
\ 在终端中使用以下命令设置FLASK_APP环境变量。
\
在 Mac 和 Linux 上
\
export FLASK_APP=bot.py
\
在 Windows 上
\
setx FLASK_APP “bot.py”
\ 我们在聊天机器人中要做的第一件事就是获取用户输入的消息。此消息来自POST
请求的有效负载,使用以下代码编辑您的 bot.py 文件,我将解释它是如何工作的。
\
import jsonfrom flask import Flask, jsonify, request import requests app = Flask(__name__) @app.route(“/”) def hello(): return “Bot is alive!” @app.route('/webhook', methods=['POST']) def bot(): data = request.json message = data[“message”][“content”][“text”].lower() if (message == “hello”): return conversation_reply( data[“conversation”][“id”],”How are you” ) if (message == “bye”): return conversation_reply(data[“conversation”][“id”],”Good bye!”) def conversation_reply(conversation_id, message_text): reqUrl = ( “https://conversations.messagebird.com/v1/conversations/" + conversation_id + “/messages” ) headersList = { “Authorization”: “AccessKey MESSAGEBIRD_ACCESS_KEY“, “Content-Type”: “application/json”, } payload = json.dumps({“type”: “text”, “content”: {“text”: message_text}}) response = requests.request(“POST”, reqUrl, data=payload, headers=headersList) return jsonify({“status”: “ok”, “response”: response.text}) if __name__ == '__main__': app.run()
\ request.json 包含来自发送者的信息,因此我们需要消息内容并在我们的 if 语句中使用它。我创建了另一个函数来处理对会话 API 的发布请求和回复。要测试您的机器人,请从仪表板添加您的 Messagebird 访问密钥。
\
在本地主机上测试使用 Ngrok
\ 如果您的机器上没有 ngrok,请从此处安装。如果你已经有它运行你的烧瓶应用程序:
\
flask run
\ 然后从终端打开另一个窗口并运行。
\
ngrok http 5000
\ 使用以下命令创建您的 webhook,您可以创建一个单独的文件,一旦将 accesskey、channelid 和 url 替换为您从运行 ngrok 获得的文件,您将运行该文件不要忘记添加 /webhook
\
import requests reqUrl = “https://conversations.messagebird.com/v1/webhooks"headersList = { “Authorization”: “AccessKey MESSAGEBIRD_ACCESS_KEY”, “Content-Type”: “application/json” } payload = json.dumps({ “events”:[“message.created”, “message.updated”], “channelId”: “YOUR_CHANNEL_ID_FROM_THE_WHATSAPP_SANDBOX”, “url”:”https://your-domain.ngrok.io/webhook" }) response = requests.request(“POST”, reqUrl, data=payload, headers=headersList) print(response.text)
\ 就是这样,您可以通过向沙箱号码发送消息来测试您的机器人。
将 WhatsApp 机器人部署到 Heroku
将 Procfile、requirements.txt 和 runtime.txt 文件添加到您的根文件夹。
\
在 Procfile 里面添加。
\
web: gunicorn — bind 0.0.0.0:$PORT app:app
\Requirements.txt 添加以下替换为您正在使用的实际版本
\
flask==2.0.2 Jinja2==3.0.3 gunicorn==20.1.0 requests==2.27.1 urllib3==1.26.8 werkzeug==2.0.3 messagebird==2.0.0
\运行时.文本
\
python-3.9.10
\ 我用的python版本我用的可能和你的不一样。
\ 创建环境变量以在生产环境中隐藏您的 MESSAGEBIRD API 密钥 在 bot.py 中更新您的代码。
\
import json from flask import Flask, jsonify, request import requests from os import environ MESSAGEBIRD_ACCESS_KEY = environ[“MESSAGEBIRD_ACCESS_KEY”] app = Flask(__name__) @app.route(“/”) def hello(): return “Bot is alive!” @app.route('/webhook', methods=['POST']) def bot(): data = request.json message = data[“message”][“content”][“text”].lower() if (message == “hello”): return conversation_reply(data[“conversation”][“id”],”How are you”) if (message == “bye”): return conversation_reply(data[“conversation”][“id”],”Good bye!”) def conversation_reply(conversation_id, message_text): reqUrl = (“https://conversations.messagebird.com/v1/conversations/" + conversation_id + “/messages”)headersList = {“Authorization”: “AccessKey “ + MESSAGEBIRD_ACCESS_KEY, “Content-Type”: “application/json”,} payload = json.dumps({“type”: “text”, “content”: {“text”: message_text}}) response = requests.request(“POST”, reqUrl, data=payload, headers=headersList) return jsonify({“status”: “ok”, “response”: response.text}) if __name__ == '__main__': app.run()
\ 运行后,终端中的以下 Heroku 命令
\
heroku login
\ 登录后运行
\
heroku create
\ 创建 Heroku 应用程序后,使用此命令添加您的 Messagebird API 密钥
\
heroku config:set MESSAGEBIRD_ACCESS_KEY=your-actual-api-key-from-the-messagebird-dashboard
\ 然后使用 git add 提交您的更改。和 git commit -m “first commit”,现在您应该能够运行以下命令来在线部署您的 WhatsApp 机器人。
\
git push heroku main
\ 在那之后
\
heroku ps:scale web=1
\ 现在,如果您访问 Heroku URL,您应该会看到您的机器人还活着的文本。剩下的一件事就是创建一个包含机器人的 Heroku URL 的 webhook。
\
import requests reqUrl = “https://conversations.messagebird.com/v1/webhooks" headersList = { “Authorization”: “AccessKey MESSAGEBIRD_ACCESS_KEY”, “Content-Type”: “application/json” } payload = json.dumps({ “events”:[“message.created”, “message.updated”], “channelId”: “YOUR_CHANNEL_ID_FROM_THE_WHATSAPP_SANDBOX”, “url”:”https://your-domain.herokuapp.com/webhook" }) response = requests.request(“POST”, reqUrl, data=payload, headers=headersList) print(response.text)
\ 就是这样,您现在拥有一个 WhatsApp 机器人以获取更多信息并增强您的机器人阅读文档。
\ 如果您有任何问题,请在Twitter 上找到我。
\以前在这里发布。
原文: https://hackernoon.com/build-a-whatsapp-chatbot-with-python-flask-and-messagebird?source=rss