Skip to content

搞英语 → 看世界

翻译英文优质信息和名人推特

Menu
  • 首页
  • 作者列表
  • 独立博客
  • 专业媒体
  • 名人推特
  • 邮件列表
  • 关于本站
Menu

使用 Python、Flask 和 Messagebird 构建 WhatsApp 聊天机器人

Posted on 2022-05-27

\ 在本教程中,我将使用适用于 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、c​​hannelid 和 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

本站文章系自动翻译,站长会周期检查,如果有不当内容,请点此留言,非常感谢。
  • Abhinav
  • Abigail Pain
  • Adam Fortuna
  • Alberto Gallego
  • Alex Wlchan
  • Answer.AI
  • Arne Bahlo
  • Ben Carlson
  • Ben Kuhn
  • Bert Hubert
  • Bits about Money
  • Brian Krebs
  • ByteByteGo
  • Chip Huyen
  • Chips and Cheese
  • Christopher Butler
  • Colin Percival
  • Cool Infographics
  • Dan Sinker
  • David Walsh
  • Dmitry Dolzhenko
  • Dustin Curtis
  • Elad Gil
  • Ellie Huxtable
  • Ethan Marcotte
  • Exponential View
  • FAIL Blog
  • Founder Weekly
  • Geoffrey Huntley
  • Geoffrey Litt
  • Greg Mankiw
  • Henrique Dias
  • Hypercritical
  • IEEE Spectrum
  • Investment Talk
  • Jaz
  • Jeff Geerling
  • Jonas Hietala
  • Josh Comeau
  • Lenny Rachitsky
  • Liz Danzico
  • Lou Plummer
  • Luke Wroblewski
  • Matt Baer
  • Matt Stoller
  • Matthias Endler
  • Mert Bulan
  • Mostly metrics
  • News Letter
  • NextDraft
  • Non_Interactive
  • Not Boring
  • One Useful Thing
  • Phil Eaton
  • Product Market Fit
  • Readwise
  • ReedyBear
  • Robert Heaton
  • Ruben Schade
  • Sage Economics
  • Sam Altman
  • Sam Rose
  • selfh.st
  • Shtetl-Optimized
  • Simon schreibt
  • Slashdot
  • Small Good Things
  • Taylor Troesh
  • Telegram Blog
  • The Macro Compass
  • The Pomp Letter
  • thesephist
  • Thinking Deep & Wide
  • Tim Kellogg
  • Understanding AI
  • 英文媒体
  • 英文推特
  • 英文独立博客
©2025 搞英语 → 看世界 | Design: Newspaperly WordPress Theme