智能对话分析服务提供Java和python2种版本的SDK(3.0.4+),若您使用这2种开发语言,请直接使用SDK(参见SDK参考),可以免去自己拼接URL以及签名等易出错的问题;若以上2版本SDK不满足您的需求,可以使用API直接调用。
http访问各接口完成地址组成如下
完整地址示例 | 参数含义 |
https://qualitycheck.cn-hangzhou.aliyuncs.com/?JsonStr={"appKey":1933************,"taskId":"B8578666-7136-49A9-9DA0-3B3732DAFF62"} &SignatureVersion=1.0 &Action=GetAudioDataStatus &Format=JSON &SignatureNonce=1c550238-8a54-46a0-b8c4-666237b1e399 &Version=2019-01-15 &AccessKeyId=lFKE************&Signature=TfxhzLRdTzjBmHeMRJWrMDhOzMM= &SignatureMethod=HMAC-SHA1 &RegionId=cn-hangzhou &Timestamp=2018-02-06T08:09:12Z | JsonStr业务参数JSON字符串,具体值参见各接口 SignatureVersion固定值为1.0 Action为活动业务码。具体值参见下面给出的表格 Format接口返回的格式,共有2种JSON,XML SignatureNonce为唯一的uuid值 Version固定值为2019-01-15 AccessKeyId为调用者的accesskey Signature为签名,生成方式见下面的详细说明 SignatureMethod为签名方法,固定值为HMAC-SHA1 RegionId固定值为cn-hangzhou Timestamp为请求的时间戳。按照ISO8601标准表示,并需要使用UTC时间,格式为yyyy-MM-ddTHH:mm:ssZ。示例: |
Signature签名生成方法
请求参数排序
按照参数名称的字典顺序对请求中的参数进行排序。(请求参数有:AccessKeyId、Action、Format、JsonStr、RegionId、SignatureMethod、SignatureNonce、SignatureVersion、Timestamp、Version)
对每个请求参数的名称和值进行编码,名称和值要使用UTF-8字符集进行URL编码(需要编码的字段至少包括:JsonStr、Timestamp),URL编码的编码规则是:
对于字符A-Z、a-z、0-9以及字符“-”、“_”、“.”、“~”不编码;
对于其他字符编码成“%XY”的格式,其中XY是字符对应ASCII码的16进制表示。比如英文的双引号(”)对应的编码是%22
对于扩展的UTF-8字符,编码成“%XY%ZA…”的格式;
需要说明的是英文空格要被编码是%20,而不是加号(+)。
说明注:一般支持URL编码的库(比如Java中的java.net.URLEncoder)都是按照“application/x-www-form-urlencoded”的MIME类型的规则进行编码的。实现时可以借助该方法,把编码后的字符串中加号(+)替换成%20、星号(*)替换成%2A、%7E替换回波浪号(~),即可得到上述规则描述的编码字符串。
参考代码(Java):
publicString percentEncode(String o)throwsUnsupportedEncodingException{ returnURLEncoder.encode(o,"utf8").replace("+","%20") .replace("*","%2A") .replace("%7E","~"); }
对编码后的参数名称和值使用英文等号(=)进行连接。
将英文等号连接得到的字符串按参数名称的字典顺序依次使用&符号连接,即得到规范化请求字符串。
编码后的字符串(CanonicalizedQueryString)如下:
&AccessKeyId=lFKE************&Action=GetAudioDataStatus&Format=JSON&JsonStr=%7B%22appKey%22%3A1733149043164104%2C%22taskId%22%3A%22B8578666-7136-49A9-9DA0-3B3732DAFF62%22%7D&RegionId=cn-hangzhou&SignatureMethod=HMAC-SHA1&SignatureNonce=1c550238-8a54-46a0-b8c4-666237b1e399&SignatureVersion=1.0&Timestamp=2018-02-06T08%3A50%3A58Z&Version=2016-08-01
计算签名(StringToSign)的构造规则为:
HTTPMethod + “&” + percentEncode(“/”) + “&” + percentEncode(CanonicalizedQueryString)
其中:
HTTPMethod是提交请求用的HTTP方法,比如:GET、POST。
percentEncode(“/”)是按照URL编码规则对字符“/”进行编码得到的值,即“%2F”。
percentEncode(CanonicalizedQueryString)是对上步中CanonicalizedQueryString的字符串按URL编码规则编码后得到的字符串。
按照RFC2104的定义,使用上面用于签名的字符串计算签名HMAC值。
说明注意:计算签名时使用的Key就是用户持有的AccessKeySecret并加上一个“&”字符(ASCII:38),使用的哈希算法是SHA1。
按照Base64编码规则把上面的HMAC值编码成字符串,即得到签名值(Signature)。
示例代码
Java:
publicString signString(StringStringToSign,String accessSecret)
{
Mac mac =Mac.getInstance("HmacSHA1");
mac.init(newSecretKeySpec(
accessSecret.getBytes("UTF-8"),"HmacSHA1"));
byte[] signData = mac.doFinal(StringToSign.getBytes("UTF-8"));
returnBase64Helper.encode(signData);
}
python2:
import hashlib
importstring
from hashlib import sha1
import base64
import hmac
from hmac importnewas hmac
def hash_hmac(ac_key, text):
h = hmac(ac_key, text, sha1)
d = h.digest()
print'd: '+ d
return str(d.encode('base64'))
python3:
import base64
import hmac
from hashlib import sha1
def hash_hmac(code, key, sha1):
hmac_code = hmac.new(key.encode(), code.encode(), sha1).digest()
return base64.b64encode(hmac_code).decode()
将得到的签名值作为Signature参数添加到请求参数中,即完成对请求签名的过程。
注意:得到的签名值在作为最后的请求参数值提交时,要和其他参数一样,按照RFC3986的规则进行URL编码)。
示例
签名前的请求URL为:
http://qualitycheck.cn-hangzhou.aliyuncs.com/?JsonStr={"appKey":1733149043164104,"taskId":"B8578666-7136-49A9-9DA0-3B3732DAFF62"}&SignatureVersion=1.0 &Action=GetAudioDataStatus&Format=JSON&SignatureNonce=1c550238-8a54-46a0-b8c4-666237b1e399 &Version=2016-08-01&AccessKeyId=testid&SignatureMethod=HMAC-SHA1&RegionId=cn-hangzhou &Timestamp=2018-02-06T08:50:58Z
那么StringToSign为:
GET&%2F&AccessKeyId%3Dtestid&Action%3DGetAudioDataStatus&Format%3DJSON&JsonStr%3D%257B%2522appKey%2522%253A%25221733149043164104%2522%252C%2522taskId%2522%253A%2522B8578666-7136-49A9-9DA0-3B3732DAFF62%2522%257D&RegionId%3Dcn-hangzhou&SignatureMethod%3DHMAC-SHA1&SignatureNonce%3D1c550238-8a54-46a0-b8c4-666237b1e399&SignatureVersion%3D1.0&Timestamp%3D2018-02-06T08%253A50%253A58Z&Version%3D2016-08-01
如使用的AccessKeyId是“testid”,Access Key Secret是“testsecret”,用于计算HMAC的Key就是“testsecret&”,则计算得到的签名值是:
MQIWlE70sNCpDsRRKTpOvdQcME8=
签名后的请求URL为(注意增加了Signature参数):
http://qualitycheck.cn-hangzhou.aliyuncs.com/?JsonStr={"appKey":1733149043164104,"taskId":"B8578666-7136-49A9-9DA0-3B3732DAFF62"}&SignatureVersion=1.0 &Action=GetAudioDataStatus&Format=JSON&SignatureNonce=1c550238-8a54-46a0-b8c4-666237b1e399 &Version=2016-08-01&AccessKeyId=testid&SignatureMethod=HMAC-SHA1&RegionId=cn-hangzhou &Timestamp=2018-02-06T08:50:58Z&Signature=MQIWlE70sNCpDsRRKTpOvdQcME8=
Action业务码
接口名称 | Action业务码 |
上传分析规则 | UploadRule |
获取用户规则 | GetRule |
获取规则明细 | GetRuleDetail |
删除用户规则 | InvalidRule |
上传待检数据(语音) | UploadAudioData |
上传待检数据(文本) | UploadData |
指定规则上传待检数据(语音) | UploadAudioDataWithRules |
指定规则上传待检数据(文本) | UploadDataWithRules |
获取分析结果数 | GetResultCount |
获取分析结果 | GetResult |
获取语音处理状态 | GetAudioDataStatus |
获取数据集基础信息 | GetDataSetList |
获取评分设置信息 | GetScoreInfo |
复核提交 | SaveReviewResult |
修改用户规则 | UpdateRule |
获取热词词表 | GetAsrVocab |
创建语音热词 | CreateAsrVocab |
更新语音热词 | UpdateAsrVocab |
删除热词词表 | DeleteAsrVocab |