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