IBM Cloud Docs
调用定制扩展

调用定制扩展

扩展是与外部服务的集成。 通过从操作调用扩展,助手可以向外部服务发送请求并接收可在对话中使用的响应数据。

例如,您可以使用扩展与凭单或客户关系管理 (CRM) 系统进行交互,或者检索实时数据,例如抵押贷款利率或天气状况。 然后,来自扩展的响应数据可用作操作变量,您的助手可以在对话中使用这些变量。

有关如何构建定制扩展的信息,请参阅 构建定制扩展

从步骤调用扩展

要从操作调用定制扩展,请执行以下操作:

  1. 在操作编辑器中,创建或打开要从中调用扩展的步骤。

  2. 可选:助手说 字段中,输入要在调用扩展之前向客户显示的消息 (例如,Please wait while I retrieve your account balance...)。

    此步骤的输出将发送到全局上下文变量 skip_user_input 设置为 true 的通道。 此变量指示通道显示消息,但 提示客户进行应答。 相反,通道会发送一条空消息,使助手能够继续调用扩展。

    所有内置通道集成 (例如,Web 聊天) 都遵循 skip_user_input 上下文变量。 如果要使用 API 来开发定制客户机,那么您应负责包含此变量的逻辑检查。 有关更多信息,请参阅 处理用户输入

  3. 在步骤编辑器中,单击 然后单击

  4. 单击 使用扩展

  5. 扩展设置窗口中,指定以下信息:

    • 扩展 字段中,选择要调用的扩展。

    • 操作字段中,选择要执行的操作。 ( 操作 是扩展支持的方法或函数。)

  6. 指定每个必需输入参数的值。 参数 是发送到操作的输入值,例如要检索的客户记录的标识或要用于天气预报的位置。

    要为参数指定值,请单击该值的输入字段。 然后,可以从可用变量列表中进行选择,或者编写表达式以指定值。

    设置参数值

    每个参数都具有数据类型 (例如 numberstring)。 您选择的变量必须与参数的数据类型兼容; 有关更多信息,请参阅 参数的兼容变量

    必须先指定所有必需参数的值,然后才能继续。

  7. 如果要为任何可选参数指定值,请单击 可选参数。 然后,可以对要使用的每个可选参数重复此过程。

  8. 单击应用。 (如果 应用 按钮不可用,请检查以确保为所有必需参数指定了值。)

现在,步骤编辑器的 然后 部分显示对扩展的调用的概述:

已配置的扩展调用概述

如果需要进行更改,请单击 编辑扩展 以重新打开“扩展设置”窗口。

参数的兼容变量

要传递操作的输入参数值,必须选择兼容的操作变量或会话变量。

操作变量包含基于上一步中的客户响应的值。 会话变量可能具有基于客户响应的值或由表达式定义的值。 (有关操作变量和会话变量的更多信息,请参阅 使用变量来管理对话信息。)

为参数指定值时,您选择的变量必须与参数的数据类型兼容。 (例如,必须为 number 参数指定数字值而不是文本。)

下表显示了可能的客户响应类型以及与每种类型兼容的参数数据类型。

参数的兼容响应类型
客户响应类型 兼容的数据类型 注释
options string 所选选项始终被视为字符串,即使它是数字值也是如此。
数字 number
integer
作为 integer 参数的值传递的浮点数可能会导致错误,具体取决于 REST API 的行为。
日期 string 日期呈现为 YYYY-MM-DD
时间 string 时间以 24 小时格式呈现为 HH:MM:SS,并转换为用户的时区。
货币 number
integer
Percent number
integer
百分比值作为整数传递 (因此 75% 变为 75)。
自由文本 string
正则表达式 string

数组

除了受支持的客户响应类型外,变量还可以包含数组值。 如果需要将数组参数传递到操作,那么必须创建数组会话变量:

  1. 使用步骤编辑器中的 设置变量值 或从“变量> 由您创建”页面创建新的会话变量。 (有关如何创建会话变量的更多信息,请参阅 创建会话变量。)

  2. 类型字段中,选择任意

  3. 初始值 字段中,单击 使用表达式 开关以将其启用。 输入用于定义数组值 (例如 ["New York", "London", "Tokyo"][123, 456, 789][]) 的表达式。

因为此变量包含数组值,所以您的操作可以使用带有数组方法的表达式来访问或修改数组值。 例如,您可能想要创建最初包含空数组 ([]) 的变量,然后使用 add() 方法一次构建一个元素列表。 有关可在表达式中使用的数组方法的更多信息,请参阅 数组方法

现在,您可以选择此变量作为需要数组的参数的值。

访问扩展响应数据

调用扩展后,响应数据中的值将存储在可在后续步骤中访问的特殊操作变量中。

您可以通过访问其他操作变量的相同方式来访问这些变量。 您可以在 助手说 文本中对其进行引用,将其作为步骤条件的一部分进行求值,或者将其指定给会话变量,以便其他操作可以对其进行访问。 响应变量显示在可用变量列表中,在扩展名称和从中调用响应变量的步骤下进行分类:

引用响应变量

对扩展的每个调用都会创建一组单独的响应变量。 如果您的操作多次从不同步骤调用同一扩展,请确保从正确的步骤中选择变量。

每个变量表示来自响应主体的值。 为了便于访问这些值,将从复杂嵌套对象中抽取数据并映射到各个响应变量。 每个变量的名称反映其在响应主体中的位置 (例如,body.namebody.customer.address.zipcode)。

例如,此操作步骤使用表达式来检查扩展响应中的 availability 属性:

步骤条件中的扩展变量

如果响应变量包含数组,那么可以编写使用数组方法访问数组元素的表达式。 例如,您可以在步骤条件中使用 contains() 方法来测试数组是否包含特定值,或者使用 join() 方法将数组中的数据格式化为您可以包含在助手响应中的字符串。 有关数组方法的更多信息,请参阅 数组方法

检查成功或失败

您可能希望助手能够处理调用定制扩展时发生的错误。 您可以通过检查随对扩展的调用的响应一起返回的 Ran successfully 响应变量来执行此操作。 此变量是布尔值 (truefalse)。

如果定义用于检查 Ran successfully 变量的步骤条件,那么可以创建使助手能够根据对扩展的调用是否成功进行不同响应的步骤。 (有关步骤条件的更多信息,请参阅 步骤条件。)

以下示例显示用于从步骤 3 中的扩展检查失败的步骤条件。 通过使用此条件,您可以创建一个步骤来告知客户存在错误,并且可能提供连接到代理以获取更多帮助。

扩展故障的步骤条件检查

HTTP调整

除了 Ran successfully 变量,您可能还想根据响应HTTP创建一个步骤条件。 通过执行此操作,您可以根据故障原因创建以不同方式处理情境的步骤。 例如,如果因为超时错误 HTTP 状态408)导致调用失败,您可能需要重试调用。

HTTP 状态码有很多种,不同的方法使用不同的状态码来表示各种成功或失败。 要判断 HTTP,您需要知道外部服务在什么情况下返回什么 HTTP 状态码。 这些状态代码通常在描述外部API OpenAPI中指定。

要基于 HTTP创建步骤条件,请按以下步骤操作:

  1. 对于要测试的值,单击 表达式

  2. 在表达式字段中,输入美元符号 ($) 以显示可用变量的列表。

  3. 从扩展中选择任何作为响应值的变量。 (您选择哪个变量无关紧要,只要它是扩展响应变量)。

    将自动更新表达式以显示对所选变量的引用,格式为 ${step_xxx_result_y.body.variablename}。 例如,如果选择了名为 body.id 的响应变量,那么引用可能是 ${step_596_result_1.body.id}

  4. 在花括号 ({}) 内,编辑此引用以除去 .body.variablename。 应该会留下类似 ${step_596_result_1} 的内容。

  5. 在右花括号 (}) 后,添加 .status。 生成的引用标识从对扩展的调用返回的状态码 (例如,${step_596_result_1}.status)。

    有关编写表达式的更多信息,请参阅 编写表达式

  6. 通过添加运算符和比较值来完成表达式,因此表达式求值为布尔值 (true/false)。 例如,以下表达式用于测试 HTTP 状态408,表示超时错误:

    ${step_549_result_1}.status==408
    

调试自定义扩展失败

如果对分机的调用失败,您可能需要查看系统 API 发送和返回信息的详细信息来调试问题。 为此,您可以使用预览窗格中的“检查器”:

  1. 转到“操作”页面或“操作编辑器”,然后单击“预览”打开“预览”窗格。

    您不能从预览页面上的助理预览访问检查器,该页面只显示客户看到的内容。 请改为使用“操作”页面中包含的预览功能,这将使您能够访问其他信息。

  2. 像客户一样与助理互动。

  3. 每次调用扩展时,预览窗格都会显示一条消息,允许您访问详细信息:

    单击 检查 以查看有关对扩展的调用的详细信息。

    您还可以单击“扩展检查器”图标来显示或隐藏“检查器”。 不过,您必须在预览窗格中单击“检查”,才能显示分机的特定呼叫信息。

    检查器的“概览”选项卡显示分机呼叫的以下信息:

    调试选项 描述
    扩展 扩展设置中指定的扩展的名称。
    操作 调用的操作。
    状态 回复中的 HTTP 状态代码。 此代码可帮助您确定是否从外部服务返回了错误。
    请求参数 作为请求的一部分发送到系统 API 的输入参数。
    响应属性 系统 API 响应中包含的所有属性值。 这些是在对扩展的调用完成后映射到操作变量的值。

    请求参数响应属性 表中,可能会截断长属性名称以仅显示 JSON 路径的最后部分。 要查看完整路径和属性名,请将鼠标指针悬停在表中的属性名上。

  4. 如果要查看原始请求和响应数据,请单击扩展检验员中的 高级 选项卡:

    • 该请求显示为 cURL 命令,您可以在命令提示符处运行该命令,也可以将其导入到诸如 Postman之类的工具中。 (出于安全原因,不包含任何 Authorization 头的内容。)
    • 响应显示为系统 API 返回的完整 JSON 数据。

重新配置缺少的扩展

如果有人在“集成”页面上从助手中移除扩展,或者如果导出操作,然后将其导入到未配置所需扩展的其他助手中,那么扩展可能会变为不可用。 如果发生此情况,那么调用扩展的任何操作步骤都将变为无效。

要更正该问题,请遵循以下步骤:

  1. 如有必要,请使用先前使用的同一 OpenAPI 规范重新创建扩展。 (有关更多信息,请参阅 构建定制扩展。)

  2. 确保已将扩展添加到助手。 (有关更多信息,请参阅 向助手添加扩展。)

  3. 在操作编辑器中,编辑调用扩展的操作步骤,并检查是否正确配置了对扩展的调用。 如果 watsonx Assistant 识别所需的扩展,那么会自动复原扩展配置。

    如果看到消息 Extension not fully configured,这意味着 watsonx Assistant 找不到所需的扩展。 单击 编辑扩展

  4. 在“扩展设置”窗口中,选择要调用的扩展。

    如果 watsonx Assistant 识别使用同一 OpenAPI 文档构建的可用扩展,那么将显示一条消息,建议您选择此扩展。 但是,您可以选择任何可用的扩展。

  5. 验证是否在 操作参数 字段中指定了正确的值。

  6. 单击应用

  7. 如果选择的扩展与用于构建操作的扩展不同,那么可能需要修改访问扩展响应属性的后续步骤。 请检查引用响应属性的任何后续步骤,并确保引用仍然有效且正确。