尝试使用两个参数为我的第一个会话助手制定意图。一切都建立在Dialogflow中,对于我的某些功能,我使用实现功能。
描述我的助手最简单的方法是预订电影票。
我需要存储@ number_of_tickets,@ cinema,@ movie。最后两个(@cinema和@movie)很容易通过实体解决,但是使用@number_of_tickets却很费劲。所有这些参数都必须是必需的。
我的目标是允许这种功能:
我尝试了复合实体,但是它没有按我期望的那样工作。
如何在Dialogflow中启用此类功能?
有没有办法要求@number_of_tickets在1到5之间?
答案 0 :(得分:1)
可以通过以下步骤解决以上问题: 解决方案:
第1步:
为电影和电影创建实体:
电影院:
电影:
第2步:
使用三个参数创建意图:
(如果您只想从1到5降低,则可以创建条目从1到5的电影和电影之类的实体,并使用相同的参数映射票数参数)
第3步:
使所有参数均为必需,并为所有参数定义提示,如下所示:
电影提示:
电影院提示:
票证提示数:
结果:
答案 1 :(得分:0)
这可能并不明显,但是您可以记住记忆中的意图捕获了用户所说的,而不是 他们怎么说。您可以有多个意图来捕获不同的短语,并在实现过程中以几乎相同的方式处理它们。 (而且,这确实要求您在后台拥有某种实现网络挂钩。)
如何假定默认的1张票?
有两种方法。
第一个是,您可以设置一个Intent来捕获建议一个票证的短语和一个明确需要一个数字的另一个Intent。因此,也许一个Intent(可能是book.single)与
等等。虽然您也可以使用其他不同的Intent(可能是book.multiple)
等
在实现过程中,您可能具有一些需要三个参数的功能
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。
结论