
# 获取录音文件下载地址API - GetRecordingDownloadUrl
#### 典型场景
SP通过"呼叫状态和话单通知API"获取录音文件名后，调用此接口获取录音文件的下载地址。
#### 接口功能
该接口用于SP向语音通话平台获取录音文件的下载地址。
#### 使用说明
- 前提条件
  - 已通过"[应用管理](https://console.huaweicloud.com/voicecall/#/appManagement)"页面获取APP_Key，APP_Secret和APP接入地址。
  
  - 已通过"呼叫状态和话单通知API"获取了录音文件名。
   
- 注意事项
  - 响应返回的录音下载地址有效期为7天。**请在七天期限内调用该接口获取下载地址并下载录音。**
  
  - 调用获取录音文件下载地址接口需要把connection设置为不支持重定向，再从Location头域中获取到录音文件的下载地址。
  
  - 若connection设置为支持重定向，则重定向后平台返回的是录音文件的数据流。
   
- 使用限制 无。
  
 
#### 授权信息
账号具备所有API的调用权限，如果使用账号下的IAM用户调用当前API，该IAM用户需具备调用API所需的权限，具体权限要求请参见[权限管理](https://support.huaweicloud.com/productdesc-VoiceCall/rtc_03_0011.html)。
#### URI
GET /rest/provision/voice/record/v1.0
#### 请求参数
表1请求URL参数说明 
| 参数名称         | 是否必选 | 参数类型          | 默认值 | 说明                                              |
|:---|:---|:---|:---|:---|
| fileName     | 是    | String(1-128) | 无   | 录音文件名。通过"呼叫状态和话单通知API"的recordObjectName参数获取。    |
| recordDomain | 是    | String(1-128) | 无   | 录音文件存储的服务器域名，通过"呼叫状态和话单通知API"的recordDomain参数获取。 |
   
表2请求Headers参数说明 
| 参数名称          | 是否必选 | 参数类型   | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|:---|:---|:---|:---|
| Content-Type  | 是    | String | **参数解释：** 消息体的类型（格式）。 **约束限制：** 不涉及。 **取值范围：** 固定填写为application/json;charset=UTF-8。 **默认取值：** 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| Authorization | 是    | String | 固定填写为AKSK realm="SDP",profile="UsernameToken",type="Appkey"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| X-AKSK        | 是    | String | 取值为UsernameToken Username="APP_Key的值", PasswordDigest="PasswordDigest的值", Nonce="随机数", Created="随机数生成时间"。 - PasswordDigest：根据PasswordDigest = Base64 (HMAC-SHA256 (Password，Nonce + Created))生成。其中，Password为APP_Secret的值。Nonce、Created、Password直接进行字符串拼接即可，无需包含+号和空格。  - Nonce：客户发送请求时生成的一个随机数，长度为1\~128位，可包含数字和大小写字母。例如：66C92B11FF8A425FB8D4CCFE0ED9ED1F。  - Created：随机数生成时间。采用标准UTC格式，例如：2018-02-12T15:30:20Z。不同编程语言中将UTC时间戳转换为普通时间时使用的格式不同，部分语言可参考[表3]。   |
   
 表3不同编程语言的时间格式 
| 编程语言    | 时间格式                                                                                                                                                              |
|:---|:---|
| Java    | yyyy-MM-dd'T'HH:mm:ss'Z'                                                                                                                                          |
| PHP     | Y-m-d\\TH:i:s\\Z                                                                                                                                                  |
| Python  | %Y-%m-%dT%H:%M:%SZ                                                                                                                                                |
| C#      | yyyy-MM-ddTHH:mm:ssZ                                                                                                                                              |
| Node.js | toISOString().replace(/.\[0-9\]+\\Z/, 'Z') 注：Node.js中，使用toISOString()转换后的时间格式去除毫秒后即为本接口要求的时间格式。 |
   
#### 响应参数
表4响应Headers参数 
| 参数名称     | 是否必选 | 参数类型          | 说明                |
|:---|:---|:---|:---|
| Location | 否    | String（0-512） | 录音文件下载地址。成功响应时返回。 |
   
表5响应Body参数 
| 参数名称       | 是否必选 | 参数类型          | 说明                |
|:---|:---|:---|:---|
| resultcode | 否    | String(1-32)  | 请求返回的结果码。失败响应时返回。 |
| resultdesc | 否    | String(1-256) | 操作结果描述。失败响应时返回。   |
   
#### 结果码说明
请根据以下结果码进行调测，如果有疑问，可联系管理员进行确认。
表6响应结果码 
| 响应码                                                                                                           | 结果码     | 英文描述                                                         | 中文描述                                        | 处理方法                                                                                                                                                                                                    |
|:---|:---|:---|:---|:---|
| 301                                                                                                           | -       | -                                                            | -                                           | 成功响应，请从Location头域中获取录音文件下载地址。                                                                                                                                                                           |
| 400       | 1023006 | Authorization not contained in the HTTP header.              | HTTP消息头未找到Authorization字段。                  | 请检查HTTP消息头中是否携带了Authorization字段。                                                                                                                                                                        |
| 400       | 1023007 | realm not contained in Authorization.                        | Authorization字段中未找到realm属性。                 | 请检查Authorization字段中的是否携带了realm属性。                                                                                                                                                                       |
| 400       | 1023008 | profile not contained in Authorization.                      | Authorization字段中未找到profile属性。               | 请检查Authorization字段中的是否携带了profile属性。                                                                                                                                                                     |
| 400       | 1023009 | The value of realm in Authorization must be SDP.             | Authorization中realm属性值应该为"SDP"。             | 请检查Authorization字段中的realm属性值是否为"SDP"。                                                                                                                                                                   |
| 400       | 1023010 | The value of profile in Authorization must be UsernameToken. | Authorization中profile属性值应该为"UsernameToken"。 | 请检查Authorization字段中的profile属性值是否为"UsernameToken"。                                                                                                                                                       |
| 400       | 1023011 | The value of type in Authorization must be app_key.          | Authorization中type属性值应该为"Appkey"。           | 请检查Authorization字段中的type属性值是否为"Appkey"。                                                                                                                                                                 |
| 400       | 1023012 | type not contained in Authorization.                         | Authorization字段中未找到type属性。                  | 请检查Authorization字段中是否携带了type属性。                                                                                                                                                                         |
| 400       | 1023033 | HTTP header not found X-AKSK field.                          | HTTP头未找到X-AKSK字段。                           | 请检查HTTP消息头中是否携带了X-AKSK字段。                                                                                                                                                                               |
| 400       | 1023034 | UserName not contained in X-AKSK.                            | X-AKSK字段中未找到UserName属性。                     | 请检查X-AKSK字段中的是否携带了Username属性。                                                                                                                                                                           |
| 400       | 1023035 | Nonce not contained in X-AKSK.                               | X-AKSK字段中未找到Nonce属性。                        | 请检查X-AKSK字段中的是否携带了Nonce属性。                                                                                                                                                                              |
| 400       | 1023036 | Created not contained in X-AKSK.                             | X-AKSK字段中未找到Created属性。                      | 请检查X-AKSK字段中的是否携带了Created属性。                                                                                                                                                                            |
| 400       | 1023037 | PasswordDigest not contained in X-AKSK.                      | X-AKSK字段中未找到PasswordDigest属性。               | 请检查X-AKSK字段中的是否携带了PasswordDigest属性。                                                                                                                                                                     |
| 400       | 1023038 | UsernameToken not contained in X-AKSK.                       | X-AKSK中没有携带UsernameToken。                   | 请检查X-AKSK字段中的是否携带了UsernameToken属性。                                                                                                                                                                      |
| 401                                                                                                           | 1010010 | Invalid digest.                                              | PasswordDigest校验失败。                         | 请检查PasswordDigest字段填写是否正确。                                                                                                                                                                              |
| 401                                                                                                           | 1010013 | Time out limit.                                              | 时间超出限制。                                     | 请确认X-AKSK鉴权时，生成随机数的时间与发送请求时的本地时间不能相差太大（具体差值请与管理员确认）。                                                                                                                                                    |
| 403                                                                                                           | 1010002 | Invalid request.                                             | 非法请求。                                       | 请检查请求携带的参数格式是否都合法。                                                                                                                                                                                      |
| 403                                                                                                           | 1010003 | Invalid app_key.                                             | 无效的app_key。                                 | 检查请求携带的app_key是否填写正确，app_key从[应用管理](https://console.huaweicloud.com/voicecall/#/appManagement)页面获取，若填写正确，请在[应用管理](https://console.huaweicloud.com/voicecall/#/appManagement)页面检查请求携带的app_key所属应用状态是否正常。 |
| 403                                                                                                           | 1010007 | The ativeState of User is not ACTIVATING.                    | 用户状态未激活。                                    | 请检查app_key所属的华为云账户是否处于欠费状态，若处于欠费状态，请参考[华为云账户充值](https://support.huaweicloud.com/usermanual-billing/bills-topic_30000002.html)完成充值，若没有处于欠费状态，请联系管理员处理。                                                   |
| 403                                                                                                           | 1012012 | Application does not open recording function.                | 应用未开启录音功能。                                  | 请确认请求携带的app_key是否开启了录音功能。                                                                                                                                                                               |
| 403                                                                                                           | 1012007 | The record does not exist.                                   | 记录不存在。                                      | 请确认fileName参数的填写是否正确。                                                                                                                                                                                   |
| 403                                                                                                           | 1011006 | Under traffic control status                                 | 请求者（IP、手机号码）处于流控状态下。                        | 请稍等一分钟再试。                                                                                                                                                                                               |
| 403                                                                                                           | 1020166 | The app client ip is not in ip white list.                   | 请求发送方app IP不在白名单列表中。                        | 联系管理员检查IP白名单是否配置正确。                                                                                                                                                                                     |
| 403                                                                                                           | 1020176 | Authentication failed, try again later                       | 鉴权失败，稍后重试                                   | IP因鉴权失败次数过多导致被拉黑，请30分钟后重试，或联系管理员放通该IP。                                                                                                                                                                  |
| 500                                          | 1010001 | Internal system error.                                       | 系统错误。                                       | 请联系管理员处理。                                                                                                                                                                                               |
| 500                                          | 1023001 | Internal error.                                              | 内部错误。                                       | 请联系管理员处理。                                                                                                                                                                                               |
   
#### 接口示例
- 请求示例
  ```
  GET  /rest/provision/voice/record/v1.0? fileName=1200_366_0_20161228102743.wav&recordDomain=huawei HTTP1.1 
  content-type: application/json;charset=UTF-8
  authorization: AKSK realm="SDP",profile="UsernameToken",type="Appkey"
  x-aksk: UsernameToken Username="ZRBRz4bAXoFgEH7o4Ew308eXc1RA",PasswordDigest="****",Nonce="ac1c911c4792492687f8f6b2264a491e",Created="2018-05-26T00:35:30Z"
  content-length:xx
  ```
  
- 响应示例
  ```
  HTTP/1.1 301 Moved Permanently 
  Location: **** 
  Connection: close 
  Content-Length: 0
  ```
  
 
#### 代码样例
前往[代码样例](https://support.huaweicloud.com/devg-VoiceCall/rtc_04_0014.html)查看。
