如何使用Twilio,Python和Google纸张进行可扩展的SMS Chatbot(具有免费代码)

我们许多人正在帮助面临艰难时期的企业,或者我们正在面临艰难的时期。如果您为遇到麻烦的公司(或客户)工作,则使用SMS Chatbots可能是您在正常的解决方案列表之外的方式,并帮助他们以完全不同的方式取得成功。如果您是一个寻找工作的营销人员,请将其添加到您的技能列表可能意味着您可以将其保持卷曲,而许多通常的门关闭 – 或者您打开新门。

你会获取

在此帖子中,我为您提供指令和代码,以产生不仅仅是一个,而且还可以由Google纸张管理的一系列基于文本的聊天聊天。

这里的例子设置为与餐馆一起使用,但可以适应与所需的任何业务合作要接收订单,请检查库存/菜单,并记下要履行的。

一旦设置了系统,就没有必要的编码来创建新业务的新SMS的Chatbot。此外,该业务将能够通过简单地更新Google表来管理关键详细信息(如传入订单和菜单),使得所有这些远远超过大多数其他选项。

但首先,一些上下文。

一些背景

2017年9月

作为我在蒸馏的第一个大型激情项目之一,我写了

一个莫斯博客帖子告诉人们如何制作聊天并赠送一些例子代码

今年4月,我收到了一个名叫亚历山大Silvestre的男人的电子邮件。亚历克斯推出了“一个非营利性努力,以帮助当地的小企业所有权RS导航这些挑战时间,尽可能多地保存工作,并继续在帮助弯曲曲线时为我们的社区服务。“

这项努力致力于餐馆。亚历克斯找到了我的2017年帖子(圣莫利,内容营销作品!)并询问我是否可以帮助他的团队建立聊天聊天。我们同意BOT的一些基本要求:

它必须完全在短信中工作(如果订单超级复杂,它必须能够直接与餐厅进行呼叫).Running它必须是尽可能接近。不得不能够检查订单,更新菜单等,而不设置特殊账户。

我们同意的解决方案有三个部分:

Twilio(已付费):供应电话号码并处理大部分对话l Back-and-Forth.Google云函数(半自动):当调用URL时,它运行代码(包括更新我们的餐厅的数据库)并返回response.google表(免费):我们的数据库平台。我们有一张表单,使用我们的聊天栏列出所有业务,并为每个业务链接到各个Google纸张。

我依次带您完成这些组件,并告诉您如何与他们合作。

如果你回到这篇文章,或者只需要一个区域的帮助,请随时跳转到您对所感兴趣的特定部分:

Pricing- Twilio Google Sheets

Google Cloud函数

测试Bot

打破事物并具有乐趣

后记 – 奇怪的黑客

pricing 这应该是廉价的 – 我说的是四个美好的订单。

即便如此,始终确保任何定价警报都通过主动监控的电子邮件地址来通过发送给您的电子邮件地址。

当您刚刚开始此时,或者当您进行了更改时(如添加新的功能或新业务),请确保在接下来的几周内检查您的积分,以便您知道发生了什么。

Twilio

局部二维电话号码成本每月1.00美元。

它将成本约为0.0075美元,发送和接收文本

和Twilio Studio – 我们用来做很多“谈话” – 每次激活时,每次都有0.01美元(每个月的前1,000次) 。所以,假设你每月有2,500个文本订单,每个订单都需要大约五条短信,总共大约100美元。 Google Sheets

Google Shote是免费的,很棒。 LONG LIVE Google Sheet。Google Cloud函数

Google股票股票完整定价详情

这里

,但要了解的重要事项是:

1。促销信贷

您可以获得持续一年的免费试用,其中包括300美元的促销信贷,因此它会在花钱之前花钱。我们在一个月的测试结束时花了0.00美元(包括促销信用)。这是因为也有一个每月免费津贴。

2。自由津贴和定价结构

除了免费学分之外,谷歌每月提供免费津贴。如果我们假设每个订单需要大约5个行为我们代码的常识和我们的代码需要每次运行五秒钟(这是一段时间,但有时谷歌表格迟缓),我们可以在我们倾向于促销信贷之前每月超过40万个订单。

Twilio

Twilio是一个付费平台,让您购买电话号码,并具有根据输入提供的答案。 如果你不想阅读更多关于Twilio的信息,只需想要免费的Twilio Chatbot流,

就是它。

第1步:

买一个Twilio电话号码

一旦您购买了电话号码,您可以收到该号码的文本,他们将在Twilio帐户中处理。您还可以从该号码发送文本。

第2步:找到您的电话号码

y您可以通过单击左上角的左上角的Twilio菜单然后单击“电话号码”来查看购买的电话号码列表。或者,您可以转到电话号码/传入

一旦看到您的电话号码,请记下它。

步骤3:创建工作室流

Studio是Twilio的拖放编辑器,允许您创建对话的结构。工作室“flow”只是您构建的特定对话的名称。

您可以通过点击“运行时”下单击“Studio”下单击Twilio Menu来获取Twilio Studio。

通过单击“创建流程”创建新流程。

当您创建新流时,您将获得从头开始的选项或使用一个内置选项为您构建流量(虽然它们不会像我在此共享的模板一样深入)。

如果您想使用亚历克斯和我构建的流程版本,请选择“从JSON导入”,然后单击“下一步”。然后,下载

此文件

并将内容复制到出现的框中。

确保它以单个{支撑,并以单个}}结尾。出现的框将自动拥有{},如果您在粘贴之前没有删除它们,那么您将加倍,它不会接受您的输入。

如果一切顺利,你会出现一个如下所示的流程:

你可能问:以圣洁的所有人的名字,斑点是什么?

这是Twilio Studio Flow我们创建了,别担心,它基本上分成了一系列多项选择题,其中答案每个都决定了你在流动中的旁边。

你可以看到的画布上的一切来自Twilio Studio窗口小部件库的小部件与“如果这,那么”类型的条件。

Studio FlowProcess

在我们进入过程中的特定块之前,这是一个概述会发生什么:

客户消息我们的二手号码之一,在特定的号码中播放,我们查找与之相关的餐厅。然后,我们使用餐厅的名称和保存的菜单来致电客户。如果客户尝试订购秩序,我们将呼叫呼叫到餐厅诸如客户从菜单中选择的东西,我们问EIR名称,然后在那个餐厅录制他们的订单,并告诉他们何时到达他们的oriteras /当用户消息告诉我们他们在餐厅外,我们询问他们是否是在脚下/描述他们的车辆。我们记录在同一家餐馆片车辆描述。

让我们来看一些例子积木好吗?

初始触发

初始触发在每次流程开始时出现就会,并根据它是文本消息,电话或代码访问它来分割传入联系人。 “传入消息”是指联系人通过短信。我们现在只需要担心那个,所以让我们专注于左手线。

记录我们开始新的事实交互

接下来,我们使用“设置变量”块,您可以从窗口小部件库获取。

“设置变量”块允许我们保存要稍后提到的记录信息。例如,我们首先设置互动的“阶段”。我们说该阶段是“开始”的,我们在互动的开始。后来我们将检查舞台的价值是在工作室和外部代码中的内容,所以我们知道该怎么做,何时。

获取我们的菜单

我们假设如果有人邮件给我们,触发Chatbot,他们正在寻找订购,所以下一阶段是解决适用的菜单是什么。

现在,我们可以将菜单直接写入工作室并说每当有人发送给我们时一条消息,我们使用相同的选项列表响应。但这有几个问题。

首先,如果我们想为多家餐馆设置这一点,我们必须为每个餐馆创建一个新的流程。

更大问题是餐馆通常会改变他们的菜单。如果我们希望这是我们可以提供许多不同餐厅的东西,我们不想每次一家餐馆用完成分时手动更新Twilio的所有时间。

所以我们真正需要的东西适合餐馆能够列出自己的菜单。这是Google Spect进入的地方,但我们稍后会到达。在Twilio中,我们只需要能够询问外部信息并将外部信息转发给用户。要做我们使用WebHook小部件:

此窗口小部件对URL提出了请求,获取响应,然后允许我们在我们的消息和流中使用响应的内容。

如果对URL的请求成功,Twilio将自动继续执行我们的成功步骤,否则我们可以将其设置为发送“oops,出现错误”响应失败选项。

在这种情况下,我们的Webhook将对Google Cloud函数URL提出请求(稍后更多)。我们发送的请求将包括有关用户的一些信息以及我们需要代码要做的信息。这些信息将以JSON格式(我们用于导入上面共享的二维流量的相同格式)。

我们的JSON将包括已邮件的特定二线电话号码,我们将使用该号码区分赌注威恩餐厅,以及与我们联系的电话号码。它还包括我们收到的文本消息的内容以及我们之前设置的“阶段”,因此代码知道用户正在寻找的内容。

那么代码将执行一些东西(我们稍后会到达)并返回自己的信息。然后,我们可以告诉Twilio在消息中使用部分响应。

发送消息响应

接下来我们可以使用我们收到的信息来构造并向用户发送消息。 Twilio将记住您与您在谈话中的号码,它会将您的消息发送到该号码。

这是“发送和等待回复”小部件,意思是,一旦发送了这条消息,Twilio将假设谈话仍然是相当的汉结尾了。

在这种情况下,我们正在写信给我们的欢迎。我们可以写出简单的内容,但我们希望使用我们从WebHook小部件中获得的一些varialbles。我们调用了特定的Webhook小部件“get_options”,因此我们通过写作访问我们从中获取的内容:

{{widgets.get_options

响应回到JSON中,幸运的是Twilio自动回归打破了我们的。

我们可以通过写作“解析”来访问响应的各个部分,然后在我们的回答中给出该信息。就像它一样,代码的响应看起来如下所示:

{“name”:Restaurant_name,

“Dishes_String”:“您可以选择Margherita Pizza,夏威夷披萨,素食披萨“

”添加“:”大,MediuuM,Small“}

通过编写”{{{widgets.get_options.parsed.dishes_string}“来获取可用的菜单,然后我们在下面写下该消息将被发送给联系机器人的人:

作出基于消息

我们不能认为每个人都要以完全相同的方式使用机器人需要能够根据某些条件改变我们做的事情。 “基于……”窗口小部件是我们选择某些条件,并在满足它们时设置该怎么办。

在这种情况下,我们使用响应的内容到我们以前的消息,我们使用{{options_follow_up.inboud.body}}。 “options_follow_up”是我们刚刚辐条的发送和等待小部件的名称,“入站”表示响应,“body”是指文本在其中。

然后我们设置一个条件。如果用户沿着“其他”,“否”,“帮助”等的任何内容响应,那么他们将在另一条轨道上发送拨打电话。如果他们在该列表上的任何内容响应时,他们可能会尝试订购,因此我们采取订单并使用我们的代码检查并检查:

建立一个电话

如果用户说他们想要一些外部菜单,我们需要与餐厅调用。我们做到这一点,首先调用用户:

然后,当他们拿起,该呼叫连接到该餐厅数量,我们” VE已经在我们的片抬起头来:

第4步:选择这个电话号码你的工作室流

关注第2步中的说明获得bACK到您购买的电话号码的特定列表。然后滚动到底部,然后选择您创建的Studio流程。

Google纸张

Google纸张

Google纸张

Google纸张

Google纸张使用两个Google纸张。

自由查找纸张

查找纸张持有斜视表,他们已分配的餐厅和持有的Google纸张的URL该餐厅的详细信息,使我们知道在哪里寻找每个。

您需要创建纸张的副本来使用它。我已在Splay I共享中包含一行,解释每个列。随意删除,当你知道自己在做什么。

免费例如餐厅表

特定餐厅表是我们包括的地方我们所有关于一系列选项卡中餐厅的信息。您需要创建要使用它的工作表的副本。命令

ORDERS选项卡主要由我们的代码使用。它将在订单时间,客户名称,客户电话号码和订单详细信息中自动编写。默认情况下,它将在“付费/准备好”中写虚假]列,餐厅将需要更新。

在最终阶段,脚本将在“这里的客户”中添加忠诚于“?”柱子并在“拾取信息”柱中提供轿厢描述。

等待时间

等待时间

这是一个相当简单的标签包含一个牢房,餐厅在订单准备好之前写入多长时间。我们的代码将提取它并将其交给Twilio让客户知道如何他们可能会等待。

可用的菜肴和添加突片

餐厅列出了现在散开的菜肴以及简单的改编那些菜肴,那么这些菜单将在联系餐厅时向客户发送给客户。当代码收到订单时,它也会检查其发送的菜单列表,以查看客户是否选择其中一个选择。

使用表格选项卡

您无需触及这一触摸 – 避免我们的代码意外覆盖本身只是一种预防措施。

想象一下,我们的代码获得订单的情况,在订单表中找到第一个空行,并在那里写下命令。但是,与此同时,有人Else为同一个餐厅进行订单,我们的代码的另一个实例也查找第一个空行,选择相同的行,并且它们同时写入它。即使代码认为一切都很好,我们也会丢失至少一个订单。

当我们的代码开始使用表格时,它确实的第一件事是更改“使用工作表的脚本“值为真实并在开始使用它时写下。然后,当它完成后,它将值恢复为false。

如果我们的脚本要使用表格并查看“使用工作表”的“脚本”设置为true,它会等到该值变为假然后写下订单。

如何使用纸张?

示例餐厅表:

制作示例餐厅表的副本。填充O.所有测试餐厅的详细信息。复制表格的URL。

查找表:

制作查找表的副本(您只需要创建一个)。不要在“提取的ID”列中删除任何内容,而是替换第一列中的所有其他内容。在第一列中替换您的Twilio号码。在Business Sheet URL Column.ADD在最终列中的业务“电话号码中的测试餐厅的URL中。共享:

查找“服务帐户”电子邮件地址(我将指示您在云函数部分中指示您的电子邮件地址)。确保两个工作表都与具有编辑访问的电子邮件地址共享。

创建一个新的餐厅:

任何时候你需要创建一个新餐馆,只需制作餐馆表的副本。当您复制它时,请确保勾选“与同一个人分享”.CLear出目前的详细信息。将新的Google Shell URL注入查找表的新行。

当代码运行时,它会打开查找表,使用Twilio电话号码查找特定的表ID那个餐厅,去那张表,然后返回菜单。

google云函数

google cloud函数是一种简单的方法,无需设置而无需设置向上服务器或在某处安装一系列特殊程序,以确保您的代码可转让。如果您不想了解更多有关Google Cloud的信息,只需要运行代码 –

这是免费的chatbot python代码

代码在做什么?

我们的代码不会尝试处理任何实际对话,它只是从Twilio – Inc获取请求有关用户的详细信息以及它们所在的阶段 – 并执行一些简单的功能。

阶段1:“start”

代码接收来自二维的消息,包括被激活的斜线号码用户处于(开始)的阶段。基于它是“开始”阶段,代码激活了开始函数。

它根据Twilio号码查找特定的餐厅表,然后返回该餐厅的菜单。 它还发送像特定餐馆的号码和菜单的浓缩版像这样的斜线我们为我们检查订单。

第2阶段2:“选择”

代码接收用户处于(所选)的阶段以及它们的订单消息,纸张ID餐厅和凝聚的菜单(它是森T到Twilio之前),所以我们不必再次查看这些东西。

基于它是“所选择的”阶段,代码激活所选功能。它检查订单是否与我们的浓缩菜单匹配。如果他们没有,它告诉Twilio,消息看起来不像订单。

如果订单与我们的菜单匹配,则它将顺序写在第一个空行中。它还创建了一个订单ID,它是用户电话号码的时间和一部分的组合。

如果订单匹配我们的菜单,它会向后发送零件消息,如果它确实匹配我们的菜单,订单号是什么。

阶段3:“到达”

代码接收用户处于(到达)的阶段并激活到达的功能。它还接收描述用户车辆的消息E,特定的餐厅的表格ID和订单号,所有这些都告诉Twilio。

它抬起餐馆表,找到与发送的订单ID匹配,然后更新那行以显示用户已经到达和对他们的汽车的描述。

Twilio处理所有上下文 每次代码都查找一些信息时,它可能似乎很奇怪(例如,要查找的表格ID)它将该信息发送到Twilio并以后重新请求它。那是因为我们的代码并不知道完全发生了什么,除了Twilio告诉它。每次我们激活我们的代码时,它都开始完全相同,因此无法知道哪个用户发短信,他们在哪个阶段,甚至是我们在谈论的餐馆。

Twilio在互动过程中记得这些东西,所以我们用它来处理所有这些东西。我们的代码是一个非常简单的“do-er” – 它不会一次超过大约五秒钟的东西。

如何设置代码?

我没有时间描述如何使用Google云功能深入,或者如何在Python中代码,但我上面共享的代码包括解释正在发生的事情的公平数量,我会谈论你通过特定于此过程的步骤。

步骤1:设置

确保您:

Google帐户

转到Google Cloud Console

设置计费对于您的帐户(直到您执行,它不会让您创建功能)从Location

我链接到上方的位置

步骤2:创建一个EW功能

Go

此处并单击“创建新功能”。如果您之前没有创建一个项目,则可能需要首先做到这一点,并且您可以为项目提供任何您喜欢的名称。

步骤3:阐述您功能的详细信息

下面的屏幕截图为您提供了许多您需要的详细信息。我建议你选择256MB的记忆 – 它应该足够了。如果您发现您遇到问题(或者如果您希望从一开始更加谨慎),则将其增加到512MB。

并记下它给您的URL(如果您忘记,您可以始终通过转到函数的“触发”选项卡来找到URL).ALSO确保您勾选选项以允许未经身份验证的访问(这就是Twilio将能够启动该函数)。选择“内联编辑器”并粘贴我给了你的GIST代码(它很大评论,我建议给它一个阅读,以确保您对其做的事情感到满意).click“要求.txt“和粘贴在下列图书馆中,您需要使用:

Flasktwiliopytz

确保”执行“是SMS,然后单击”环境变量“下拉列表。 就像我在上面完成的那样,单击“+添加变量”,在“名称”列中写“Spreadsheet_ID”,并在“值”列中,粘贴在查找表的ID中。通过查看查找表的URL来获取ID,并在最后两个斜杠之间复制所有内容(在下面的红色中概述)。 点击“服务帐户”下拉。它应该出现只需“App引擎默认服务帐户”并为您提供电子邮件地址(如下所示) – 那是您需要与所有Google表格共享的电子邮件地址。地方写下来,并将其添加为为您的查找和餐厅专用纸的编辑用户。 一旦你完成了所有这些,单击“部署”。 部署后,您应该在主屏幕上落在云功能中。左上角的绿色蜱告诉你一切正常工作。步骤4:打开纸张API 首次尝试访问Google纸张,可能无法为您的帐户打开Goog​​le Sheets API。 去这里,选择你正在处理的项目下拉菜单在左上角,然后单击“大蓝”启用“按钮。 步骤5:返回TWILIO并粘贴到HTTP触发器中的代码 记住我们从我们创建功能时注意的触发器URL?返回Twilio Studio并使用中的所有块签名左上角: 单击并粘贴您的Google云URL成在屏幕的右侧出现的请求URL框: 测试机器人 现在你应该让您的云功能设置。您还应该使用您的云函数服务帐户设置和共享两个Google表。 下一步是测试机器人。首先发短信给你的号码号码word“命令”来完成它。它应该使用您的代码从您的餐厅特定的Google表中提取的菜单进行响应。按照它将您发送到结束的步骤并检查您的Google表,以确保它正确更新。 如果出于某种原因它不起作用,您可以检查两个地方。 twilio通过单击右上角的小“调试器”符号来记录它所看到的所有错误: 谷歌还保留了一个您的云功能发生的所有内容的记录。这包括非错误通知。您可以通过单击顶部的“视图日志”来查看所有内容: 所有这一切都绝不是完美的,我相信有东西您可以添加和改进,但这是一种构建可扩展聊天网络的网络,每个聊天网络,每个特定于不同的业务,每个业务都以最少的成本部分地管理。 给出这个尝试,打破它,改进它,撕毁它并重新开始,让我知道你的想法! portscript:奇怪的黑客 这个位是只有真正适合有兴趣的人,而是因为我们故意在鞋带上做到这一点,我们遇到了几个奇怪的问题 – 主要是在我们的机器人尚未被激活的情况下遇到了一点。 当Twilio偶尔第一次获得消息时,它也会变得越来越快,也希望其他事情也需要这样做。例如,当Twilio向我们的代码提出请求时,它假定代码发生故障d如果需要超过大约五秒钟。这并不是那么不寻常 – 很多聊天平台都需要五秒的最大周转时间。云功能能够快速运行,即使是较低的内存津贴,但Google纸张似乎总是有点慢通过API访问时。实际上,如果在一段时间内没有访问,Google Sheets特别慢。 这可能意味着,如果最近没有人使用你的机器人,Google Sheets API需要太长的时间来回应第一次和Twilio在我们的代码可以返回之前放弃,导致错误。 我们的脚本有几个部分旨在避免这种脚本。再次尝试 我们第一次激活我们的云功能,我们不希望它实际改变任何东西,我们只是想要信息上。所以在斜视中,我们首先创建一个名为“重试”的变量,并将值设置为0. 如果请求失败,我们检查重试值是否为0.如果是,则检查重试值为1,然后重试。如果它第二次失败,我们不想继续这样做,所以我们发送错误并停止那里。 唤醒表格 我们激活我们的云函数第二次我们确实希望它做点什么。如果它不能及时返回,我们不能再做一次,因为我们最终有重复的订单,这对于餐馆来说是一个头痛的。相反,在交换的早期部分期间,我们对我们的一张床单进行了毫无意义的变化,只是为了让我们做出重要变化的时候准备好了。在我们的会话流程中我们:发送Menuget对用户的名称响应的响应顺序我们不需要为表格做任何事情,直到第四步,但在我们获得用户的响应后(在我们问他们的名字之前),我们激活我们的代码一次编写在订单表中没用的东西。我们对Twilio说 – 是否成功或失败 – 继续与互动一起,因为它在那时无论我们是否及时返回。然后,希望随着我们订单写作的时间,Google Sheets已准备好进行一些实际使用。有限制 Google纸张不是理想的数据库 – 它很慢可能意味着我们错过了Twilio的超时。但这些额外的步骤帮助我们解决了一些限制。

Related Content

More Interesting