通过API/SDK上传语音文件

您可以通过调用API或使用SDK进行文件上传。只支持上传专属模式外呼。语音文件上传完成后会进入审核阶段,预计2小时内会完成审核。

说明
  • 请选择WAV或MP3格式且小于2 MB的语音文件。

  • URL:http://dysmsapi-custom.cn-shanghai.aliyuncs.com/dyvms/upload?filename=test.wav

  • 建议使用语音服务控制台中的语音文件上传功能。具体操作,请参见通过控制台上传语音文件

请求参数

参数

含义

示例

参数位置

备注

filename

语⾳⽂件名称

test.wav

path

文件名称(包含扩展名),必填。

authorization

权限校验参数

ZmY4MDgwODEzYzM****

header

调用GetToken接口获取的Token值即是authorization的值。

请求示例

POST http://dysmsapi-custom.cn-shanghai.aliyuncs.com/dyvms/upload?filename=test.wavHTTP/1.1
 Host:192.168.0.1:8883
 content-length: 1390
 Accept:application/json;
 Content-Type:application/octet-stream;charset=utf-8;
authorization:ZmY4MDgwODEzYzM3ZGE1MzAxM2M4MDRmODA3MjAwN2M6MjAxMzAyMDExN****zA=

返回示例

{
 "code": "OK",
 "msg": "success",
 "data": {
 "voiceCode": "语音文件ID,可用于语音通知外呼"
 }
}

操作步骤

  1. 云资源访问授权。

    1. 使用阿里云账号(主账号)登录语音服务控制台

    2. 为RAM用户进行授权。具体操作请参见为RAM用户授权

    3. 拷贝链接https://ram.console.aliyun.com/#/role/authorize?request=%7B%22Requests%22%3A%7B%22request1%22%3A%7B%22RoleName%22%3A%22AliyunDyvmsCustomAPIRole%22%2C%22TemplateId%22%3A%22AliyunDyvmsCustomAPIRole%22%7D%7D%2C%22ReturnUrl%22%3A%22https%3A%2F%2Fdyvms.console.aliyun.com%22%2C%22Service%22%3A%22Dyvms%22%7D至浏览器中。在云资源访问授权页面,单击同意授权8

  2. 获取Token。

    调用GetToken接口或在OpenAPI开发者门户获取Token。

    说明
    • Token的有效期是半个小时。

    • TokenType的默认值为dyvms。

    返回结果:

    {
        "Message": "OK",
        "RequestId": "D9CB3933-9FE3-4870-BA8E-2BEE91B69DDD",
        "Token": "eyJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc190ZXN0In0.eyJqdGkiOiJUTjhfRzFCaEpETTJ3LWVoeGJZZXRnIiwiaWF0IjoxNjIzMzk0NTI3LCJleHAiOjE2MjMzOTYzMjcsIm5iZiI6MTYyMzM5NDQ2Nywic3ViIjoiWU****",
        "Code": "OK",
        "Success": "true"
    }
  3. 确认文件目录。

    使用以下代码生成文件目录名称,入参aliyunUid为主账号aliyunUid。

     private String convertASCII(String aliyunUid){
            StringBuilder stringBuilder = new StringBuilder();
            for (int i = 0; i < aliyunUid.length(); i++) {
                stringBuilder.append((char)(aliyunUid.charAt(i)+ 51 ));
            }
            return stringBuilder.toString() ;
     }
  4. 上传语音文件。

    方式一:使用PostMan工具上传语音文件

    1. API链接。

      filename为示例

      http://dysmsapi-custom.cn-shanghai.aliyuncs.com/dyvms/upload?filename=asdewqasaaa/测试文件_aaaa3.wav
    2. 添加参数。

      添加Header参数:authorization请填入步骤2中已获取的Token。如:eyJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc190ZXN0In0.eyJqdGkiOiJUTjhfRzFCaEpETTJ3LWVoeGJZZXRnIiwiaWF0IjoxNjIzMzk0NTI3LCJleHAiOjE2MjMzOTYzMjcsIm5iZiI6MTYyMzM5NDQ2Nywic3ViIjoiWU****

      12

      添加Params参数:filename请填入步骤3中已获取的文件目录/文件名(包含格式)。如:asdewqasaaa/测试文件_aaaa3.wav11

    3. 选择文件。

      Body下选择binary,选择本地文件并上传。13

    4. 返回结果。14

    方式二:调用接口上传语音文件

    调用HTTP服务地址http://dysmsapi-custom.cn-shanghai.aliyuncs.com/dyvms/upload上传语音文件。

    代码示例

    说明

    调用接口前,需配置环境变量,通过环境变量读取访问凭证。AccessKey ID和AccessKey Secret的环境变量名:VMS_AK_ENV 、VMS_SK_ENV。配置详情请参见在Linux、macOS和Windows系统配置环境变量

    获取Token需要的依赖

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>dysmsapi20170525</artifactId>
      <version>2.1.4</version>
    </dependency>

    HTTP上传文件需要的Jar包

    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.5.13</version>
     </dependency>
    package com.aliyun.sample;
    
    import com.aliyun.dysmsapi20170525.models.GetTokenResponse;
    import com.aliyun.tea.TeaException;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.net.URLEncoder;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.InputStreamEntity;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.util.EntityUtils;
    
    public class Sample {
    
      /**
       * 使用AK&SK初始化账号Client
       *
       * @param accessKey Id
       * @param accessKey Secret
       * @return Client
       * @throws Exception
       */
      public static com.aliyun.dysmsapi20170525.Client createClient(
        String accessKeyId,
        String accessKeySecret
      ) throws Exception {
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
          //TODO 您的 AccessKey ID
          .setAccessKeyId(accessKeyId)
          //TODO 您的 AccessKey Secret
          .setAccessKeySecret(accessKeySecret);
        // 访问的域名
        config.endpoint = "dysmsapi.aliyuncs.com";
        return new com.aliyun.dysmsapi20170525.Client(config);
      }
    
      public static void main(String[] args_) throws Exception {
        String token = null;
        java.util.List<String> args = java.util.Arrays.asList(args_);
        // 阿里云账号AccessKey ID拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户
        // 此处以把AccessKey ID和AccessKey Secret保存在环境变量为例说明。 您也可以根据业务需要,保存到配置文件里
        // 强烈建议不要把AccessKey ID和AccessKey Secret保存到代码里,会存在密钥泄漏风险
        com.aliyun.dyvmsapi20170525.Client client = Sample.createClient(
          System.getenv("VMS_AK_ENV"),
          System.getenv("VMS_SK_ENV")
        );
        com.aliyun.dysmsapi20170525.models.GetTokenRequest getTokenRequest = new com.aliyun.dysmsapi20170525.models.GetTokenRequest()
          .setTokenType("dyvms"); // 语音业务tokenType固定dyvms
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
    
        // 获取token(可直接使用步骤2中已获取的Token)
        try {
          // 复制代码运行请自行打印API的返回值
          GetTokenResponse response = client.getTokenWithOptions(
            getTokenRequest,
            runtime
          );
          if (response != null && "OK".equals(response.getBody().getCode())) {
            token = response.getBody().getToken();
          }
        } catch (TeaException error) {
          // 如有需要,请打印 error
          com.aliyun.teautil.Common.assertAsString(error.message);
          throw error;
        } catch (Exception _error) {
          TeaException error = new TeaException(_error.getMessage(), _error);
          // 如有需要,请打印 error
          com.aliyun.teautil.Common.assertAsString(error.message);
          throw _error;
        }
        String dir = convertASCII("aliyunUid"); //TODO输入自己主账号的aliyunUid
        String fileName = dir + "/" + "测试文件_aaaa17.wav"; //TODO 输入自己上传后需要展示的文件名和后缀
        fileName = URLEncoder.encode(fileName, "UTF-8");
        @SuppressWarnings("deprecation")
        HttpClient ht = new DefaultHttpClient();
        HttpPost post = new HttpPost(
          "http://dysmsapi-custom.cn-shanghai.aliyuncs.com/dyvms/upload?filename=" +
          fileName
        );
        HttpResponse rs = null;
        try {
          File file = new File(// C:\\Users\\...\\测试文件.wav); //TODO自己本地文件路径
          //System.out.println(file.exists());
          //文件流包装到FileBody
          post.setEntity(
            new InputStreamEntity(new FileInputStream(file), file.length())
          );
          //设置请求内容类型(若不显示设置,默认text/plain;不同的类型服务端解析格式不同,可能导致参请求参数解析不到的情况)
          post.addHeader("Content-Type", "application/octet-stream");
    
          post.addHeader("authorization", token);
          //发送请求
          rs = ht.execute(post);
          System.out.println(
            "" +
            rs.getStatusLine().getStatusCode() +
            " " +
            EntityUtils.toString(rs.getEntity(), "utf-8")
          );
        } catch (Exception e) {
          e.printStackTrace();
        } finally {
          // 销毁
          if (rs != null) {
            try {
              EntityUtils.consume(rs.getEntity());
            } catch (IOException e) {
              e.printStackTrace();
            }
          }
        }
      }
    
      private static String convertASCII(String aliyunUid) {
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < aliyunUid.length(); i++) {
          stringBuilder.append((char) (aliyunUid.charAt(i) + 51));
        }
        return stringBuilder.toString();
      }
    }