标准请求
摘要
在用户通过语音输入后,DuerOS会对语音请求进行识别和理解,并将理解结果发送给技能。以下定义了技能的格式。标准请求包括三类,分别是LaunchRequest、IntentRequest和SessionEndedRequest。
LaunchRequest
“打开技能”的请求会被解析为LaunchRequest。例如“小度小度,打开闹钟”,将会发送请求给名称为“闹钟”的技能。
消息样例
{
"type": "LaunchRequest",
"requestId": "{{STRING}}",
"timestamp": "{{STRING}}"
}
参数说明
- type
- 请求类型,即字符串"LaunchRequest"。
- requestId
- 标识本次请求的唯一ID。如果有问题反馈,可以附带提供给DuerOS开发人员。
- timestamp
- 请求时间戳,单位是秒,是一个全部是数字的字符串。
示例
{
"version": "2.0",
"session": {
"new": true,
"sessionId": "b393ef84-e77c-425f-964e-e62ee3c7b338",
"attributes": {}
},
"context": {
"System": {
"application": {
"applicationId": "personal_income_tax"
}
}
},
"request": {
"type": "LaunchRequest",
"requestId": "d407e869-55f7-4681-b49f-8a41bc196da0",
"timestamp": "1499790258"
}
}
IntentRequest
以下两种情况,请求会被DuerOS转换为IntentRequest。
- 技能还没被调起,用户语音请求“打开技能,帮我查询天气” 此请求会被解释为查询天气的IntentRequest,session.new的值为true。
- 技能已经被调起,用户与技能在多轮对话中,用户请求 “帮我查询天气” 此请求会被解释为查询天气的IntentRequest,session.new的值为false。
消息样例
{
"type": "IntentRequest",
"requestId": "{{STRING}}",
"timestamp": "{{STRING}}",
"query": {
"type": "{{STRING}}",
"original": "{{STRING}}"
},
"dialogState": "{{STRING}}",
"intents": [{
"name": "{{STRING}}",
"slots": {
"{{STRING}}": {
"name": "{{STRING}}",
"value": "{{STRING}}",
"values": ["{{STRING}}"],
"confirmationStatus": "{{STRING}}"
}
},
"confirmationStatus": "{{STRING}}"
}],
}
参数说明
- type
- 请求类型,即字符串"IntentRequest"。
- requestId
- 标识本次请求的唯一ID。如果有问题反馈,可以附带提供给DuerOS开发人员。
- timestamp
- 请求时间戳,单位是秒,是一个全部是数字的字符串。
- query
- 本次请求信息。
- query.type
- 请求类型,取值如下:
- TEXT
- 本次语音请求经过DuerOS理解后是一个文本请求。
- TEXT
- 请求类型,取值如下:
- query.original
- 本次语音请求经过DuerOS理解后生成的文本。
- dialogState
- 当前会话状态,取值如下:
- STARTED
- 开始。
- IN_PROGRESS
- 进行中。
- COMPLETED
- 本轮对话的意图已经收集和确认了所有必要槽位,同时如果意图有需求也已经一并确认了。
- STARTED
- 当前会话状态,取值如下:
- intents
- 本次语音请求被DuerOS解析后生成的意图。DuerOS可能解析出一个或多个意图,这些意图按照概率可能性由大到小排序。
- intents.name
- 意图名称。通过技能开放平台定义的意图,或来自系统意图。
- intents.slots
- 意图中的槽位。slot结构是key-value结构,key为slot名字,value为slot槽位信息。
- intents.confirmationStatus
- 意图确认状态:当确认状态为CONFIRMED或DENIED时,dialogState设置为COMPLETED。意图状态取值如下:
- NONE: 未确认
- CONFIRMED: 确认
- DENIED: 否认
- 意图确认状态:当确认状态为CONFIRMED或DENIED时,dialogState设置为COMPLETED。意图状态取值如下:
- intents.slots.name
- 槽位名称。
- intents.slots.value
- 槽位值。表示解析出的槽位值,如果解析出有多个,这里是第一个值。
- intents.slots.values
- 槽位值,表示一个槽位中解析出来的多个值。例如我想听张学友、刘德华和黎明的歌。此时values的size是3,值分别是张学友、刘德华和黎明。
- intents.slots.confirmationStatus
- 槽位确认状态,取值如下:
- NONE: 未确认
- CONFIRMED: 确认
- DENIED: 否认
- 槽位确认状态,取值如下:
示例
{
"version": "2.0",
"session": {
"new": false,
"sessionId": "b393ef84-e77c-425f-964e-e62ee3c7b338",
"attributes": {}
},
"context": {
"System": {
"application": {
"applicationId": "personal_income_tax"
}
}
},
"request": {
"type": "IntentRequest",
"requestId": "1927e048-f8bf-4201-9c97-cf2fba5f992a",
"timestamp": "1499169543",
"query": {
"type": "TEXT",
"original": "帮我查一下个税"
},
"intents": [
{
"name": "personal_income_tax.inquiry",
"confirmationStatus": "NONE",
"slots": {
"compute_type": {
"name": "compute_type",
"values": ["个税"],
"confirmationStatus": "NONE"
},
"inquiry": {
"name": "inquiry",
"values": ["查一下"],
"confirmationStatus": "NONE"
}
}
}
]
}
}
SessionEndedRequest
如果本次session不是技能主动结束的(也就是技能被动结束的,被动结束原因见reason字段),那么DuerOS会向技能发送SessionEndedRequest。
消息样例
{
"type": "SessionEndedRequest",
"requestId": "{{STRING}}",
"timestamp": "{{STRING}}",
"reason": "{{STRING}}",
"error": {
"type": "{{STRING}}",
"message": "{{STRING}}"
}
}
参数说明
- type
- 请求类型,即字符串"SessionEndedRequest"。
- requestId
- 标识本次请求的唯一ID。如果有问题反馈,可以附带提供给DuerOS开发人员。
- timestamp
- 请求时间戳,单位是秒,是一个全部是数字的字符串。
- reason
- session被动结束的原因,一共有三种原因:
- USER_INITIATED:用户直接说“退出”。
- EXCEEDED_MAX_REPROMPTS:用户无输入或多次输入无法理解。
- ERROR:系统错误,详细信息见error字段。
- session被动结束的原因,一共有三种原因:
- error
- type:错误类型,可能的值如下:
- INVALID_RESPONSE: 技能返回了无效的响应,例如以下情况:
- 技能响应数据量超过24KB。
- 技能在request的dialogState为COMPLETED时仍然发送Dialog.Delegate指令等。
- DEVICE_COMMUNICATION_ERROR:DuerOS与端通信异常。
- INTERNAL_ERROR:其他DuerOS系统错误。
- INVALID_RESPONSE: 技能返回了无效的响应,例如以下情况:
- message: 错误信息,用于描述具体错误的可打印字符串。
- type:错误类型,可能的值如下:
示例
{
"version": "2.0",
"session": {
"new": false,
"sessionId": "1927e048-f8bf-4201-9c97-cf2fba5f992a",
"attributes": {}
},
"context": {
"System": {
"application": {
"applicationId":"personal_income_tax"
}
}
},
"request": {
"type": "SessionEndedRequest",
"requestId": "33c78c8f-22db-4d6a-bfd5-075d264377b7",
"timestamp": "1501127440",
"reason": "USER_INITIATED"
}
}