All Products
Search
Document Center

Content Moderation:Voice Moderation 2.0 SDKs and usage guide

Last Updated:Dec 16, 2024

You can call the Voice Moderation 2.0 API by using SDKs or HTTPS requests. We recommend that you use SDKs to call the API so as to skip some operations such as signature verification and HTTPS request body construction. This topic describes how to use Voice Moderation 2.0.

Step 1: Activate Voice Moderation 2.0

Open the service activation page and activate the Voice Moderation 2.0 service. After you call API operations, the billing system automatically charges you based on your usage.

After you activate the Voice Moderation 2.0service, the default billing method is pay-as-you-go. Daily fees are calculated based on the actual usage. If the service is not called, no charge is made.

Step 2: Grant permissions to a RAM user

Before you call API operations or use SDKs as a Resource Access Management (RAM) user, you must grant permissions to the RAM user. You can create an AccessKey pair for your Alibaba Cloud account and the RAM user. When you call API operations, you must use the AccessKey pair to complete identity verification. For information about how to obtain an AccessKey pair, see Obtain an AccessKey pair.

Procedure

  1. Log on to the RAM console as a RAM administrator.

  2. Create a RAM user.

    For more information, see Create a RAM user.

  3. Grant the AliyunYundunGreenWebFullAccess system policy to the RAM user.

    For more information, see Grant permissions to a RAM user.

    After completing the preceding operations, you can call the Content Moderation API as the RAM user.

Step 3: Install SDKs and use the SDKs to call the Voice Moderation 2.0 service

The following table provides the supported regions.

Region

Public endpoint

Internal endpoint

Singapore

green-cip.ap-southeast-1.aliyuncs.com

green-cip-vpc.ap-southeast-1.aliyuncs.com

Note

If you need SDK sample code in other programming languages, you can call an API operation in OpenAPI Explorer. OpenAPI Explorer dynamically generates the sample code of the operation for different SDKs. The following API operations are available for online debugging:

In Alibaba Cloud SDK code, you can create a default access credential by defining ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables. When you call API operations of Alibaba Cloud services, the system directly accesses the credential, reads your AccessKey pair, and then automatically completes authentication. Before you use the SDK sample code, you must configure environment variables. For more information, see Configure credentials.

SDK for Java

The Java version must be 1.8 or later.

For more information about the source code, see SDK source code for Java or SDK source code for Java in Open Source Software (OSS).

The following three types are supported for audio moderation.

Moderation of publicly accessible audio on the internet

Scenarios

When the audio to be reviewed is accessible from the Internet, Audio Moderation 2.0 can obtain the audio file through the URL and conduct the moderation.

  1. Add the following dependencies to the dependencies field:

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>green20220302</artifactId>
      <version>2.2.11</version>
    </dependency>
  2. Use the SDK for Java.

    • Sample code for submitting a voice moderation task

    • import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VoiceModerationRequest;
      import com.aliyun.green20220302.models.VoiceModerationResponse;
      import com.aliyun.green20220302.models.VoiceModerationResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      
      public class VoiceModerationDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. To avoid security risks, we recommend that you use a RAM user to call API operations or perform routine O&M. 
               * Common ways to obtain environment variables:
               * Method 1:
               *     Obtain the AccessKey ID of your RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     Obtain the AccessKey secret of your RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * Method 2:
               *     Obtain the AccessKey ID of your RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     Obtain the AccessKey secret of your RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("We recommend that you obtain the AccessKey ID of your RAM user from environment variables");
              config.setAccessKeySecret("We recommend that you obtain the AccessKey secret of your RAM user from environment variables");
              // Change the access region ID and endpoint based on your business requirements. 
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              // The connection timeout period. Unit: milliseconds. 
              config.setReadTimeout(6000);
              // The read timeout period. Unit: milliseconds. 
              config.setConnectTimeout(3000);
         
              // Note: We recommend that you reuse the instantiated client as much as possible. This improves moderation performance and avoids repeated client connections. 
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              serviceParameters.put("url", "https://xxxx/xxx/sample.wav");
      
              VoiceModerationRequest voiceModerationRequest = new VoiceModerationRequest();
              // Moderation type: multi-language voice moderation (audio_multilingual_global). 
              voiceModerationRequest.setService("audio_multilingual_global");
              voiceModerationRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VoiceModerationResponse response = client.voiceModeration(voiceModerationRequest);
                  if (response.getStatusCode() == 200) {
                      VoiceModerationResponseBody result = response.getBody();
                      System.out.println(JSON.toJSONString(result));
                      System.out.println("requestId = " + result.getRequestId());
                      System.out.println("code = " + result.getCode());
                      System.out.println("msg = " + result.getMessage());
                      Integer code = result.getCode();
                      if (200 == code) {
                          VoiceModerationResponseBody.VoiceModerationResponseBodyData data = result.getData();
                          System.out.println("taskId = [" + data.getTaskId() + "]");
                      } else {
                          System.out.println("voice moderation not success. code:" + code);
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
    • Sample code for obtaining voice moderation results

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VoiceModerationResultRequest;
      import com.aliyun.green20220302.models.VoiceModerationResultResponse;
      import com.aliyun.green20220302.models.VoiceModerationResultResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      
      public class VoiceModerationResultDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. To avoid security risks, we recommend that you use a RAM user to call API operations or perform routine O&M. 
               * Common ways to obtain environment variables:
               * Method 1:
               *     Obtain the AccessKey ID of your RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     Obtain the AccessKey secret of your RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * Method 2:
               *     Obtain the AccessKey ID of your RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     Obtain the AccessKey secret of your RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("We recommend that you obtain the AccessKey ID of your RAM user from environment variables");
              config.setAccessKeySecret("We recommend that you obtain the AccessKey secret of your RAM user from environment variables");
              // Change the access region ID and endpoint based on your business requirements. 
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              // The connection timeout period. Unit: milliseconds. 
              config.setReadTimeout(6000);
              // The read timeout period. Unit: milliseconds. 
              config.setConnectTimeout(3000);
      
              // Note: We recommend that you reuse the instantiated client as much as possible. This improves moderation performance and avoids repeated client connections. 
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              // The task ID that is returned when a voice moderation task is submitted. 
              serviceParameters.put("taskId", "Task ID that is returned when a voice moderation task is submitted");
      
      
              VoiceModerationResultRequest voiceModerationResultRequest = new VoiceModerationResultRequest();
              // Moderation type: multi-language voice moderation (audio_multilingual_global). 
              voiceModerationResultRequest.setService("audio_multilingual_global");
              voiceModerationResultRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VoiceModerationResultResponse response = client.voiceModerationResult(voiceModerationResultRequest);
                  if (response.getStatusCode() == 200) {
                      VoiceModerationResultResponseBody result = response.getBody();
                      System.out.println("requestId=" + result.getRequestId());
                      System.out.println("code=" + result.getCode());
                      System.out.println("msg=" + result.getMessage());
                      if (200 == result.getCode()) {
                          VoiceModerationResultResponseBody.VoiceModerationResultResponseBodyData data = result.getData();
                          System.out.println("sliceDetails = " + JSON.toJSONString(data.getSliceDetails()));
                          System.out.println("taskId = " + data.getTaskId());
                          System.out.println("url = " + data.getUrl());
                      } else {
                          System.out.println("voice moderation result not success. code:" + result.getCode());
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }

Moderation of local audio

Scenarios

When the audio for moderation is located on your local machine and is unaccessible from the Internet, you can upload the audio file to the Object Storage Service (OSS) bucket provided by Content Moderation. Audio Moderation 2.0 can directly access the OSS, retrieve the audio content, and conduct the moderation.

  1. Add the following dependencies to the dependencies field:

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>green20220302</artifactId>
      <version>2.2.11</version>
    </dependency>

    Install OSS SDK:

    <dependency>
      <groupId>com.aliyun.oss</groupId>
      <artifactId>aliyun-sdk-oss</artifactId>
      <version>3.16.3</version>
    </dependency>
  2. Use the SDK for Java.

    • Sample code for submitting a voice moderation task

    • import com.alibaba.fastjson.JSON;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.DescribeUploadTokenResponse;
      import com.aliyun.green20220302.models.DescribeUploadTokenResponseBody;
      import com.aliyun.green20220302.models.VoiceModerationRequest;
      import com.aliyun.green20220302.models.VoiceModerationResponse;
      import com.aliyun.green20220302.models.VoiceModerationResponseBody;
      import com.aliyun.green20220302.models.VoiceModerationResponseBody.VoiceModerationResponseBodyData;
      import com.aliyun.green20220302.models.VoiceModerationResponseBody.VoiceModerationResponseBodyDataResult;
      import com.aliyun.oss.OSS;
      import com.aliyun.oss.OSSClientBuilder;
      import com.aliyun.oss.model.PutObjectRequest;
      import com.aliyun.teaopenapi.models.Config;
      import com.aliyun.teautil.models.RuntimeOptions;
      
      import java.io.File;
      import java.util.HashMap;
      import java.util.List;
      import java.util.Map;
      import java.util.UUID;
      
      
      public class LocalVoiceModerationDemo {
          /**Specifies whether the service is deployed in a VPC.*/
          public static boolean isVPC = false;
      
          /**The token used to upload the file. The key is the endpoint of Content Moderation and the value is the token.*/
          public static Map<String, DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData> tokenMap = new HashMap<>();
      
          /**The client that uploads the file.*/
          public static OSS ossClient = null;
      
          /**
           * Create the client that initiates image moderation requests.
           *
           * @param accessKeyId
           * @param accessKeySecret
           * @param endpoint
           * @return
           * @throws Exception
           */
          public static Client createClient(String accessKeyId, String accessKeySecret, String endpoint) throws Exception {
              Config config = new Config();
              config.setAccessKeyId(accessKeyId);
              config.setAccessKeySecret(accessKeySecret);
              // Change the region ID and endpoint based on your business requirements.
              config.setEndpoint(endpoint);
              return new Client(config);
          }
      
          /**
           * Create the client that uploads the file.
           *
           * @param tokenData
           * @param isVPC
           */
          public static void getOssClient(DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData tokenData, boolean isVPC) {
              //Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
              if (isVPC) {
                  ossClient = new OSSClientBuilder().build(tokenData.ossInternalEndPoint, tokenData.getAccessKeyId(), tokenData.getAccessKeySecret(), tokenData.getSecurityToken());
              } else {
                  ossClient = new OSSClientBuilder().build(tokenData.ossInternetEndPoint, tokenData.getAccessKeyId(), tokenData.getAccessKeySecret(), tokenData.getSecurityToken());
              }
          }
      
          /**
           * Upload a file.
           *
           * @param filePath
           * @param tokenData
           * @return
           * @throws Exception
           */
          public static String uploadFile(String filePath, DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData tokenData) throws Exception {
              String[] split = filePath.split("\\.");
              String objectName;
              if (split.length > 1) {
                  objectName = tokenData.getFileNamePrefix() + UUID.randomUUID() + "." + split[split.length - 1];
              } else {
                  objectName = tokenData.getFileNamePrefix() + UUID.randomUUID();
              }
              PutObjectRequest putObjectRequest = new PutObjectRequest(tokenData.getBucketName(), objectName, new File(filePath));
              ossClient.putObject(putObjectRequest);
              return objectName;
          }
      
          public static VoiceModerationResponse invokeFunction(String accessKeyId, String accessKeySecret, String endpoint) throws Exception {
              //Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
              Client client = createClient(accessKeyId, accessKeySecret, endpoint);
              RuntimeOptions runtime = new RuntimeOptions();
      
              //The full path of the local file. Example: D:/localPath/exampleFile.mp3.
              String filePath = "D:/localPath/exampleFile.mp3";
              //Obtain a temporary token for uploading the file.
              if (tokenMap.get(endpoint) == null || tokenMap.get(endpoint).expiration <= System.currentTimeMillis() / 1000) {
                  DescribeUploadTokenResponse tokenResponse = client.describeUploadToken();
                  tokenMap.put(endpoint, tokenResponse.getBody().getData());
              }
              //The client that uploads the file.
              getOssClient(tokenMap.get(endpoint), isVPC);
      
              //Upload a file.
              String objectName = uploadFile(filePath, tokenMap.get(endpoint));
      
              // Construct moderation parameters.
              Map<String, String> serviceParameters = new HashMap<>();
              //Information about uploading the file.
              serviceParameters.put("ossBucketName", tokenMap.get(endpoint).getBucketName());
              serviceParameters.put("ossObjectName", objectName);
              serviceParameters.put("dataId", UUID.randomUUID().toString());
      
              VoiceModerationRequest request = new VoiceModerationRequest();
              // Moderation type: audio_media_detection indicates the moderation of audio files.
              request.setService("audio_multilingual_global");
              request.setServiceParameters(JSON.toJSONString(serviceParameters));
      
              VoiceModerationResponse response = null;
              try {
                  response = client.voiceModerationWithOptions(request, runtime);
              } catch (Exception e) {
                  e.printStackTrace();
              }
              return response;
          }
      
          public static void main(String[] args) throws Exception {
              /**
               * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
               * Common ways to obtain environment variables:
               * Way 1:
               *     Obtain the AccessKey ID of your RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     Obtain the AccessKey secret of your RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * Way 2:
               *     Obtain the AccessKey ID of your RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     Obtain the AccessKey secret of your RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              String accessKeyId = "We recommend that you obtain the AccessKey ID of your RAM user from environment variables";
              String accessKeySecret = "We recommend that you obtain the AccessKey secret of your RAM user from environment variables";
              // Change the region ID and endpoint based on your business requirements.
              VoiceModerationResponse response = invokeFunction(accessKeyId, accessKeySecret, "green-cip.ap-southeast-1.aliyuncs.com");
              try {
                  // Print the moderation results.
                  if (response != null) {
                      if (response.getStatusCode() == 200) {
                          VoiceModerationResponseBody body = response.getBody();
                          System.out.println(JSON.toJSONString(body));
                          System.out.println("requestId = " + body.getRequestId());
                          System.out.println("code = " + body.getCode());
                          System.out.println("msg = " + body.getMessage());
                          Integer code = body.getCode();
                          if (200 == code) {
                              VoiceModerationResponseBody.VoiceModerationResponseBodyData data = body.getData();
                              System.out.println("taskId = [" + data.getTaskId() + "]");
                          } else {
                              System.out.println("voice moderation not success. code:" + code);
                          }
                      } else {
                          System.out.println("response not success. status:" + response.getStatusCode());
                      }
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }   
      }
    • Sample code for obtaining voice moderation results

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VoiceModerationResultRequest;
      import com.aliyun.green20220302.models.VoiceModerationResultResponse;
      import com.aliyun.green20220302.models.VoiceModerationResultResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      
      public class VoiceModerationResultDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
               * Common ways to obtain environment variables:
               * Way 1:
               *     Obtain the AccessKey ID of your RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     Obtain the AccessKey secret of your RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * Way 2:
               *     Obtain the AccessKey ID of your RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     Obtain the AccessKey secret of your RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("We recommend that you obtain the AccessKey ID of your RAM user from environment variables");
              config.setAccessKeySecret("We recommend that you obtain the AccessKey secret of your RAM user from environment variables");
              // Change the region ID and endpoint based on your business requirements.
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              // The connection timeout period. Unit: milliseconds.
              config.setReadTimeout(6000);
              // The read timeout period. Unit: milliseconds.
              config.setConnectTimeout(3000);
      
              // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              // The task ID that is returned when a voice moderation task is submitted.
              serviceParameters.put("taskId", "Task ID that is returned when a voice moderation task is submitted");
      
      
              VoiceModerationResultRequest voiceModerationResultRequest = new VoiceModerationResultRequest();
              // Moderation type: multi-language voice moderation (audio_multilingual_global).
              voiceModerationResultRequest.setService("audio_multilingual_global");
              voiceModerationResultRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VoiceModerationResultResponse response = client.voiceModerationResult(voiceModerationResultRequest);
                  if (response.getStatusCode() == 200) {
                      VoiceModerationResultResponseBody result = response.getBody();
                      System.out.println("requestId=" + result.getRequestId());
                      System.out.println("code=" + result.getCode());
                      System.out.println("msg=" + result.getMessage());
                      if (200 == result.getCode()) {
                          VoiceModerationResultResponseBody.VoiceModerationResultResponseBodyData data = result.getData();
                          System.out.println("sliceDetails = " + JSON.toJSONString(data.getSliceDetails()));
                          System.out.println("taskId = " + data.getTaskId());
                          System.out.println("url = " + data.getUrl());
                          System.out.println("riskLevel = " + data.getRiskLevel());
                      } else {
                          System.out.println("voice moderation result not success. code:" + result.getCode());
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }

Moderation of audio stored on OSS

Scenarios

If the audio files for moderation are already stored in OSS, you can authorize to create a service role to allow Content Moderation to access OSS. Audio Moderation 2.0 can obtain the files from OSS through the service role and conduct the moderation. To create a service role, visit Cloud Resource Access Authorization.

  1. Add the following dependencies to the dependencies field:

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>green20220302</artifactId>
      <version>2.2.11</version>
    </dependency>

  2. Use the SDK for Java.

    • Sample code for submitting a voice moderation task

    • import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VoiceModerationRequest;
      import com.aliyun.green20220302.models.VoiceModerationResponse;
      import com.aliyun.green20220302.models.VoiceModerationResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      
      public class OssVoiceModerationDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
               * Common ways to obtain environment variables:
               * Way 1:
               *     Obtain the AccessKey ID of your RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     Obtain the AccessKey secret of your RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * Way 2:
               *     Obtain the AccessKey ID of your RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     Obtain the AccessKey secret of your RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("We recommend that you obtain the AccessKey ID of your RAM user from environment variables");
              config.setAccessKeySecret("We recommend that you obtain the AccessKey secret of your RAM user from environment variables");
              // Change the region ID and endpoint based on your business requirements.
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              // The connection timeout period. Unit: milliseconds.
              config.setReadTimeout(6000);
              // The read timeout period. Unit: milliseconds.
              config.setConnectTimeout(3000);
         
              // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              serviceParameters.put("ossBucketName", "bucket_01");
              serviceParameters.put("ossObjectName", "test/test.flv");
              serviceParameters.put("ossRegionId", "ap-southeast-1");
      
              VoiceModerationRequest voiceModerationRequest = new VoiceModerationRequest();
              // Moderation type: audio_media_detection indicates moderation of audio files, while live_stream_detection indicates moderation of audio live stream.
              voiceModerationRequest.setService("audio_media_detection");
              voiceModerationRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VoiceModerationResponse response = client.voiceModeration(voiceModerationRequest);
                  if (response.getStatusCode() == 200) {
                      VoiceModerationResponseBody result = response.getBody();
                      System.out.println(JSON.toJSONString(result));
                      System.out.println("requestId = " + result.getRequestId());
                      System.out.println("code = " + result.getCode());
                      System.out.println("msg = " + result.getMessage());
                      Integer code = result.getCode();
                      if (200 == code) {
                          VoiceModerationResponseBody.VoiceModerationResponseBodyData data = result.getData();
                          System.out.println("taskId = [" + data.getTaskId() + "]");
                      } else {
                          System.out.println("voice moderation not success. code:" + code);
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
    • Sample code for obtaining voice moderation results

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VoiceModerationResultRequest;
      import com.aliyun.green20220302.models.VoiceModerationResultResponse;
      import com.aliyun.green20220302.models.VoiceModerationResultResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      
      public class VoiceModerationResultDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
               * Common ways to obtain environment variables:
               * Way 1:
               *     Obtain the AccessKey ID of your RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     Obtain the AccessKey secret of your RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * Way 2:
               *     Obtain the AccessKey ID of your RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     Obtain the AccessKey secret of your RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("We recommend that you obtain the AccessKey ID of your RAM user from environment variables");
              config.setAccessKeySecret("We recommend that you obtain the AccessKey secret of your RAM user from environment variables");
              // Change the region ID and endpoint based on your business requirements.
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              // The connection timeout period. Unit: milliseconds.
              config.setReadTimeout(6000);
              // The read timeout period. Unit: milliseconds.
              config.setConnectTimeout(3000);
      
              // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              // The task ID that is returned when a voice moderation task is submitted.
              serviceParameters.put("taskId", "Task ID that is returned when a voice moderation task is submitted");
      
      
              VoiceModerationResultRequest voiceModerationResultRequest = new VoiceModerationResultRequest();
              // Moderation type: multi-language voice moderation (audio_multilingual_global).
              voiceModerationResultRequest.setService("audio_multilingual_global");
              voiceModerationResultRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VoiceModerationResultResponse response = client.voiceModerationResult(voiceModerationResultRequest);
                  if (response.getStatusCode() == 200) {
                      VoiceModerationResultResponseBody result = response.getBody();
                      System.out.println("requestId=" + result.getRequestId());
                      System.out.println("code=" + result.getCode());
                      System.out.println("msg=" + result.getMessage());
                      if (200 == result.getCode()) {
                          VoiceModerationResultResponseBody.VoiceModerationResultResponseBodyData data = result.getData();
                          System.out.println("sliceDetails = " + JSON.toJSONString(data.getSliceDetails()));
                          System.out.println("taskId = " + data.getTaskId());
                          System.out.println("url = " + data.getUrl());
                          System.out.println("riskLevel = " + data.getRiskLevel());
                      } else {
                          System.out.println("voice moderation result not success. code:" + result.getCode());
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }

SDK for Python

The Python version must be 3.6 or later.

For more information about the source code, see SDK source code for Python.

The following three types are supported for audio moderation.

Moderation of publicly accessible audio on the internet

Scenarios

When the audio to be reviewed is accessible from the Internet, Audio Moderation 2.0 can obtain the audio file through the URL and conduct the moderation.

  1. Run the following command to install the related dependencies:

    pip install alibabacloud_green20220302==2.2.11

  2. Use the SDK for Python.

    • Sample code for submitting a voice moderation task

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
          # The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. To avoid security risks, we recommend that you use a RAM user to call API operations or perform routine O&M. 
          # We recommend that you do not save the AccessKey ID and the AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of resources within your account may be compromised. 
          # Common ways to obtain environment variables:
          # Obtain the AccessKey ID of your RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # Obtain the AccessKey secret of your RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='We recommend that you obtain the AccessKey ID of your RAM user from environment variables',
          access_key_secret='We recommend that you obtain the AccessKey secret of your RAM user from environment variables',
          # The connection timeout period. Unit: milliseconds. 
          connect_timeout=10000,
          # The read timeout period. Unit: milliseconds. 
          read_timeout=3000,
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      # Note: We recommend that you reuse the instantiated client as much as possible. This improves moderation performance and avoids repeated client connections. 
      clt = Client(config)
      
      serviceParameters = {
          'url': 'https://xxxx/xxx/sample.wav',
      }
      voiceModerationRequest = models.VoiceModerationRequest(
          # Moderation type: multi-language voice moderation (audio_multilingual_global). 
          service='audio_multilingual_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.voice_moderation(voiceModerationRequest)
          if response.status_code == 200:
              # The call is successful. 
              # Obtain the moderation results. 
              result = response.body
              print('response success. result:{}'.format(result))
          else:
              print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)
    • Sample code for obtaining voice moderation results

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
          # The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. To avoid security risks, we recommend that you use a RAM user to call API operations or perform routine O&M. 
          # We recommend that you do not save the AccessKey ID and the AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of resources within your account may be compromised. 
          # Common ways to obtain environment variables:
          # Obtain the AccessKey ID of your RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # Obtain the AccessKey secret of your RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='We recommend that you obtain the AccessKey ID of your RAM user from environment variables',
          access_key_secret='We recommend that you obtain the AccessKey secret of your RAM user from environment variables',
          # The connection timeout period. Unit: milliseconds. 
          connect_timeout=10000,
          # The read timeout period. Unit: milliseconds. 
          read_timeout=3000,
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      # Note: We recommend that you reuse the instantiated client as much as possible. This improves moderation performance and avoids repeated client connections. 
      clt = Client(config)
      
      # The task ID that is returned when a voice moderation task is submitted. 
      serviceParameters = {
          "taskId": 'Task ID that is returned when a voice moderation task is submitted'
      }
      voiceModerationResultRequest = models.VoiceModerationResultRequest(
          # Moderation type: multi-language voice moderation (audio_multilingual_global). 
          service='audio_multilingual_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.voice_moderation_result(voiceModerationResultRequest)
          if response.status_code == 200:
              # The call is successful. 
              # Obtain the moderation results. 
              result = response.body
              print('response success. result:{}'.format(result))
          else:
              print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)

      Sample code for canceling a live stream moderation task

Moderation of local audio

Scenarios

When the audio for moderation is located on your local machine and does not have a public network access link, you can upload the audio to the Object Storage Service (OSS) bucket provided by Content Moderation. Audio Moderation 2.0 can directly access the OSS, retrieve the audio content, and conduct the moderation.

  1. Run the following command to install the related dependencies:

    pip install alibabacloud_green20220302==2.2.11

    Install OSS SDK:

    pip install oss2
  2. Use the SDK for Python.

    • Sample code for submitting a voice moderation task

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      from alibabacloud_tea_util import models as util_models
      import json
      import uuid
      import oss2
      import time
      import os
      
      # Specifies whether the service is deployed in a VPC.
      is_vpc = False
      # The token used to upload the file. The key is the endpoint of Content Moderation and the value is the token.
      token_dict = dict()
      # Obtain the client for uploading the file.
      bucket = None
      
      
      # Create the client that initiates image moderation requests.
      def create_client(access_key_id, access_key_secret, endpoint):
          config = Config(
              access_key_id=access_key_id,
              access_key_secret=access_key_secret,
              # Configure an HTTP proxy.
              # http_proxy='http://10.10.xx.xx:xxxx',
              # Configure an HTTPS proxy.
              # https_proxy='https://10.10.xx.xx:xxxx',
              # Change the region ID and endpoint based on your business requirements.
              endpoint=endpoint
          )
          return Client(config)
      
      
      # Create the client that uploads the file.
      def create_oss_bucket(is_vpc, upload_token):
          global token_dict
          global bucket
          auth = oss2.StsAuth(upload_token.access_key_id, upload_token.access_key_secret, upload_token.security_token)
      
          if (is_vpc):
              end_point = upload_token.oss_internal_end_point
          else:
              end_point = upload_token.oss_internet_end_point
          # Note: We recommend that you reuse the instantiated bucket as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
          bucket = oss2.Bucket(auth, end_point, upload_token.bucket_name)
      
      
      # Upload a file.
      def upload_file(file_name, upload_token):
          create_oss_bucket(is_vpc, upload_token)
          object_name = upload_token.file_name_prefix + str(uuid.uuid1()) + '.' + file_name.split('.')[-1]
          bucket.put_object_from_file(object_name, file_name)
          return object_name
      
      
      def invoke_function(access_key_id, access_key_secret, endpoint):
          # Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
          client = create_client(access_key_id, access_key_secret, endpoint)
          # Construct the runtime configuration object and specify runtime parameters.
          runtime = util_models.RuntimeOptions()
      
          # The full path of the local file. Example: D:\localPath\exampleFile.mp3
          file_path = 'D:\localPath\exampleFile.mp3'
      
          # Obtain a temporary token for uploading the file.
          upload_token = token_dict.setdefault(endpoint, None)
          if (upload_token == None) or int(upload_token.expiration) <= int(time.time()):
              response = client.describe_upload_token()
              upload_token = response.body.data
              token_dict[endpoint] = upload_token
          # Upload a file.
          object_name = upload_file(file_path, upload_token)
      
          # Construct moderation parameters.
          service_parameters = {
              # The name of the bucket where the image to be moderated is located.
              'ossBucketName': upload_token.bucket_name,
              # The image to be moderated.
              'ossObjectName': object_name,
              # The unique ID of the data.
              'dataId': str(uuid.uuid4())
          }
      
          voice_moderation_request = models.VoiceModerationRequest(
              # Audio moderation service: serviceCode for rule configuration in the Audio Moderation 2.0 of the Content Moderation console. Example: audio_multilingual_global
              service='audio_multilingual_global',
              service_parameters=json.dumps(service_parameters)
          )
      
          try:
              return client.voice_moderation_with_options(voice_moderation_request, runtime)
          except Exception as err:
              print(err)
      
      
      if __name__ == '__main__':
          # The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
          # We recommend that you do not save the AccessKey ID and AccessKey Secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources that belong to your account may be compromised.
          # Common ways to obtain environment variables:
          # Obtain the AccessKey ID of your RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # Obtain the AccessKey Secret of your RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id = 'We recommend that you obtain the AccessKey ID of your RAM user from environment variables'
          access_key_secret = 'We recommend that you obtain the AccessKey secret of your RAM user from environment variables'
          # Change the region ID and endpoint based on your business requirements.
          response = invoke_function(access_key_id, access_key_secret, 'green-cip.ap-southeast-1.aliyuncs.com')
          if response.status_code == 200:
              # The call is successful.
              # Obtain the moderation results.
              result = response.body
              print('response success. result:{}'.format(result))
              if result.code == 200:
                  result_data = result.data
                  print('result: {}'.format(result_data))
          else:
              print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      
    • Sample code for obtaining voice moderation results

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
          # The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
          # We recommend that you do not save the AccessKey ID and AccessKey Secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources that belong to your account may be compromised.
          # Common ways to obtain environment variables:
          # Obtain the AccessKey ID of your RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # Obtain the AccessKey Secret of your RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='We recommend that you obtain the AccessKey ID of your RAM user from environment variables',
          access_key_secret='We recommend that you obtain the AccessKey secret of your RAM user from environment variables',
          # The connection timeout period. Unit: milliseconds.
          connect_timeout=10000,
          # The read timeout period. Unit: milliseconds.
          read_timeout=3000,
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      # Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
      clt = Client(config)
      
      # The task ID that is returned when a voice moderation task is submitted.
      serviceParameters = {
          "taskId": 'Task ID that is returned when a voice moderation task is submitted'
      }
      voiceModerationResultRequest = models.VoiceModerationResultRequest(
          # Moderation type: multi-language voice moderation (audio_multilingual_global).
          service='audio_multilingual_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.voice_moderation_result(voiceModerationResultRequest)
          if response.status_code == 200:
              # The call is successful.
              # Obtain the moderation results.
              result = response.body
              print('response success. result:{}'.format(result))
          else:
              print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)

      Sample code for canceling a live stream moderation task

Moderation of audio stored on OSS

Scenarios

If the audio files for moderation are already stored in OSS, you can authorize to create a service role to allow Content Moderation to access OSS. Audio Moderation 2.0 can obtain the files from OSS through the service role and conduct the moderation. To create a service role, visit Cloud Resource Access Authorization.

  1. Run the following command to install the related dependencies:

    pip install alibabacloud_green20220302==2.2.11
  2. Use the SDK for Python.

    • Sample code for submitting a voice moderation task

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
          # The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
          # We recommend that you do not save the AccessKey ID and AccessKey Secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources that belong to your account may be compromised.
          # Common ways to obtain environment variables:
          # Obtain the AccessKey ID of your RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # Obtain the AccessKey Secret of your RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='We recommend that you obtain the AccessKey ID of your RAM user from environment variables',
          access_key_secret='We recommend that you obtain the AccessKey secret of your RAM user from environment variables',
          # The connection timeout period. Unit: milliseconds.
          connect_timeout=10000,
          # The read timeout period. Unit: milliseconds.
          read_timeout=3000,
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      # Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
      clt = Client(config)
      
      serviceParameters = {
          'ossBucketName': 'bucket_01',
          'ossObjectName': 'test/test.mp3',
          'ossRegionId': 'cn-shanghai'
      }
      voiceModerationRequest = models.VoiceModerationRequest(
          # Moderation type: multi-language voice moderation (audio_multilingual_global).
          service='audio_multilingual_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.voice_moderation(voiceModerationRequest)
          if response.status_code == 200:
              # The call is successful.
              # Obtain the moderation results.
              result = response.body
              print('response success. result:{}'.format(result))
          else:
              print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)
    • Sample code for obtaining voice moderation results

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
          # The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
          # We recommend that you do not save the AccessKey ID and AccessKey Secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources that belong to your account may be compromised.
          # Common ways to obtain environment variables:
          # Obtain the AccessKey ID of your RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # Obtain the AccessKey Secret of your RAM user: os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='We recommend that you obtain the AccessKey ID of your RAM user from environment variables',
          access_key_secret='We recommend that you obtain the AccessKey secret of your RAM user from environment variables',
          # The connection timeout period. Unit: milliseconds.
          connect_timeout=10000,
          # The read timeout period. Unit: milliseconds.
          read_timeout=3000,
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      # Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
      clt = Client(config)
      
      # The task ID that is returned when a voice moderation task is submitted.
      serviceParameters = {
          "taskId": 'Task ID that is returned when a voice moderation task is submitted'
      }
      voiceModerationResultRequest = models.VoiceModerationResultRequest(
          # Moderation type: multi-language voice moderation (audio_multilingual_global).
          service='audio_multilingual_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.voice_moderation_result(voiceModerationResultRequest)
          if response.status_code == 200:
              # The call is successful.
              # Obtain the moderation results.
              result = response.body
              print('response success. result:{}'.format(result))
          else:
              print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)

      Sample code for canceling a live stream moderation task

SDK for PHP

The PHP version must be 5.6 or later.

For more information about the source code, see SDK source code for PHP.

The following three types are supported for audio moderation.

Moderation of publicly accessible audio on the internet

Scenarios

When the audio to be reviewed is accessible from the Internet, Audio Moderation 2.0 can obtain the audio file through the URL and conduct the moderation.

  1. Run the following command to install the related dependencies:

    composer require alibabacloud/green-20220302 2.2.10
  2. Use the SDK for PHP.

    • Sample code for submitting a voice moderation task

      <?php
        require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VoiceModerationRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([]);
      /**
       * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
       * We recommend that you do not save the AccessKey ID and AccessKey Secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources that belong to your account may be compromised.
       * Common ways to obtain environment variables:
       * Obtain the AccessKey ID of your RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
       * Obtain the AccessKey Secret of your RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
       */
      $config->accessKeyId = "We recommend that you obtain the AccessKey ID of your RAM user from environment variables";
      $config->accessKeySecret = "We recommend that you obtain the AccessKey secret of your RAM user from environment variables";
      // Change the region ID and endpoint based on your business requirements.
      $config->regionId = "ap-southeast-1";
      $config->endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
      // Configure an HTTP proxy.
      // $config->httpProxy = "http://10.10.xx.xx:xxxx";
      // Configure an HTTPS proxy.
      // $config->httpsProxy = "http://10.10.xx.xx:xxxx";
      // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
      $client = new Green($config);
      
      $request = new VoiceModerationRequest();
      // Moderation type: multi-language voice moderation (audio_multilingual_global).
      $request->service = "audio_multilingual_global";
      $serviceParameters = array('url' => 'https://xxxx/xxx/sample.wav');
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
        $response = $client->voiceModeration($request, $runtime);
        print_r($response->body);
        if (200 == $response->statusCode) {
          $body = $response->body;
          print_r("requestId = " . $body->requestId);
          print_r("code = " . $body->code);
          print_r("message = " . $body->message);
          if (200 == $body->code) {
            $data = $body->data;
            print_r("taskId = " . $data->taskId);
          } else {
            print_r("voice moderation not success. code:" . $body->code);
          }
        } else {
          print_r("response not success. code:" . $response->statusCode);
        }
      } catch (TeaUnableRetryError $e) {
        var_dump($e->getMessage());
        var_dump($e->getErrorInfo());
        var_dump($e->getLastException());
        var_dump($e->getLastRequest());
      }
    • Sample code for obtaining voice moderation results

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VoiceModerationResultRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([]);
      /**
       * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
       * We recommend that you do not save the AccessKey ID and AccessKey Secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources that belong to your account may be compromised.
       * Common ways to obtain environment variables:
       * Obtain the AccessKey ID of your RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
       * Obtain the AccessKey Secret of your RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
       */
      $config->accessKeyId = "We recommend that you obtain the AccessKey ID of your RAM user from environment variables";
      $config->accessKeySecret = "We recommend that you obtain the AccessKey secret of your RAM user from environment variables";
      // Change the region ID and endpoint based on your business requirements.
      $config->regionId = "ap-southeast-1";
      $config->endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
      // Configure an HTTP proxy.
      // $config->httpProxy = "http://10.10.xx.xx:xxxx";
      // Configure an HTTPS proxy.
      // $config->httpsProxy = "http://10.10.xx.xx:xxxx";
      // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
      $client = new Green($config);
      
      $request = new VoiceModerationResultRequest();
      // Moderation type: multi-language voice moderation (audio_multilingual_global).
      $request->service = "audio_multilingual_global";
      // The task ID that is returned when a voice moderation task is submitted.
      $serviceParameters = array('taskId' => 'au_f_O5z5iaIis3iI0X2oNYj7qa-1x****');
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
          $response = $client->voiceModerationResult($request, $runtime);
          print_r($response->body);
          if (200 == $response->statusCode) {
              $body = $response->body;
              print_r("requestId = " . $body->requestId);
              print_r("code = " . $body->code);
              print_r("message = " . $body->message);
              if (200 == $body->code) {
                  $data = $body->data;
                  print_r("liveId = " . $data->liveId);
                  print_r("sliceDetails = " . $data->sliceDetails);
                  print_r("riskLevel = " . $data->riskLevel);
                  print_r("taskId = " . $data->taskId);
                  print_r("url = " . $data->url);
              } else {
                  print_r("voice moderation result not success. code:" . $body->code);
              }
          } else {
              print_r("response not success. code:" . $response->statusCode);
          }
      } catch (TeaUnableRetryError $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }

Moderation of local audio

Scenarios

When the audio for moderation is located on your local machine and does not have a public network access link, you can upload the audio to the Object Storage Service (OSS) bucket provided by Content Moderation. Audio Moderation 2.0 can directly access the OSS, retrieve the audio content, and conduct the moderation.

  1. Run the following command to install the related dependencies:

    composer require alibabacloud/green-20220302 2.2.10

    Install OSS SDK:

    composer require aliyuncs/oss-sdk-php
  2. Use the SDK for PHP.

    • Sample code for submitting a voice moderation task

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VoiceModerationResponse;
      use AlibabaCloud\Tea\Utils\Utils;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      use AlibabaCloud\SDK\Green\V20220302\Models\VoiceModerationRequest;
      use OSS\OssClient;
      
      // Specifies whether the service is deployed in a VPC.
      $isVPC = false;
      // Obtain a temporary token for uploading the file.
      $tokenArray = array();
      // The client that uploads the file.
      $ossClient = null;
      
      /**
       * Create the client that initiates image moderation requests.
       * @param $accessKeyId
       * @param $accessKeySecret
       * @param $endpoint
       * @return Green
       */
      function create_client($accessKeyId, $accessKeySecret, $endpoint): Green
      {
          $config = new Config([
              "accessKeyId" => $accessKeyId,
              "accessKeySecret" => $accessKeySecret,
              // Configure an HTTP proxy.
              // "httpProxy" => "http://10.10.xx.xx:xxxx",
              // Configure an HTTPS proxy.
              // "httpsProxy" => "https://10.10.xx.xx:xxxx",
              "endpoint" => $endpoint,
          ]);
          return new Green($config);
      }
      
      /**
       * Create the client that uploads the file.
       * @param $tokenData
       * @return void
       */
      function create_upload_client($tokenData): void
      {
      
          global $isVPC;
          global $ossClient;
          // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
          if ($isVPC) {
              $ossClient = new OssClient($tokenData->accessKeyId, $tokenData->accessKeySecret, $tokenData->ossInternalEndPoint, false, $tokenData->securityToken);
          } else {
              $ossClient = new OssClient($tokenData->accessKeyId, $tokenData->accessKeySecret, $tokenData->ossInternetEndPoint, false, $tokenData->securityToken);
          }
      }
      
      /**
       * Upload a file.
       * @param $fileName
       * @param $tokenData
       * @return string
       * @throws \OSS\Core\OssException
       */
      function upload_file($filePath, $tokenData): string
      {
          global $ossClient;
          //Initialize OSSClient.
          create_upload_client($tokenData);
          $split = explode(".", $filePath);
          if (count($split) > 1) {
              $objectName = $tokenData->fileNamePrefix . uniqid() . "." . explode(".", $filePath)[count($split) - 1];
          } else {
              $objectName = $tokenData->fileNamePrefix . uniqid();
          }
          //Upload a file.
          $ossClient->uploadFile($tokenData->bucketName, $objectName, $filePath);
          return $objectName;
      }
      
      /**
       * Submit an image moderation task.
       * @param $accessKeyId
       * @param $accessKeySecret
       * @param $endpoint
       * @return VoiceModerationResponse
       * @throws \OSS\Core\OssException
       */
      function invoke($accessKeyId, $accessKeySecret, $endpoint): VoiceModerationResponse
      {
          global $tokenArray;
          // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
          $client = create_client($accessKeyId, $accessKeySecret, $endpoint);
          // Construct the runtime configuration object and specify runtime parameters.
          $runtime = new RuntimeOptions([]);
          // The full path of the local file. Example: D:\\localPath\\exampleFile.mp3.
          $filePath = "D:\\localPath\\exampleFile.mp3";
      
          //Obtain a temporary token for uploading the file.
          if (!isset($tokenArray[$endpoint]) || $tokenArray[$endpoint]->expiration <= time()) {
              $token = $client->describeUploadToken();
              $tokenArray[$endpoint] = $token->body->data;
          }
      
          // Upload a file.
          $objectName = upload_file($filePath, $tokenArray[$endpoint]);
      
          // Construct moderation parameters.
          $request = new VoiceModerationRequest();
          // Moderation type: multi-language voice moderation (audio_multilingual_global).
            $request->service = "audio_multilingual_global";
          // OSS information of the audio to be moterated.
          $serviceParameters = array(
              'ossObjectName' => $objectName,
              'ossBucketName' => $tokenArray[$endpoint]->bucketName,
              'dataId' => uniqid());
          $request->serviceParameters = json_encode($serviceParameters);
          // Submit the image moderation task.
          return $client->voiceModerationWithOptions($request, $runtime);
      }
      
      /**
      * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
      * We recommend that you do not save the AccessKey ID and AccessKey Secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources that belong to your account may be compromised.
      * Common ways to obtain environment variables:
      * Obtain the AccessKey ID of your RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
      * Obtain the AccessKey Secret of your RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
      */
      $accessKeyId = 'We recommend that you obtain the AccessKey ID of your RAM user from environment variables';
      $accessKeySecret = 'We recommend that you obtain the AccessKey secret of your RAM user from environment variables';
      // Change the region ID and endpoint based on your business requirements.
      $endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
      
      try {
          $response = invoke($accessKeyId, $accessKeySecret, $endpoint);
          print_r(json_encode($response->body, JSON_UNESCAPED_UNICODE));
      } catch (Exception $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }
    • Sample code for obtaining voice moderation results

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VoiceModerationResultRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([]);
      /**
       * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
       * We recommend that you do not save the AccessKey ID and AccessKey Secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources that belong to your account may be compromised.
       * Common ways to obtain environment variables:
       * Obtain the AccessKey ID of your RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
       * Obtain the AccessKey Secret of your RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
       */
      $config->accessKeyId = "We recommend that you obtain the AccessKey ID of your RAM user from environment variables";
      $config->accessKeySecret = "We recommend that you obtain the AccessKey secret of your RAM user from environment variables";
      // Change the region ID and endpoint based on your business requirements.
      $config->regionId = "ap-southeast-1";
      $config->endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
      // Configure an HTTP proxy.
      // $config->httpProxy = "http://10.10.xx.xx:xxxx";
      // Configure an HTTPS proxy.
      // $config->httpsProxy = "http://10.10.xx.xx:xxxx";
      // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
      $client = new Green($config);
      
      $request = new VoiceModerationResultRequest();
      // Moderation type: multi-language voice moderation (audio_multilingual_global).
      $request->service = "audio_multilingual_global";
      // The task ID that is returned when a voice moderation task is submitted.
      $serviceParameters = array('taskId' => 'au_f_O5z5iaIis3iI0X2oNYj7qa-1x****');
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
          $response = $client->voiceModerationResult($request, $runtime);
          print_r($response->body);
          if (200 == $response->statusCode) {
              $body = $response->body;
              print_r("requestId = " . $body->requestId);
              print_r("code = " . $body->code);
              print_r("message = " . $body->message);
              if (200 == $body->code) {
                  $data = $body->data;
                  print_r("liveId = " . $data->liveId);
                  print_r("sliceDetails = " . $data->sliceDetails);
                  print_r("taskId = " . $data->taskId);
                  print_r("url = " . $data->url);
              } else {
                  print_r("voice moderation result not success. code:" . $body->code);
              }
          } else {
              print_r("response not success. code:" . $response->statusCode);
          }
      } catch (TeaUnableRetryError $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }

Moderation of audio stored on OSS

Scenarios

If the audio files for moderation are already stored in OSS, you can authorize to create a service role to allow Content Moderation to access OSS. Audio Moderation 2.0 can obtain the files from OSS through the service role and conduct the moderation. To create a service role, visit Cloud Resource Access Authorization.

  1. Run the following command to install the related dependencies:

    composer require alibabacloud/green-20220302 2.2.10
  2. Use the SDK for PHP.

    • Sample code for submitting a voice moderation task

      <?php
        require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VoiceModerationRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([]);
      /**
       * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
       * We recommend that you do not save the AccessKey ID and AccessKey Secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources that belong to your account may be compromised.
       * Common ways to obtain environment variables:
       * Obtain the AccessKey ID of your RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
       * Obtain the AccessKey Secret of your RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
       */
      $config->accessKeyId = "We recommend that you obtain the AccessKey ID of your RAM user from environment variables";
      $config->accessKeySecret = "We recommend that you obtain the AccessKey secret of your RAM user from environment variables";
      // Change the region ID and endpoint based on your business requirements.
      $config->regionId = "ap-southeast-1";
      $config->endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
      // Configure an HTTP proxy.
      // $config->httpProxy = "http://10.10.xx.xx:xxxx";
      // Configure an HTTPS proxy.
      // $config->httpsProxy = "http://10.10.xx.xx:xxxx";
      // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
      $client = new Green($config);
      
      $request = new VoiceModerationRequest();
      // Moderation type: multi-language voice moderation (audio_multilingual_global).
      $request->service = "audio_multilingual_global";
      $serviceParameters = array(
                // The image to be moderated. Example: voice/001.wav
              'ossObjectName' => 'voice/001.wav',
              // The region of the bucket where the image to be moderated is located.Example: cn-shanghai
              'ossRegionId' => 'cn-shanghai',
                // The name of the bucket where the image to be moderated is located.Example: bucket001
              'ossBucketName' => 'bucket001',
              // The unique ID of the data.
              'dataId' => uniqid());
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
        $response = $client->voiceModeration($request, $runtime);
        print_r($response->body);
        if (200 == $response->statusCode) {
          $body = $response->body;
          print_r("requestId = " . $body->requestId);
          print_r("code = " . $body->code);
          print_r("message = " . $body->message);
          if (200 == $body->code) {
            $data = $body->data;
            print_r("taskId = " . $data->taskId);
          } else {
            print_r("voice moderation not success. code:" . $body->code);
          }
        } else {
          print_r("response not success. code:" . $response->statusCode);
        }
      } catch (TeaUnableRetryError $e) {
        var_dump($e->getMessage());
        var_dump($e->getErrorInfo());
        var_dump($e->getLastException());
        var_dump($e->getLastRequest());
      }
    • Sample code for obtaining voice moderation results

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VoiceModerationResultRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([]);
      /**
       * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
       * We recommend that you do not save the AccessKey ID and AccessKey Secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources that belong to your account may be compromised.
       * Common ways to obtain environment variables:
       * Obtain the AccessKey ID of your RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
       * Obtain the AccessKey Secret of your RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
       */
      $config->accessKeyId = "We recommend that you obtain the AccessKey ID of your RAM user from environment variables";
      $config->accessKeySecret = "We recommend that you obtain the AccessKey secret of your RAM user from environment variables";
      // Change the region ID and endpoint based on your business requirements.
      $config->regionId = "ap-southeast-1";
      $config->endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
      // Configure an HTTP proxy.
      // $config->httpProxy = "http://10.10.xx.xx:xxxx";
      // Configure an HTTPS proxy.
      // $config->httpsProxy = "http://10.10.xx.xx:xxxx";
      // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
      $client = new Green($config);
      
      $request = new VoiceModerationResultRequest();
      // Moderation type: multi-language voice moderation (audio_multilingual_global).
      $request->service = "audio_multilingual_global";
      // The task ID that is returned when a voice moderation task is submitted.
      $serviceParameters = array('taskId' => 'au_f_O5z5iaIis3iI0X2oNYj7qa-1x****');
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
          $response = $client->voiceModerationResult($request, $runtime);
          print_r($response->body);
          if (200 == $response->statusCode) {
              $body = $response->body;
              print_r("requestId = " . $body->requestId);
              print_r("code = " . $body->code);
              print_r("message = " . $body->message);
              if (200 == $body->code) {
                  $data = $body->data;
                  print_r("liveId = " . $data->liveId);
                  print_r("sliceDetails = " . $data->sliceDetails);
                  print_r("taskId = " . $data->taskId);
                  print_r("url = " . $data->url);
              } else {
                  print_r("voice moderation result not success. code:" . $body->code);
              }
          } else {
              print_r("response not success. code:" . $response->statusCode);
          }
      } catch (TeaUnableRetryError $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }

SDK for Go

The following three types are supported for audio moderation.

Moderation of publicly accessible audio on the internet

Scenarios

When the audio to be reviewed is accessible from the Internet, Audio Moderation 2.0 can obtain the audio file through the URL and conduct the moderation.

  1. Run the following command to install the related dependencies:

    go git clone --branch v2.2.11 github.com/alibabacloud-go/green-20220302/v2
  2. SDK for Go

    • Sample code for submitting a voice moderation task

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green "github.com/alibabacloud-go/green-20220302/client"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
          config := &openapi.Config{
              /**
               * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
               * We recommend that you do not save the AccessKey ID and AccessKey Secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources that belong to your account may be compromised.
               * Common ways to obtain environment variables:
               * Obtain the AccessKey ID of your RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * Obtain the AccessKey Secret of your RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("We recommend that you obtain the AccessKey ID of your RAM user from environment variables"),
              AccessKeySecret: tea.String("We recommend that you obtain the AccessKey secret of your RAM user from environment variables"),
              // Enter the region ID and endpoint.
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              // Configure an HTTP proxy.
              //HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // Configure an HTTPS proxy.
              //HttpsProxy: tea.String("https://xx.xx.xx.xx:xxxx"),
              /**
               * Specify the connection timeout and read timeout. The timeout period for the server to complete a file moderation request is 10s.
               * If you set the read timeout to a period shorter than 10s, the server may generate a read timeout error during request processing.
               */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
          // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
          client, _err := green.NewClient(config)
          if _err != nil {
              panic(_err)
          }
          // The URL of the voice to be moderated.
          serviceParameters, _ := json.Marshal(
              map[string]interface{}{
                  "url": "https://xxxx/xxx/sample.wav",
              },
          )
          request := green.VoiceModerationRequest{
              // Voice moderation service.
              Service:           tea.String("audio_multilingual_global"),
              ServiceParameters: tea.String(string(serviceParameters)),
          }
          result, _err := client.VoiceModeration(&request)
          if _err != nil {
              panic(_err)
          }
          statusCode := tea.IntValue(tea.ToInt(result.StatusCode))
          if statusCode == http.StatusOK {
              voiceModerationResponse := result.Body
              fmt.Println("response success. response:" + voiceModerationResponse.String())
              if tea.IntValue(tea.ToInt(voiceModerationResponse.Code)) == 200 {
                  voiceModerationResponseData := voiceModerationResponse.Data
                  fmt.Println("response taskId:" + tea.StringValue(voiceModerationResponseData.TaskId))
              } else {
                  fmt.Println("voice moderation not success. code:" + tea.ToString(tea.Int32Value(voiceModerationResponse.Code)))
              }
          } else {
              fmt.Println("response not success. status:" + tea.ToString(statusCode))
          }
      }
    • Sample code for obtaining voice moderation results

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green "github.com/alibabacloud-go/green-20220302/client"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
          config := &openapi.Config{
              /**
               * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
               * We recommend that you do not save the AccessKey ID and AccessKey Secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources that belong to your account may be compromised.
               * Common ways to obtain environment variables:
               * Obtain the AccessKey ID of your RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * Obtain the AccessKey Secret of your RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("We recommend that you obtain the AccessKey ID of your RAM user from environment variables"),
              AccessKeySecret: tea.String("We recommend that you obtain the AccessKey secret of your RAM user from environment variables"),
              // Enter the region ID and endpoint.
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              // Configure an HTTP proxy.
              // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // Configure an HTTPS proxy.
              // HttpsProxy: tea.String("https://xx.xx.xx.xx:xxxx"),
              /**
               * Specify the connection timeout and read timeout. The timeout period for the server to complete a file moderation request is 10s.
               * If you set the read timeout to a period shorter than 10s, the server may generate a read timeout error during request processing.
               */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
          // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
          client, _err := green.NewClient(config)
          if _err != nil {
              panic(_err)
          }
      
          serviceParameters, _ := json.Marshal(
              map[string]interface{}{
                  "taskId": "<Task ID>",
              },
          )
          request := green.VoiceModerationResultRequest{
              // Voice moderation service.
              Service:           tea.String("audio_multilingual_global"),
              ServiceParameters: tea.String(string(serviceParameters)),
          }
          result, _err := client.VoiceModerationResult(&request)
          if _err != nil {
              panic(_err)
          }
          statusCode := tea.IntValue(tea.ToInt(result.StatusCode))
          if statusCode == http.StatusOK {
              voiceModerationResponse := result.Body
              fmt.Println("response success. response:" + voiceModerationResponse.String())
              if tea.IntValue(tea.ToInt(voiceModerationResponse.Code)) == 200 {
                  resultResponseBodyData := voiceModerationResponse.Data
                  fmt.Println("response liveId:" + tea.StringValue(resultResponseBodyData.LiveId))
                  fmt.Println("response sliceDetails:" + tea.ToString(resultResponseBodyData.SliceDetails))
              } else {
                  fmt.Println("get voice moderation result not success. code:" + tea.ToString(tea.Int32Value(voiceModerationResponse.Code)))
              }
          } else {
              fmt.Println("response not success. status:" + tea.ToString(statusCode))
          }
      }
                                      

Moderation of local audio

Scenarios

When the audio for moderation is located on your local machine and does not have a public network access link, you can upload the audio to the Object Storage Service (OSS) bucket provided by Content Moderation. Audio Moderation 2.0 can directly access the OSS, retrieve the audio content, and conduct the moderation.

  1. Run the following command to install the related dependencies:

    go git clone --branch v2.2.11 github.com/alibabacloud-go/green-20220302/v2

    Install OSS SDK:

    go get github.com/aliyun/aliyun-oss-go-sdk/oss
  2. SDK for Go

    • Sample code for submitting a voice moderation task

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green20220302 "github.com/alibabacloud-go/green-20220302/client"
          util "github.com/alibabacloud-go/tea-utils/v2/service"
          "github.com/alibabacloud-go/tea/tea"
          "github.com/aliyun/aliyun-oss-go-sdk/oss"
          "github.com/google/uuid"
          "net/http"
          "os"
          "strings"
          "time"
      )
      //Obtain a temporary token for uploading the file.
      var TokenMap =make(map[string]*green20220302.DescribeUploadTokenResponseBodyData)
      //The client that uploads the file.
      var Bucket *oss.Bucket
      //Specifies whether the service is deployed in a VPC.
      var isVPC = false
      //Create the client that initiates image moderation requests.
      func createClient(accessKeyId string, accessKeySecret string, endpoint string) (*green20220302.Client, error) {
          config := &openapi.Config{
          AccessKeyId: tea.String(accessKeyId),
          AccessKeySecret: tea.String(accessKeySecret),
          // Configure an HTTP proxy.
          // HttpProxy: tea.String("http://10.10.xx.xx:xxxx"),
          // Configure an HTTPS proxy.
          // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"),
          Endpoint: tea.String(endpoint),
          }
          //Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
          return green20220302.NewClient(config);
      }
      
      //Obtain the client for uploading the file.
      func createOssClient(tokenData *green20220302.DescribeUploadTokenResponseBodyData) {
          if isVPC{
          ossClient, err := oss.New(tea.StringValue(tokenData.OssInternalEndPoint), tea.StringValue(tokenData.AccessKeyId), tea.StringValue(tokenData.AccessKeySecret), oss.SecurityToken(tea.StringValue(tokenData.SecurityToken)))
          if err != nil {
          fmt.Println("Error:", err)
          os.Exit(-1)
          }
          Bucket, _ =ossClient.Bucket(tea.StringValue(tokenData.BucketName));
          }else {
          ossClient, err := oss.New(tea.StringValue(tokenData.OssInternetEndPoint), tea.StringValue(tokenData.AccessKeyId), tea.StringValue(tokenData.AccessKeySecret), oss.SecurityToken(tea.StringValue(tokenData.SecurityToken)))
          if err != nil {
          fmt.Println("Error:", err)
          os.Exit(-1)
          }
          Bucket, _ =ossClient.Bucket(tea.StringValue(tokenData.BucketName));
          }
      }
      
      //Upload a file.
      func uploadFile(filePath string,tokenData *green20220302.DescribeUploadTokenResponseBodyData) (string,error) {
          createOssClient(tokenData)
          objectName := tea.StringValue(tokenData.FileNamePrefix) + uuid.New().String() + "." + strings.Split(filePath, ".")[1]
          //Upload a file.
          _err := Bucket.PutObjectFromFile(objectName, filePath)
          if _err != nil {
          fmt.Println("Error:", _err)
          os.Exit(-1)
          }
          return objectName,_err
      }
      
      func invoke(accessKeyId string, accessKeySecret string, endpoint string) (_result *green20220302.VoiceModerationResponse, _err error) {
          //Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
          client, _err := createClient(accessKeyId, accessKeySecret, endpoint)
          if _err != nil {
          return nil,_err
          }
          //Create a RuntimeOptions instance and specify runtime parameters. The settings take effect only on the requests that use the RuntimeOptions instance.
          runtime := &util.RuntimeOptions{}
          //The full path of the local file. Example: D:\localPath\exampleFile.wav.
          var filePath = "D:\\localPath\\exampleFile.wav"
          //Obtain a temporary token for uploading the file.
          tokenData,ok:=TokenMap[endpoint];
          if !ok || tea.Int32Value(tokenData.Expiration) <= int32(time.Now().Unix()) {
          //Obtain a temporary token for uploading the file.
          uploadTokenResponse, _err := client.DescribeUploadToken()
          if _err != nil {
          return nil,_err
          }
          tokenData = uploadTokenResponse.Body.Data
          TokenMap[endpoint] = tokenData
          }
           var objectName, _ = uploadFile(filePath,TokenMap[endpoint])
      
          //Construct an audio moderation request.
          serviceParameters, _ := json.Marshal(
          map[string]interface{}{
          "ossBucketName": tea.StringValue(TokenMap[endpoint].BucketName),
          "ossObjectName": objectName,
          "dataId":   uuid.New().String(),
          },
          )
          voiceModerationRequest := &green20220302.VoiceModerationRequest{
          // Voice moderation service.
            Service:           tea.String("audio_multilingual_global"),
          ServiceParameters: tea.String(string(serviceParameters)),
          }
      
          return client.VoiceModerationWithOptions(voiceModerationRequest, runtime)
      
      }
      
      func main() {
          /**
           * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
           * We recommend that you do not save the AccessKey ID and AccessKey Secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources that belong to your account may be compromised.
           * Common ways to obtain environment variables:
           * Obtain the AccessKey ID of your RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
           * Obtain the AccessKey Secret of your RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
           */
          var accessKeyId= "We recommend that you obtain the AccessKey ID of your RAM user from environment variables";
          var accessKeySecret= "We recommend that you obtain the AccessKey secret of your RAM user from environment variables";
          //Change the region ID and endpoint based on your business requirements.
          var endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
          response,_err := invoke(accessKeyId,accessKeySecret,endpoint)
          
          flag := false
          if _err != nil {
          var err = &tea.SDKError{}
          if _t, ok := _err.(*tea.SDKError); ok {
          err = _t
          if *err.StatusCode == 500 {
          flag = true
          }
          }
          }
          if response == nil || *response.StatusCode == 500 || *response.Body.Code == 500 {
          flag = true
          }
          //Automatic routing. The region is switched to ap-southeast-1.
          if flag {
          endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
          response, _err = invoke(accessKeyId,accessKeySecret,endpoint)
          }
      
          if response != nil {
          statusCode := tea.IntValue(tea.ToInt(response.StatusCode))
          body := response.Body
          voiceModerationResponseData := body.Data
          fmt.Println("requestId:" + tea.StringValue(body.RequestId))
          if statusCode == http.StatusOK {
          fmt.Println("response success. response:" + body.String())
          if tea.IntValue(tea.ToInt(body.Code)) == 200 {
          result := voiceModerationResponseData.Result
          fmt.Println("response dataId:" + tea.StringValue(voiceModerationResponseData.DataId))
          for i := 0; i < len(result); i++ {
          fmt.Println("response label:" + tea.StringValue(result[i].Label))
          fmt.Println("response confidence:" + tea.ToString(tea.Float32Value(result[i].Confidence)))
          }
          } else {
          fmt.Println("voice moderation not success. status" + tea.ToString(body.Code))
          }
          } else {
          fmt.Print("response not success. status:" + tea.ToString(statusCode))
          }
          }
      }
    • Sample code for obtaining voice moderation results

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green "github.com/alibabacloud-go/green-20220302/client"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
          config := &openapi.Config{
              /**
               * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
               * We recommend that you do not save the AccessKey ID and AccessKey Secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources that belong to your account may be compromised.
               * Common ways to obtain environment variables:
               * Obtain the AccessKey ID of your RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * Obtain the AccessKey Secret of your RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("We recommend that you obtain the AccessKey ID of your RAM user from environment variables"),
              AccessKeySecret: tea.String("We recommend that you obtain the AccessKey secret of your RAM user from environment variables"),
              // Enter the region ID and endpoint.
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              // Configure an HTTP proxy.
              // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // Configure an HTTPS proxy.
              // HttpsProxy: tea.String("https://xx.xx.xx.xx:xxxx"),
              /**
               * Specify the connection timeout and read timeout. The timeout period for the server to complete a file moderation request is 10s.
               * If you set the read timeout to a period shorter than 10s, the server may generate a read timeout error during request processing.
               */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
          // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
          client, _err := green.NewClient(config)
          if _err != nil {
              panic(_err)
          }
      
          serviceParameters, _ := json.Marshal(
              map[string]interface{}{
                  "taskId": "<Task ID>",
              },
          )
          request := green.VoiceModerationResultRequest{
              // Voice moderation service.
              Service:           tea.String("audio_multilingual_global"),
              ServiceParameters: tea.String(string(serviceParameters)),
          }
          result, _err := client.VoiceModerationResult(&request)
          if _err != nil {
              panic(_err)
          }
          statusCode := tea.IntValue(tea.ToInt(result.StatusCode))
          if statusCode == http.StatusOK {
              voiceModerationResponse := result.Body
              fmt.Println("response success. response:" + voiceModerationResponse.String())
              if tea.IntValue(tea.ToInt(voiceModerationResponse.Code)) == 200 {
                  resultResponseBodyData := voiceModerationResponse.Data
                  fmt.Println("response liveId:" + tea.StringValue(resultResponseBodyData.LiveId))
                  fmt.Println("response sliceDetails:" + tea.ToString(resultResponseBodyData.SliceDetails))
              } else {
                  fmt.Println("get voice moderation result not success. code:" + tea.ToString(tea.Int32Value(voiceModerationResponse.Code)))
              }
          } else {
              fmt.Println("response not success. status:" + tea.ToString(statusCode))
          }
      }
                                      

Moderation of audio stored on OSS

Scenarios

If the audio files for moderation are already stored in OSS, you can authorize to create a service role to allow Content Moderation to access OSS. Audio Moderation 2.0 can obtain the files from OSS through the service role and conduct the moderation. To create a service role, visit Cloud Resource Access Authorization.

  1. Run the following command to install the related dependencies:

    go git clone --branch v2.2.11 github.com/alibabacloud-go/green-20220302/v2
  2. SDK for Go

    • Sample code for submitting a voice moderation task

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green "github.com/alibabacloud-go/green-20220302/client"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
          config := &openapi.Config{
              /**
               * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
               * We recommend that you do not save the AccessKey ID and AccessKey Secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources that belong to your account may be compromised.
               * Common ways to obtain environment variables:
               * Obtain the AccessKey ID of your RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * Obtain the AccessKey Secret of your RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("We recommend that you obtain the AccessKey ID of your RAM user from environment variables"),
              AccessKeySecret: tea.String("We recommend that you obtain the AccessKey secret of your RAM user from environment variables"),
              // Enter the region ID and endpoint.
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              // Configure an HTTP proxy.
              //HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // Configure an HTTPS proxy.
              //HttpsProxy: tea.String("https://xx.xx.xx.xx:xxxx"),
              /**
               * Specify the connection timeout and read timeout. The timeout period for the server to complete a file moderation request is 10s.
               * If you set the read timeout to a period shorter than 10s, the server may generate a read timeout error during request processing.
               */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
          // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
          client, _err := green.NewClient(config)
          if _err != nil {
              panic(_err)
          }
          // The URL of the voice to be moderated.
          serviceParameters, _ := json.Marshal(
              map[string]interface{}{
                  	//The region of the OSSbucket where the audio for moderation is located. Example: cn-shanghai
      		"ossRegionId": "cn-shanghai",
      		//The name of the OSSbucket that contains the audio for moderation. Example: bucket001
      		"ossBucketName":"bucket001",
      		//The Object name of the audio for moderation. Example: voice/001.wav
      		"ossObjectName":"voice/001.wav",
      		//The ID of the data for moderation.
      		"dataId":   uuid.New().String(),
              },
          )
          request := green.VoiceModerationRequest{
              // Voice moderation service.
              Service:           tea.String("audio_multilingual_global"),
              ServiceParameters: tea.String(string(serviceParameters)),
          }
          result, _err := client.VoiceModeration(&request)
          if _err != nil {
              panic(_err)
          }
          statusCode := tea.IntValue(tea.ToInt(result.StatusCode))
          if statusCode == http.StatusOK {
              voiceModerationResponse := result.Body
              fmt.Println("response success. response:" + voiceModerationResponse.String())
              if tea.IntValue(tea.ToInt(voiceModerationResponse.Code)) == 200 {
                  voiceModerationResponseData := voiceModerationResponse.Data
                  fmt.Println("response taskId:" + tea.StringValue(voiceModerationResponseData.TaskId))
              } else {
                  fmt.Println("voice moderation not success. code:" + tea.ToString(tea.Int32Value(voiceModerationResponse.Code)))
              }
          } else {
              fmt.Println("response not success. status:" + tea.ToString(statusCode))
          }
      }
    • Sample code for obtaining voice moderation results

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green "github.com/alibabacloud-go/green-20220302/client"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
          config := &openapi.Config{
              /**
               * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
               * We recommend that you do not save the AccessKey ID and AccessKey Secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources that belong to your account may be compromised.
               * Common ways to obtain environment variables:
               * Obtain the AccessKey ID of your RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * Obtain the AccessKey Secret of your RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("We recommend that you obtain the AccessKey ID of your RAM user from environment variables"),
              AccessKeySecret: tea.String("We recommend that you obtain the AccessKey secret of your RAM user from environment variables"),
              // Enter the region ID and endpoint.
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              // Configure an HTTP proxy.
              // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // Configure an HTTPS proxy.
              // HttpsProxy: tea.String("https://xx.xx.xx.xx:xxxx"),
              /**
               * Specify the connection timeout and read timeout. The timeout period for the server to complete a file moderation request is 10s.
               * If you set the read timeout to a period shorter than 10s, the server may generate a read timeout error during request processing.
               */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
          // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
          client, _err := green.NewClient(config)
          if _err != nil {
              panic(_err)
          }
      
          serviceParameters, _ := json.Marshal(
              map[string]interface{}{
                  "taskId": "<Task ID>",
              },
          )
          request := green.VoiceModerationResultRequest{
              // Voice moderation service.
              Service:           tea.String("audio_multilingual_global"),
              ServiceParameters: tea.String(string(serviceParameters)),
          }
          result, _err := client.VoiceModerationResult(&request)
          if _err != nil {
              panic(_err)
          }
          statusCode := tea.IntValue(tea.ToInt(result.StatusCode))
          if statusCode == http.StatusOK {
              voiceModerationResponse := result.Body
              fmt.Println("response success. response:" + voiceModerationResponse.String())
              if tea.IntValue(tea.ToInt(voiceModerationResponse.Code)) == 200 {
                  resultResponseBodyData := voiceModerationResponse.Data
                  fmt.Println("response liveId:" + tea.StringValue(resultResponseBodyData.LiveId))
                  fmt.Println("response sliceDetails:" + tea.ToString(resultResponseBodyData.SliceDetails))
              } else {
                  fmt.Println("get voice moderation result not success. code:" + tea.ToString(tea.Int32Value(voiceModerationResponse.Code)))
              }
          } else {
              fmt.Println("response not success. status:" + tea.ToString(statusCode))
          }
      }
                                      

SDK for C#

For more information about the source code, see SDK source code for C#.

The following three types are supported for audio moderation.

Moderation of publicly accessible audio on the internet

Scenarios

When the audio to be reviewed is accessible from the Internet, Audio Moderation 2.0 can obtain the audio file through the URL and conduct the moderation.

  1. Run the following command to install the related dependencies:

    dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.10
  2. Use the SDK for C#.

    • Sample code for submitting a voice moderation task

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * Use your AccessKey ID and AccessKey secret to initialize the client.
               * @param accessKeyId
               * @param accessKeySecret
               * @return Client
               * @throws Exception
               */
              public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret)
              {
                  AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                  {
                     	AccessKeyId = accessKeyId,
      				AccessKeySecret = accessKeySecret,
                  };
                  // The endpoint of the service.
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // If the project code is leaked, the AccessKey pair may be leaked and the security of resources within your account may be compromised. The following sample code is for reference only. We recommend that you use STS.
                  /**
                  * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
                  * We recommend that you do not save the AccessKey ID and AccessKey Secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources that belong to your account may be compromised.
                  * Common ways to obtain environment variables:
                  * Obtain the AccessKey ID of your RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * Obtain the AccessKey Secret of your RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  string accessKeyId = "We recommend that you obtain the AccessKey ID of your RAM user from environment variables",
                  string accessKeySecret = 'We recommend that you obtain the AccessKey secret of your RAM user from environment variables',
                  // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
                  AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret);
                  // Construct an audio moderation request.
                  AlibabaCloud.SDK.Green20220302.Models.VoiceModerationRequest voiceModerationRequest = new AlibabaCloud.SDK.Green20220302.Models.VoiceModerationRequest();
                  // Voice moderation service.
                  voiceModerationRequest.Service="audio_multilingual_global";
                  Dictionary<String,Object> task=new Dictionary<string, object>();
                  // The URL of the voice to be moderated, which is accessible over the Internet.
                  task.Add("url","https://xxxx/xxx/sample.wav");
                  voiceModerationRequest.ServiceParameters=JsonConvert.SerializeObject(task);
                  // Construct the runtime configuration object and specify runtime parameters.
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                  runtime.ReadTimeout = 10000;
                  runtime.ConnectTimeout = 10000;
                  try
                  {
                      // Submits audio moderation tasks.
                    AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResponse response= client.VoiceModerationWithOptions(voiceModerationRequest, runtime);
                  if(response is not null){
                      Console.WriteLine("response statusCode : "+response.StatusCode);
                      if (response.Body is not null){
                      Console.WriteLine("requestId : " + response.Body.RequestId);
                      Console.WriteLine("code : " + response.Body.Code);
                      Console.WriteLine("message : " + response.Body.Message);
                          if(response.Body.Data is not null){
                              Console.WriteLine("taskId : " + response.Body.Data.TaskId);
                          }
                      }
                  }
                  }
                  catch (TeaException error)
                  {
                      // Print the error if necessary.
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
                  catch (Exception _error)
                  {
                      TeaException error = new TeaException(new Dictionary<string, object>
                      {
                          { "message", _error.Message }
                      });
                      // Print the error if necessary.
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
              }
          }
      }
    • Sample code for obtaining voice moderation results

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * Use your AccessKey ID and AccessKey secret to initialize the client.
               * @param accessKeyId
               * @param accessKeySecret
               * @return Client
               * @throws Exception
               */
              public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret)
              {
                  AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                  {
                      AccessKeyId = accessKeyId,
                      AccessKeySecret = accessKeySecret,
                  };
                  // The endpoint of the service.
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // If the project code is leaked, the AccessKey pair may be leaked and the security of resources within your account may be compromised. The following sample code is for reference only. We recommend that you use STS.
                  /**
                  * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
                  * We recommend that you do not save the AccessKey ID and AccessKey Secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources that belong to your account may be compromised.
                  * Common ways to obtain environment variables:
                  * Obtain the AccessKey ID of your RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * Obtain the AccessKey Secret of your RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  string accessKeyId = "We recommend that you obtain the AccessKey ID of your RAM user from environment variables",
                  string accessKeySecret = 'We recommend that you obtain the AccessKey secret of your RAM user from environment variables',  
                	// Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
                  AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret);
                  // Construct an audio moderation request.
                  AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResultRequest voiceModerationResultRequest = new AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResultRequest();
                  // Voice moderation service.
                  voiceModerationResultRequest.Service="audio_multilingual_global";
                  Dictionary<String,Object> task=new Dictionary<string, object>();
                  // The ID of the task whose results you want to query.
                  task.Add("taskId","<The ID of the task whose results you want to query.>");
                  voiceModerationResultRequest.ServiceParameters=JsonConvert.SerializeObject(task);
                  // Construct the runtime configuration object and specify runtime parameters.
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                  runtime.ReadTimeout = 10000;
                  runtime.ConnectTimeout = 10000;
                  try
                  {
                      // Submits audio moderation tasks.
                    AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResultResponse response= client.VoiceModerationResultWithOptions(voiceModerationResultRequest, runtime);
                  if(response is not null){
                      Console.WriteLine("response statusCode : "+response.StatusCode);
                      if (response.Body is not null){
                      Console.WriteLine("requestId : " + response.Body.RequestId);
                      Console.WriteLine("code : " + response.Body.Code);
                      Console.WriteLine("message : " + response.Body.Message);
                          if(response.Body.Data is not null){
                              Console.WriteLine("taskId : " + response.Body.Data.TaskId);
                              Console.WriteLine("liveId : " + response.Body.Data.LiveId);
                              Console.WriteLine("url : " + response.Body.Data.Url);
                              Console.WriteLine("sliceDetails : " + JsonConvert.SerializeObject(response.Body.Data.SliceDetails));
                          }
                      }
                  }
                  }
                  catch (TeaException error)
                  {
                      // Print the error if necessary.
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
                  catch (Exception _error)
                  {
                      TeaException error = new TeaException(new Dictionary<string, object>
                      {
                          { "message", _error.Message }
                      });
                      // Print the error if necessary.
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
              }
          }
      }

Moderation of local audio

Scenarios

When the audio for moderation is located on your local machine and does not have a public network access link, you can upload the audio to the Object Storage Service (OSS) bucket provided by Content Moderation. Audio Moderation 2.0 can directly access the OSS, retrieve the audio content, and conduct the moderation.

  1. Run the following command to install the related dependencies:

    dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.10

    Install OSS SDK:

    Install the SDK by using NuGet 
    1.If NuGet is not installed for your Visual Studio, you must first install NuGet.
    2.After you install NuGet, create a project or open an existing project in Visual Studio. Then, choose Tools > NuGet Package Manager > Manage NuGet Packages for Solution.
    3.Enter aliyun.oss.sdk in the search box and click Search. Find Aliyun.OSS.SDK (applicable to .NET Framework) or Aliyun.OSS.SDK.NetCore (applicable to .Net Core) in the search results. Select the latest version and click Install.
  2. Use the SDK for C#.

    • Sample code for submitting a voice moderation task

      // This file is auto-generated, don't edit it. Thanks.
      
      using System;
      using Newtonsoft.Json;
      using Aliyun.OSS;
      
      namespace AlibabaCloud.SDK.Green20220302
      {
          public class VoiceModerationAutoRoute
          {
              //Obtain a temporary token for uploading the file.
              public static Dictionary<String, Models.DescribeUploadTokenResponse> tokenDic =
                  new Dictionary<String, Models.DescribeUploadTokenResponse>();
      
              //The client that uploads the file.
              public static OssClient ossClient = null;
      
              //Specifies whether the service is deployed in a VPC.
              public static Boolean isVPC = false;
      
              public static void Main(string[] args)
              {
                  /**
                  * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
                  * We recommend that you do not save the AccessKey ID and AccessKey Secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources that belong to your account may be compromised.
                  * Common ways to obtain environment variables:
                  * Obtain the AccessKey ID of your RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * Obtain the AccessKey Secret of your RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  String accessKeyId = "We recommend that you obtain the AccessKey ID of your RAM user from environment variables";
                  String accessKeySecret = "We recommend that you obtain the AccessKey secret of your RAM user from environment variables";
                  // Change the region ID and endpoint based on your business requirements.
                  String endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  Models.VoiceModerationResponse response = invoke(
                      accessKeyId,
                      accessKeySecret,
                      endpoint
                  );
                  //Automatic routing. The region is switched to ap-southeast-1.
                  if (
                      response is null
                      || response.Body is null
                      || AlibabaCloud.TeaUtil.Common.EqualNumber(
                          500,
                          AlibabaCloud.TeaUtil.Common.AssertAsNumber(response.StatusCode)
                      )
                      || AlibabaCloud.TeaUtil.Common.EqualString(
                          "500",
                          Convert.ToString(response.Body.Code)
                      )
                  )
                  {
                      endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                      response = invoke(accessKeyId, accessKeySecret, endpoint);
                      ;
                  }
      
                  Console.WriteLine(response.Body.RequestId);
                  Console.WriteLine(JsonConvert.SerializeObject(response.Body));
              }
      
              //Create the client that initiates image moderation requests.
              public static Client createClient(
                  String accessKeyId,
                  String accessKeySecret,
                  String endpoint
              )
              {
                  AlibabaCloud.OpenApiClient.Models.Config config =
                      new AlibabaCloud.OpenApiClient.Models.Config
                      {
                          AccessKeyId = accessKeyId,
                          AccessKeySecret = accessKeySecret,
                          //Configure an HTTP proxy.
                          //HttpProxy = "http://10.10.xx.xx:xxxx",
                          //Configure an HTTPS proxy.
                          //HttpsProxy = "https://username:password@xxx.xxx.xxx.xxx:9999",
                          //The endpoint of the service.
                          Endpoint = endpoint,
                      };
                  return new Client(config);
              }
      
              //Create the client that uploads the file.
              private static OssClient getOssClient(
                  Models.DescribeUploadTokenResponse tokenResponse,
                  Boolean isVPC
              )
              {
                  var tokenData = tokenResponse.Body.Data;
                  if (isVPC)
                  {
                      return new OssClient(
                          tokenData.OssInternalEndPoint,
                          tokenData.AccessKeyId,
                          tokenData.AccessKeySecret,
                          tokenData.SecurityToken
                      );
                  }
                  else
                  {
                      return new OssClient(
                          tokenData.OssInternetEndPoint,
                          tokenData.AccessKeyId,
                          tokenData.AccessKeySecret,
                          tokenData.SecurityToken
                      );
                  }
              }
      
              //Upload a file.
              public static String uploadFile(
                  String filePath,
                  Models.DescribeUploadTokenResponse tokenResponse
              )
              {
                  // Create an OssClient instance.
                  ossClient = getOssClient(tokenResponse, isVPC);
                  var tokenData = tokenResponse.Body.Data;
      
                  String objectName =
                      tokenData.FileNamePrefix
                      + Guid.NewGuid().ToString()
                      + "."
                      + filePath.Split(".").GetValue(1);
                  //Upload a file.
                  ossClient.PutObject(tokenData.BucketName, objectName, filePath);
                  return objectName;
              }
      
              //Submit the image moderation request.
              public static Models.VoiceModerationResponse invoke(
                  String accessKeyId,
                  String accessKeySecret,
                  String endpoint
              )
              {
                  //Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
                  Client client = createClient(accessKeyId, accessKeySecret, endpoint);
      
                  //Create a RuntimeOptions instance and specify runtime parameters. The settings take effect only on the requests that use the RuntimeOptions instance.
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtimeOptions =
                      new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
      
                  //The full path of the local file. Example: D:\localPath\exampleFile.wav.
                  String filePath = "D:\localPath\exampleFile.wav";
                  try
                  {
                      //Obtain a temporary token for uploading the file.
                      if (
                          !tokenDic.ContainsKey(endpoint)
                          || tokenDic[endpoint].Body.Data.Expiration
                              <= DateTimeOffset.Now.ToUnixTimeSeconds()
                      )
                      {
                          var tokenResponse = client.DescribeUploadToken();
                          tokenDic[endpoint] = tokenResponse;
                      }
                      //Upload a file.
                      String objectName = uploadFile(filePath, tokenDic[endpoint]);
                      //Construct an audio moderation request.
                      Models.VoiceModerationRequest voiceModerationRequest =
                          new Models.VoiceModerationRequest();
                      //Audio moderation service Example: audio_multilingual_global
                        voiceModerationRequest.Service = "audio_multilingual_global";
                      Dictionary<string, object> task = new Dictionary<string, object>();
                      //The information of audio to be moderated.
                      task.Add("ossBucketName", tokenDic[endpoint].Body.Data.BucketName);
                      task.Add("ossObjectName", objectName);
                      //The ID of the data to be moderated.
                      task.Add("dataId", Guid.NewGuid().ToString());
                      voiceModerationRequest.ServiceParameters = JsonConvert.SerializeObject(task);
                      //Call the API to obtain the moderation results.
                      Models.VoiceModerationResponse response = client.VoiceModerationWithOptions(
                          voiceModerationRequest,
                          runtimeOptions
                      );
                      return response;
                  }
                  catch (Exception _err)
                  {
                      Console.WriteLine(_err);
                      return null;
                  }
              }
          }
      }
    • Sample code for obtaining voice moderation results

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * Use your AccessKey ID and AccessKey secret to initialize the client.
               * @param accessKeyId
               * @param accessKeySecret
               * @return Client
               * @throws Exception
               */
              public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret)
              {
                  AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                  {
                      AccessKeyId = accessKeyId,
                      AccessKeySecret = accessKeySecret,
                  };
                  // The endpoint of the service.
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // If the project code is leaked, the AccessKey pair may be leaked and the security of resources within your account may be compromised. The following sample code is for reference only. We recommend that you use STS.
                  /**
                  * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
                  * We recommend that you do not save the AccessKey ID and AccessKey Secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources that belong to your account may be compromised.
                  * Common ways to obtain environment variables:
                  * Obtain the AccessKey ID of your RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * Obtain the AccessKey Secret of your RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  string accessKeyId = "We recommend that you obtain the AccessKey ID of your RAM user from environment variables",
                  string accessKeySecret = 'We recommend that you obtain the AccessKey secret of your RAM user from environment variables',  
                	// Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
                  AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret);
                  // Construct an audio moderation request.
                  AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResultRequest voiceModerationResultRequest = new AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResultRequest();
                  // Voice moderation service.
                  voiceModerationResultRequest.Service="audio_multilingual_global";
                  Dictionary<String,Object> task=new Dictionary<string, object>();
                  // The ID of the task whose results you want to query.
                  task.Add("taskId","<The ID of the task whose results you want to query.>");
                  voiceModerationResultRequest.ServiceParameters=JsonConvert.SerializeObject(task);
                  // Construct the runtime configuration object and specify runtime parameters.
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                  runtime.ReadTimeout = 10000;
                  runtime.ConnectTimeout = 10000;
                  try
                  {
                      // Submits audio moderation tasks.
                    AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResultResponse response= client.VoiceModerationResultWithOptions(voiceModerationResultRequest, runtime);
                  if(response is not null){
                      Console.WriteLine("response statusCode : "+response.StatusCode);
                      if (response.Body is not null){
                      Console.WriteLine("requestId : " + response.Body.RequestId);
                      Console.WriteLine("code : " + response.Body.Code);
                      Console.WriteLine("message : " + response.Body.Message);
                          if(response.Body.Data is not null){
                              Console.WriteLine("taskId : " + response.Body.Data.TaskId);
                              Console.WriteLine("liveId : " + response.Body.Data.LiveId);
                              Console.WriteLine("url : " + response.Body.Data.Url);
                              Console.WriteLine("sliceDetails : " + JsonConvert.SerializeObject(response.Body.Data.SliceDetails));
                          }
                      }
                  }
                  }
                  catch (TeaException error)
                  {
                      // Print the error if necessary.
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
                  catch (Exception _error)
                  {
                      TeaException error = new TeaException(new Dictionary<string, object>
                      {
                          { "message", _error.Message }
                      });
                      // Print the error if necessary.
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
              }
          }
      }

Moderation of audio stored on OSS

Scenarios

If the audio files for moderation are already stored in OSS, you can authorize to create a service role to allow Content Moderation to access OSS. Audio Moderation 2.0 can obtain the files from OSS through the service role and conduct the moderation. To create a service role, visit Cloud Resource Access Authorization.

  1. Run the following command to install the related dependencies:

    dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.10
  2. Use the SDK for C#.

    • Sample code for submitting a voice moderation task

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * Use your AccessKey ID and AccessKey secret to initialize the client.
               * @param accessKeyId
               * @param accessKeySecret
               * @return Client
               * @throws Exception
               */
              public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret)
              {
                  AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                  {
                     	AccessKeyId = accessKeyId,
      				AccessKeySecret = accessKeySecret,
                  };
                  // The endpoint of the service.
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // If the project code is leaked, the AccessKey pair may be leaked and the security of resources within your account may be compromised. The following sample code is for reference only. We recommend that you use STS.
                  /**
                  * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
                  * We recommend that you do not save the AccessKey ID and AccessKey Secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources that belong to your account may be compromised.
                  * Common ways to obtain environment variables:
                  * Obtain the AccessKey ID of your RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * Obtain the AccessKey Secret of your RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  string accessKeyId = "We recommend that you obtain the AccessKey ID of your RAM user from environment variables",
                  string accessKeySecret = 'We recommend that you obtain the AccessKey secret of your RAM user from environment variables',
                  // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
                  AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret);
                  // Construct an audio moderation request.
                  AlibabaCloud.SDK.Green20220302.Models.VoiceModerationRequest voiceModerationRequest = new AlibabaCloud.SDK.Green20220302.Models.VoiceModerationRequest();
                  // Voice moderation service.
                  voiceModerationRequest.Service="audio_multilingual_global";
                  Dictionary<String,Object> task=new Dictionary<string, object>();
                  // Example of OSS files.
                  task.Add("ossBucketName","bucket_01");
                  task.Add("ossObjectName","test/sample.wav");
                  task.Add("ossRegionId","cn-shanghai");
                  voiceModerationRequest.ServiceParameters=JsonConvert.SerializeObject(task);
                  // Construct the runtime configuration object and specify runtime parameters.
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                  runtime.ReadTimeout = 10000;
                  runtime.ConnectTimeout = 10000;
                  try
                  {
                      // Submits audio moderation tasks.
                    AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResponse response= client.VoiceModerationWithOptions(voiceModerationRequest, runtime);
                  if(response is not null){
                      Console.WriteLine("response statusCode : "+response.StatusCode);
                      if (response.Body is not null){
                      Console.WriteLine("requestId : " + response.Body.RequestId);
                      Console.WriteLine("code : " + response.Body.Code);
                      Console.WriteLine("message : " + response.Body.Message);
                          if(response.Body.Data is not null){
                              Console.WriteLine("taskId : " + response.Body.Data.TaskId);
                          }
                      }
                  }
                  }
                  catch (TeaException error)
                  {
                      // Print the error if necessary.
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
                  catch (Exception _error)
                  {
                      TeaException error = new TeaException(new Dictionary<string, object>
                      {
                          { "message", _error.Message }
                      });
                      // Print the error if necessary.
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
              }
          }
      }
    • Sample code for obtaining voice moderation results

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * Use your AccessKey ID and AccessKey secret to initialize the client.
               * @param accessKeyId
               * @param accessKeySecret
               * @return Client
               * @throws Exception
               */
              public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret)
              {
                  AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                  {
                      AccessKeyId = accessKeyId,
                      AccessKeySecret = accessKeySecret,
                  };
                  // The endpoint of the service.
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // If the project code is leaked, the AccessKey pair may be leaked and the security of resources within your account may be compromised. The following sample code is for reference only. We recommend that you use STS.
                  /**
                  * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
                  * We recommend that you do not save the AccessKey ID and AccessKey Secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources that belong to your account may be compromised.
                  * Common ways to obtain environment variables:
                  * Obtain the AccessKey ID of your RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * Obtain the AccessKey Secret of your RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  string accessKeyId = "We recommend that you obtain the AccessKey ID of your RAM user from environment variables",
                  string accessKeySecret = 'We recommend that you obtain the AccessKey secret of your RAM user from environment variables',  
                	// Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
                  AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret);
                  // Construct an audio moderation request.
                  AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResultRequest voiceModerationResultRequest = new AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResultRequest();
                  // Voice moderation service.
                  voiceModerationResultRequest.Service="audio_multilingual_global";
                  Dictionary<String,Object> task=new Dictionary<string, object>();
                  // The ID of the task whose results you want to query.
                  task.Add("taskId","<The ID of the task whose results you want to query.>");
                  voiceModerationResultRequest.ServiceParameters=JsonConvert.SerializeObject(task);
                  // Construct the runtime configuration object and specify runtime parameters.
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                  runtime.ReadTimeout = 10000;
                  runtime.ConnectTimeout = 10000;
                  try
                  {
                      // Submits audio moderation tasks.
                    AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResultResponse response= client.VoiceModerationResultWithOptions(voiceModerationResultRequest, runtime);
                  if(response is not null){
                      Console.WriteLine("response statusCode : "+response.StatusCode);
                      if (response.Body is not null){
                      Console.WriteLine("requestId : " + response.Body.RequestId);
                      Console.WriteLine("code : " + response.Body.Code);
                      Console.WriteLine("message : " + response.Body.Message);
                          if(response.Body.Data is not null){
                              Console.WriteLine("taskId : " + response.Body.Data.TaskId);
                              Console.WriteLine("liveId : " + response.Body.Data.LiveId);
                              Console.WriteLine("url : " + response.Body.Data.Url);
                              Console.WriteLine("sliceDetails : " + JsonConvert.SerializeObject(response.Body.Data.SliceDetails));
                          }
                      }
                  }
                  }
                  catch (TeaException error)
                  {
                      // Print the error if necessary.
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
                  catch (Exception _error)
                  {
                      TeaException error = new TeaException(new Dictionary<string, object>
                      {
                          { "message", _error.Message }
                      });
                      // Print the error if necessary.
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
              }
          }
      }

SDK for Node.js

For more information about the source code, see SDK source code for Node.js.

The following three types are supported for audio moderation.

Moderation of publicly accessible audio on the internet

Scenarios

When the audio to be reviewed is accessible from the Internet, Audio Moderation 2.0 can obtain the audio file through the URL and conduct the moderation.

  1. Run the following command to install the related dependencies:

    npm install @alicloud/green20220302@2.2.10

  2. Use the SDK for Node.js.

    • Sample code for submitting a voice moderation task

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
      // If the project code is leaked, the AccessKey pair may be leaked and the security of all resources within your account may be compromised. The following sample code is provided for reference only.
      class Client {
          static createClient() {
              const config = new OpenApi.Config({
                  // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured.
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured.
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.ap-southeast-1.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // Create a request object.
              const voiceModerationRequest = new Green20220302.VoiceModerationRequest({
                  // Voice moderation service.
                  "service": "audio_multilingual_global",
                  // The URL of the voice to be moderated.
                  "serviceParameters": JSON.stringify({"url":"http://aliyundoc.com/test.flv"})
              });
              // Create a runtime configuration object.
              const runtime = new Util.RuntimeOptions();
              try {
                  // Initiate a request and obtain a response.
                  const response = await client.voiceModerationWithOptions(voiceModerationRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // Handle exceptions with caution in your actual business scenario and never ignore exceptions in your project. In this example, error messages are printed to the screen.
                  // Print an error message.
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();
    • Sample code for obtaining voice moderation results

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
      // If the project code is leaked, the AccessKey pair may be leaked and the security of all resources within your account may be compromised. The following sample code is provided for reference only.
      class Client {
          static createClient() {
              const config = new OpenApi.Config({
                  // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured.
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured.
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.ap-southeast-1.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // Create a request object.
              const voiceModerationResultRequest = new Green20220302.VoiceModerationResultRequest({
                  // Voice moderation service.
                  "service": "audio_multilingual_global",
                  "serviceParameters": JSON.stringify({"taskId":"<The ID of the task for which you want to obtain moderation results>"})
              });
              // Create a runtime configuration object.
              const runtime = new Util.RuntimeOptions();
              try {
                  // Initiate a request and obtain a response.
                  const response = await client.voiceModerationResultWithOptions(voiceModerationResultRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // Handle exceptions with caution in your actual business scenario and never ignore exceptions in your project. In this example, error messages are printed to the screen.
                  // Print an error message.
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();

Moderation of local audio

Scenarios

When the audio for moderation is located on your local machine and does not have a public network access link, you can upload the audio to the Object Storage Service (OSS) bucket provided by Content Moderation. Audio Moderation 2.0 can directly access the OSS, retrieve the audio content, and conduct the moderation.

  1. Run the following command to install the related dependencies:

    npm install @alicloud/green20220302@2.2.10

    Install the OSS dependency:

    npm install ali-oss --save
  2. Use the SDK for Node.js.

    • Sample code for submitting a voice moderation task

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const { v4: uuidv4 } = require('uuid');
      const OSS = require('ali-oss');
      const Util = require('@alicloud/tea-util');
      const path = require("path");
      // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
      // If the project code is leaked, the AccessKey pair may be leaked and the security of all resources within your account may be compromised. The following sample code is provided for reference only.
      
      //Specifies whether the service is deployed in a VPC.
      var isVPC = false;
      //Obtain a temporary token for uploading the file.
      var tokenDic = new Array();
      //The client that uploads the file.
      var ossClient;
      //Configure endpoint.
      var endpoint = 'green-cip.ap-southeast-1.aliyuncs.com'
      //The path of the local file.
      var filePath = 'D:\\test\\voice\\cf02.wav'
      //Moderate service.
      var service = 'audio_multilingual_global'
      
      class Client {
          static createClient() {
              const config = new OpenApi.Config({
                  // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured.
                  accessKeyId: "We recommend that you obtain the AccessKey ID of your RAM user from environment variables",
                  // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured.
                  accessKeySecret: "We recommend that you obtain the AccessKey secret of your RAM user from environment variables",
                  endpoint: endpoint,
              });
              return new Green20220302.default(config);
          }
      
          //Create the client that uploads the file.
          static getOssClient(tokenData, isVPC) {
              if (isVPC) {
                  ossClient = new OSS({
                      accessKeyId: tokenData['accessKeyId'],
                      accessKeySecret: tokenData['accessKeySecret'],
                      stsToken: tokenData['securityToken'],
                      endpoint: tokenData['ossInternalEndPoint'],
                      bucket: tokenData['bucketName'],
                  });
              } else {
                  ossClient = new OSS({
                      accessKeyId: tokenData['accessKeyId'],
                      accessKeySecret: tokenData['accessKeySecret'],
                      stsToken: tokenData['securityToken'],
                      endpoint: tokenData['ossInternetEndPoint'],
                      bucket: tokenData['bucketName'],
                  });
              }
          }
      
          static async main() {
              const client = Client.createClient();
              // Create a runtime configuration object.
              const runtime = new Util.RuntimeOptions();
              
              //Obtain a temporary token for uploading a file.
              if (tokenDic[endpoint] == null || tokenDic[endpoint]['expiration'] <= Date.parse(new Date() / 1000)) {
                  var tokenResponse = await client.describeUploadTokenWithOptions(runtime)
                  tokenDic[endpoint] = tokenResponse.body.data;
              }
      
              //Obtain the client for uploading the file.
          this.getOssClient(tokenDic[endpoint], isVPC)
              var split = filePath.split(".");
              var objectName;
              if (split.length > 1) {
                  objectName = tokenDic[endpoint].fileNamePrefix + uuidv4() + "." + split[split.length - 1];
              } else {
                  objectName = tokenDic[endpoint].fileNamePrefix + uuidv4();
              }
      
              //Upload a file.
              const result = await ossClient.put(objectName, path.normalize(filePath));
      
              // Create a request object.
              const voiceModerationRequest = new Green20220302.VoiceModerationRequest({
                  // Moderate service.
                  "service": service,
                  // The URL to be moderated.
                  "serviceParameters": JSON.stringify({
                      "ossBucketName": tokenDic[endpoint].bucketName,
                      "ossObjectName": objectName,
                  })
                  });
      
              try {
                  // Initiate a request and obtain a response.
                  const response = await client.voiceModerationWithOptions(voiceModerationRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // Handle exceptions with caution in your actual business scenario and never ignore exceptions in your project. In this example, error messages are printed to the screen.
                  // Print an error message.
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();
    • Sample code for obtaining voice moderation results

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
      // If the project code is leaked, the AccessKey pair may be leaked and the security of all resources within your account may be compromised. The following sample code is provided for reference only.
      class Client {
          static createClient() {
              const config = new OpenApi.Config({
                  // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured.
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured.
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.ap-southeast-1.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // Create a request object.
              const voiceModerationResultRequest = new Green20220302.VoiceModerationResultRequest({
                  // Voice moderation service.
                  "service": "audio_multilingual_global",
                  "serviceParameters": JSON.stringify({"taskId":"<The ID of the task for which you want to obtain moderation results>"})
              });
              // Create a runtime configuration object.
              const runtime = new Util.RuntimeOptions();
              try {
                  // Initiate a request and obtain a response.
                  const response = await client.voiceModerationResultWithOptions(voiceModerationResultRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // Handle exceptions with caution in your actual business scenario and never ignore exceptions in your project. In this example, error messages are printed to the screen.
                  // Print an error message.
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();

Moderation of audio stored on OSS

Scenarios

If the audio files for moderation are already stored in OSS, you can authorize to create a service role to allow Content Moderation to access OSS. Audio Moderation 2.0 can obtain the files from OSS through the service role and conduct the moderation. To create a service role, visit Cloud Resource Access Authorization.

  1. Run the following command to install the related dependencies:

    npm install @alicloud/green20220302@2.2.10

  2. Use the SDK for Node.js.

    • Sample code for submitting a voice moderation task

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
      // If the project code is leaked, the AccessKey pair may be leaked and the security of all resources within your account may be compromised. The following sample code is provided for reference only.
      class Client {
          static createClient() {
              const config = new OpenApi.Config({
                  // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured.
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured.
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.ap-southeast-1.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // Create a request object.
              const voiceModerationRequest = new Green20220302.VoiceModerationRequest({
                  // Voice moderation service.
                  "service": "audio_multilingual_global",
                  "serviceParameters": JSON.stringify({
                  // The region of the bucket where the image to be moderated is located.Example: cn-shanghai
                  "ossRegionId": "cn-shanghai",
                  // The name of the bucket where the image to be moderated is located.Example: bucket001
                  "ossBucketName": "bucket001",
                  // The image to be moderated. Example: voice/001.wav
                  "ossObjectName": "voice/001.wav",})
              });
              });
              // Create a runtime configuration object.
              const runtime = new Util.RuntimeOptions();
              try {
                  // Initiate a request and obtain a response.
                  const response = await client.voiceModerationWithOptions(voiceModerationRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // Handle exceptions with caution in your actual business scenario and never ignore exceptions in your project. In this example, error messages are printed to the screen.
                  // Print an error message.
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();
    • Sample code for obtaining voice moderation results

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance.
      // If the project code is leaked, the AccessKey pair may be leaked and the security of all resources within your account may be compromised. The following sample code is provided for reference only.
      class Client {
          static createClient() {
              const config = new OpenApi.Config({
                  // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured.
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured.
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.ap-southeast-1.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // Create a request object.
              const voiceModerationResultRequest = new Green20220302.VoiceModerationResultRequest({
                  // Voice moderation service.
                  "service": "audio_multilingual_global",
                  "serviceParameters": JSON.stringify({"taskId":"<The ID of the task for which you want to obtain moderation results>"})
              });
              // Create a runtime configuration object.
              const runtime = new Util.RuntimeOptions();
              try {
                  // Initiate a request and obtain a response.
                  const response = await client.voiceModerationResultWithOptions(voiceModerationResultRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // Handle exceptions with caution in your actual business scenario and never ignore exceptions in your project. In this example, error messages are printed to the screen.
                  // Print an error message.
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();

Calls over HTTPS

  • Call method

    Service request URL: https://green-cip.{region}.aliyuncs.com

    Protocol: HTTPS

    Method: POST

  • Common request parameters

    The input parameters of the Voice Moderation 2.0 API include common request parameters and operation-specific request parameters. Common request parameters are used by each API operation. The following table describes the common request parameters.

    Parameter

    Type

    Required

    Description

    Format

    String

    Yes

    The format in which to return the response. Valid values:

    • JSON (default)

    • XML

    Version

    String

    Yes

    The version number of the Content Moderation 2.0 API. The value is in the YYYY-MM-DD format. Set the value to 2022-03-02.

    AccessKeyId

    String

    Yes

    The AccessKey ID that is provided to you by Alibaba Cloud.

    Signature

    String

    Yes

    The signature string of the current request. For more information about how signatures are calculated, see the following signature method.

    SignatureMethod

    String

    Yes

    The encryption method of the signature string. Set the value to HMAC-SHA1.

    Timestamp

    String

    Yes

    The timestamp of a request. Specify the time in the ISO 8601 standard in the yyyy-MM-ddTHH:mm:ssZ format.

    The time must be in Coordinated Universal Time (UTC).

    For example, 09:13:14 on December 12, 2022 (UTC+8) is written as 2022-12-12T01:13:14Z.

    SignatureVersion

    String

    Yes

    The version of the signature encryption algorithm. Set the value to 1.0.

    SignatureNonce

    String

    Yes

    A unique and random number that is used to prevent replay attacks. You must use different numbers for different requests.

    Action

    String

    Yes

    Valid values:

    • VoiceModeration

    • VoiceModerationResult

  • Common response parameters

    The system returns a unique RequestId for each API request regardless of whether the call is successful. Other response parameters vary with the services you call.

    {
        "RequestId":"20B935A9-XXXXXXXX-XXXXXXXX0C2",
        "Message":"SUCCESS",
        "Data":{
            "TaskId":"au_f_O5xxxxxxxxxxxxxxqa-1****"
        },
        "Code":200
    }
  • Sample code

    The following sample responses are formatted to improve readability. Actual responses are not formatted with line breaks or indentation.

    • Sample code for a moderation task

      Sample requests

    • http://green-cip.ap-southeast-1.aliyuncs.com/
      ?Format=JSON
      &Version=2022-03-02
      &Signature=vpEEL0zFHfxXYzSFV0n7%2FZiFL9o%3D
      &SignatureMethod=Hmac-SHA1
      &SignatureNonce=15215528852396
      &SignatureVersion=1.0
      &Action=VoiceModeration
      &AccessKeyId=123****cip
      &Timestamp=2023-02-03T12:00:00Z
      &Service=audio_multilingual_global
      &ServiceParameters={"url": "https://xxxxxx.aliyuncs.com/sample/****.wav"}

      Sample success responses

      {
          "RequestId":"20B935A9-XXXXXXXX-XXXXXXXX0C2",
          "Message":"SUCCESS",
          "Data":{
              "TaskId":"au_f_O5xxxxxxxxxxxxxxqa-1x****"
          },
          "Code":200
      }
    • Sample code for a result query task

      Sample requests

      http://green-cip.ap-southeast-1.aliyuncs.com/
      ?Format=JSON
      &Version=2022-03-02
      &Signature=vpEEL0zFHfxXYzSFV0n7%2FZiFL9o%3D
      &SignatureMethod=Hmac-SHA1
      &SignatureNonce=15215528852396
      &SignatureVersion=1.0
      &Action=VoiceModerationResult
      &AccessKeyId=123****cip
      &Timestamp=2023-02-03T12:00:00Z
      &Service=audio_multilingual_global
      &ServiceParameters={"taskId": "au_f_O5zxxxxxxxxxxxxxxxx-1x****"}

      Sample success responses

      {
          "RequestId":"926AD581-XXXXXXXXXXXXXX-7902AE",
          "Message":"success finished",
          "Data":{
              "SliceDetails":[
                  {
                      "EndTime":6,
                      "StartTime":0,
                      "Text":"今天天气还不错。",
                      "Labels":"",
                      "Url":"http://xxxx.aliyuncs.com/cip-media/voice/****.wav"
                  }
              ]
          },
          "Code":200
      }
  • Signature method

    The Voice Moderation 2.0 service authenticates each access request. Therefore, each request must contain signature information. Voice Moderation 2.0 implements symmetric encryption with an AccessKey pair to authenticate the request sender.

    An AccessKey pair is officially issued by Alibaba Cloud. You can apply for and manage it at Alibaba Cloud official website. An AccessKey pair consists of an AccessKey ID and an AccessKey secret. The AccessKey ID is used to verify the identity of the user, and the AccessKey secret is used to encrypt and verify the signature string. You must keep your AccessKey secret strictly confidential.

    To sign a request, perform the following steps:

    1. Create a canonicalized query string by using request parameters.

      1. Sort request parameters in alphabetical order of parameter names. These parameters include the common request parameters and the operation-specific parameters. However, the Signature parameter among common request parameters is not included.

      2. Encode the names and values of the relevant request parameters. Parameter names and values must be URL-encoded by using the UTF-8 character set.

        Note

        Most libraries that support URL encoding, such as java.net.URLEncoder, comply with the Multipurpose Internet Mail Extensions (MIME) encoding rules of application/x-www-form-urlencoded. If this encoding method is used, replace the plus signs (+) in the encoded strings with %20, the asterisks (*) with %2A, and %7E with a tilde (~). This way, you can obtain an encoded string that is created based on the preceding encoding rules.

        Take note of the following encoding rules:

        • Uppercase letters, lowercase letters, digits, and some special characters such as hyphens (-), underscores (_), periods (.), and tildes (~) do not need to be encoded.

        • Other characters must be encoded in the %XY format, where XY represents the ASCII code of the characters in hexadecimal notation. For example, double quotation marks (") are encoded as %22.

        • Extended UTF-8 characters must be encoded in the %XY%ZA... format.

        • Spaces must be encoded as %20. Do not encode spaces as plus signs (+).

      3. Connect the encoded parameter names and values by using equal signs (=).

      4. Sort the equal sign-connected strings by their parameter names in alphabetical order and connect them by using ampersands (&) to obtain the canonicalized query string.

    2. Use the canonicalized query string that is created in Step a.i to create a string to sign based on the following rules:

      StringToSign=
      HTTPMethod + "&" +
      percentEncode("/") + "&" +
      percentEncode(CanonicalizedQueryString)
      Note

      HTTPMethod indicates the HTTP method used to make the request, such as POST. percentEncode("/") encodes forward slashes (/) based on the URL encoding rules described in Step a.ii. The encoded value of a forward slash (/) is %2F. percentEncode(CanonicalizedQueryString) specifies the encoded string of the canonicalized query string constructed in Step a.i. The encoded string is obtained by following the URL encoding rules described in Step a.ii.

    3. Calculate the hash-based message authentication code (HMAC) value of the string to sign based on the HMAC algorithm that is described in RFC 2104.

      Note

      Use the Secure Hash Algorithm 1 (SHA1) algorithm to calculate the HMAC value of the string to sign. The AccessKey secret appended by an ampersand (&) (ASCII:38) is used as the key for HMAC calculation.

    4. Encode the HMAC value in Base64 to obtain the signature string.

    5. Add the signature string to the request as the Signature parameter. This way, the API request is signed.

      Note

      When the signature string is submitted to the Content Moderation service as the final request parameter value, the value must be URL-encoded similar to other parameters based on the rules defined in RFC 3986.