端云交互协议
这套协议是客户端和ABC Robot云端的通信协议,客户端借助此协议,实现端云交互,完成请求发送和返回值处理。我们将端云交互抽象成事件、指令和端状态的形式,客户端的请求由事件和端状态组合而成,云端处理客户端传输的事件和端状态,将处理结果以指令集的形式下发给机器人,客户端执行收到的指令集,完成交互逻辑。
ClientContext(端状态)
ClientContext(端状态)反映的是客户端发起请求时的状态,客户端把端状态告知云端,云端可以根据设备端当前状态做出不同的逻辑决策,从而下发不同的指令集。例如,当前设备端正在语音播报,客户端收音并发起请求时将语音播报状态带上,这样云端就可以智能选择是否要求客户端打断当前语音播报。
示例
{
"clientContextV2":{
"TTS_PLAYING": "true",
"APP_VERSION": "2",
"WAKEUP_TYPE": "easyTalk|wakeupWord|touchBody|touchScreen",
"MANUAL_REPLY": "true|false",
"DIRECTION_INVALID": "0",
"NAV_RUNNING":"true|false",
"GUIDE_RUNNING":"true|false",
"CHAT_IN_GUIDING":"true|false",
"KNOW_ME_RUNNING":"true|false",
},
"event": {
...
}
}
参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
TTS_PLAYING | string | 否 | 客户端语音播报状态,取值为 "true" 和 "false",表示是否在语音播报 |
APP_VERSION | string | 否 | 客户端Base App版本,目前取值为 "2" |
WAKEUP_TYPE | string | 否 | 唤醒方式,取值为easyTalk、wakeupWord、touchBody、touchScreen |
MANUAL_REPLY | string | 否 | 人工回复是否开启, 取值为 "true" 和 "false" |
DIRECTION_INVALID | string | 否 | 语音角度,0表示角度内,其它表示角度外 |
NAV_RUNNING | string | 否 | 是否处于导航状态,取值为 "true" 和 "false" |
GUIDE_RUNNING | string | 否 | 是否处于导览状态,取值为 "true" 和 "false" |
CHAT_IN_GUIDING | string | 否 | 导览状态下是否支持聊天,取值为 "true" 和 "false"。当用户通过“开始导览”等话术触发导览,请注意对话接口Playload中的chatInGuiding字段的值。在导览过程中,将chatInGuiding字段的值进行回传即可;如果CHAT_IN_GUIDING没有回chatInGuiding的值,那么服务端将以客户端传值为准进行业务逻辑判断 |
KNOW_ME_RUNNING | string | 否 | 是否处于熟人识别状态,取值为 "true" 和 "false"。在项目支持熟人识别的情况下,用户通过“你认识我吗?”等话术触发熟人识别流程,在熟人识别过程中,需要将该字段的值设置为"true",其他情况下可以不传该字段的值或传"false" |
Event(事件)
我们把客户端和云端交互的请求数据组装成Event(事件)发给云端,常见的事件例如:人脸识别事件等。
TextInput事件
TextInput事件是以文本的方式请求ABC Robot对话接口,这个过程不包含ASR。
示例
{
"header": {
"namespace": "baidu.abcrobot.event.text_input",
"name": "TextInput"
},
"payload": {
"query": "今天天气怎么样"
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
query | string | 是 | 请求文本 |
FaceRecognition事件
人脸识别事件,整个人脸识别请求由两部分组成:人脸识别事件和人脸图片。
{
"header": {
"namespace": "baidu.abcrobot.event.face_recognition",
"name": "FaceRecognition"
},
"payload": {
"group":"face group id"
}
}
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
group | string | 否 | 人脸库ID。若不填写,则云端会默认使用default人脸库进行人脸识别。 |
二进制图片附件
--this-is-a-boundary
Content-Disposition: form-data; name="image"; filename="image"
Content-Type: application/octet-stream
{{binary image attachment}}
--this-is-a-boundary
FaceComparison事件
人脸1:1比对事件,整个人脸1:1比对请求由两部分组成:人脸1:1比对事件和两张人脸图片。
{
"header": {
"namespace": "baidu.abcrobot.event.face_recognition",
"name": "FaceComparison"
},
"payload": {
"imageTypes":[
1,
2
]
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
imageTypes | list of int | 是 | 图片类型值,取值范围详见下面说明。 |
imageTypes参数说明
图片类型值 | 类型 | 是否必需 |
---|---|---|
1 | 生活照 | 通常为手机、相机拍摄的人像图片、或从网络获取的人像图片等 |
2 | 身份证芯片照 | 二代身份证内置芯片中的人像照片 |
3 | 带水印证件照 | 一般为带水印的小图,如公安网小图 |
4 | 证件照片 | 如拍摄的身份证、工卡、护照、学生证等证件图片,注:需要确保人脸部分不可太小,通常为100px*100px |
二进制图片附件
--this-is-a-boundary
Content-Disposition: form-data; name="image"; filename="image"
Content-Type: application/octet-stream
{{binary image 1 attachment}}
--this-is-a-boundary
--this-is-a-boundary
Content-Disposition: form-data; name="image"; filename="image"
Content-Type: application/octet-stream
{{binary image 2 attachment}}
--this-is-a-boundary
FaceImageInput事件
人脸图片上传事件,人脸图片上传请求由两部分组成:人脸图片上传事件和人脸图片。
{
"header": {
"namespace": "baidu.abcrobot.event.image_input",
"name": "FaceImageInput"
},
"payload": {}
}
二进制图片附件
--this-is-a-boundary
Content-Disposition: form-data; name="image"; filename="image"
Content-Type: application/octet-stream
{{binary image attachment}}
--this-is-a-boundary
RobotConfig事件
客户端拉取配置事件,云端收到这个事件后,会将云端配置下发给客户端。
{
"header": {
"namespace": "baidu.abcrobot.event.system",
"name": "RobotConfig"
},
"payload": {}
}
Directive(指令)
云端把下发给客户端的操作封装成指令的格式,客户端收到指令后,依据指令的namespace、name和payload做出相应的响应。比如,Text指令,客户端收到这个指令后显示指令里的文本内容。
header参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
namesace | string | 是 | 指令的命名空间 |
name | string | 是 | 指令的名字 |
interactionId | string | 是 | 客户端生成的,本次请求的交互ID |
messageId | string | 是 | 云端生成的消息ID |
常规指令
Speak指令
语音播报指令,客户端将指令的文本内容转换成语音并播报。
{
"header": {
"namespace": "baidu.abcrobot.directive.voice_output",
"name": "Speak",
"interactionId": "",
"messageId": ""
},
"payload": {
"content": "今天晴,天气不错!"
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
content | string | 是 | 用于语音播报的文本内容 |
Text指令
文本显示指令,一般用于显示语音播报对应的文本,长文本的显示请使用卡片显示中的TextCard指令。
{
"header": {
"namespace": "baidu.abcrobot.directive.text_output",
"name": "Text",
"interactionId": "",
"messageId": ""
},
"payload": {
"content": "为您找到长城的介绍"
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
content | string | 是 | 用于显示的文本内容 |
Hints指令
提示信息指令,用于引导用户进行下一轮交互。如用户问“天气怎么样”,云端在返回天气答案的同时,会下发Hints指令,如“明天呢”、“天津呢”,引导用户进行多轮对话。
{
"header": {
"namespace": "baidu.abcrobot.directive.hint",
"name": "Hints",
"interactionId": "",
"messageId": ""
},
"payload": {
"hints": [
"我要办理值机"
]
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
hints | list of string | 是 | 提示信息列表 |
Text指令和Hints指令排版示例如下,其中“为您找到长城的介绍”为Text指令,“我要办理值机”为Hints指令。
卡片显示
下面介绍的指令都是涉及客户端卡片显示的,客户端收到这些指令后,根据不同的类型展示不同的卡片。卡片显示指令统一使用RenderCard指令header,通过不同的payload来区分不同的卡片。
{
"header": {
"namespace": "baidu.abcrobot.directive.screen",
"name": "RenderCard",
"interactionId": "",
"messageId": ""
},
"payload": {
{{不同的payload}}
}
}
TextCard类型卡片
文本卡片。参考排版方式:标题、内容上下排列,左对齐。
{
"type": "TextCard",
"title": "长城",
"content": "${{长城|link0}}(The Great Wall),又称万里长城...",
"url": "https://baike.baidu.com/item/%E9%95%BF%E5%9F%8E/14251",
"links": {
"link0": {
"type": "renderHtml",
"url": "http://robot.baidu.com/"
}
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
type | string | 是 | 模板类型,固定取值为TextCard |
title | string | 否 | 标题 |
content | string | 是 | 内容 |
url | string | 否 | 点击卡片的跳转 |
links | json | 否 | 详见links说明 |
ImageCard类型卡片
图片卡片,包含图片和对应的文本信息。参考排版方式:图片在左侧,标题、内容上下排列,三者左对齐。
{
"type": "ImageCard",
"title": "长城",
"image": "https://timgsa.baidu.com/timg?20100603_96286_1.jpg",
"content": "Great Wall)又称${{万里长城|link0}},是中国古代的军事防御工程,是...",
"url": "https://baike.baidu.com/item/长城/14251",
"links": {
"link0": {
"type": "renderHtml",
"url": "http://robot.baidu.com/"
}
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
type | string | 是 | 模板类型,固定取值为ImageCard |
title | string | 否 | 标题 |
content | string | 是 | 内容 |
image | string | 是 | 图片 |
url | string | 否 | 点击卡片的跳转 |
links | json | 否 | 详见links说明 |
ListCard类型卡片
列表卡片格式一,参考排版方式:列表包行多项,上下依次排列。每一项的排列方式和ImageCard的相同。
{
"type":"ListCard",
"links":{
"link0":{
"speak":"播报话术",
"type":"sendTextEvent",
"query":"防御工程"
},
"link1":{
"speak":"播报话术",
"type":"sendTextEvent",
"query":"防御工程"
}
}
"title": "",
"list":[
{
"title": "柳宗元",
"content":"${{防御工程|link0}}",
"image": "https://ss2.baidu.com/6ONYsjip0QIZ8tyhnq/it/u=2541339440,4048181160&fm=58",
"url": ""
},
{
"title": "曾巩",
"content":"${{防御工程|link1}}",
"image": "https://ss2.baidu.com/6ONYsjip0QIZ8tyhnq/it/u=2541339440,4048181160&fm=58",
"url": ""
},
...
]
}
列表卡片格式二,参考排版方式:卡片主标题和列表项上下依次排列,左对齐。
{
"type":"ListCard",
"links":{
"link0":{
"speak":"播报话术",
"type":"sendTextEvent",
"query":"里程查询"
},
"link1":{
"speak":"播报话术",
"type":"sendTextEvent",
"query":"里程补登"
},
"link1":{
"speak":"播报话术",
"type":"sendTextEvent",
"query":"里程兑换"
}
}
"title": "请选择您所需要办理的业务类型",
"list":[
{
"content":"${{1.里程查询|link0}}",
},
{
"content":"${{2.里程补登|link1}}",
},
{
"content":"${{3.里程兑换|link2}}",
}
]
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
type | string | 是 | 模板类型,固定取值为ListCard |
title | string | 否 | 标题 |
list | json | array | 是 |
links | json | 否 | 详见links说明 |
列表项
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
title | string | 否 | 标题 |
content | string | 是 | 内容 |
image | string | 否 | 图片 |
url | string | 否 | 点击列表项的跳转 |
SimpleImageListCard类型卡片
简单图片列表卡片,为多个图片的集合,在仅展示图片的场景下,建议用此卡片。参考排版方式:这种类型只包含图片列表,图片排列依据屏幕宽度换行排列。
{
"type": "SimpleImageListCard",
"list": [
{
"image": "image_src",
"url": "http://robot.baidu.com/"
},
{
"image": "image_src",
"url": "http://robot.baidu.com/"
}
]
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
type | string | 是 | 模板类型,固定取值为SimpleImageListCard |
list | json | array | 是 |
列表项
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
image | string | 否 | 图片 |
url | string | 否 | 点击列表项的跳转 |
InputCard类型卡片
输入卡片,参考排版格式:标题、内容、输入说明列表项上下依次排列,左对齐。
{
"type": "InputCard",
"content" : "请您输入需查询的完整的城市对信息,例如广州飞北京',
"inputList" : [
"出发城市:",
"到达城市:"
]
"queryFormat": "${{input0}}飞${{input1}}"
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
type | string | 是 | 模板类型,固定取值为InputCard |
title | string | 否 | 标题 |
content | string | 是 | 内容 |
inputList | string array | 是 | 输入列表说明,inputList的数量,对应输入框数量。 |
queryFormat | string | 是 | 输入内容编排格式,对应格式为 ${{input0}} ${{input1}},input的序号对应inputList数组的index。 |
HintsCard类型卡片
信息提示卡片,list中为提示内容列表信息。
{
"type": "HintsCard",
"content" : "小度能带你到这些地方',
"list": [
{
"content": "带我去第七展厅"
},
{
"content": "带我去7号楼"
},
{
"content": "带我去卫生间"
},
{
"content": "带我去电梯口"
},
{
"content": "带我去净化器"
}
]
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
type | string | 是 | 模板类型,固定取值为HintsCard |
content | string | 否 | 标题 |
list | string | 是 | 内容 |
复合类型卡片
复合类型卡片支持更复杂的卡片点击、卡片间跳转等操作,目前我们为用户航班信息查询场景,提供里程查询、消费查询等卡片间的跳转。如果开发者有接入需求,请提交工单联系我们。
links字段说明
文本点击操作,文本整段或部分显示可点击。自定义协议:${{长城|link0}},link0为links json里的key。
字段名 | 类型 | json key | json value类型 | json value具体内容 | 说明 |
---|---|---|---|---|---|
links | json | ||||
link0 | json | {"type": "renderHtml","url": "http://xxxx"} | renderHtml点击获取网页。link0为点击文本对应的ID,实际使用时取值不定。type和url都是必须的。 | ||
link1 | json | {"type": "sendTextEvent","speak": "播报内容","query": "具体query"} | sendTextEvent点击发起event请求。speak为点击时的播报。query为event发起的文本query。 | ||
link2 | json | {"type": "renderCard","speak": "播报内容","cardIndex": 1} | renderCard点击跳转到本地卡片。speak为点击时的播报。cardIndex为卡片的ID。 | ||
... |
音量控制
AdjustVolume指令
调节音量指令,客户端根据指令内的字段调节本地系统音量。
{
"header": {
"namespace": "baidu.abcrobot.directive.speaker_controller",
"name": "AdjustVolume",
"interactionId": "",
"messageId": ""
},
"payload": {
"volume_control": "down",
"volume_value": "5.0"
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
volume_control | string | 是 | 声音调高或调低,取值为up和down。 |
volume_value | string | 否 | 声音调高或调低的数值,例如:"5.0"。当此字段为空时(如用户说“声音大一点”,没有包含具体的音量值),客户端可按照固定的音量值进行调节。 |
SetMute指令
静音指令,客户端根据指令设置打开或取消静音。
{
"header": {
"namespace": "baidu.abcrobot.directive.speaker_controller",
"name": "SetMute",
"interactionId": "",
"messageId": ""
},
"payload": {
"switch":"on"
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
switch | string | 是 | 静音,取值为on和off,on表示打开静音,off表示取消静音。 |
运动控制
下面介绍的都是涉及客户端运动控制的指令,客户端收到这些指令后,可以控制客户端做出相应的动作。
Walk指令
行走指令,控制设备行走一段距离。
{
"header": {
"namespace": "baidu.abcrobot.directive.action",
"name": "Walk",
"interactionId": "",
"messageId": ""
},
"payload": {
"direction": "forward",
"distance": "5.0",
"distance_unit": "米"
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
direction | string | 是 | 移动的方向,取值为forward、backward、left、right。 |
distance | string | 否 | 移动的距离,例如:"5.0"。 |
distance_unit | string | 否 | 移动距离的单位,例如:"米"。 |
Turn指令
转动指令,控制设备转动一定角度。
{
"header": {
"namespace": "baidu.abcrobot.directive.action",
"name": "Turn",
"interactionId": "",
"messageId": ""
},
"payload": {
"direction": "forward",
"angle": "90.0",
"angle_unit": "度"
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
direction | string | 是 | 转动的方向,取值为forward、backward、left、right。 |
angle | string | 否 | 转动的角度,例如:"90.0"。 |
angle_unit | string | 否 | 移动距离的单位,例如:"度"。 |
RaiseHands指令
抬手指令,设备可以抬起手臂。
{
"header": {
"namespace": "baidu.abcrobot.directive.action",
"name": "RaiseHands",
"interactionId": "",
"messageId": ""
},
"payload": {
"hands": "hand"
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
hands | string | 是 | 手臂选择,取值为hand、left_hand、right_hand。 |
ShakeHands指令
握手指令,设备可以做出握手动作。例如当用户说“握个手”时,云端会下发该指令。
{
"header": {
"namespace": "baidu.abcrobot.directive.action",
"name": "ShakeHands",
"interactionId": "",
"messageId": ""
},
"payload": {}
}
Hug指令
拥抱指令,设备可以做出拥抱动作。
{
"header": {
"namespace": "baidu.abcrobot.directive.action",
"name": "Hug"
},
"payload": {}
}
TwistHead指令
摇头指令,设备可以做出摇头动作。
{
"header": {
"namespace": "baidu.abcrobot.directive.action",
"name": "TwistHead"
},
"payload": {}
}
TurnHeadLeft指令
向左看指令,客户端可以做出向左看动作。
{
"header": {
"namespace": "baidu.abcrobot.directive.action",
"name": "TurnHeadLeft",
"interactionId": "",
"messageId": ""
},
"payload": {}
}
TurnHeadRight指令
向右看指令,客户端可以做出向右看动作。
{
"header": {
"namespace": "baidu.abcrobot.directive.action",
"name": "TurnHeadRight",
"interactionId": "",
"messageId": ""
},
"payload": {}
}
Stop指令
停止运动指令,设备收到该指令后停止当前动作。
{
"header": {
"namespace": "baidu.abcrobot.directive.action",
"name": "Stop"
},
"payload": {}
}
Wave指令
打招呼指令。
{
"header": {
"namespace": "baidu.abcrobot.directive.action",
"name": "Wave",
"interactionId": "",
"messageId": ""
},
"payload": {}
}
DoAnAction指令
动一下指令。
{
"header": {
"namespace": "baidu.abcrobot.directive.action",
"name": "DoAnAction",
"interactionId": "",
"messageId": ""
},
"payload": {}
}
Charge指令
充电指令,控制设备开始充电或停止充电。例如,当用户说“回去充电”时,可控制机器人进行自主充电。
{
"header": {
"namespace": "baidu.abcrobot.directive.action",
"name": "Charge",
"interactionId": "",
"messageId": ""
},
"payload": {
"switch": "on"
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
switch | string | 是 | 充电,取值为on和off,on表示开始充电, off表示停止充电。 |
巡航指令
巡航指令,控制设备开始巡航或停止巡航。例如,当用户说“开始巡航”时,可控制机器人按编排的路线进行巡航。
{
"header": {
"namespace": "baidu.abcrobot.directive.action",
"name": "Cruise",
"interactionId": "",
"messageId": ""
},
"payload": {
"switch": "on"
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
switch | string | 是 | 巡航,取值为on和off,on表示开始巡航, off表示停止巡航。 |
导航指令
当用户说“带我去XXX”时,可控制机器人导航至XXX地点。
{
"header": {
"namespace": "baidu.airport.directive.navigation",
"name": "Navigate",
"interactionId": "",
"messageId": ""
},
"payload": {
"target": "卫生间"
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
target | string | 是 | 用户要导航的地点,要求该地点在机器人地图上存在 |
导览指令
开始导览指令
当用户说“开始导览”时,可控制机器人按编排的路线进行导览讲解。
{
"header": {
"namespace": "baidu.standard.directive.guide",
"name": "StartGuideFlow",
"interactionId": "",
"messageId": ""
},
"payload": {
"routeName":"导览路线1",
"chatInGuiding" : true
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
flowName | string | 是 | 导览路线名称 |
thumbnailsUrl | string | 是 | 导览路线缩略图 |
chatInGuiding | string | 是 | 在该路线的导览讲解过程中是否支持聊天 |
结束导览指令
当用户说“结束导览”时,可控制机器人结束导览讲解。
{
"header": {
"namespace": "baidu.standard.directive.guide",
"name": "EndGuideFlow",
"interactionId": "",
"messageId": ""
},
"payload": {
}
}
继续导览指令
当机器人在导览过程中被打断后处于暂停导览状态的情况下,用户说“继续导览”时,可控制机器人继续暂停前的导览讲解。
{
"header": {
"namespace": "baidu.standard.directive.guide",
"name": "ProceedCurrentStep",
"interactionId": "",
"messageId": ""
},
"payload": {
}
}
下一个导览点
当机器人在某一个导览点进行讲解时,可以通过“下一个讲解点”话术,控制机器人结束当前点的讲解,直接到下一个导览点进行讲解。
{
"header": {
"namespace": "baidu.standard.directive.guide",
"name": "ProceedNextStep",
"interactionId": "",
"messageId": ""
},
"payload": {
}
}
人脸指令
FaceRecognitionResult指令
人脸识别结果指令,云端下发人脸识别结果给客户端。
{
"header": {
"namespace": "baidu.abcrobot.directive.face_recognition",
"name": "FaceRecognitionResult",
"interactionId": "",
"messageId": ""
},
"payload": {
"name": "name",
"sex": "MALE",
"age": 30,,
"uid": "N1088",
"faceliveness": true,
"type": "VIP"
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
name | string | 否 | 人脸的名字 |
sex | string | 否 | 人脸的性别,取值位MALE和FEMALE。 |
age | int | 否 | 人脸的年龄 |
uid | string | 否 | 人脸ID |
faceliveness | boolean | 是 | 检测是否是活体 |
type | string | 是 | 人脸类型,取值为VIP和UNKNOWN。 |
FaceComparisonResult指令
人脸比对结果指令,云端下发人脸比对结果给客户端。
{
"header": {
"namespace": "baidu.abcrobot.directive.face_recognition",
"name": "FaceComparisonResult",
"interactionId": "",
"messageId": ""
},
"payload": {
"score": 89.9
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
score | float | 是 | 比对分数,80分以上可以认为是同一个人 |
GetFaceImage指令
上传人脸图片指令,客户端收到这个指令后,上传人脸图片到云端,与FaceImageInput事件配合使用。
{
"header": {
"namespace": "baidu.abcrobot.directive.image_input",
"name": "GetFaceImage",
"interactionId": "",
"messageId": ""
},
"payload": {}
}
系统指令
SyncRobotConfig指令
云端配置下发指令,由RobotConfig事件触发。
{
"header": {
"namespace": "baidu.abcrobot.directive.system",
"name": "SyncRobotConfig",
"interactionId": "",
"messageId": ""
},
"payload": {
"welcomeSpeeches": [
"您好,很高兴为您服务",
"${name}您好,很高兴为您服务"
],
"faceWakeUpType": 1,
"sensitiveWords":[
"abc",
"edf"
]
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
welcomeSpeeches | list of string | 是 | 欢迎语列表 |
faceWakeUpType | int | 是 | 人脸唤醒类型,1在线,2代表离线。 |
sensitiveWords | list of string | 否 | 敏感词列表 |
InquireEnergy指令
电量查询指令,客户端收到这个指令后,显示客户端电量。
{
"header": {
"namespace": "baidu.abcrobot.directive.instruction",
"name": "InquireEnergy",
"interactionId": "",
"messageId": ""
},
"payload": {}
}
ShowFeatures指令
功能页展示指令,客户端收到这个指令后,展示功能介绍页。
{
"header": {
"namespace": "baidu.abcrobot.directive.instruction",
"name": "ShowFeatures",
"interactionId": "",
"messageId": ""
},
"payload": {}
}
媒体资源控制指令
媒体播放指令
用于播放媒体资源,如唱一首没有共产党就没有新中国。
{
"header": {
"namespace": "baidu.abcrobot.directive.media_control",
"name": "PlayMedia",
"interactionId": "",
"messageId": ""
},
"payload": {
"name":"没有共产党就没有新中国",
"type":"SING_SONG"
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
type | string | 是 | 播放媒体类型,目前只支持“SING_SONG”类型 |
name | string | 是 | 播放内容名称 |
媒体播放控制指令
用于媒体播放控制,如暂停,继续,下一个,换一个等
{
"header": {
"namespace": "baidu.abcrobot.directive.media_control",
"name": "PlayControl",
"interactionId": "",
"messageId": ""
},
"payload": {
"action":"play_next"
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
action | string | 是 | 播放控制动作,可选值:play_pause(暂停), play_continue(继续), play_next(下一个), play_switch(切换) |
页面切换控制指令
用于页面切换控制,比如返回主页,返回上一页,下一页等
{
"header": {
"namespace": "baidu.abcrobot.directive.media_control",
"name": "PageControl",
"interactionId": "",
"messageId": ""
},
"payload": {
"pageName":"MAIN_PAGE"
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
pageName | string | 是 | 页面名称,可选值:MAIN_PAGE(返回主页),PREVIOUS_PAGE(返回父级页面),LAST_PAGE(上一页),NEXT_PAGE(下一页) |
按索引选择指令
用于在媒体列表中,按索引选择要操作的媒体项。如第一个/页,倒数第一个/页等,
{
"header": {
"namespace": "baidu.abcrobot.directive.media_control",
"name": "SelectByIndex",
"interactionId": "",
"messageId": ""
},
"payload": {
"order": "POS",
"index": 1,
"unit": "page"
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
order | string | 是 | 选择顺序,如,第一个、倒数第一个等。可选值:POS(顺序)、NEG(倒序) |
index | int | 是 | 选择索引,整数,可选值:1、2、3... |
unit | string | 是 | 索引单位,如第一页、第一个等。可选值:page(页)、pcs(个) |
其它指令
NLUResult指令
语义理解结果指令,开发者使用自定义技能时,可以在技能回复中配置成直接获取NLU结果,并通过这个指令下发。
{
"header": {
"namespace": "baidu.abcrobot.directive.nlu",
"name": "NLUResult",
"interactionId": "",
"messageId": ""
},
"payload": {
"skill": {
"name": "CUSTOMER"
},
"intent": {
"name": "RECHARGE"
},
"slots": [
{
"name": "cellphone",
"originalWord": "13810102020",
"normalizedWord": "13810102020"
}
]
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
skill.name | string | 是 | 技能名称 |
intent.name | string | 是 | 意图名称 |
slots | json array | 否 | 槽位列表 |
slots[i].name | string | 是 | 槽位名称 |
slots[i].originalWord | string | 是 | 槽位值 |
slots[i].normalizedWord | string | 是 | 归一化槽位值 |
CustomData指令
自定义参数下发指令,通常为控制台配置的KV集合,例如问答库中的自定义参数。
{
"header": {
"namespace": "baidu.abcrobot.directive.custom",
"name": "CustomData",
"interactionId": "",
"messageId": ""
},
"payload": {
"data": {
"key": "value",
...
}
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
data | json | 是 | 自定义参数json结构,json里的取值是自定义的key和value,目前问答库支持自定义参数下发。 |
技能分发描述指令
用于表明用户问题命中技能和答案来源技能。
{
"header": {
"namespace": "baidu.abcrobot.directive.skill_dispatch",
"name": "SkillInfo",
"interactionId": "",
"messageId": ""
},
"payload": {
"type": "Navigation",
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
type | String | 是 | 问题命中技能信息,目前只支持Navigation,在没有明确下发导航指令,但用户问题命中导航意图时下发,用于机器人端打开导航相关页面的判断条件 |
End指令
再见指令,客户端收到这个指令后,客户端重置和云端交互的session。
{
"header": {
"namespace": "baidu.abcrobot.directive.session",
"name": "End",
"interactionId": "",
"messageId": ""
},
"payload": {}
}
Error指令
错误指令,客户端请求云端返回此指令,表示请求失败,客户端根据相应的错误码做错误处理。
{
"header": {
"namespace": "baidu.abcrobot.directive.error",
"name": "Error",
"interactionId": "",
"messageId": ""
},
"payload": {
"code": 50300,
"message": "……"
}
}
payload参数说明
字段名 | 类型 | 是否必需 | 说明 |
---|---|---|---|
code | int | 是 | 错误码 |
message | string | 是 | 错误描述 |
错误码
错误码 | 描述 | 类别 | 备注 |
---|---|---|---|
40001 | 客户端http请求缺少参数,或者参数错误 | 请求数据数据问题(4xxxx) | 详细信息见message字段 |
40002 | 没有对应的处理器处理该event | 请求数据数据问题(4xxxx) | 详细信息见message字段 |
50100 | 协议模块通用错误 | 协议模块问题(501xx) | 详细信息见message字段 |
50200 | 对话模块通用错误 | 下游对话服务问题(502xx) | 详细信息见message字段 |
50300 | 人脸模块通用错误 | 下游人脸服务问题(503xx) | 详细信息见message字段 |
50000 | 其他通用错误 | 通用错误 | 详细信息见message字段 |