IBM Cloud Docs
使用 JSON 编辑器定义响应

使用 JSON 编辑器定义响应

在某些情况下,您可能需要使用 JSON 编辑器来定义助手的响应。 有关更多信息,请参阅 添加助手响应

要使用 JSON 编辑器编辑响应,请单击 助手说 字段中的 切换到 JSON 编辑器 图标 "切换到 JSON 编辑器" 图标。 JSON 编辑器显示如何在后台定义响应并将其发送到通道。

通用 JSON 格式

如果对新的空响应打开 JSON 编辑器,那么将看到以下基本结构:

{
  "generic": []
}

generic 属性定义在执行步骤时发送到通道的响应的数组。 术语 通用 是指使用不特定于任何通道的通用 JSON 格式来定义这些响应。 这种格式可以容纳多个集成支持的各种响应类型,也可以由使用 REST API 的自定义客户端应用程序来实现。

步骤的 generic 数组可以包含多个响应,并且每个响应都具有 响应类型。 发送简单文本响应的基本步骤通常仅包含响应类型为 text 的单个响应。 但是,许多其他响应类型可用,支持多媒体和交互式内容,以及对某些通道集成的行为的控制。

虽然可以将 generic 格式发送到任何通道集成,但并非所有通道都支持所有响应类型,因此某些通道可能会忽略特定响应或以不同方式处理特定响应。 更多信息,请参阅 响应类型参考

在运行时,具有多个响应的输出可能会拆分为多个消息有效内容。 通道集成按顺序将这些消息发送到通道,但通道负责将这些消息传递给用户; 这可能受到网络或服务器问题的影响。

添加响应

要在 JSON 编辑器中指定响应,请将相应的 JSON 对象插入到步骤响应的 generic 字段中。 以下示例显示了具有两种不同类型 (文本和图像) 的响应的输出:

{
  "generic":[
    {
      "response_type": "text",
      "values": [
        {
          "text_expression": {
            "concat": [
              {
                "scalar": "This is a text response."
              }
            ]
          }
        }
      ]
    },
    {
      "response_type": "image",
      "source": "https://example.com/image.jpg",
      "title": "Example image",
      "description": "This is an image response."
    }
  ]
}

有关更多信息,请参阅 响应类型

以特定集成为目标

如果计划将助手部署到多个通道,那么您可能希望根据每个通道的功能向不同的集成发送不同的响应。 通用响应对象的 channels 属性提供了执行此操作的方法。

如果您的对话流未根据使用中的集成进行更改,并且您无法提前知道要在运行时将响应发送到的集成,那么此机制很有用。 通过使用 channels,您可以定义支持所有集成的单个步骤,同时仍为每个通道定制输出。 例如,您可能希望根据通道支持的内容来定制文本格式,甚至发送不同的响应类型。

使用 channelschannel_transfer 响应类型一起使用非常有用。 由于消息输出由启动 transfer 的通道和目标通道处理,因此您可以使用 channels 来定义由一个或另一个通道处理的响应。

要指定要用于响应的集成,请在响应对象中包含可选的 channels 数组。 所有响应类型都支持 channels 数组。 此数组使用以下语法包含一个或多个对象:

{
  "channel": "<channel_name>"
}

<channel_name> 的值可以是以下任何字符串:

  • chat:Web 聊天
  • voice_telephony: 电话
  • text_messaging: SMS
  • slack: Slack
  • facebook:Facebook Messenger
  • whatsapp: WhatsApp

以下示例显示了包含两个响应的步骤输出: 一个用于 Web 聊天集成,另一个用于 Slack 和 Facebook 集成。

{
  "generic": [
    {
      "response_type": "text",
      "channels": [
        {
          "channel": "chat"
        }
      ],
      "values": [
        {
          "text_expression": {
            "concat": [
              {
                "scalar": "This output is intended for the <strong>web chat</strong>."
              }
            ]
          }
        }
      ]
    },
    {
      "response_type": "text",
      "channels": [
        {
          "channel": "slack"
        },
        {
          "channel": "facebook"
        }
      ],
      "values": [
        {
          "text_expression": {
            "concat": [
              {
                "scalar": "This output is intended for either Slack or Facebook."
              }
            ]
          }
        }
      ]
    }
  ]
}

如果 channels 数组存在,那么它必须至少包含一个通道对象。 未列出的任何集成都将忽略响应。 如果 channels 阵列不存在,那么所有集成都将处理响应。

响应类型

您可以使用 JSON 配置不同类型的响应。 要了解有关 JSON 响应类型的响应类型和受支持集成的更多信息,请参阅 响应类型参考