WebSocket接入
接口详细说明
接口地址
ws接入: ws://ws-api.turingapi.com/api/v2
wss接入: wss://ws-api.turingapi.com/api/v2
若对数据通信有较高的安全要求,建议选择wss接入方式来访问图灵服务,由于ssl层验证预计会额外多花费40~50ms的时间。
请求示例及参数说明
请求示例
1. 参考API接入中Data字段中内容的请求示例:
{
"key": "a2ce4f54223548f******3a684681b0c",
"timestamp": "1585799006000",
"data": {
"deviceId": "ai11223344556677",
"requestType": [
1,
2
],
"nlpRequest": {
"content": [
{
"data": "你真漂亮"
}
]
}
}
}
2. 二进制输入请求示例:
初次二进制方式请求时:
{
"key": "a2ce4f54223548f******3a684681b0c",
"timestamp": "1585799006000",
"data": {
"deviceId": "ai11223344556677",
"requestType": [
0
],
"nlpRequest": {
"content": [
{
"data": "6217ea26a7a84351a85138b6b89dd398",
"type": 2
}
]
},
"asrRequest": {
"asrFormatEnum": 0,
"asrLanguageEnum": 0,
"asrRateEnum": 1,
"enableITN": true,
"enablePunctuation": true
},
"binarysState": {
"openBinarysId": "6217ea26a7a84351a85138b6b89dd398"
}
}
}
请求结束后的请求:
{
"key": "a2ce4f54223548f******3a684681b0c",
"timestamp": "1585799006000",
"data": {
"binarysState": {
"completeBinarysId": "完成传输的二进制参数id"
}
}
}
参数说明
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| key | String | Y | apiKey |
| timestamp | String | Y | 时间戳 |
| data | Json | Y | 配置信息,参考data字段说明 |
data字段说明
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| deviceId | String | Y | 用户设备Id: 1. 长度小于等于32位。 2. 需由字母或数字组成,其他字符可能导致部分功能错误 |
| requestType | Array | Y | 该次请求需要请求的内容: 0:ASR 1:NLP 2:TTS |
| nlpRequest | Json | Y | nlp内容请求信息 1. 文本方式请求时:参考【API接入文档】中 Data字段中的内容(UserInfo.uniqueId不传,或者和上边的deviceId参数保持一致) 2. 图片、音频等需要上传二进制文件请求时: 参考下边的content字段说明 |
| asrRequest | Json | N | 请求asr时需要的参数 |
| binarysState | Json | N | 二进制参数上传状态 |
| streamTts | boolean | N | tts是否以二进制流式输出(默认是false): true:以二进制流式输出 false:不以二进制流式输出 |
content字段说明
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| type | int | N | type=1-图片 type=2-音频(asr) type=5-音频(技能) |
| data | String | Y | 对应类型的二进制参数ID: 32位字符串(UUID) |
asrRequest字段说明
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| asrFormatEnum | int | Y | 音频格式: asrFormatEnum=0:PCM asrFormatEnum=1:OPUS asrFormatEnum=2:SPEEX |
| asrLanguageEnum | int | Y | 语言: asrLanguageEnum=0:中文 asrLanguageEnum=1:英文 |
| asrRateEnum | int | Y | 音频采样率: asrRateEnum=0:8k(PCM) asrRateEnum=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: 1. 该值与nlpRequest-content-data中的内容一致 2. 32位字符串(UUID) |
| completeBinarysId | String | N | - | 完成传输的二进制数据的参数ID: 32位字符串(UUID) |
注意:
- WebSocket的二进制参数输入都需要初始化时在nlpRequest-content中按类型提前申明并将代表该二进制参数ID赋值给nlpRequest-content-data.
- asr识别结果为空时,如果没有其他输入不会请求nlp/tts服务。
返回示例及参数说明
返回示例
streamTts为默认值或false时
{
"code": 200,
"globalId": "107638079404750001",
"message": "success",
"asrResponse": {
"binarysId": "6217ea26a7a84351a85138b6b89dd398",
"value": "你好",
"state": 200
},
"nlpResponse": {
"intent": {
"code": 100000,
"operateState": 1010
},
"results": [
{
"groupType": 0,
"resultType": "text",
"values": {
"ttsUrl": [
"http://turing-iot.oss-cn-beijing.aliyuncs.com/tts/tts-a2ce4f54223548f******3a684681b0-621a95b7f19547d0a84ae4aac7935863.mp3"
],
"emotionId": 10300,
"sentenceId": 201,
"text": "你好哦,很高兴认识你。"
}
}
]
}
}
streamTts为true时
{
"code": 200,
"globalId": "116123220454523001",
"message": "success",
"nlpResponse": {
"intent": {
"code": 100000,
"operateState": 1010
},
"results": [
{
"groupType": 0,
"resultType": "text",
"values": {
"ttsStreamId": "298486ec0e2843a2a002dcb10cfd2205",
"emotionId": 10300,
"sentenceId": 201,
"text": "你好哦,我们一块玩吧。"
}
}
]
}
}
{
"code": 260,
"globalId": "116123220454523001",
"message": "TTS流式传输状态",
"ttsResponse": {
"binarysId": "298486ec0e2843a2a002dcb10cfd2205",
"state": 210,
"value": "你好哦,我们一块玩吧。"
}
}
多段二进制流内容....
{
"code": 260,
"globalId": "116123220454523001",
"message": "TTS流式传输状态",
"ttsResponse": {
"binarysId": "298486ec0e2843a2a002dcb10cfd2205",
"state": 200,
"value": "你好哦,我们一块玩吧。"
}
}
参数说明
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| code | int | Y | 状态code;参考状态code列表 |
| globalId | String | Y | 请求唯一标识 |
| message | String | Y | code对应的说明;参考状态code列表 |
| asrResponse | Json | N | asr请求相关回复信息;参考asrResponse参数说明 |
| nlpResponse | Json | N | nlp相关回复信息;参考【API接入文档】中输出参数中的内容 |
asrResponse参数说明
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| binarysId | String | Y | asr二进制参数Id |
| value | String | Y | asr识别内容 |
| state | int | Y | state=200:asr识别完成结果 state=210:asr识别中间结果返回 |
ttsResponse参数说明
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| binarysId | String | Y | tts二进制参数Id,和参数ttsStreamId的值保持一致 |
| value | String | Y | tts内容 |
| state | int | Y | state=200:tts传输正确结束 state=400:tts异常结束 state=210:tts传输开始 |
流式TTS输出说明
a. 输入参数中streamTts=true。
b. nlp输出时,values中包含"ttsStreamId"字段。
c. 输出code=260(tts流式状态)时,注意当ttsResponse.state为结束状态时(200,400),ttsResponse可能包含nextBinarysId字段,代表接下来还有tts二进制内容输出。如:
{
"code": 260,
"globalId": "116123220454523001",
"message": "TTS流式传输状态",
"ttsResponse": {
"binarysId": "298486ec0e2843a2a002dcb10cfd2205",
"nextBinarysId": "12jsfsf0qwerjsdfasdfasdf8dsfa",
"state": 200
}
}
附录
状态code列表
| code | 说明 |
|---|---|
| 200 | 正确结果返回 |
| 210 | 参数初始化成功,请收到该标识后上传二进制数据(如果需要) |
| 220 | 参数上传完成,正在请求nlp/tts |
| 230 | ASR/NLP正确处理,但tts功能处理失败(单独请求TTS功能,异常时也返回该code) |
| 240 | 输入参数为空,nlp/tts不处理 |
| 250 | TTS调用次数耗尽 |
| 300 | 无效数据:二进制参数已完成传输,不要发送该数据 |
| 4004 | 机器人类型非法 |
| 4005 | apikey信息错误 |
| 4006 | deviceId信息错误 |
| 4007 | 解密失败,您的加密逻辑存在异常 |
| 4008 | 数据内容格式错误 |
| 4009 | 机器人被禁用 |
| 4010 | 试用期已过 |
| 4011 | 系统不支持二进制参数 |
| 4012 | 今天我们已经聊了很多啦,明天再来找我聊天吧。 |
| 4013 | 这一小时的对话次数已经超过我的极限啦,让我休息一下,待会再聊 |
| 4014 | 这一分钟里我们已经聊了很多啦,休息,休息一下吧 |
| 4015 | 二进制参数错误,请确定binarysId是否对应 |
| 4016 | 单次交互时间过长,请查看文档! |
| 4017 | 二进制参数错误,有重复binarysId! |
| 4018 | 二进制参数输入状态异常 |
| 4019 | 二进制参数处理时间超时/第三方引擎参数错误 |
| 4020 | ASR权限异常 |
| 4021 | TTS权限异常 |
| 4022 | 二进制传输内容过大! |
| 4023 | 单次交互同类型的二进制参数只允许输入一个 |
| 4025 | 上传数据失败,请稍后~ |
| 4026 | nlp/tts请求内容过长 |
| 4027 | 请求类型不能为空 |
| 4028 | 丢弃任务:同一用户不允许同时处理一个以上的ASR请求 |
| 4029 | ASR调用次数耗尽 |
| 4030 | NLP调用次数耗尽 |
| 4100 | 服务正在升级 请稍后再试 |
| 4101 | 请求没有正确初始化! |
| 4102 | 长时间未请求业务,关闭连接 |
| 4200 | robot信息异常 |
| 4201 | nlp/tts处理异常 |
| 4202 | tts数据为空 |
| 5001 | 音频信息参数错误 |
| 5002 | 未上传任何二进制数据 |
| 5003 | ASR音频格式不支持 |
| 5004 | ASR引擎链接异常 |
| 5005 | ASR引擎异常超时 |
| 5006 | ASR引擎异常 |
| 5007 | ASR数据传输失败,没有初始化 |
| 5008 | ASR二进制数据转码失败 |
| 6000 | 丢弃任务:同一用户不允许同时处理一个以上的ASR请求 |
注意 * 4XXX~5XXX异常,服务端将主动关闭与客户端的connection,其余code不会关闭;
WebSocket请求时序图
