具有必需参数的意图,该参数显示项目数

时间:2019-02-06 04:38:20

标签: dialogflow

尝试使用两个参数为我的第一个会话助手制定意图。一切都建立在Dialogflow中,对于我的某些功能,我使用实现功能。

描述我的助手最简单的方法是预订电影票。

我需要存储@ number_of_tickets,@ cinema,@ movie。最后两个(@cinema和@movie)很容易通过实体解决,但是使用@number_of_tickets却很费劲。所有这些参数都必须是必需的。

我的目标是允许这种功能:

  1. 给我预订IMax中的《星球大战》门票(门票= 1 = @number_of_tickets,《星球大战》 = @电影,IMax = @电影)
  2. 预订2张IMax星球大战门票(2张门票= 2 = @number_of_tickets,《星球大战》 = @电影,IMax = @电影)
  3. 为我预订IMax中的《星球大战》门票->您要预订多少张门票?

我尝试了复合实体,但是它没有按我期望的那样工作。

如何在Dialogflow中启用此类功能?

有没有办法要求@number_of_tickets在1到5之间?

2 个答案:

答案 0 :(得分:1)

可以通过以下步骤解决以上问题: 解决方案:

第1步:

为电影和电影创建实体:

电影院:

Cinema Entities

电影: Movie Entities

第2步:

使用三个参数创建意图:

Intent With Training Phrase

Parameters

(如果您只想从1到5降低,则可以创建条目从1到5的电影和电影之类的实体,并使用相同的参数映射票数参数)

第3步:

使所有参数均为必需,并为所有参数定义提示,如下所示:

电影提示:

Movie Prompts

电影院提示:

Cinema Prompts

票证提示数:

Tickets Prompts

结果:

Result with prompts for number of tickets

答案 1 :(得分:0)

这可能并不明显,但是您可以记住记忆中的意图捕获了用户所说的,而不是 他们怎么说。您可以有多个意图来捕获不同的短语,并在实现过程中以几乎相同的方式处理它们。 (而且,这确实要求您在后台拥有某种实现网络挂钩。)

如何假定默认的1张票?

有两种方法。

第一个是,您可以设置一个Intent来捕获建议一个票证的短语和一个明确需要一个数字的另一个Intent。因此,也许一个Intent(可能是book.single)与

  • 我想在IMax上获得《星球大战》的门票
  • IMax在《星球大战》中的表现如何
  • 让我看看IMax的《星球大战》

等等。虽然您也可以使用其他不同的Intent(可能是book.multiple)

  • 我想要2张IMax的《星球大战》门票
  • 请购买2张IMax星球大战门票

在实现过程中,您可能具有一些需要三个参数的功能

bookTickets( num, movie, cinema );

在book.single的Intent处理程序中,您可以使用

bookTickets( 1, movieParameter, cinemaParameter );

在book.multiple的Intent处理程序中,将使用

bookTickets( countParameter, movieParameter, cinemaParameter );

在每种情况下,实现仍然最终会调用相同的函数来完成实际工作,但是处理程序会适当地设置值。

如何限制订购的门票数量?

这涉及到您未解决的问题-如果他们尝试订购更多产品,您想怎么办?您想将他们定向到群组订购对话吗?完全拒绝吗?无论您想要什么-在尝试实现会话之前,请确保已计划好该会话的路径。

在这种情况下,您不需要在Dialogflow Intent中强制执行此操作。最轻松地处理它。在那里,您将对各种参数应用任何逻辑并返回一条消息,提示他们下一次答复。

逻辑最好在实现中得到处理。

在您的示例中实际上有两个地方很重要。首先,您将如何处理5张以上的入场券?在您的book.multiple处理程序中,您将检查请求的数量。如果介于1和5之间(含1和5),则可以调用上述book函数。但是,如果不是这样,您可能只想回信说:“对不起,您最多只能预订5张票。您想要多少张票?”

您还需要一个新的Intent来捕获答复。它可能只是简单地取一个数字,但是要确保仅在发回此提示时应用该数字,您可能需要设置一个Output Context来指示要提示票数,然后再设置这作为收集数字的Intent的输入上下文。

在其他情况下,您可能想在预订机票之前应用逻辑吗?大量-在每种情况下,您可能都想确保有一个可以捕获他们想要的内容的新Intent。例如,如果他们要预定的电影没有在该电影院放映怎么办?如果您已经知道电影已经卖完了怎么办?

但是跟进意图如何?

通常,出于完全相同的原因,通常最好避免使用Intent-Intent表示用户所说的内容,不应尝试对代码逻辑进行建模。跟进意图没有什么特别的-您可以在顶层创建一个以相同方式工作的意图,但是仅当您提示某些事情时才有效。怎么样?再次出现上下文!

因此,如果您提示可能的放映时间(“是否要显示2:00、4:00或6:00放映?”),您还可以添加上下文(例如“ promptTime”),然后一个期望将其作为输入上下文并与时间匹配的Intent。

结论

  • 意图代表用户所说的话
  • 您的履行代码会按照他们所说的做些事情
  • 您可以在履行过程中提示他们提供更多或不同的信息
  • 上下文可以影响您的期望
  • 多个Intent处理程序可以调用相同的函数来完成工作
相关问题