长音频语音翻译
更新时间:
服务概述
- 云上曲率的语音翻译,采用新一代NMT神经网络机器翻译技术,集成高精准度的语音识别和翻译能力,提供离在线融合解决方案。
- 长音频的语音翻译,异步返回结果,支持轮询&回调查结果
服务申请
语音翻译API采用全流程自助申请的模式。在云上曲率官网(https://www.ilivedata.com/) 注册并激活账号后,在控制台创建语音翻译的项目,即可获得pid和服务密钥。
如需开通更多服务,可在管理控制台-总览页面开通其他服务。
音频提交
参数规范
请求URL: https://speech.ilivedata.com/api/v1/speech/translate/submit
HTTP请求头
请求头
值
描述
Content-Type
application/json;charset=UTF-8
请求体类型
Accept
application/json;charset=UTF-8
接受的返回类型
X-AppId
例:1000
项目或应用的唯一标识符
X-TimeStamp
例:2020-09-01T07:06:55Z
请求的UTC时间戳。需要把时间戳按W3C标准格式化,例如: 2010-01-31T23:59:59Z. (http://www.w3.org/TR/xmlschema-2/#dateTime)。
Authorization
例:Njl86M/jY6zZaZoGhZdGO+GI/8+yGFECusGH1yQHUFE=
签名值
请求方法:POST
请求体:
参数
子参数
必需
描述
speechLanguageCode
必需
音频对应的语种 支持语种
textLanguageCode
必需
文本语言码
uri
必需
音频或视频uri
video
可选
uri是否为视频文件(默认为False,表示uri文件为音频)
config
codec
可选
编码格式,支持AMR_WB、OPUS、PCM、AMR。如未指定则默认使用AMR_WB
sampleRateHertz
可选
采样率,AMR只支持8000,其他编码格式只支持16000。
userId
可选
唯一的终端用户ID。 用户ID应当不超过32个字符。
alternativeLangCodes
可选
候选语种数组,最多支持传入4个候选语种 支持语种
callbackRegion
可选
回调区域:默认cn,可选cn、us、ap。
callbackUrl
可选
回调 url,http协议。 例 https://example.com/callback
callbackSecretKey
可选
回调密钥,可自行定义,需要在回调验签方式使用密钥一致,否则无法验证回调数据是否被篡改
textToSpeech
可选
语音到语音的翻译开关 True/False,默认为 False
textToSpeechConfig
outputFormat
可选
选择输出合成音频编码,候选为pcm、mp3、opus,默认为pcm
voiceGender
可选
指定合成声音的性别 0-女生音色 / 1-男生音色,默认为 0
outputStrategy
可选
选择合成策略 0-整段合成 / 1-按片段合成,默认为 0
durationAlign
可选
合成音频时长与片段音频时长对齐,0(默认)-关,1-开。 备注:变速会影响听感,只针对outputStrategy=1 时生效,变速会出现一个音频前后语速不一致的情况
请求体示例
{
"speechLanguageCode": "zh-CN",
"textLanguageCode": "en",
"config": {
"codec": "OPUS",
"sampleRateHertz": 16000
},
"uri":"https://example.com/test.wav",
"callbackRegion":"cn",
"callbackUrl":"https://example.com/callback",
"callbackSecretKey":"YOUR_SECRETKEY",
'textToSpeech':True,
'textToSpeechConfig':{
'voiceGender':'1',
'outputFormat':'pcm',
'outputStrategy':'0',
'durationAlign':'1',
}
请求签名:
当用户请求Speech Recognition API时,可以使用appId和secretKey对请求做签名,当API收到带签名信息的请求之后,将使用相同的算法验证签名,如果发现签名不一致,API将会返回401给用户。
如果API验证签名一致,且appId对应的用户有权限操作请求的资源,则请求成功,否则API返回401。
通过 HTTP 请求 Header 发送签名
方法: 在请求中加入名为 Authorization 的 Header,值为签名值。如下:
Authorization: Njl86M/jY6zZaZoGhZdGO+GI/8+yGFECusGH1yQHUFE=
签名计算方法
1.构造规范化的请求字符串(Canonicalized Query String)
将请求体JSON字符串以UTF-8字符编码做sha256编码后转换为16进制字符串(注意不是Base64)
CanonicalizedQueryString = hex(sha256(jsonBody))
2.构造被签名字符串 StringToSign ("\n” 代表ASCII里的换行符)
StringToSign = HTTPMethod + "\n" +
HostHeaderInLowercase + "\n" +
HTTPRequestURI + "\n" +
CanonicalizedQueryString <从上一步得到> + "\n" +
"X-AppId:" + SAME_APPID_IN_HEADER + "\n" +
"X-TimeStamp:" + SAME_TIMESTAMP_IN_HEADER
HTTPRequestURI是请求URI的绝对路径,不包含请求串。如果HTTPRequestURI为空,也要保留一个正斜杠 ( / )
使用 HMAC-SHA256 协议创建基于哈希的消息身份验证代码 (HMAC),然后计算签名。
3.StringToSign作为签名字符串,secretKey作为秘钥,SHA256作为哈希算法
有关 HMAC 的更多信息,请参阅 https://tools.ietf.org/html/rfc2104。
4.将上一步的结果转换为BASE64串
5.将BASE64串放入HTTP请求Header的Authorization
签名示例
下面是appId & secretKey & audio的示例
appId=1000
secrectKey=****
audio_base64="https://example.com/test.wav"
下面是示例请求体
{"speechLanguageCode": "zh-CN", "textLanguageCode": "en", "config": {"codec": "AMR_WB", "sampleRateHertz": 16000}, "audio": "https://example.com/test.wav", "userId": "12345678"}
生成CanonicalizedQueryString
3ff89070a25e4091c94f03ad3cf014d712aaf9e069ef654b0e7e58b2b4550e31
生成StringToSign
POST
speech.ilivedata.com
/api/v1/speech/translate/submit
3ff89070a25e4091c94f03ad3cf014d712aaf9e069ef654b0e7e58b2b4550e31
X-AppId:1000
X-TimeStamp:2021-01-12T07:38:29Z
HMAC计算得到的签名
1nNkKezG9XgkbCau9aENhDDRJhoTMHAI85NnjY+Mm4k=
HTTP响应
字段名
子字段名
描述
errorCode
0表示成功
taskId
任务ID
响应示例
{
"errorCode": 0,
"taskId":"us_21c61c2f-6fbc-4c0e-b3b0-8a906fb4df8a_1698828479533"
}
结果查询
接口说明
用于客户主动轮询查结果,结果将以 taskId
为维度,将语音翻译结果返回给客户。
请求URL: https://speech.ilivedata.com/api/v1/speech/translate/result
HTTP请求Header:
Header
值
描述
Content-Type
application/json;charset=UTF-8
请求体类型
Accept
application/json;charset=UTF-8
接受的返回类型
X-AppId
项目或应用的唯一标识符
X-TimeStamp
请求的UTC时间戳。需要把时间戳按W3C标准格式化,例如: 2010-01-31T23:59:59Z. (http://www.w3.org/TR/xmlschema-2/#dateTime)。
Authorization
签名值
请求方法:POST
请求体:
参数
必需
描述
taskId
必需
任务ID
请求体示例
{
"taskId": "us_a0cf4d0c-4804-484d-96e1-9ebf1e42d37d_1614329510676"
}
请求签名:
当用户请求Speech Recognition API时,可以使用appId和secretKey对请求做签名,当API收到带签名信息的请求之后,将使用相同的算法验证签名,如果发现签名不一致,API将会返回401给用户。
如果API验证签名一致,且appId对应的用户有权限操作请求的资源,则请求成功,否则API返回401。
通过 HTTP 请求 Header 发送签名
方法: 在请求中加入名为 Authorization 的 Header,值为签名值。如下:
Authorization: Njl86M/jY6zZaZoGhZdGO+GI/8+yGFECusGH1yQHUFE=
签名计算方法
1.构造规范化的请求字符串(Canonicalized Query String)
将请求体JSON字符串以UTF-8字符编码做sha256编码后转换为16进制字符串(注意不是Base64)
CanonicalizedQueryString = hex(sha256(jsonBody))
2.构造被签名字符串 StringToSign ("\n” 代表ASCII里的换行符)
StringToSign = HTTPMethod + "\n" +
HostHeaderInLowercase + "\n" +
HTTPRequestURI + "\n" +
CanonicalizedQueryString <从上一步得到> + "\n" +
"X-AppId:" + SAME_APPID_IN_HEADER + "\n" +
"X-TimeStamp:" + SAME_TIMESTAMP_IN_HEADER
HTTPRequestURI是请求URI的绝对路径,不包含请求串。如果HTTPRequestURI为空,也要保留一个正斜杠 ( / )
使用 HMAC-SHA256 协议创建基于哈希的消息身份验证代码 (HMAC),然后计算签名。
3.StringToSign作为签名字符串,secretKey作为秘钥,SHA256作为哈希算法
有关 HMAC 的更多信息,请参阅 https://tools.ietf.org/html/rfc2104。
4.将上一步的结果转换为BASE64串
5.将BASE64串放入HTTP请求Header的Authorization
签名示例
下面是appId & secretKey的示例
appId=1000
secrectKey=d9e23d93053f49ade2f8fce185acedd4
下面是示例请求体
{"taskId": "us_a0cf4d0c-4804-484d-96e1-9ebf1e42d37d_1614329510676"}
生成CanonicalizedQueryString
a18830926600e82dbb6c464ce60f2c6c62d53ed3f3f24123fc09fbdc4e17b5ff
生成StringToSign
POST
speech.ilivedata.com
/api/v1/speech/translate/result
a18830926600e82dbb6c464ce60f2c6c62d53ed3f3f24123fc09fbdc4e17b5ff
X-AppId:1000
X-TimeStamp:2021-02-26T09:11:42Z
HMAC计算得到的签名
cv3tQcZpKJhvrivA/pb0vd+FAd0ifrqZ36Fp/Hc05vY=
HTTP响应
Content-Type: application/json;charset=UTF-8
结果为JSON格式,请参考以下示例。
HTTP响应返回json字段说明:
字段名
子字段名
描述
errorCode
错误代码
errorMessage
错误消息
taskId
任务ID
status
任务状态。0:成功, 1:失败, 2:处理中
source
音频源语言
target
翻译目标语言
translation
startTime
区间开始时间
endTime
区间结束时间
sourceText
从音频中识别出的文本
targetText
翻译后目标语言后的文本
targetAudio
翻译后对应的语音,outputStrategy=1时返回
targetAudio
翻译后对应的语音,outputStrategy=0时返回
响应示例
{
"errorCode": 0,
"taskId":"us_21c61c2f-6fbc-4c0e-b3b0-8a906fb4df8a_1698828479533",
"source": "zh-CN",
"status": 0,
"target": "en",
"translation":
[{
"startTime":0.01,
"endTime":1.98,
"sourceText": "你好!",
"targetText": "Hello!",
"targetAudio": "https://xxxx"//outputStrategy=1
},...],
"targetAudio": "https://xxxx"//outputStrategy=0
}
结果回调
回调接口概述
针对于语音翻译结果的回调,用于将异步结果推送给客户,客户需要按照以下规范实现接收结果的接口。
接口说明
结果将以 taskId
为维度,将语音翻译结果推送给客户。如需使用回调功能,请参见回调规范。
接口鉴权
客户可通过配置完回调参数后分配的密钥信息字段进行接口鉴权。具体方式如下:
-
签名算法
1> 将接受的的请求体参数按照ASCII码表升序顺序排序。
2> 将排序好的参数 append 成字符串。格式为:key1 + value1 +key2 + value2…。
3> 将配置完回调参数后生成的密钥 append 到 2> 步骤生成的字符串后。
4> 将 3> 步骤生成的字符串使用 UTF-8 进行编码,使用 MD5 进行加密生成 signature 参数值,并将其放入 请求 header 中。
-
示例代码
/**
* 生成签名
* @param secretKey 后台密钥
* @param params 接口请求参数名和参数值map,不包括signature参数名
* @return
*/
public static String signature(String secretKey, Map<String, String> params){
String[] keys = params.keySet().toArray(new String[0]);
Arrays.sort(keys);
StringBuilder signBuilder = new StringBuilder();
for (String key : keys) {
signBuilder.append(key).append(params.get(key));
}
signBuilder.append(secretKey);
try {
return DigestUtils.md5Hex(signBuilder.toString().getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
// error
}
return null;
}
接入说明
- 协议说明:客户方需提供支持 http 协议的 post 请求方式的接口。
- 接口性能:客户需保持接口的稳定性与可靠性。
- 失败重试:我们在收到客户回调响应后,如果不符合规定的接受成功规范,则认为此次推送失败。将以规定间隔时间 10s 推送 3 次,如果第三次继续失败将不再继续推送。如要获取结果则调用主动查询结果接口。
请求说明
-
请求地址及方式
名称
值
callbackUrl
回调地址url(http协议)
HTTP_METHOD
POST
-
请求头
名称
类型
必填
说明
Content-Type
String
是
固定值:application/json
signature
String
是
签名,验证请求的合法性,参照鉴权算法
-
请求参数
名称
类型
说明
appId
String
所属项目ID
taskId
String
提交异步任务时,返回的任务id
result
String
语音翻译结果
checkType
String
固定值"speech-translation"
-
回调请求示例
{
"appId": "91300001",
"taskId": "test_21c61c2f-6fbc-4c0e-b3b0-8a906fb4df8a_1698828479533",
"result": "{\"errorCode\":0,\"taskId\":\"test_21c61c2f-6fbc-4c0e-b3b0-8a906fb4df8a_1698828479533\",\"source\":\"zh-CN\",\"target\":\"en\",\"translation\":[{\"startTime\":0.15,\"endTime\":1.15,\"sourceText\":\"你好!\",\"targetText\":\"hello!\"}]}",
"checkType": "speech-translation"
}
-
请求响应
客户接口接收到我们回调的结果后,需要返回应答信息,接口响应 code
状态码为 0,当回调处理异常时,应答的 code
状态码应为 500,或者 4xx; 应答信息为json格式,字段定义如下:
名称
类型
必填
说明
code
Number
是
应答code,code 值为 0 代表此次回调成功
message
String
否
具体描述信息
回调结果result
规范
字段名
子字段名
描述
errorCode
0表示成功
taskId
任务ID
source
音频源语言
target
翻译目标语言
translation
startTime
区间开始时间
endTime
区间结束时间
sourceText
从音频中识别出的文本
targetText
翻译后目标语言后的文本
targetAudio
翻译后对应的语音,outputStrategy=1时返回
targetAudio
翻译后对应的语音,outputStrategy=0时返回
回调结果result
示例
{
"errorCode": 0,
"taskId":"us_21c61c2f-6fbc-4c0e-b3b0-8a906fb4df8a_1698828479533",
"source": "zh-CN",
"target": "en",
"translation":
[{
"startTime":0.01,
"endTime":1.98,
"sourceText": "你好!",
"targetText": "Hello!",
"targetAudio": "https://xxxx"//outputStrategy=1
},...],
"targetAudio": "https://xxxx"//outputStrategy=0
}
错误码
HTTP状态码
错误码
错误消息
200
0
no message
429
1104
Out of Rate Limit
429
1105
Out of Quotas
405
1004
Method Not Allowed
411
1007
Not Content Length
400
1002
API Not Found
400
1003
Bad Request
400
2000
Missing Parameter
400
2001
Invalid Parameter
400
2002
Invalid Request
400
2102
Input Too Long
400
2109
Speech Recognition Failed
400
2110
File is invalid
400
2111
Failed to download file
400
2112
TaskId is invalid
401
1102
Unauthorized Client
401
1106
Missing Access Token
401
1107
Invalid Token
401
1108
Expired Token
401
1110
Invalid Client
401
2000
Missing Parameter
401
2001
Invalid Parameter
401
2002
Invalid Request
401
2003
Invalid Scope
401
2004
Unsupported Response Type
401
2100
Translation Failed
401
2101
No Match
401
2103
Detection Failed
401
2104
Language Not Supported
401
2105
Normalization Failed
401
2106
Inappropriate Word Used
401
2107
Invoke Service Failed
401
2108
Service Unavaliable
服务概述
- 云上曲率的语音翻译,采用新一代NMT神经网络机器翻译技术,集成高精准度的语音识别和翻译能力,提供离在线融合解决方案。
- 长音频的语音翻译,异步返回结果,支持轮询&回调查结果
服务申请
语音翻译API采用全流程自助申请的模式。在云上曲率官网(https://www.ilivedata.com/) 注册并激活账号后,在控制台创建语音翻译的项目,即可获得pid和服务密钥。
如需开通更多服务,可在管理控制台-总览页面开通其他服务。
音频提交
参数规范
请求URL: https://speech.ilivedata.com/api/v1/speech/translate/submit
HTTP请求头
请求头 | 值 | 描述 |
---|---|---|
Content-Type | application/json;charset=UTF-8 | 请求体类型 |
Accept | application/json;charset=UTF-8 | 接受的返回类型 |
X-AppId | 例:1000 | 项目或应用的唯一标识符 |
X-TimeStamp | 例:2020-09-01T07:06:55Z | 请求的UTC时间戳。需要把时间戳按W3C标准格式化,例如: 2010-01-31T23:59:59Z. (http://www.w3.org/TR/xmlschema-2/#dateTime)。 |
Authorization | 例:Njl86M/jY6zZaZoGhZdGO+GI/8+yGFECusGH1yQHUFE= | 签名值 |
请求方法:POST
请求体:
参数 | 子参数 | 必需 | 描述 |
---|---|---|---|
speechLanguageCode | 必需 | 音频对应的语种 支持语种 | |
textLanguageCode | 必需 | 文本语言码 | |
uri | 必需 | 音频或视频uri | |
video | 可选 | uri是否为视频文件(默认为False,表示uri文件为音频) | |
config | codec | 可选 | 编码格式,支持AMR_WB、OPUS、PCM、AMR。如未指定则默认使用AMR_WB |
sampleRateHertz | 可选 | 采样率,AMR只支持8000,其他编码格式只支持16000。 | |
userId | 可选 | 唯一的终端用户ID。 用户ID应当不超过32个字符。 | |
alternativeLangCodes | 可选 | 候选语种数组,最多支持传入4个候选语种 支持语种 | |
callbackRegion | 可选 | 回调区域:默认cn,可选cn、us、ap。 | |
callbackUrl | 可选 | 回调 url,http协议。 例 https://example.com/callback |
|
callbackSecretKey | 可选 | 回调密钥,可自行定义,需要在回调验签方式使用密钥一致,否则无法验证回调数据是否被篡改 | |
textToSpeech | 可选 | 语音到语音的翻译开关 True/False,默认为 False | |
textToSpeechConfig | outputFormat | 可选 | 选择输出合成音频编码,候选为pcm、mp3、opus,默认为pcm |
voiceGender | 可选 | 指定合成声音的性别 0-女生音色 / 1-男生音色,默认为 0 | |
outputStrategy | 可选 | 选择合成策略 0-整段合成 / 1-按片段合成,默认为 0 | |
durationAlign | 可选 | 合成音频时长与片段音频时长对齐,0(默认)-关,1-开。 备注:变速会影响听感,只针对outputStrategy=1 时生效,变速会出现一个音频前后语速不一致的情况 |
请求体示例
{
"speechLanguageCode": "zh-CN",
"textLanguageCode": "en",
"config": {
"codec": "OPUS",
"sampleRateHertz": 16000
},
"uri":"https://example.com/test.wav",
"callbackRegion":"cn",
"callbackUrl":"https://example.com/callback",
"callbackSecretKey":"YOUR_SECRETKEY",
'textToSpeech':True,
'textToSpeechConfig':{
'voiceGender':'1',
'outputFormat':'pcm',
'outputStrategy':'0',
'durationAlign':'1',
}
请求签名:
当用户请求Speech Recognition API时,可以使用appId和secretKey对请求做签名,当API收到带签名信息的请求之后,将使用相同的算法验证签名,如果发现签名不一致,API将会返回401给用户。
如果API验证签名一致,且appId对应的用户有权限操作请求的资源,则请求成功,否则API返回401。
通过 HTTP 请求 Header 发送签名
方法: 在请求中加入名为 Authorization 的 Header,值为签名值。如下:
Authorization: Njl86M/jY6zZaZoGhZdGO+GI/8+yGFECusGH1yQHUFE=
签名计算方法
1.构造规范化的请求字符串(Canonicalized Query String)
将请求体JSON字符串以UTF-8字符编码做sha256编码后转换为16进制字符串(注意不是Base64)
CanonicalizedQueryString = hex(sha256(jsonBody))
2.构造被签名字符串 StringToSign ("\n” 代表ASCII里的换行符)
StringToSign = HTTPMethod + "\n" +
HostHeaderInLowercase + "\n" +
HTTPRequestURI + "\n" +
CanonicalizedQueryString <从上一步得到> + "\n" +
"X-AppId:" + SAME_APPID_IN_HEADER + "\n" +
"X-TimeStamp:" + SAME_TIMESTAMP_IN_HEADER
HTTPRequestURI是请求URI的绝对路径,不包含请求串。如果HTTPRequestURI为空,也要保留一个正斜杠 ( / )
使用 HMAC-SHA256 协议创建基于哈希的消息身份验证代码 (HMAC),然后计算签名。
3.StringToSign作为签名字符串,secretKey作为秘钥,SHA256作为哈希算法
有关 HMAC 的更多信息,请参阅 https://tools.ietf.org/html/rfc2104。
4.将上一步的结果转换为BASE64串
5.将BASE64串放入HTTP请求Header的Authorization
签名示例
下面是appId & secretKey & audio的示例
appId=1000
secrectKey=****
audio_base64="https://example.com/test.wav"
下面是示例请求体
{"speechLanguageCode": "zh-CN", "textLanguageCode": "en", "config": {"codec": "AMR_WB", "sampleRateHertz": 16000}, "audio": "https://example.com/test.wav", "userId": "12345678"}
生成CanonicalizedQueryString
3ff89070a25e4091c94f03ad3cf014d712aaf9e069ef654b0e7e58b2b4550e31
生成StringToSign
POST
speech.ilivedata.com
/api/v1/speech/translate/submit
3ff89070a25e4091c94f03ad3cf014d712aaf9e069ef654b0e7e58b2b4550e31
X-AppId:1000
X-TimeStamp:2021-01-12T07:38:29Z
HMAC计算得到的签名
1nNkKezG9XgkbCau9aENhDDRJhoTMHAI85NnjY+Mm4k=
HTTP响应
字段名 | 子字段名 | 描述 | |
---|---|---|---|
errorCode | 0表示成功 | ||
taskId | 任务ID |
响应示例
{
"errorCode": 0,
"taskId":"us_21c61c2f-6fbc-4c0e-b3b0-8a906fb4df8a_1698828479533"
}
结果查询
接口说明
用于客户主动轮询查结果,结果将以 taskId
为维度,将语音翻译结果返回给客户。
请求URL: https://speech.ilivedata.com/api/v1/speech/translate/result
HTTP请求Header:
Header | 值 | 描述 |
---|---|---|
Content-Type | application/json;charset=UTF-8 | 请求体类型 |
Accept | application/json;charset=UTF-8 | 接受的返回类型 |
X-AppId | 项目或应用的唯一标识符 | |
X-TimeStamp | 请求的UTC时间戳。需要把时间戳按W3C标准格式化,例如: 2010-01-31T23:59:59Z. (http://www.w3.org/TR/xmlschema-2/#dateTime)。 | |
Authorization | 签名值 |
请求方法:POST
请求体:
参数 | 必需 | 描述 |
---|---|---|
taskId | 必需 | 任务ID |
请求体示例
{
"taskId": "us_a0cf4d0c-4804-484d-96e1-9ebf1e42d37d_1614329510676"
}
请求签名:
当用户请求Speech Recognition API时,可以使用appId和secretKey对请求做签名,当API收到带签名信息的请求之后,将使用相同的算法验证签名,如果发现签名不一致,API将会返回401给用户。
如果API验证签名一致,且appId对应的用户有权限操作请求的资源,则请求成功,否则API返回401。
通过 HTTP 请求 Header 发送签名
方法: 在请求中加入名为 Authorization 的 Header,值为签名值。如下:
Authorization: Njl86M/jY6zZaZoGhZdGO+GI/8+yGFECusGH1yQHUFE=
签名计算方法
1.构造规范化的请求字符串(Canonicalized Query String)
将请求体JSON字符串以UTF-8字符编码做sha256编码后转换为16进制字符串(注意不是Base64)
CanonicalizedQueryString = hex(sha256(jsonBody))
2.构造被签名字符串 StringToSign ("\n” 代表ASCII里的换行符)
StringToSign = HTTPMethod + "\n" +
HostHeaderInLowercase + "\n" +
HTTPRequestURI + "\n" +
CanonicalizedQueryString <从上一步得到> + "\n" +
"X-AppId:" + SAME_APPID_IN_HEADER + "\n" +
"X-TimeStamp:" + SAME_TIMESTAMP_IN_HEADER
HTTPRequestURI是请求URI的绝对路径,不包含请求串。如果HTTPRequestURI为空,也要保留一个正斜杠 ( / ) 使用 HMAC-SHA256 协议创建基于哈希的消息身份验证代码 (HMAC),然后计算签名。
3.StringToSign作为签名字符串,secretKey作为秘钥,SHA256作为哈希算法
有关 HMAC 的更多信息,请参阅 https://tools.ietf.org/html/rfc2104。
4.将上一步的结果转换为BASE64串
5.将BASE64串放入HTTP请求Header的Authorization
签名示例
下面是appId & secretKey的示例
appId=1000
secrectKey=d9e23d93053f49ade2f8fce185acedd4
下面是示例请求体
{"taskId": "us_a0cf4d0c-4804-484d-96e1-9ebf1e42d37d_1614329510676"}
生成CanonicalizedQueryString
a18830926600e82dbb6c464ce60f2c6c62d53ed3f3f24123fc09fbdc4e17b5ff
生成StringToSign
POST
speech.ilivedata.com
/api/v1/speech/translate/result
a18830926600e82dbb6c464ce60f2c6c62d53ed3f3f24123fc09fbdc4e17b5ff
X-AppId:1000
X-TimeStamp:2021-02-26T09:11:42Z
HMAC计算得到的签名
cv3tQcZpKJhvrivA/pb0vd+FAd0ifrqZ36Fp/Hc05vY=
HTTP响应
Content-Type: application/json;charset=UTF-8 结果为JSON格式,请参考以下示例。
HTTP响应返回json字段说明:
字段名 | 子字段名 | 描述 |
---|---|---|
errorCode | 错误代码 | |
errorMessage | 错误消息 | |
taskId | 任务ID | |
status | 任务状态。0:成功, 1:失败, 2:处理中 | |
source | 音频源语言 | |
target | 翻译目标语言 | |
translation | startTime | 区间开始时间 |
endTime | 区间结束时间 | |
sourceText | 从音频中识别出的文本 | |
targetText | 翻译后目标语言后的文本 | |
targetAudio | 翻译后对应的语音,outputStrategy=1时返回 | |
targetAudio | 翻译后对应的语音,outputStrategy=0时返回 |
响应示例
{
"errorCode": 0,
"taskId":"us_21c61c2f-6fbc-4c0e-b3b0-8a906fb4df8a_1698828479533",
"source": "zh-CN",
"status": 0,
"target": "en",
"translation":
[{
"startTime":0.01,
"endTime":1.98,
"sourceText": "你好!",
"targetText": "Hello!",
"targetAudio": "https://xxxx"//outputStrategy=1
},...],
"targetAudio": "https://xxxx"//outputStrategy=0
}
结果回调
回调接口概述
针对于语音翻译结果的回调,用于将异步结果推送给客户,客户需要按照以下规范实现接收结果的接口。
接口说明
结果将以 taskId
为维度,将语音翻译结果推送给客户。如需使用回调功能,请参见回调规范。
接口鉴权
客户可通过配置完回调参数后分配的密钥信息字段进行接口鉴权。具体方式如下:
-
签名算法
1> 将接受的的请求体参数按照ASCII码表升序顺序排序。
2> 将排序好的参数 append 成字符串。格式为:key1 + value1 +key2 + value2…。
3> 将配置完回调参数后生成的密钥 append 到 2> 步骤生成的字符串后。
4> 将 3> 步骤生成的字符串使用 UTF-8 进行编码,使用 MD5 进行加密生成 signature 参数值,并将其放入 请求 header 中。
-
示例代码
/** * 生成签名 * @param secretKey 后台密钥 * @param params 接口请求参数名和参数值map,不包括signature参数名 * @return */ public static String signature(String secretKey, Map<String, String> params){ String[] keys = params.keySet().toArray(new String[0]); Arrays.sort(keys); StringBuilder signBuilder = new StringBuilder(); for (String key : keys) { signBuilder.append(key).append(params.get(key)); } signBuilder.append(secretKey); try { return DigestUtils.md5Hex(signBuilder.toString().getBytes("UTF-8")); } catch (UnsupportedEncodingException e) { // error } return null; }
接入说明
- 协议说明:客户方需提供支持 http 协议的 post 请求方式的接口。
- 接口性能:客户需保持接口的稳定性与可靠性。
- 失败重试:我们在收到客户回调响应后,如果不符合规定的接受成功规范,则认为此次推送失败。将以规定间隔时间 10s 推送 3 次,如果第三次继续失败将不再继续推送。如要获取结果则调用主动查询结果接口。
请求说明
-
请求地址及方式
名称 值 callbackUrl 回调地址url(http协议) HTTP_METHOD POST -
请求头
名称 类型 必填 说明 Content-Type String 是 固定值:application/json signature String 是 签名,验证请求的合法性,参照鉴权算法 -
请求参数
名称 类型 说明 appId String 所属项目ID taskId String 提交异步任务时,返回的任务id result String 语音翻译结果 checkType String 固定值"speech-translation" -
回调请求示例
{
"appId": "91300001",
"taskId": "test_21c61c2f-6fbc-4c0e-b3b0-8a906fb4df8a_1698828479533",
"result": "{\"errorCode\":0,\"taskId\":\"test_21c61c2f-6fbc-4c0e-b3b0-8a906fb4df8a_1698828479533\",\"source\":\"zh-CN\",\"target\":\"en\",\"translation\":[{\"startTime\":0.15,\"endTime\":1.15,\"sourceText\":\"你好!\",\"targetText\":\"hello!\"}]}",
"checkType": "speech-translation"
}
-
请求响应
客户接口接收到我们回调的结果后,需要返回应答信息,接口响应
code
状态码为 0,当回调处理异常时,应答的code
状态码应为 500,或者 4xx; 应答信息为json格式,字段定义如下:名称 类型 必填 说明 code Number 是 应答code,code 值为 0 代表此次回调成功 message String 否 具体描述信息
回调结果result
规范
字段名 | 子字段名 | 描述 | |
---|---|---|---|
errorCode | 0表示成功 | ||
taskId | 任务ID | ||
source | 音频源语言 | ||
target | 翻译目标语言 | ||
translation | startTime | 区间开始时间 | |
endTime | 区间结束时间 | ||
sourceText | 从音频中识别出的文本 | ||
targetText | 翻译后目标语言后的文本 | ||
targetAudio | 翻译后对应的语音,outputStrategy=1时返回 | ||
targetAudio | 翻译后对应的语音,outputStrategy=0时返回 |
回调结果result
示例
{
"errorCode": 0,
"taskId":"us_21c61c2f-6fbc-4c0e-b3b0-8a906fb4df8a_1698828479533",
"source": "zh-CN",
"target": "en",
"translation":
[{
"startTime":0.01,
"endTime":1.98,
"sourceText": "你好!",
"targetText": "Hello!",
"targetAudio": "https://xxxx"//outputStrategy=1
},...],
"targetAudio": "https://xxxx"//outputStrategy=0
}
错误码
HTTP状态码 | 错误码 | 错误消息 |
---|---|---|
200 | 0 | no message |
429 | 1104 | Out of Rate Limit |
429 | 1105 | Out of Quotas |
405 | 1004 | Method Not Allowed |
411 | 1007 | Not Content Length |
400 | 1002 | API Not Found |
400 | 1003 | Bad Request |
400 | 2000 | Missing Parameter |
400 | 2001 | Invalid Parameter |
400 | 2002 | Invalid Request |
400 | 2102 | Input Too Long |
400 | 2109 | Speech Recognition Failed |
400 | 2110 | File is invalid |
400 | 2111 | Failed to download file |
400 | 2112 | TaskId is invalid |
401 | 1102 | Unauthorized Client |
401 | 1106 | Missing Access Token |
401 | 1107 | Invalid Token |
401 | 1108 | Expired Token |
401 | 1110 | Invalid Client |
401 | 2000 | Missing Parameter |
401 | 2001 | Invalid Parameter |
401 | 2002 | Invalid Request |
401 | 2003 | Invalid Scope |
401 | 2004 | Unsupported Response Type |
401 | 2100 | Translation Failed |
401 | 2101 | No Match |
401 | 2103 | Detection Failed |
401 | 2104 | Language Not Supported |
401 | 2105 | Normalization Failed |
401 | 2106 | Inappropriate Word Used |
401 | 2107 | Invoke Service Failed |
401 | 2108 | Service Unavaliable |