使用Nodejs和Twilio构建WhatsApp聊天机器人投票申请
#node #bot #twilio #whatsappbot

使用Nodejs和Twilio构建WhatsApp聊天机器人投票申请

随着本世纪的技术进步速度,我们总是在寻找新的方法来自动化任务并使我们的生活变得更好。聊天机器人帮助我们减少对手动交流方式的依赖,并挑战我们实施解决方案的先入为主的方式。

什么是聊天机器人?

仅在其定义中,它是一种软件应用程序,用于通过文本或文本到语音进行在线聊天对话,以代替与现场人类代理的直接联系。它已在不同的环境中使用,包括客户支持,电影/表演的书票,银行业(UBA LEO),只需提及一些。它的使用只能受到我们的创造力的限制!

在本教程中,我们将使用Twilio平台通过Nodejs构建投票的WhatsApp聊天机器人来进行创造力。

成功遵循本教程后,您将学习如何:

  1. 响应发送给您的Twilio WhatsApp号码的WhatsApp消息

  2. 开发基于REST API的投票应用程序

  3. 使用Twilio WhatsApp API

  4. 发送自由形式消息

先决条件

要成功使用本教程,需要以下内容:

  • nodejs的基本知识

  • nodejs和NPM安装在您的计算机上

  • whatsapp启用了twilio编号

  • Twilio帐户

  • ngrok

  • 的安装

设置和安装

我们将使用nodejs。首先创建一个目录,然后CD进入并运行此命令

$ mkdir e-voting && cd e-voting

然后,我们通过创建一个package.json来初始化一个节点项目。您以后可以更改此文件中的值。

$ npm init -y 

接下来,我们继续安装要使用

的软件包
$ npm i express twilio

express - 我们用来设置服务器

twilio - 我们将用来发送消息的Twilio库

现在我们已经建立了环境,让我们继续前往我们的twilio sandbox来设置一切。

设置WhatsApp沙箱

在其他情况下,为了使我们的聊天机器人访问WhatsApp的消息,Twilio提供了一个非常强大的WhatsApp API,使我们可以在应用程序中直接发送和接收WhatsApp消息。

但是,在我们可以在生产中使用Twilio WhatsApp API开始发送和接收消息之前,我们必须首先获得WhatsApp Approved Twilio Number,该WhatsApp Approved Twilio Number将充当我们的WhatsApp号码,用于发送和接收消息。对于本教程,我们不会让自己参与此过程,我们宁愿利用安全的sandbox Twilio提供开发和测试目的。

要开始使用Twilio WhatsApp沙盒,我们在Twilio仪表板上继续使用WhatsApp section,然后将消息发送到提供的沙盒号。通常,+14155238886带有提供的代码,该格式是join- {unique Word}:

加入后,您应该收到类似于下面的响应。如果您没有检查您遵循的过程,以确保您不会错过任何步骤。

构建应用程序

从安装中,我们的项目中只有一个package.json文件。然后,我们将创建一个名为index.js的新文件,该文件将用于设置我们的应用程序服务器(带有ExpressJS)



以上只是使用Express来旋转服务器并使用在第2行中导入的路由文件。

接下来,我们继续创建一个将持有逻辑的路由


我知道这个文件看起来很多,但是有了一些解释,您会发现它并不那么复杂。为了使解释更容易,我将按部分解释。

第一部分从Line1 5中掌握的是我们在应用程序中安装助手文件和方法的地方。在第3行中,我们安装了Twilio官方Nodejs模块,我们将使用该模块回复我们的响应。第4行我们进口了辅助响应模块(这将有助于格式化我们的各种响应)。第5行,看到我们介绍了我们存储助手功能的公用事业模块。

第二部分从第7行25跨越我们定义文件变量和默认值,例如投票和候选人。

第三部分从第27行43范围跨越,仅由一个功能组成,showcandidates,我们只是使用它来显示我们一旦由用户请求的候选人列表。

第四部分 从第46行中的136行跨度,由四个功能组成,这些功能负责实际接受和验证用户投票并向用户显示结果。前两个功能是实际投票,而最后两个则用于显示结果。这是它的工作方式:

a)castVote ():它开始投票过程,还需要用户投票。一旦用户选择投票,并且首次通过第218行要求此方法,它将通过第82行为服务器中的该特定用户创建一个跟踪器,此前它执行了检查以确定有候选人需要投票(第81行)。

然后,它返回带有ID候选人列表的回复用户结束用户应使用的唯一值(0)来选择退出投票过程(第83行list_of_candidate接受showcandidates函数作为参数)。

当用户下一个聊天下一个响应时,我们然后通过将聊天值转换为数字并检查其值,如果是0,我们知道用户要取消投票过程(第203行),然后我们然后取消该过程并向我们拥有的用户发送响应。如果用户宁愿发送任何其他值,我们将带有所需参数(第207行) castVote

当调用CastVote并通过这些值时,我们将进入75行,确保用户以前没有投票,然后我们继续进行第76行,以重新检查用户确实已经开始投票的过程,最后我们继续确认实际上有第77行中的候选人要投票。此后,我们在第78行中使用提供的参数在第78行中拨打 addVote

b) addVote ():此功能由用户的实际接受投票负责。首先,我们在第58行中检查,以确保用户提供的价值实际上是候选人的ID。然后,我们继续添加用户投票,将其从投票过程中删除,然后发送成功的响应(第61-63行)。

c) ShowResult():我们使用此功能向用户显示结果。第118号线119仅用于验证并确保分别存在投票和候选人。在第121行,我们将候选人的所有投票分组。然后,在第122行,我们将我们从第121行获得的响应格式化,以此方式向用户展示每个候选人的名称,他们积累的总票数以及他们的投票百分比。另外,我们在适用的情况下显示赢家或抽奖(第95行的格式功能可以帮助我们进行此格式和结果响应。

d) formatresponse ():如上所述,在第95行中发现,它只是获得了候选人的分组投票,然后返回每个候选人的名称,他们的票数,他们的票数和百分比投票。它还检查抽奖或获胜者,并将此格式化结果作为响应返回。

第五部分 从第139行中掌握,由显示和默认消息和页脚组成,我们为每个响应都包含。 ShowDefaultMessage ()在开始时使用以显示可以执行的动作列表。 showhelp () * *每当被调用时,**页脚在所有响应中包含一条附加消息。

第六和最后一节 跨越第191页的243是我们接受向服务器提出的邮政请求,解析身体内容,处理用户输入并发送响应。 Line 197只是为我们提供了用户电话号码,这是每个用户的唯一标识符。我们使用开关语句来获取用户响应并调用相应的功能。

这基本上就是这个文件所做的,它是我们聊天机器人的引擎。

接下来,让我们添加可以容纳我们的助手文件
的Utility.js文件


我们这里只有4种方法可以帮助我们执行各种数据操作。

我们还包括我们的回复。JS文件


现在,我们已经完成了编码部分,您的项目结构应该看起来像这样:

Project Structure

然后,我们拥有一个功能服务器,现在我们将继续创建一个允许我们重定向请求的网络钩。

创建一个Webhook

这允许Twilio API能够将请求发送到我们的应用程序端点。这是ngrok.io。

如果您没有ngrok,请继续进行here,以查看如何获取并设置它以在系统中运行。我们将使用Ngrok提供的URL作为我们的Webhook URL。

但是,在我们需要启动服务器之前,让我们在项目的根部打开一个终端并运行:

node index.js

这将旋转我们的服务器并将其暴露于端口。在我们的情况下,该端口为4000。

接下来,我们打开另一个终端并运行

ngrok http 4000

然后,您应该在终端上看到此工作!

Port Forwarding with Ngrok

尽管不需要,我们可以转到图像中提供的Web界面URL(http://127.0.0.1:4040),以查看端点的请求:

Request Dashboard

现在更新Twilio中的Webhook,以指向Ngrok提供的暴露URL。这将将所有消息从Twilio重定向到我们系统本地运行的Nodejs服务器。前往这里,输入从Ngrok获得的URL,并用 /投票将其附加,因为这是我们的完整终点。然后更新标有此值的输入字段。

对于我们的情况,我们将输入http://9905d7076291.ngrok.io/vote

Twilio Sandbox Configuration

测试

现在我们已经设置了Webhook,让我们在WhatsApp上对其进行测试。 HI消息响应我们在代码中提供的默认消息。我们可以看到它正常工作:

,当我们将3发送到机器人时,我们会收回投票结果,它有效!:

Shows Result

演示

可以找到现场演示here。我进一步为项目添加了更多功能,可以找到具有管理功能的完整项目,并且可以找到here

结论

我喜欢这个投票申请的一个主要原因是,它允许我参与投票过程而不必离开我最好的消息传递平台。

技术进步使我们能够实现自己的想象力,而我们在上个世纪从未想到。我刚刚生活在我的一个!我可以等待看到您的构建!