您可以通過調用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(); } }