履单迁移

设置 intent 和场景后,您必须更新执行方式代码,以反映 Action Builder 请求和响应格式的变化。这也可以考虑利用 Actions Builder 的其他功能。本页面介绍了更新 fulfillment 代码时的一般步骤和注意事项。

考虑您的履单方法

项目的 fulfillment 代码取决于对话模型和开发平台的功能。Actions Builder 引入了新的对话模型和功能,它可以改变您构建对话的方式,并且可能会改变您处理项目执行方式的方式。本部分介绍了与 Dialogflow 不同的 Actions Builder 的功能,以及这些差异会如何改变您实现 fulfillment 代码的方式。

  • 对话实现方面的变更

    • Dialogflow 使用意图到意图、上下文驱动的对话流,根据训练短语和上一个意图的输入/输出上下文来匹配各个意图。
    • Actions Builder 的对话流程使用场景作为对话回合的容器。在场景中,可以匹配特定的意图,与 Dialogflow 的上下文非常相似。过渡功能会根据匹配的 intent 定义要过渡到的场景。
  • 可重复使用的 webhook 函数

    • 在 Dialogflow 中,网络钩子处理程序与各个意图相关联。如果需要其他逻辑,您必须创建一个单独的 intent 来处理新函数。
    • Webhook 处理程序在 Actions Builder 中具有自定义的处理程序名称。借助此功能,您将能够在整个项目的多个场景中调用函数。
  • 调用 webhook 的更多方法

    • 在 Dialogflow 中,每个 intent 方法一个 webhook 需要额外的 intent,以便在项目的 fulfillment 中实现更多对话逻辑。
    • 借助 Action Builder,您可以从场景内的多个位置发出网络钩子调用:进入时、根据条件、基于槽位填充,以及通过自定义 intent 和系统 intent 匹配。

更新履单代码

每个 Action 的执行方式代码因 Action 的复杂程度和用途而异,不过在更新代码时需要执行一些常规步骤:

  1. 下载并安装最新版本的客户端库。

    npm install @assistant/conversation
    
  2. 更新代码中的 require 语句。例如:

    const {
      SimpleResponse,
      BasicCard,
      Image,
    } = require('actions-on-google');
    

    上述代码已更新为以下代码:

    const {
      conversation,
      Simple,
      Card,
      Image,
    } = require('@assistant/conversation');
    
  3. 重构您的代码以使用新方法。

    • intent 处理程序:app.intentapp.handle
    • 回复/提示:conv.askconv.add
    • Surface/设备功能:conv.surface.capabilities.has('actions.capability.SCREEN_OUTPUT')conv.device.capabilities.includes('RICH_RESPONSE')
    • 数据存储:conv.dataconv.session.params
    • 响应类型:

      • SimpleResponseSimple
      • BasicCardCard
      • SuggestionsSuggestion
    • intent 参数:conv.parameters[KEY]conv.intent.parameters[KEY].resolved

    • 上下文/场景转换:conv.contexts.set(content_name, 5);conv.scene.next.name = 'context_name'

    • 结束对话:conv.close(response)conv.add.response; conv.scene.next.name = 'actions.page.END_CONVERSATION'

  4. 更新响应代码以利用构建器的新响应基元。例如:

    conv.ask(new Suggestions (['a', 'b']));
    

    上述代码已更新为以下代码:

    for (suggestion of ['a', 'b']) {
      conv.add.(new Suggestion({title: suggestion}))
    }
    

如需查看完整的方法列表,请参阅下面的执行方式代码转换映射

使用以下页面比较请求和响应载荷:

设置网络钩子

更新 fulfillment 后,在项目的整个场景中启用网络钩子调用。虽然迁移工具会迁移 Dialogflow intent 的网络钩子设置,但您需要查看这些设置,因为重构后的 fulfillment 代码和网络钩子函数可能会发生变化。

在 Dialogflow 中,系统会在 intent 中启用 webhook,并且当 intent 匹配时,您的 fulfillment 代码会包含要执行的处理程序和函数。在 Actions Builder 中,webhook 可以在调用 intent 或场景中触发,从而向您的执行方式端点发送请求。您的 fulfillment 包含用于处理请求中的 JSON 载荷的 webhook 处理程序。在以下情况下,您可以触发网络钩子:

  • 调用 intent 匹配之后
  • 在场景上进入舞台
  • 在场景的条件阶段中条件评估结果为 true 后
  • 在场景的槽提交阶段
  • 在场景的输入阶段发生 intent 匹配后

从 Dialogflow 迁移到 Actions Builder 时,您需要考虑对话流程的变化,因为这可能会改变进行 webhook 调用的时间和地点。

如需启用网络钩子调用,请按以下步骤操作:

  1. 选择您要从中调用网络钩子的场景。
  2. 选择您要启用网络钩子的状态。您可以为以下一种或多种状态启用网络钩子:

    • 进入时
    • 条件
    • 槽填充
    • 用户 intent 处理
    • 系统 intent 处理
  3. 勾选调用 webhook 选项。

  4. 输入您在 fulfillment 代码中定义的 webhook 处理程序。

  5. 点击保存

  6. 转到 Test 以试用 webhook 调用和执行方式更改。

执行方式代码转换映射

下表显示了 Dialogflow 的 fulfillment 代码语法如何转换为 Actions Builder 代码。如需查看完整的方法列表,请参阅 Actions Builder 和 SDK 参考文档

Dialogflow Actions Builder
conv.data conv.session.params
conv.ask conv.add
conv.close conv.scene.next.name = 'actions.scene.END_CONVERSATION'
conv.user.storage conv.user.params
conv.input.raw conv.intent.query
conv.parameters conv.intent.params[key].resolved
conv.arguments.get('MEDIA_STATUS')
mediaStatus.status==='FINISHED'
conv.intent.params['MEDIA_STATUS']
mediaStatus.resolved==='FINISHED'
事件 系统 intent 处理:
MEDIA_STATUS_FINISHED
MEDIA_STATUS_FAILED
conv.device.capabilities.has("actions.capability.SCREEN_OUTPUT") conv.device.capabilities.includes("RICH_RESPONSE")
app.intent app.handler
app.middleware app.middleware
简单回答 prompt -firstSimple
富响应 prompt -content -card: object -image: object -table: object -media: object -suggestions -link

您可以在下方找到有关其他工具的信息: