跳转至

在线语音识别及翻译接口文档

文档状态

文件标识: TuringOS-OpenSocket-V1.2
系统版本: OpenSocket
作 者: 段亚骏
完成日期: 2021年6月24日

文档修订记录

文档版本号 修订日期 修订原因 修订人
V1.0 2021.3.12 创建文档 段亚骏
V1.1 2021.3.17 修改中英混合识别开启字段 段亚骏
V1.2 2021.6.24 在文档各级标题中增加有序列表
在3.1节请求示例中替换useCodes字段
段亚骏
V1.3 2023.12.23 翻译接口改为1000018 刘秀丽

协议说明

一、请求流程说明

Image

二、协议说明

1.域名地址

正式环境: ws://ws-api.turingapi.com/api/v2

2.加密模式

默认不加密,如需加密在”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 初始化请求
3.1.1 文本请求翻译
data加密前数据格式:

{
    "deviceId": "123",
    "requestType": [1],
    "nlpRequest": {
        "content": [{
            "data": "Hello World"
        }],
        "userInfo": {
            "useCodes": [1000018]
        }
    }
}

3.1.2 音频请求
data加密前数据格式:

{
    "deviceId": "123",
    "requestType": [0],
    "asrRequest": {
        "asrFormatEnum": 0,
        "asrLanguageEnum": 0,
        "asrRateEnum": 1,
        "enableITN": true,
        "enablePunctuation": true,
        "enableVoiceDetection": false
    },
    "nlpRequest": {
        "content": [{
            "data": "6217ea26-a7a8-4351-a851-38b6b89dd398",
            "type": 2
        }],
        "userInfo": {
            "useCodes": [1000018]
        }
    },
    "binarysState": {
        "openBinarysId": "6217ea26-a7a8-4351-a851-38b6b89dd398"
    }
}

3.1.3 中英ASR混合识别+全文翻译请求
data加密前数据格式:

{
    "deviceId": "123",
    "requestType": [0,1],
    "asrRequest": {
        "asrFormatEnum": 0,
        "asrLanguageEnum": 0,
        "asrRateEnum": 1,
        "enableITN": true,
        "enablePunctuation": true,
        "enableVoiceDetection": false
    },
    "nlpRequest": {
        "content": [{
            "data": "6217ea26-a7a8-4351-a851-38b6b89dd398",
            "type": 2
        }],
        "userInfo": {
            "useCodes": [1000018]
        }
    },
    "binarysState": {
        "openBinarysId": "6217ea26-a7a8-4351-a851-38b6b89dd398"
    }
}

3.2 发送音频数据

初始化成功后,上传需要识别的音频数据;

(注:每段传输数据小于1024*8 byte,上传音频发送间隔不超过10S,单轮音频请求时长不超过60秒)

3.3 结束本次识别
data加密前数据格式:

{
    "data": {
        "binarysState": {
            "completeBinarysId": "完成传输的二进制参数id"
        }
    }
}

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内容请求信息
1:文本方式请求
2:图片、音频请求
asrRequest Json Y 请求asr时需要的参数
binarysState Json N 二进制参数上传状态

nlpRequest - content字段说明(文本请求)

参数 类型 是否必须 说明
type int N 0:文本(默认,可不填写)
data String Y 文本信息

nlpRequest - content字段说明(图片、音频请求)

参数 类型 是否必须 说明
type int N 1:图片
2:ASR音频
5:口语评测
data String Y 对应类型的二进制参数ID:32位字符串(UUID)

nlpRequest - userInfo字段说明

参数 类型 是否必须 说明
useCodes Array N 应用code
[1000018]为指定请求全文翻译技能

asrRequest字段说明

参数 类型 是否必须 说明
asrFormatEnum int Y 音频格式:
0:PCM
1:OPUS
2:SPEEX
asrLanguageEnum int Y 语言:
0:中文(开启后支持中英文混合识别)
1:英文
asrRateEnum int Y 音频采样率:
0:8k(PCM)
1:16k(PCM,OPUS,SPEEX)
intermediateResult boolean N 是否返回中间ASR结果(默认false)
enableITN boolean N 返回结果的数字格式规则为阿拉伯数字格式(默认true)
enablePunctuation boolean N 是否开启标点符号添加(默认true)
enableVoiceDetection boolean N 是否启动语音检测(默认false):
启动后需要同时设置maxStartSilence和maxEndSilence的值
maxStartSilence Integer N 允许的最大开始静音(单位:毫秒):
超出后服务端将会返回asrResponse.state=200,结束本次识别,需要先设置enableVoiceDetection为true
maxEndSilence Integer N 允许的最大结束静音(单位:毫秒):
超出后服务端会将返回asrResponse.state=200,结束本次识别,需要先设置enableVoiceDetection为true

binarysState字段说明

参数 类型 是否必须 说明
openBinarysId String N 将传输二进制数据的参数ID:
该值与nlpRequest-content-data中的内容一致
completeBinarysId String Y socket完成二进制参数ID(该状态由服务器告知客户端)

注意:WebSocket的二进制参数输入都需要初始化时在nlpRequest-content中按类型提前申明并将代表该二进制参数ID赋值给nlpRequest-content-data.

5.返回示例

{
    "code": 200,
    "done": true,
    "globalId": "171156189262884001",
    "message": "success",
    "nlpResponse": {
        "intent": {
            "code": 100018
        },
        "results": [{
            "groupType": 0,
            "resultType": "text",
            "values": {
                "text": "hello"
            }
        }]
    }
}

6.返回参数说明

参数 类型 是否必须 说明
code int Y 状态code;参考状态code列表
globalId String Y 请求唯一标识,用于排查日志
message String Y code对应的说明
asrResponse Json N asr请求回复信息
nlpResponse Json N nlp相关回复信息

asrResponse参数说明

参数 类型 是否必须 说明
binarysId String Y asr二进制参数Id
value String Y asr识别内容
state int Y 200:asr识别完成结果
210:asr识别中间结果返回

nlpResponse - Intent字段说明

参数 类型 是否必须 说明
code int Y 输出应用code
operateState int Y 应用状态(应用单独定义)

nlpResponse - Result字段说明

参数 类型 是否必须 说明
resultType String Y 输出类型
文本(text); 链接(url); 音频(voice); 动作表情(action); 视频(video); 图片(image); 图文(news);
values Map Y 输出内容
groupType int Y 组类型(普通接入可忽略该参数)
0为独立输出; 大于0时可能包含同组相关内容

附录: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请求内容过长
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引擎异常超时
5006 讯飞ASR引擎异常
5007 ASR数据传输失败,没有初始化
5008 ASR二进制数据转码失败
5010 ASR不支持混合模式识别
5100 评测启动失败,请稍后再试
5101 评测状态错误,请正确上传文件
5102 评测类型非法
5103 评测内容为空
5104 userid并发请求测评功能
5105 测评失败,请查看错误信息
6000 丢弃任务:同一用户不允许同时处理一个以上的ASR请求

注意 * 4XXX~5XXX异常,服务端将主动关闭与客户端的connection,其余code不会关闭;