# 第三方服务接口调用

如果系统 API 不能满足技能开发需要,平台也支持开发者配置自定义 API。

# 1. API 配置

在为机器人设置服务接口调用后,会从 OpenAI 后端向指定的 URL 发起带有配置的参数的 GET 请求。API后端应在收到请求后,返回 JSON 响应,形式如下:

{
  "err_code": 0,                // 状态码,仅做对话流程中的状态控制,可在获得响应后区分下一步操作
  "data_list": [
    {                           // 目前返回信息需要包裹在 `data_list` 中唯一对象内,里面的值是可以读取到槽位内的,供后续流程或回答使用
      "param_a": "content_a",   // 参数,可在获得响应后填充进对应语义槽
      "param_b": "content_b"
    }
  ]
}

注意:需要在接口返回的 reponse-header中 ,添加 Content-Type: application/json 响应信息,否则在对话过程中, 机器人将不能正确接受接口返回值

除了通过对话获取到用户输入到槽位信息意外,我们还在每次接口调用的时候,做了两处修改 (1) 在http请求的header中增加了如下字段:

Response Headers

HTTP/1.1 200 OK

...

appid: abcdef,
bid: 10809,
requestid: 1234567890123456,
uid: oldadfa33
header字段 描述
appid 应用ID(string)
bid 机器人唯一ID (int)
requestid 请求唯一标识
uid 用户唯一标识,微信情景下,比如公众号、小程序则为对应应用的用户openid

# 2. API 创建方法

在机器人回答处,【回复类型】-【服务接口调用】-【自定义接口】-【创建自定义接口】填写接口名称、URL,并补充输入输出参数。
自定义接口 输入参数中,“参数”即为传递给 API 的参数名,“名称”用来表示该参数的含义,“是否必填”会在接口调用时检验参数是否有值,“输入建议”会在接口调试界面给出建议。
输出参数中,“参数”为 API 返回的参数名,“名称”用来表示该参数的含义。
返回状态中,“状态码”应和 API 能够返回的 err_code 一一对应,“名称”表示该状态码的含义。
点击保存后,即可在自定义接口中看到刚创建的 API,并可进行修改、删除操作。在服务接口调用右侧的下拉选项中的首部,可以看到已经创建的 API。

# 3. API 使用方法

对于 API 的每个输入参数,都需要一个语义槽与之对应,语义槽的内容将作为参数的值来调用 API,因此需要在语义槽设置部分建好语义槽,并设置好填槽方式。
对于 API 的每个输出参数,系统将会自动建立与其名称相同的语义槽并设置其词典为 sys.接口回填,可以在回答中使用以展示返回信息。
在服务接口调用右侧的下拉选项中选中希望使用的 API,点击右侧接口配置进行配置。
参数配置标签中,对于每个输入参数,都必须选择其对应语义槽(供选择的列表为该意图中已经配置的语义槽),并可设置默认值以在未提供值时填充,可对必填参数设置追问话术(否则将使用默认追问话术);对于每个输出参数,都必须提供其对应语义槽名称,系统将会自动建立。
接口调试标签中,可以设置每个参数的值,点击下方调试按钮,将会从 OpenAI 后端尝试调用接口,并展示返回的 JSON 响应。
此外,在服务接口调用下方,将会看到每个状态码所对应的标签, OpenAI 将会在获得对应状态码时跳转到响应标签进行后续操作,同样包括回复结果、服务接口调用、语义槽信息追问、机器人提问等。已填充返回信息的语义槽在后续步骤中同样可用。后续步骤中可以对相同语义槽进行覆盖填充。\

# 4. 示例配置

API配置