您可以通过调用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,可用于语音通知外呼"
}
}
操作步骤
云资源访问授权。
使用阿里云账号(主账号)登录语音服务控制台。
为RAM用户进行授权。具体操作请参见为RAM用户授权。
拷贝链接
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
至浏览器中。在云资源访问授权页面,单击同意授权。
获取Token。
调用GetToken接口或在OpenAPI开发者门户获取Token。
说明Token的有效期是半个小时。
TokenType的默认值为dyvms。
返回结果:
{ "Message": "OK", "RequestId": "D9CB3933-9FE3-4870-BA8E-2BEE91B69DDD", "Token": "eyJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc190ZXN0In0.eyJqdGkiOiJUTjhfRzFCaEpETTJ3LWVoeGJZZXRnIiwiaWF0IjoxNjIzMzk0NTI3LCJleHAiOjE2MjMzOTYzMjcsIm5iZiI6MTYyMzM5NDQ2Nywic3ViIjoiWU****", "Code": "OK", "Success": "true" }
确认文件目录。
使用以下代码生成文件目录名称,入参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() ; }
上传语音文件。
方式一:使用PostMan工具上传语音文件
API链接。
filename为示例
http://dysmsapi-custom.cn-shanghai.aliyuncs.com/dyvms/upload?filename=asdewqasaaa/测试文件_aaaa3.wav
添加参数。
添加Header参数:authorization请填入步骤2中已获取的Token。如:
eyJhbGciOiJSUzI1NiIsImtpZCI6ImFjY2Vzc190ZXN0In0.eyJqdGkiOiJUTjhfRzFCaEpETTJ3LWVoeGJZZXRnIiwiaWF0IjoxNjIzMzk0NTI3LCJleHAiOjE2MjMzOTYzMjcsIm5iZiI6MTYyMzM5NDQ2Nywic3ViIjoiWU****
添加Params参数:filename请填入步骤3中已获取的文件目录/文件名(包含格式)。如:asdewqasaaa/测试文件_aaaa3.wav
选择文件。
在Body下选择binary,选择本地文件并上传。
返回结果。
方式二:调用接口上传语音文件
调用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(); } }