dialogflow-es - DialogFlow 跟进触发空响应
问题描述
我有一个 DialogFlow 意图跟进,但我很难处理。这是我主要意图的唯一后续行动,我遇到的问题是,当incidents.data
数组为空时,它不会conv.ask
在 else 情况下触发语句,并导致 DialogFlow 抛出空语音响应错误。代码看起来像这样:
app.intent('metro_timetable - yes', async (conv: any) => {
const incidents = await serviceIncidents.getIncidents();
if (incidents.data.length > 0) {
conv.ask('I have incidents')
} else {
conv.ask(
`I wasn't able to understand your request, could you please say that again?`
);
}
});
incidents.data
存储在全局范围内,并设置在metro_timetable
意图的深处。它存储事件以供跟进。因为所有yes
响应都会触发跟进,所以我设置了一个 else 案例,所以如果有人说yes
什么时候metro_timetable
不理解他们的原始请求并要求他们重复它,它就会捕获它。如果incidents.data
确实有信息可以正确共享对话框,则会正确触发并I have incidents
正确读取给用户。
在 DialogFlow 中,它看起来像这样。我在哪里错了?
解决方案
您的描述实际上是如何设置的有点令人费解incidents.data
,但听起来可能不是将其设置为空数组,而是根本没有设置。在这种情况下,我怀疑发生了以下情况:
incidents.data
将是未定义的- 试图评估
incidents.data.length
会导致错误 - 由于程序崩溃,您的 webhook 不会返回结果。由于您可能没有在 UI 中为意图设置结果,因此返回了一个空结果。
你可以通过做一个测试来解决这个问题,例如(例如)
incidents && incidents.data && incidents.data.length > 0
但是,您的另一个问题似乎是您为实际上不希望将其作为后续的场景设置了后续意图。这是您可能不应该使用后续意图的原因之一,而是仅在您发送一个上下文有意义的响应时设置一个上下文,并在您定义的上下文中查找“是”响应。然后,当metro_timetable
不理解请求时,您不设置上下文并给出错误。
为此,您将从metro_timetable-followup
两个 Intent 中删除自动生成的上下文。您将创建自己的上下文,我将timetable
为此示例命名。
在metro_timetable
Intent 的实现中,如果您以需要确认的内容进行响应(即 - 当“是”将是用户所说的内容时),您可以timetable
使用类似的内容设置上下文
conv.contexts.set('timetable',2);
conv.ask('Are you sure?');
然后,您可以创建一个 Intent 来检查timetable
传入上下文并具有与“是”等效的训练短语。在那个意图中,你会做你需要做的事情并做出回应。
推荐阅读
- c# - 使用 ASP.NET Core Identity 和 IdentityServer4 - 身份验证
- python - how to select the second last item from unordered list with selenium
- redux - Reducing Boilerplate Redux
- web-applications - How can i secure client_id value in auth_config.json while using Auth0 for single page web application
- android - Android:代码 1 SQLITE_ERROR(未找到 Colum_name)
- python - How to load fancyimpute in python?
- c# - Change element position when hidden inside a StackPanel
- sql-server - sqlcmd running into unicode conversion issues on SLES12SP5
- azure-devops - Azure DevOps YAML how to being notified about new task version
- python - Replacing a decoder linear layer with an LSTM