问题标签 [dialogflow-es-fulfillment]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - Dialogflow 实现在选项中进行了选择
我写信给你是想问一个关于 Dialogflow 实现的问题。
我正在尝试为 Google Home 创建一个代理,而我的后端基本上是一个用 TypeScript 实现的网络挂钩。
在我设计的对话中,用户请求代理执行一个动作,并提供一个类别作为参数。现在,可能的类别集可能会随时间而变化,因此我使用实体类型@sys.any来检测参数。
我的问题是,当我尝试确定代理需要采取行动的特定类别时,请求的参数可能与多个类别匹配,所以我需要一个后续意图来询问用户澄清它想要选择的实际类别。
例如,对话可能如下:
现在,我能够使用后续事件和上下文来构建这个对话:例如,我创建了两个后续事件,一个检测数字,另一个检测文本,因此用户会根据它所说的内容被驱动到一个或另一个(如果用户说“第一个”,则检测到一个数字,并在后端循环选择与该索引关联的类别。如果用户说“categoryX”,我会执行类似的操作,但意图不同) .
我想了解的是:通过 Node.js 实现 API 实现这种对话的正确方法是什么?
感谢您的任何帮助。
node.js - Dialogflow 的履行编辑器中的变量生命周期?
我正在帮助创建一个聊天机器人,它从谷歌表格中提取房地产数据,并将该信息显示给用户。用户输入一个地址,然后将提取的信息分配给一个 houseData 变量,该变量已通过 http 请求在函数外部声明。houseData 对象具有卧室、浴室、monthlyPayment、地址等键,然后在 agent.add Payload 中引用,用于在聊天小部件中向用户显示键的值。这都映射到一个意图。
稍后,我尝试在映射到不同意图的函数中访问 houseData 对象的monthlyPayment,以查看用户报告的收入与房屋付款的比较情况。houseData 变量是未定义的,即使在 firebase 中我可以看到在第一个意图期间从 console.log 中的谷歌表接收到信息。
完成特定功能映射到的意图后,是否会在履行编辑器中重置变量值?如何在编辑器中存储可在整个对话流程中访问的持久信息?这是我应该设置新上下文的情况吗?
谢谢你。
编辑:我添加了代码的快速模型以帮助可视化问题:
node.js - 如何在 Dialogflow 中获得用户响应
如何从向用户提出的问题中获取用户响应并显示响应?
示例: Google 助理: 你叫什么名字?
用户: 我叫尤里·阿尔维斯
Google 助理: 你好,尤里·阿尔维斯
session - 控制台中的 Dialogflow 更新上下文
我有一个要求,我想将参数附加到前端屏幕的上下文中。我可以通过 webhook 做到这一点:
但是有可能从前端做到吗?我们可以使用 访问上下文变量#contextA.variableB
。但是我们可以在 Argument 部分写 groovy 或其他表达式$variableB+#contextA.variableB
吗?
我希望你能收到我的问题,如果问题还不清楚,请告诉我,我也会尝试举一个简单的例子。
提前致谢。
firebase - 来自实时数据库的 Dialoglfow 阅读列表
我正在使用 Dialogflow 和 Dialogflow 的内联编辑器(用于云函数和 Firebase 数据库“实时数据库”)创建一个聊天机器人。我会将这个聊天机器人与 Google Assistant 集成。
我必须从数据库中读取一个列表,其中列表有几个孩子,其中很少有子孩子,很少有子孩子有子子孩子。因为输出是一个列表并且包含长文本,所以一次说出所有数据需要很长时间。所以我想从列表中输出一个孩子并请求用户许可(是/否)“你想阅读下一个吗?”。如果用户说“是”,我将继续阅读直到最后。如果用户说“不”,我会触发一个事件。在读一个孩子,甚至是sub-child,甚至是sub-sub-child之前,请求用户的许可是真实的。
我采用的方法包括在每个用户第一次请求列表时为他们创建一个单独的数据库记录,以跟踪他们在列表中的位置。当用户说是时,从数据库中获取用户当前的项目 id,获取列表中的下一个项目(通过 将其返回给用户agent.add
),然后将用户的数据库记录更新为下一个项目的 id,依此类推,直到用户到达列表的末尾。之后agent.add()
,请求用户的许可agent.setFollowupEvent()
。如果用户说不,只需重置/删除该用户的数据库记录。
我想问几个问题:
- 我将如何将每个用户识别为个人:通过某个 id、会话或其他方式?
return
当我在云函数中运行以下代码时,agent.add
会被agent.setFollowupEvent
. 我该如何阻止这个?
httprequest - Webhook 调用失败。错误:无法解析 webhook JSON 响应:期望消息对象但得到:[中文字母]
我正在为对话流构建自己的 WebhookClient。我的代码如下(使用 Azure Functions,类似于 Firebase Functions):
我测试了查询,响应负载如下所示:
响应中的标头如下所示:
但是当我在对话流中测试我的机器人时,它返回以下内容:
Webhook 调用失败。错误:无法解析webhook JSON响应:期望消息对象但得到:“笀ഀ∀攀昀甀氀昀碗氀氀洀攀渀琀吀砀琀∀㨀∀圀氀挀漀洀攀琀漀洀礀愀最攀渀琀℀℀∀Ⰰഀ∀漀甀琀瀀甀琀䌀漀渀琀攀砀琀猀∀㨀嬀崀ഀ纪”。
有中国符号!?这是我在 DialogFlow 中测试它的视频:https ://imgur.com/yzcj0Kw
google-app-engine - 从对话流向谷歌云应用引擎上的应用程序发送请求?
我编写了一个python代码(test.py)并部署在谷歌应用引擎上,该引擎在后台运行,包括2个函数(find_music,read_csv),我想从dialogflow webhook发送一个请求并从中调用一个函数(find_music)文件并获取结果,然后将其发送到 dialogflow。
换句话说,我要从谷歌操作发送一个播放音乐的请求,但我应该从我创建的函数中获取文件的链接。
我用谷歌搜索了很多,但我找不到调用函数的解决方案。也许我做的方式是错误的。如果您能帮助我,我将不胜感激。
javascript - 无法访问 Dialogflow 实现参数
我正在尝试使用 NodeJS 实现对话流(dialogflow-fulfillment)。
我正在尝试从 dialogflow 访问参数,但是当我尝试访问currency-name
参数时出现以下错误:ReferenceError: name is not defined
但是当我打印我得到的参数时:parameters: {"currency-name":["GBP","USD"],"number":500}
当前使用此代码:
twilio - 在履行编辑器中对用户电话号码的 HTTP GET 请求
我们正在通过 Dialogflow 设置聊天机器人。用户将在通过 twilio 发送的呼叫或 SMS 中收到指向该机器人的网络链接。我想知道我们是否可以在实现中设置一个 HTTP 获取请求到 twilio,以便我们可以在 Dialogflow 的实现内联编辑器中为用户的电话号码设置一个上下文参数。
我查看了 twilio 的 api 文档,但只能找到有关通过 twilio 购买或可购买的数字的 HTTP 请求信息。
所以澄清一下:在 Dialogflow 的实现内联编辑器中,我们希望设置一个上下文参数,该参数等于 twilio 呼叫或发送 SMS 的用户电话号码,并带有指向我们聊天机器人的网络链接。
谢谢!