Dialogflow es 带有显示项目计数的必需参数的意图

Dialogflow es 带有显示项目计数的必需参数的意图,dialogflow-es,Dialogflow Es,试着用几个参数为我的第一个对话助手设定一个意图。一切都是内置的Dialogflow,对于我的一些功能,我使用了fulfillment 用最简单的方式来形容我的助手是电影订票员 我需要存储@number\u张票、@cinema、@movie。最后两个(@cinema和@movie)很容易用实体来解决,但是在@number\u的票证上有很多困难。所有这些参数都应该是强制性的 我的目标是允许此类功能: 给我订一张IMax版《星球大战》的票(票=1=@number\u of\u票,星球大战=@movie

试着用几个参数为我的第一个对话助手设定一个意图。一切都是内置的Dialogflow,对于我的一些功能,我使用了fulfillment

用最简单的方式来形容我的助手是电影订票员

我需要存储@number\u张票、@cinema、@movie。最后两个(@cinema和@movie)很容易用实体来解决,但是在@number\u的票证上有很多困难。所有这些参数都应该是强制性的

我的目标是允许此类功能:

  • 给我订一张IMax版《星球大战》的票(票=1=@number\u of\u票,星球大战=@movie,IMax=@cinema)
  • 给我订两张IMax版的《星球大战》的票(2张=2张=票的数量,星球大战=电影,IMax=电影院)
  • 在IMax中为我预订《星球大战》的门票->您想预订多少张
  • 我试过使用复合实体,但它没有像我预期的那样工作

    如何在Dialogflow中启用此类功能


    有没有办法要求票证的@number\u在1到5之间?

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

    第1步:

    为电影和电影院创建实体:

    电影院:

    电影:

    第二步:

    使用三个参数创建意图:

    (如果只需要1到5之间的值,则可以创建一个实体,如cinema和movies,其条目范围为1到5,并使用相同的值映射“票证数量”参数)

    第三步:

    将所有参数设为必填项,并定义所有参数的提示,如下所示:

    电影提示:

    影院提示:

    票证数量提示:

    结果:


    这可能并不明显,但你两个问题的答案都可以通过记住意图捕捉用户所说的,而不是用户所说的你所做的来解决。你可以有多种意图去捕捉不同的短语,并在你的实践中以几乎相同的方式处理它们。(这些确实要求您在幕后有某种实现webhook。)

    我如何假设默认为1张票?

    有两种方法

    第一个是,您可以设置一个意图,以捕获建议单个票据的短语和明确要求数字的不同意图。因此,也许有一个意图(可能是book.single)与

    • 我想买一张IMax版的《星球大战》的票
    • 《星球大战》的IMax放映怎么样
    • 让我看看IMax的《星球大战》
    等等。而你也会有不同的意图(可能是book.multiple)

    • 我想要两张IMax版的《星球大战》的票
    • 请给我两张IMax星球大战的票
    等等

    在您的实践中,您可能有一些函数包含三个参数

    bookTickets( num, movie, cinema );
    
    在book.single的意图处理程序中,您可以使用

    bookTickets( 1, movieParameter, cinemaParameter );
    
    在book.multiple的意图处理程序中,可以使用

    bookTickets( countParameter, movieParameter, cinemaParameter );
    
    在每种情况下,实现仍然会调用相同的函数来完成实际工作,但处理程序会根据需要设置值

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

    这涉及到一些您没有解决的问题—如果他们试图订购更多,您希望发生什么?是否要将他们引导到团体订单对话?完全拒绝?无论你想要什么——在你尝试实施之前,确保你已经计划好了对话的路径

    在本例中,这不是您想要在Dialogflow Intent中强制执行的内容。在履行中处理它是最简单的。在这里,您可以对各种参数应用任何逻辑,并返回一条消息,提示他们下一次回复

    逻辑在实践中处理得最好

    实际上,在您的示例中有几个地方这很重要。首先,您将如何处理超过5张申请的门票?在book.multiple的处理程序中,您将检查请求的数量。如果介于1和5之间,则调用上面的book函数。但如果没有,你可能只想回复说“对不起,你最多只能预订5张票。你想要多少张票?”

    您还需要一个新的意图来捕获回复。它可以像只获取一个数字一样简单,但为了确保仅在发送回此提示时应用它,您可能需要设置一个指示提示输入票证数量的值,然后将其设置为收集数字的意图的输入上下文

    在其他情况下,您是否希望在订票前应用逻辑?很多——在每一种情况下,你可能都想确保有一个新的意图,可以捕获他们想要的东西。例如,如果他们想预订的电影没有在电影院放映怎么办?如果你已经知道电影卖完了怎么办

    但后续打算如何?

    出于完全相同的原因,通常最好避免后续意图——意图代表用户所说的内容,不应试图对代码逻辑建模。后续意图没有什么特别之处——您可以在顶层创建一个以相同方式工作的意图,但只有在提示某些事情时才有效。怎样又来了

    因此,如果您提示可能的显示时间(“您想要2:00、4:00或6:00的显示吗?”),您还可以包括一个上下文(例如“PrompTime”),然后有一个意图,希望将其作为输入上下文并匹配时间

    结论

    • 意图代表用户所说的
    • 您的履行代码与他们所说的内容有关联
    • 您可以在履行过程中提示他们提供更多或不同的信息
    • 上下文