Javatpoint标志
Javatpoint标志

用Twilio, Flask和Python构建一个WhatsApp闪卡应用程序

抽认卡是最可靠的学习辅助工具之一,可以帮助从语言学习者到医学院学生的每个人实现记忆的目标。由于Anki或Memrise等程序提供了大量的功能和灵活的设置,数字抽认卡正变得越来越有用。然而,在许多情况下,您可能无法使用功能更强大的程序之一,而需要更便携的程序来学习。

例如,当你可以在手机上做笔记,但不能加载一个功能齐全的web应用程序时。或者你在一架飞机上,它阻止访问某些网站,但让你在空中记下降落的数字。无论你身在何处,为了让你开始学习抽卡的旅程,本指南将演示如何为WhatsApp或SMS创建一个简单的抽卡机器人。下面是我们将要构建的内容的示例:

用Twilio, Flask和Python构建一个WhatsApp闪卡应用程序

本教程的要求

要学习本教程,您需要以下内容:

  • Python 3.6或更高版本。如果您的操作系统没有附带Python解释器,您可以访问python.org获取安装。
  • 我们将开发一个web应用程序,对传入的WhatsApp消息作出反应。
  • 我们将把抽认卡存储在一个非常基本的数据库中。
  • 这个有用的工具将把当前在你计算机上运行的Flask应用程序链接到Twilio可以连接的公共URL。您的机器很可能隐藏在网络或防火墙后面,使其无法从Internet直接访问,因此这对于聊天机器人的开发版本至关重要。如果您还没有安装ngrok,那么您可以为Windows、Macintosh或Linux获取它的副本。
  • 一部安装了WhatsApp的智能手机和一个可用的电话号码。如果你更喜欢普通的短信而不是WhatsApp,这个指南也适用于这两款应用。
  • Twilio简介。如果你是Twilio的新用户,创建一个免费账户。查看免费Twilio帐户的功能和限制。

配置沙盒

请注意,如前所述,此课程同时适用于SMS和WhatsApp。如果你想使用WhatsApp,你必须阅读这一节。如果您想使用SMS,请遵循创建SMS聊天机器人教程中的“配置Twilio的可编程SMS”部分中的步骤。

Twilio提供的WhatsApp沙箱使创建和测试应用程序变得简单。一旦WhatsApp批准了你的应用程序,你就可以用你的Twilio电话号码申请生产访问权限。

下一步是将手机连接到沙箱。点击WhatsApp后选择可编程短信在您的Twilio控制台。您可以在WhatsApp沙箱页面上查看您的帐户加入代码和沙箱编号。

用Twilio, Flask和Python构建一个WhatsApp闪卡应用程序

发送一条WhatsApp消息到与你的账户相关联的号码,并提供在你的智能手机上启用Snapchat沙箱的代码。单词join将被用作代码中的第一个单词,然后将出现一对随机选择的单词。根据Twilio的回复,你的手机号码应该连接到沙箱,并且能够在你发送消息后不久发送和接收消息。

记住,对于任何想要连接到沙箱的手机,都要重复这个过程。

创建虚拟环境

按照Python的最佳实践,我们将为flashcard bot项目创建一个新目录,并在其中建立一个虚拟环境。随后将安装聊天机器人所需的Python包。

要在Unix或Mac OS系统上完成上述步骤,请启动终端并输入以下命令:

命令提示符:

如果您在Windows上遵循指南,请在命令提示符窗口中输入以下语句:

命令提示符:

最后一个命令使用Python包安装程序pip安装这个项目所需的四个包,它们是:

  • 为了构建web应用程序,我们使用了Flask框架。
  • 我们使用Twilio Python Helper库来处理Twilio api。
  • 为了连接到数据库,我们使用了Flask-SQLAlchemy库。
  • 为了管理数据库,我们使用了Flask-Migrate库。

作为参考,以下版本的软件包,如前所述及其依赖关系在本教程发布时进行了测试:

创建一个抽认卡机器人

万岁!你可以走了。看看我们的抽认卡机器人将在下一节做什么。最基本的抽认卡有正面和背面。顾客可以通过看前面来推断后面是什么。因为这是一张数字抽认卡,如果顾客猜对了答案,他们就会转到下一张抽认卡;否则,他们可能会再次尝试,直到找到为止。

这意味着我们的抽认卡机器人必须具备以下三个关键特征:

  1. 在启动客户后,我们必须能够区分不同客户的抽认卡(也称为电话号码)。
  2. 制作抽认卡:机器人最初需要更多抽认卡。
  3. 和机器人一起看抽认卡很有趣。

Twilio和Python

如果这是你第一个使用Twilio和Python的聊天机器人,Miguel Grinberg使用Python、Flask和Twilio创建WhatsApp聊天机器人是一个很好的开始。它涵盖了了解Flask、Twilio和webhooks如何协同工作所需的所有基本细节。本教程的其余部分将对所涵盖的内容进行扩展,假设读者完全理解了这些材料。

抽认卡Bot配置

首先创建一个config.py文件,并将其放在flashcard-bot文件夹中。这将保存数据库的设置。接下来,在你的flashcard-bot文件夹中添加一个名为"app"的新子文件夹,并添加空的Python文件"__init .py"、"models.py "和"routes.py"。

models .py存储了我们的Customer和Flashcard数据库模型以及__init .py中包含的基本应用程序设置。Twilio的webhook存储在routes.py中。

config.py文件

在配置文件中粘贴如下内容。这指示了Flask应用程序的SQLite数据库的位置。确保修改SECRET KEY值来做一些唯一的事情!

apps/__init__.py文件

现在让我们检查__init .py文件。这个文件包含执行我们的Flask应用程序所需的所有设置。重点关注_update db(obj)函数。由于它用于在客户更改时更新我们的信息,因此当我们开始开发webhook时,我们将经常使用它。

代码片段:

这个文件底部的应用程序导入方法和模型这一行看起来有些奇怪。我们在底部添加这一行是为了在启动Flask服务器时防止循环依赖。在Flask能够正确加载完整的File之前,app和db对象必须在routes.py和models.py文件中被实例化。我们通过将这些文件的导入放在底部来确保所有相关对象都被实例化。

app/models.py文件

在创建路由之前,我们必须首先设置两个数据库表。我们使用两个基本模型:

  1. 客户:记录客户的电话号码,使用该号码制作的抽认卡的链接,以及他们正在学习的抽认卡。
  2. 抽认卡:将每个抽认卡的正面和背面保存在存储中。

models.py文件:

请注意,我们最令人难忘的模型,客户,不仅保留电话号码和客户制作的备忘单,而且还保留正在检查的备忘单。由于客户和Twilio之间的实际交互不存储状态,因此我们存储此信息。因此,如果我突然注意到我的抽认卡程序,Twilio将不会存储我上次不需要的内容。它不会知道我是在制作、复习还是复习抽认卡。因此,为了确定法律行为,我们需要在数据库中存储一些状态。

有鉴于此,除了数据库中的列之外,模型中还有两个方法——get_new_review11和stop_reviews。这些功能有助于改变客户的状态。注意,在这个模型中,我们已经主动地使用了助手功能_update_db两次。

在使用SQLAlchemy定义其数据库模型的其他Flask教程中,您可能还没有看到一些需要注意的事项。这些内容包括如何建立Customer和Flashcard模型之间的关系。

代码片段:

数据库上显式的主连接属性。关系是第一()。我们利用这一点,因为客户和闪卡之间有许多连接,如果我们不使用它,我们会收到一个AmbiguousForeignKeysError。这是因为我们试图在Customers数据库和Flashcards表之间创建两个连接:客户到他们所有的抽抽卡,客户到正在检查的特定抽抽卡。SQLAlchemy只能通过两个表之间显式指定的链接器来确定如何正确地分配这些关系中的外键。因此,我们必须指定是什么将这两个表联系在一起,以澄清我们的关系。其次,由于我们特别指定了两个关系中的一个,因此必须显式声明第二个Customer与Flashcard(当前审阅)之间的关系。客户正在检查的抽认卡存储在这一列中。我们有意地建立了这个关系,使用当前的评审id作为两个表之间的主键,以便模型了解它是哪个评审。

程序的routes.py文件

我们的模型完成了。因此,是时候为我们的抽认卡机器人开发逻辑了。我们将逐一讨论这三个主要的逻辑组件。

代码片段:让我们在文档的顶部导入函数。

因为我们的bot有许多分支,所以在开始逻辑之前,让我们概括一下最关键的部分:发送一个后台通知消息。将行集合与新行连接起来,并使用_send the message()函数将其作为Twilio消息back_side发送给消费者。

代码片段:

Twilio使用对webhook的POST请求来将传入的消息转发给我们的Flask服务器,正如我们将在下面的测试部分看到的那样(很像通过web浏览器提交表单)。这意味着我们想要应用于新接收消息的逻辑必须包含在单个公开的路由中。

客户的存在是我们验证的第一个状态。要实现这一点,我们要查看是否使用消息的电话号码创建了配置文件。因为我们只寻求电话号码,这个机器人可以支持WhatsApp和常规短信。为了便于测试,我插入了一个fallback_side编号123。这可以在测试期间应用。

代码片段:

在那之后,如果客户还需要一个账户,我们会要求他们这样做。此外,我们必须确定客户是否向我们提供了随机命令,然后才能创建他们的帐户。我们希望确保处理的是一个有效的客户,因此,如果客户没有启动或试图再次启动,则本节在执行任何其他命令之前结束。

代码片段:

一旦建立了客户帐户,我们需要设计用于创建卡片的界面。我们通过要求客户发出start命令来实现这一点,该命令修改客户的状态以允许创建卡。抽认卡的注释格式将是front_side/back_side。例如,Hello或bonjour。在评估过程中,客户会看到“你好”,并被要求在背面标注“你好”。最后,发出停止指令,以清除客户在制作抽抽卡后的状态。

代码片段:

当顾客想要回顾他们的抽认卡时,这就是所有东西都要用到的时候。这采用了类似的策略,即改变客户的状态,使其处于“审查”模式。按照审查逻辑,在客户发出我们无法解释的命令的情况下,我们在最后包含了一个包抄。

代码片段:

完整的app/routes.py文件

测试抽认卡机器人

现在是启动服务器、创建数据库和发送消息的时候了,因为我们已经为抽认卡机器人构建了路由和模型!

设置数据库

我们首先使用Flask-Migrate包中的命令初始化数据库,Flask-Migrate包是我们在本教程前面获得的。设置包括三个阶段:构建数据库,确定需要哪些额外的表或列,以及将新创建的更改导入数据库。

由于这是第一次设置数据库,因此这三个过程将按顺序进行。在执行下一个指令之前,确保您在flashcard-bot文件夹中,并且您的虚拟环境处于活动状态。

代码片段:

运行后,您将看到一个新的迁移文件夹和一个附加的应用程序。SQLite数据库。构建上述models.py文件中指定的数据库模式所需的脚本位于migrations/versions文件夹中。在扩展和修改这个抽认卡机器人以满足您的特定需求时,可以使用迁移和升级命令来调整数据库的结构。

作为测试发送的消息

现在就做一些抽认卡!在flashcard-bot文件夹中运行Flask Run来启动bot。数据库设置应该仍然激活了虚拟环境。

输出应该像这样:

该服务现在作为私有服务在您的机器的端口5000上执行,并将在那里等待入站连接。我们必须利用ngrok使这项服务可以通过互联网访问。

要分配一个将HTTP请求转发到本地端口5000的临时公共域,请打开第二个终端窗口并执行命令ngrok HTTP 5000。如果ngrok程序在您的当前目录中,您可能需要使用。/ngrok http 5000在Unix或Mac OS计算机上。

ngrok的输出:

用Twilio, Flask和Python构建一个WhatsApp闪卡应用程序

应该注意以“转发”开头的行。这显示了ngrok用来将请求路由到我们的服务的可公开访问的URL。现在我们必须指示Twilio使用此地址发送传入消息通知。

返回到Twilio控制台,选择可编程短信,WhatsApp,然后沙盒。当消息到达时,将从ngrok输出复制的https:// URL插入到此区域。把它放在根ngrok URL的末尾,因为我们的聊天机器人可以通过/bot URL访问。确保选择HTTP Post作为请求方法。记住,通过单击页面底部的红色save按钮保存这些更改。

用Twilio, Flask和Python构建一个WhatsApp闪卡应用程序

如果您希望通过传统的短信与bot通信,请转到Twilio控制台,选择电话号码,并选择所需的电话号码。从ngrok输出中复制https:// URL,然后在向下滚动到“Messaging”部分时将其粘贴到“A message comes in”区域。记住,聊天机器人可以通过/bot URL访问;因此/bot必须添加到root ngrok URL中。确保将事务方法设置为HTTP POST,并记住保存您的修改。

用Twilio, Flask和Python构建一个WhatsApp闪卡应用程序

有了智能手机,你就可以连接到沙箱,现在就可以开始给抽认卡机器人发信息了。如果你需要记住它的功能,就给抽认卡机器人发送帮助,看看我们写了什么命令。祝大家学习愉快!

请记住,免费使用ngrok有一些限制。需要特别说明的是,ngrok URL的保留时间不能超过8小时,并且每次执行ngrok命令,都会提供一个新的域名给您。无论何时重启ngrok,都必须在Twilio控制台中更新URL。

如果你想在实践中使用新的抽认卡聊天机器人,请查看短信聊天机器人博客文章。

结论

我们一起创造了一个简单但功能强大的抽认卡机器人。它给了你一些新的灵感,并帮助你意识到像Twilio这样的提供商只需要几行代码就能发挥多大的作用。







Youtube 视频加入我们的Youtube频道:现在加入

反馈


帮助别人,请分享

脸谱网 推特 pinterest

学习最新教程


准备


热门的技术


b .技术/马华






Baidu
map