齐悟接口文档规范(v0.21)
接入方-齐悟接口对接文档规范说明
updated @ 2020.06.17
一、接入方语音网关请求齐悟对话接口协议
| 功能描述 | 接入方语音网关提交用户说的话进行语义解析 |
| - | - |
| 接口地址 | /api/chat |
| 调用方式 | POST |
| Body类型 | application/json |
1. 对话接口请求参数
对话接口请求 HEADER
| Header | Type | Value |
| - | - | - |
| Qiwu-MSG-Push | String (URI) | 齐悟网关推送下单或其他逻辑等待话术提交到的地址(见第三部分) |
对话接口请求 BODY
| Key | Type | Value | 必须 |
| - | - | - | - |
| appkey | String | 业务appkey | 是 |
| timestamp | Integer | 请求发送时的 unix 时间戳 | 是 |
| uid | String | 用于区分用户的用户唯一标识符,会传递给后台 | 是 |
| verify | String | 验证串,规则为 MD5(appsecret+uid+timestamp) | 是 |
| msg | String | 用户发送的消息 | 是 |
| geo[lng] | Float | 当前用户 GPS 经度信息 | 否 |
| geo[lat] | Float | 当前用户 GPS 纬度信息 | 否 |
| nickname | String | 用户昵称 | 否 |
| new_session | Boolean | 需清除本句消息之前所有对话记忆和对话状态时,传true | 否 |
| extra_order_info | JSONObject | 下单请求时,用户在接入方前端选择的下单参数 | 否 |
2. 对话接口请求示例
header
Authorization: Bearer XXXXXX
NLU-Callback: https://www.baidu.com
body
{
"appkey":"pateo-train-test",
"timestamp":1569402111,
"uid":"123456789",
"verify":"xxxxxx",
"msg":"买张明天从深圳去北京的火车票",
"geo[lng]":"113.959105",
"geo[lat]":"22.543558",
"nickname":"",
"new_session":true,
"extra_info": {
// 外卖语音验证码
"verify_code": "1234",
// 机票,火车票联系人等信息(需要等齐悟接入方前后端一起确定)
}
}
3. 对话接口响应参数
| Key | Type | Value | 必须 |
| - | - | - | - |
| retcode | Integer | 接口调用返回值(0代表成功,其他为失败) | 是 |
| ask | String | 用户问句 | 是 |
| msg | String | 给用户返回的话术 | 是 |
| data | JSON | 给前端返回的结构化数据,无数据时为 {} | 是 |
| data_key | String (UUID) | 结构化数据的 ID,可无视 | 否 |
| service | String (Enum) | 当前场景类型 | 否 |
data 中的必返字段说明
| Key | Type | Value | 说明 |
| - | - | - | - |
| task_finished | Boolean | true/false | 任务是否完成 |
| confidence | Float | 0-1 | 本次语句的置信度 |
当不在技能多轮,且NLU无法识别,将返回msg=好的,且confidence=0
当在某个技能的多轮里,NLU无法识别,直接返回msg=*还在帮您*(必须带这四个字),且confidence=0.5。
data.search_result_type 字段说明
类型为 String(Integer),指代 data 中返回值的结构类型
| Value | 说明 |
| - | - |
| >0 | 正常返回,详情参见各个技能返回值说明文档 |
| 1 至 9 | 机票,酒店,火车等列表,详情参见各个技能返回值说明文档 |
| 10 至 10000 | 预留字段,由 NLU 接入方后端自行与前端约定并管理 |
| 10000 至 210000 | 其他齐悟自有业务技能返回值,详情参见各个技能返回值说明文档 |
| -1 | 纯语音返回,常见于追问缺失信息或结束对话 |
| -2 | 云端接口返回 Token 为空或失效,需要登陆 |
| -3 | 云端接口返回其他错误 |
| -4 | NLU 技能请求接入方回调接口超时 |
| -5 | NLU 技能请求接入方回调接口失败(retcode非0,500等) |
retcode 字段说明
当出现客户端请求错误,或者服务端错误时,retcode不为零
请求中错误
| retcode | 说明 |
| - | - |
| 1000 | 请求不合法或缺少必要的参数 |
| 1001 | 请求的 GPS 格式不合法 |
| 1002 | 请求体不是合法的 JSON 格式 |
| 1003 | 请求中 UID 为空 |
| 1004 | 请求中 UID 太长或包含非法字符(小于80,且只能包含 a-zA-Z0-9-_.@#) |
| 2000 | 请求 VERIFY 校验失败 |
| 2001 | 请求的聊天记录 UID 与原 UID 不一致(已废弃) |
| 3000 | 请求的业务非法或未上线 |
服务错误或系统崩溃
| retcode | 说明 |
| - | - |
| -1 | 服务端出现未知错误 |
| -2 | 会话初始化超时。可能由于服务繁忙或集群服务能力到达上限 |
| -3 | 单轮对话超时。可能由于集群服务能力到达上限或 CP 接口未及时响应 |
| -4 | 上一轮交互仍在处理中。由于齐悟语义多轮对单个用户仅支持回答后再处理下一句提问。可能由于同一用户说话太频繁,等待处理的问句队列太长导致 |
| -5 | 并发数超出集群处理能力太多。 |
4. 对话接口响应示例
{
"retcode":0,
"ask":"买张明天从深圳去北京的火车票",
"msg":"为您推荐G201次列车",
"data":{
"search_result_type": "TRAIN_LIST_RESULT",
"name":"xxx停车场",
"lng":123.456,
"lat":23.5678,
"voice_words": "为您推荐高二零一次列车",
"task_finished":false,
"confidence":0.9
},
"data_key":"b1c00b1c-802a-4e4c-a6cf-7cb3515c2577",
"service":"TRAIN"
}
<div style="page-break-after: always;"></div>
二、齐悟网关异步推送等待话术到接入方网关接口协议(可选)
| 功能描述 | 齐悟网关推送下单或其他逻辑的等待话术给接入方网关 |
| - | - |
| 接口地址 | 从二、1. 请求HEADER 中 MSG-Push 字段获取的地址 |
| 调用方式 | POST |
| Body类型 | application/json |
1. 消息推送接口请求参数
| Key | Type | Value | 必须 |
| - | - | - | - |
| retcode | Integer | 同上文响应部分 | 是 |
| uid | String | 同上文请求部分,对应问句的用户 uid | 是 |
| verify | String | 同上文请求部分,对应问句的 verify | 是 |
| ask | String | 同上文请求部分,对应用户问句问话内容 | 是 |
| msg | String | 同上文响应部分 | 是 |
| data | JSON | 同上文响应部分 | 是 |
| data_key | String (UUID) | 同上文响应部分 | 否 |
| service | String (Enum) | 同上文响应部分 | 否 |
安全性方面建议
建议回调接收端对推送消息的 verify 进行有效性检查,方便关联回复与问句,并防止第三方攻击。
2. 消息推送接口请求示例
{
"retcode":0,
"uid":"123456789",
"verify":"xxxxxx",
"ask":"买张明天从深圳去北京的火车票",
"msg":"为您推荐G201次列车",
"data":{
"search_result_type": "TRAIN_LIST_RESULT",
......
},
"data_key":"b1c00b1c-802a-4e4c-a6cf-7cb3515c2577",
"service":"TRAIN"
}
3. 消息推送接口响应参数
| Key | Type | Value | 必须 |
| - | - | - | - |
| retcode | Integer | 接口调用返回值(0代表成功,其他为失败) | 是 |
| msg | String | 接口调用提示信息(成功时为success) | 是 |
| timestamp | Integer | 接收到请求时的linux时间戳(System.currentTimeMillis()) | 是 |
4. 消息推送接口响应示例
{
"retcode": 0,
"msg":"success",
"timestamp":1569402111
}
<div style="page-break-after: always;"></div>
三、接入方语音网关对齐悟数据透传接口协议(可选)
| 功能描述 | 接入方语音网关提交前端UI发生的数据变更或数据同步 |
| - | - |
| 接口地址 | /api/data/ |
| 调用方式 | POST |
| Body类型 | application/json |
1. 数据透传接口请求参数
数据透传接口请求 BODY
| Key | Type | Value | 必须 |
| - | - | - | - |
| appkey | String | 业务appkey | 是 |
| timestamp | Integer | 请求发送时的 unix 时间戳 | 是 |
| uid | String | 用于区分用户的用户唯一标识符,会传递给后台 | 是 |
| verify | String | 验证串,规则为 MD5(appsecret+uid+timestamp) | 是 |
| extra_order_info | JSONObject | 透传的数据 | 是 |
extra_order_info 中必须包含的字段
| Key | Type | Value |
| - | - | - |
| skillName | String (Enum) | 业务技能名称 |
| scene | String (Enum) | 当前业务场景 |
| data | JSONObject | 具体数据 |
2. 数据透传接口请求示例
header
Authorization: Bearer XXXXXX
body
{
"appkey":"xiaowu-train-test",
"timestamp":1569402111,
"uid":"123456789",
"verify":"xxxxxx",
"extra_order_info": {
"skillName": "TAKEAWAY",
"scene": "CHOOSE_COURSE",
"data": {
"hello": "world"
}
}
}
3. 数据透传接口响应参数
| Key | Type | Value | 必须 |
| - | - | - | - |
| retcode | Integer | 接口调用返回值(0代表成功,其他为失败) | 是 |
| msg | String | 接口调用提示信息(成功时为success) | 是 |
| data | JSONObject | 给前端返回的结构化数据,无数据时为 {} | 是 |
| data_key | String (UUID) | 结构化数据的 ID,可无视 | 否 |
| service | String (Enum) | 当前场景类型 | 否 |
4. 数据透传接口响应示例
成功时:
{
"retcode":0,
"msg": "success",
"data":{
"search_result_type": "TRAIN_LIST_RESULT",
"a": "b" // 详细数据结构参见各个业务的返回值说明文档
},
"data_key":"b1c00b1c-802a-4e4c-a6cf-7cb3515c2577",
"service":"TRAIN"
}
失败时:
{
"retcode":500,
"msg": "失败原因",
"data": {},
// 依照和网关的约定,流程外异常时 data 返回空 Object
// 流程内错误会有独立的search_result_type,参见各个业务的返回值说明文档
"data_key":"",
"service":"TRAIN"
}
5. 数据透传接口-外卖菜品选择 extra_order_info 请求示例
{
"skillName": "TAKEAWAY",
"scene": "CHOOSE_COURSE",
"data": {
"courses": [
{
"skuId": "2179542419",
"quantity": 10,
"selectedAttrIds": ["1833375638", "1833375644"]
}
]
}
}
6. 数据透传接口-美食请求门店基本信息人数,房型 extra_order_info 请求示例
{
"skillName":"FOOD",
"scene":"FOOD_BASIC_INFO",
"data":{
"sid":"......"
}
}