API 调用说明

智能对话分析服务提供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。示例:2018-01-01T12:00:00Z表示北京时间2018年01月01日20点00分00秒。

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