口语评测功能说明文档
文档状态
| 文件标识: | TuringOS-Oral-v1.0 |
|---|---|
| 系统版本: | OpenSocket |
| 作 者: | 段亚骏 |
| 完成日期: | 2021年4月23日 |
文档修订记录
| 文档版本号 | 修订日期 | 修订原因 | 修订人 |
|---|---|---|---|
| V1.0 | 2021.4.23 | 创建文档 | 段亚骏 |
| v1.1 | 2024.1.5 | 修改文档中不对参数 | 刘秀丽 |
1.域名地址
正式环境:ws://ws-api.turingapi.com/api/v2
2.加密说明
为保证接口的安全性和稳定性,需要对接口数据进行加密;
- 加密必须包含的信息:APIkey,Secret(需通过图灵Biz平台 - 机器人信息页获取);
- 需针对请求参数中的data字段,进行AES加密处理,具体加密方式如下:
| 参数 | 说明 | 备注 |
|---|---|---|
| 加密模式 | CBC | - |
| 填充 | PKCS5Padding | - |
| 数据块 | 128位(密钥为16位) | - |
| 密码 | secretKey | Apikey+Secret+时间戳(毫秒,与入参保持一致) 进行Md5加密,取16位小写值 |
| 偏移量 | secretKey | Apikey+Secret+时间戳(毫秒,与入参保持一致) 进行Md5加密,取16位小写值 |
| 输出 | base64编码 | - |
| 字符集 | utf-8 | - |
3.请求示例
最终请求参数
{
"key": "ed474dae62*********67050faea1788",
"timestamp": "150******7793",
"data": "加密后的内容"
}
3.1 初始化参数
data加密前数据格式:
{
"deviceId": "AI91FFFFFFFF0001",
"requestType": [1],
"nlpRequest": {
"content": [{
"type": 5,
"data": "6217ea26a7a84351a85138b6b89dd398",
"binaryDetail": {
"name": "hello",
"type": "wav",
"ext": {
"channel": 1,
"sampleRate": 16000,
"sampleBytes": 2,
"refCnType": 1,
"refPinyin": "wo4"
}
}
}],
"clientInfo": {
"appState": {
"code": 1000047,
"operateState": 1100
}
}
},
"binarysState": {
"openBinarysId": "6217ea26a7a84351a85138b6b89dd398"
}
}
3.2 上传评测音频
初始化成功后,上传需要评测的音频数据;
(注:每段传输数据小于1024*8 byte,录音时长不超过10s)
3.3 结束本次评测
data加密前数据格式:
{
"binarysState": {
"completeBinarysId": "6217ea26a7a84351a85138b6b89dd398"
}
}
4.请求参数说明
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| key | String | Y | apiKey,需官网申请; |
| timestamp | String | Y | 时间戳 |
| data | Json | Y | 配置信息,加密后的请求数据,加密参考:加密方式 |
data字段说明
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| deviceId | String | Y | 用户设备Id: 由字母或数字组成,其他字符可能导致部分功能错误,长度等于16位。 |
| requestType | Array | Y | 该次请求需要请求的内容:0:ASR,1:NLP,2:TTS |
| nlpRequest | Json | Y | nlp内容请求信息 |
| binarysState | Json | N | 二进制参数上传状态 |
nlpRequest - content字段说明
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| type | int | N | 输入类型: type=0为文本(默认) type=1为图片 type=2为音频 type=5为口语评测 |
| data | String | Y | 当type=0,可直接输入文本内容 当type=其他值,需输入二进制参数:32位字符串(UUID) |
| binaryDetail | String | Y | 二进制参数说明 |
注意:
- Socket的二进制参数输入,都需要初始化时在nlpRequest-content中提前申明,并将代表该二进制参数ID赋值给nlpRequest-content-data;
- 32位字符串(UUID):自己生成一个32位的唯一值进行上传就可以,主要用于向云端告知要上传的文件;
content - binaryDetail字段说明
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| name | String | N | 口语评测文本 |
| type | String | N | 文件类型 支持wav,mp3,amr(默认为"mp3"格式) |
| ext-channel | Integer | N | 音频声道数 单声道:1,多声道:2 |
| ext-sampleRate | Integer | N | 音频采样率 如果是本地音频评测,需要传入相应的音频采样率(默认为 "16K") |
| ext-sampleBytes | Integer | N | 采样字节 8bit的采样字节传1,16bit采样字节传2(默认为"2") |
binaryDetail 不传时,默认为MP3格式,channel=2,sampleRate=16000,sampleBytes=2
ClientInfo字段说明
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| appState | AppState | N | 客户端状态 |
ClientInfo - appState字段说明
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| code | int | N | 技能code |
| operateState | int | N | 应用状态 operateState=1100 : 英文单词 operateState=1101 : 英文句子 operateState=1120 : 中文汉字 operateState=1121 : 中文句子 |
binarysState字段说明
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| openBinarysId | String | N | 将要上传的文件参数:32位字符串 (该值与nlpRequest-content-data字段中的UUID一致) |
| completeBinarysId | String | Y | 已完成上传的文件参数:32位字符串 (该值与nlpRequest-content-data字段中的UUID一致) |
补充说明:
openBinarysId:在初始化时使用该字段,主要为了告知云端,将要上传一个二进制文件,需要云端准备接收;
completeBinarysId:在上报结束标识时使用该字段,主要为了告知云端,已上传完二进制文件,云端不需要再等待接收文件;
5.返回示例
以返回单词为例:
{
"code": 200,
"globalId": "8032******158001",
"nlpResponse": {
"intent": {
"code": 1000047,
"operateState": 1100,
"parameters": {
"result": {
"pron": 0,
"overall": 0,
"details": [{
"score": 0,
"phone": [{
"score": 0,
"char": "hh"
}, {
"score": 0,
"char": "ax"
}, {
"score": 0,
"char": "l"
}, {
"score": 0,
"char": "ow"
}],
"char": "hello",
"start": 170,
"end": 430
}],
"info": 0,
"wavetime": 2540
},
"code": 0,
"refText": "hello"
}
},
"results": [{
"groupType": 0,
"resultType": "text",
"values": {
"text": "评测完成,你的得分为:0.0"
}
}]
}
}
6.返回参数说明
| 标签 | 类型 | 是否必须 | 含义 |
|---|---|---|---|
| code | int | Y | 返回码 |
| globalId | String | Y | 评测结果ID,用于排查问题 |
| nlpResponse | Json | Y | nlp相关回复信息 |
Intent字段说明
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| code | int | Y | 输出应用code |
| operateState | int | Y | 应用状态 |
| parameters | Json | Y | 评测结果 |
operateState 字段说明
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| operateState | int | Y | 1010:英文单词 1011:英文句子 1020:中文汉字 1021:中文句子 |
parameters字段说明
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| result | Json | Y | 评测结果说明 |
| code | int | Y | 输出识别code |
| refText | String | Y | 评测文本 |
result字段说明
| 字段 | 类型 | 必选 | 说明 |
|---|---|---|---|
| pron | Int | Y | 发音得分 |
| overall | Int | Y | 总得分 |
| integrity | Int | N | 完成度评分: 单词测评时无该字段 |
| fluency | Int | N | 流利度得分: 单词测评时无该字段 |
| rhythm | Int | N | 韵律性评分: 单词测评时无该字段 |
| wavetime | Int | N | 音频长度: 单词测评时无该字段 |
| details | Array[json] | Y | 详细的测评信息,具体见details字段说明 |
details字段说明
| 字段 | 类型 | 必选 | 说明 |
|---|---|---|---|
| score | Int | Y | 得分 |
| char | String | Y | 评测的单词 |
| start | Int | Y | 音频文件处理的开始地址;无需关注 |
| end | Int | Y | 音频文件处理的结束地址;无需关注 |
| phone | Array[json] | Y | 单个字母评测信息,具体见phone字段说明 |
| phonics | Array[json] | N | 自然拼读得分;具体见phonics字段说明(需要图灵项目后台开通) |
phone字段说明
| 字段 | 类型 | 必选 | 说明 |
|---|---|---|---|
| score | Int | Y | 得分 |
| char | String | Y | 评测的字母 |
phonics字段说明
| 字段 | 类型 | 必选 | 说明 |
|---|---|---|---|
| score | Int | Y | 拼读分数 |
| spell | String | Y | 拼读内容 |
| phoneme | Array[String] | Y | 拼读内容 |
result字段说明
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| groupType | int | Y | 组类型(普通接入可忽略该参数) 0为独立输出; 大于0时可能包含同组相关内容 |
| resultType | String | Y | 输出类型 文本(text); 链接(url); 音频(voice); 动作表情(action); 视频(video); 图片(image); 图文(news); |
| values | Map | Y | 输出内容 |
附录:code状态列表
| code | 说明 |
|---|---|
| 200 | 正确结果返回 |
| 210 | 参数初始化成功,请收到该标识后上传二进制数据(如果需要) |
| 220 | 参数上传完成,正在请求nlp/tts |
| 240 | 输入参数为空,nlp/tts不处理 |
| 270 | 测评中间结果 |
| 280 | 测评最终结果 |
| 300 | 无效数据:二进制参数已完成传输,不要发送该数据 |
| 4004 | 机器人类型非法 |
| 4005 | apikey信息错误 |
| 4006 | deviceId信息错误 |
| 4007 | 解密失败,您的加密逻辑存在异常 |
| 4008 | 数据内容格式错误 |
| 4009 | 机器人被禁用 |
| 4010 | 试用期已过 |
| 4011 | 系统不支持二进制参数 |
| 4012 | 今天我们已经聊了很多啦,明天再来找我聊天吧。 |
| 4013 | 这一小时的对话次数已经超过我的极限啦,让我休息一下,待会再聊 |
| 4014 | 这一分钟里我们已经聊了很多啦,休息,休息一下吧 |
| 4015 | 二进制参数错误,请确定binarysId是否对应 |
| 4016 | 单次交互时间过长,请查看文档! |
| 4017 | 二进制参数错误,有重复binarysId! |
| 4018 | 二进制参数输入状态异常 |
| 4019 | 二进制参数处理时间超时/第三方引擎参数错误 |
| 4020 | ASR权限异常 |
| 4022 | 二进制传输内容过大! |
| 4023 | 单次交互同类型的二进制参数只允许输入一个 |
| 4025 | 上传数据失败,请稍后~ |
| 4026 | nlp/tts请求内容超过150个字符,内容过长 |
| 4027 | 请求类型不能为空 |
| 4028 | 丢弃任务:同一用户不允许同时处理一个以上的ASR请求 |
| 4029 | robot ASR调用次数耗尽 |
| 4030 | robot NLP调用次数耗尽 |
| 4031 | uri不支持 |
| 4032 | 请求时间戳偏与服务器时间偏差太大,message为服务器时间戳 |
| 4100 | 服务正在升级 请稍后再试 |
| 4101 | 请求没有正确初始化! |
| 4102 | 长时间未请求业务,关闭连接 |
| 4200 | robot信息异常 |
| 4201 | nlp/tts处理异常 |
| 5001 | 音频信息参数错误 |
| 5002 | 未上传任何二进制数据 |
| 5003 | ASR音频格式不支持 |
| 5004 | ASR引擎链接异常 |
| 5005 | ASR引擎异常超时 |
| 5007 | ASR数据传输失败,没有初始化 |
| 5008 | ASR二进制数据转码失败 |
| 5010 | ASR不支持混合模式识别 |
| 5100 | 评测启动失败,请稍后再试 |
| 5101 | 评测状态错误,请正确上传文件 |
| 5102 | 评测类型非法 |
| 5103 | 评测内容为空 |
| 5104 | userid并发请求测评功能 |
| 5105 | 测评失败,请查看错误信息 |
| 6000 | 丢弃任务:同一用户不允许同时处理一个以上的ASR请求 |
注意 * 4XXX~5XXX异常,服务端将主动关闭与客户端的connection,其余code不会关闭;