代码之家  ›  专栏  ›  技术社区  ›  gmolau

手动调用登录助手后继续对话

  •  2
  • gmolau  · 技术社区  · 7 年前

    对于如何处理以下场景,我有点困惑:

    1. 用户触发 FooBarIntent 其履行需要第三方提供关联账户。
    2. 我手动调用 signin helper 从我的履行代码。
    3. 用户授权我的代理,Google上的Actions将带有登录状态的helpers响应发送到Dialogflow,其中 SignIn 意图拿起它,并把它传递给我的履行服务。

    现在我该如何继续实现原来的 食客 ? 我认为这可以无缝地处理,但是signin helpers响应是一个全新的webhook请求,没有关于原始请求的信息。我似乎可以将这些信息存储在上下文中,但这似乎相当笨拙。我是否遗漏了一些东西,或者我真的必须告诉用户“谢谢你的登录,现在请再问你原来的问题”?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Prisoner    7 年前

    说“现在请再问一次你原来的问题”当然是错误的做法-你有那部分是正确的。

    你也说得对,没有自动重新触发原始意图。虽然这看起来很奇怪,但这仅仅是因为意图代表了用户所说的内容,而不是你将要回答的内容。用户的初始声明和他们的登录确认都是用户所说的单独的事情,您可能希望以不同的方式处理每一个。

    正如你所建议的,有一件事是有意义的,那就是在你从助手那里得到结果之前,对他们最初说的话做出回应。在这些情况下,当您请求帮助器时,将意图或操作名称和参数保存在上下文中,可以让您在之后进行选择。(然而,还有其他可能的行为,可能是有意义的。例如,考虑一下,如果您请求作为欢迎意图的一部分登录。因为用户永远不会通过第一步,所以不需要跟踪状态。)

    这种在绕道获取登录时保存状态的模式是由 multivocal 例如,图书馆。使用multivocal,您可以指定在触发意图或操作处理程序之前所需的需求(例如要求对用户进行身份验证)。它负责满足这些要求,然后确保对话继续进行,在你离开的地方绕道而行。

    推荐文章