跳转至

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请求时序图

Alt text