Voice Moderation 2.0 SDKs and integration

更新时间:
复制 MD 格式

Voice Moderation 2.0 supports two integration methods: SDK and native HTTPS. The SDK is the recommended approach — it handles signature verification and request body construction for you.

Supported region

Region

Public endpoint

VPC endpoint

Supported service codes

China (Shanghai)

green-cip.cn-shanghai.aliyuncs.com

green-cip-vpc.cn-shanghai.aliyuncs.com

audio_media_detection, live_stream_detection, audio_detection_byllm, stream_detection_byllm

China (Shenzhen)

https://green-cip.cn-shenzhen.aliyuncs.com

green-cip-vpc.cn-shenzhen.aliyuncs.com

audio_media_detection, live_stream_detection, audio_detection_byllm, stream_detection_byllm

China (Hangzhou)

green-cip.cn-hangzhou.aliyuncs.com

green-cip-vpc.cn-hangzhou.aliyuncs.com

audio_media_detection, live_stream_detection, audio_detection_byllm, stream_detection_byllm

China (Beijing)

green-cip.cn-beijing.aliyuncs.com

green-cip-vpc.cn-beijing.aliyuncs.com

audio_media_detection, live_stream_detection, audio_detection_byllm, stream_detection_byllm

China (Chengdu)

green-cip.cn-chengdu.aliyuncs.com

N/A

audio_detection_byllm, stream_detection_byllm

Singapore

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

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

audio_multilingual_global, audio_detection_byllm_global, live_detection_byllm_global, stream_multilingual_global, audio_detection_byllm_cb, stream_detection_byllm_cb, stream_multilingual_cb, audio_media_detection_cb, audio_media_detection_ec, live_stream_detection_ec

US (Virginia)

green-cip.us-east-1.aliyuncs.com

green-cip-vpc.us-east-1.aliyuncs.com

audio_multilingual_global

Note

When you set the service parameter in the VoiceModeration request, use a service code that is supported in the region you selected. Using an unsupported service code returns an error.

Supported SDK languages

  • Java 1.8 or later

  • Python 3.6 or later

  • PHP 5.6 or later

  • Go

  • C#

How it works

Voice Moderation 2.0 uses an asynchronous submit-and-poll pattern:

  1. Submit a moderation task with VoiceModeration. The API returns a taskId.Submit a voice moderation job

  2. Poll for results with VoiceModerationResult, passing the taskId.

  3. Parse the result — check riskLevel and sliceDetails to determine the moderation outcome.

For local audio files without a public URL, first upload the file to a Content Moderation OSS bucket using a temporary token from DescribeUploadToken, then submit the moderation task using the OSS object path.

Prerequisites

Before you begin, make sure you have:

  • . The default billing method is pay-as-you-go. You are charged daily based on actual usage. If you do not call the service, no fees are incurred.Activate Service

  • A Resource Access Management (RAM) user with the AliyunYundunGreenWebFullAccess system policy granted. See Create a RAM user and Grant permissions to a RAM user.

  • An AccessKey pair for the RAM user. See Create an AccessKey pair.

  • The ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables set with your RAM user's AccessKey ID and AccessKey secret.

Alibaba Cloud SDKs create default credentials by reading the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables. When you call an API operation, the program reads your AccessKey from these variables and automatically completes authentication. Before you use SDK sample code, you must configure the environment variables. For more information, see Configure authentication credentials.

Java SDK

Source code: GitHub | Maven Central

The SDK supports three audio moderation scenarios. All examples use VoiceModeration to submit a task and VoiceModerationResult to retrieve the result.

Detect publicly accessible audio

Use this scenario when the audio file is accessible from a public URL.

Install the dependency

Add the following to your Maven pom.xml:

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

Submit a 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();
        // Load credentials from environment variables.
        // Do not hardcode your AccessKey pair in code.
        config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
        config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        config.setRegionId("ap-southeast-1");
        config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
        config.setReadTimeout(6000);   // ms
        config.setConnectTimeout(3000); // ms

        // Reuse the client instance to avoid repeated connection creation.
        Client client = new Client(config);

        JSONObject serviceParameters = new JSONObject();
        serviceParameters.put("url", "https://example.com/sample.wav");

        VoiceModerationRequest request = new VoiceModerationRequest();
        request.setService("audio_multilingual_global");
        request.setServiceParameters(serviceParameters.toJSONString());

        try {
            VoiceModerationResponse response = client.voiceModeration(request);
            if (response.getStatusCode() == 200) {
                VoiceModerationResponseBody result = response.getBody();
                if (200 == result.getCode()) {
                    String taskId = result.getData().getTaskId();
                    System.out.println("taskId: " + taskId);
                    // Use taskId to poll for results with VoiceModerationResult.
                } else {
                    System.out.println("Moderation request failed. code: " + result.getCode());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
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();
        /**
         * An AccessKey of an Alibaba Cloud account has permissions for all API operations. We recommend that you use a Resource Access Management (RAM) user to make API calls or perform daily O&M.
         * Common methods for obtaining environment variables:
         * Method 1:
         *     Obtain the AccessKey ID of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
         *     Obtain the AccessKey secret of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
         * Method 2:
         *     Obtain the AccessKey ID of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
         *     Obtain the AccessKey secret of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
         */
        config.setAccessKeyId("Obtain the AccessKey ID of your RAM user from an environment variable.");
        config.setAccessKeySecret("Obtain the AccessKey secret of your RAM user from an environment variable.");
        // Modify the region and endpoint based on your actual requirements.
        config.setRegionId("cn-shanghai");
        config.setEndpoint("green-cip.cn-shanghai.aliyuncs.com");
        // The connection timeout period. Unit: milliseconds (ms).
        config.setReadTimeout(6000);
        // The read timeout period. Unit: milliseconds (ms).
        config.setConnectTimeout(3000);

        // Note: To improve detection performance, reuse the client that is instantiated here as much as possible. This avoids repeated connection establishment.
        Client client = new Client(config);

        JSONObject serviceParameters = new JSONObject();
        // The taskId that is returned when the task is submitted.
        serviceParameters.put("taskId", "The task ID that is returned for the detection task");


        VoiceModerationResultRequest voiceModerationResultRequest = new VoiceModerationResultRequest();
        // The detection type. audio_media_detection indicates audio file detection, and live_stream_detection indicates audio live stream detection.
        voiceModerationResultRequest.setService("audio_media_detection");
        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();
        }
    }
}
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();
        /**
         * An AccessKey of an Alibaba Cloud account has permissions to access all APIs. We recommend that you use a Resource Access Management (RAM) user for API calls and routine O&M.
         * The following code shows common methods to obtain environment variables:
         * Method 1:
         *     Obtain the AccessKey ID of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
         *     Obtain the AccessKey secret of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
         * Method 2:
         *     Obtain the AccessKey ID of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
         *     Obtain the AccessKey secret of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
         */
        config.setAccessKeyId("Obtain the AccessKey ID of a RAM user from an environment variable.");
        config.setAccessKeySecret("Obtain the AccessKey secret of a RAM user from an environment variable.");
        // Modify the region and endpoint based on your actual requirements.
        config.setRegionId("cn-shanghai");
        config.setEndpoint("green-cip.cn-shanghai.aliyuncs.com");
        // The read timeout period. Unit: milliseconds (ms).
        config.setReadTimeout(6000);
        // The connection timeout period. Unit: milliseconds (ms).
        config.setConnectTimeout(3000);
   
        // Note: To improve detection performance, reuse the client that is instantiated here as much as possible. This avoids repeated connection establishment.
        Client client = new Client(config);

        JSONObject serviceParameters = new JSONObject();
        serviceParameters.put("ossBucketName", "bucket_01");
        serviceParameters.put("ossObjectName", "test/test.flv");
        serviceParameters.put("ossRegionId", "cn-shanghai");

        VoiceModerationRequest voiceModerationRequest = new VoiceModerationRequest();
        // The detection type. audio_media_detection indicates audio file detection, and live_stream_detection indicates audio live stream detection.
        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();
        }
    }
}
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();
        /**
         * An Alibaba Cloud account's AccessKey has permissions to access all APIs. We recommend that you use a RAM user for API access or routine O&M.
         * Common methods to obtain environment variables:
         * Method 1:
         *     Obtain the AccessKey ID of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
         *     Obtain the AccessKey secret of the RAM user: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
         * Method 2:
         *     Obtain the AccessKey ID of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
         *     Obtain the AccessKey secret of the RAM user: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
         */
        config.setAccessKeyId("Obtain the AccessKey ID of a RAM user from an environment variable.");
        config.setAccessKeySecret("Obtain the AccessKey secret of a RAM user from an environment variable.");
        // Modify the region and endpoint based on your actual requirements.
        config.setRegionId("cn-shanghai");
        config.setEndpoint("green-cip.cn-shanghai.aliyuncs.com");
        // The read timeout period. Unit: milliseconds (ms).
        config.setReadTimeout(6000);
        // The connection timeout period. Unit: milliseconds (ms).
        config.setConnectTimeout(3000);

        // Note: We recommend that you reuse the client instance to improve detection performance. This avoids repeated connection establishment.
        Client client = new Client(config);

        JSONObject serviceParameters = new JSONObject();
        // The ID of the task that is returned after you submit the task.
        serviceParameters.put("taskId", "The ID of the detection task.");


        VoiceModerationResultRequest voiceModerationResultRequest = new VoiceModerationResultRequest();
        // The detection type. audio_media_detection indicates audio file detection, and live_stream_detection indicates audio live stream detection.
        voiceModerationResultRequest.setService("audio_media_detection");
        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();
        }
    }
}

Retrieve the moderation resultRetrieve Voice Moderation Result

Canceling a live stream detection job

import com.alibaba.fastjson.JSONObject;
import com.aliyun.green20220302.Client;
import com.aliyun.green20220302.models.VoiceModerationCancelRequest;
import com.aliyun.green20220302.models.VoiceModerationCancelResponse;
import com.aliyun.green20220302.models.VoiceModerationCancelResponseBody;
import com.aliyun.teaopenapi.models.Config;


public class VoiceModerationCancelDemo {

    public static void main(String[] args) throws Exception {
        Config config = new Config();
        /**
         * An 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 methods 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 an environment variable");
        config.setAccessKeySecret("We recommend that you obtain the AccessKey secret of your RAM user from an environment variable");
        // Modify the region and endpoint as needed.
        config.setRegionId("cn-shanghai");
        config.setEndpoint("green-cip.cn-shanghai.aliyuncs.com");
        // Connection timeout period in milliseconds (ms).
        config.setReadTimeout(6000);
        // Read timeout period in milliseconds (ms).
        config.setConnectTimeout(3000);

        // Note: To improve moderation performance, reuse the client instance. This avoids repeated connection creation.
        Client client = new Client(config);

        JSONObject serviceParameters = new JSONObject();
        // The taskId returned when the task was submitted.
        serviceParameters.put("taskId", "The task ID returned for the moderation task.");

        VoiceModerationCancelRequest voiceModerationCancelRequest = new VoiceModerationCancelRequest();
        // Moderation type. audio_media_detection indicates audio file moderation, and live_stream_detection indicates audio live stream moderation.
        voiceModerationCancelRequest.setService("live_stream_detection");
        voiceModerationCancelRequest.setServiceParameters(serviceParameters.toJSONString());

        try {
            VoiceModerationCancelResponse response = client.voiceModerationCancel(voiceModerationCancelRequest);
            if (response.getStatusCode() == 200) {
                VoiceModerationCancelResponseBody 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()) {
                    System.out.println("voice moderation cancel not success. code:" + result.getCode());
                }
            } else {
                System.out.println("response not success. status:" + response.getStatusCode());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Detect local audio

Use this scenario when the audio file is on a local machine without a public URL. The SDK first uploads the file to a Content Moderation OSS bucket using a temporary token, then submits the moderation task using the OSS object path.

Install the dependencies

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

Submit a 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.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.Map;
import java.util.UUID;

public class LocalVoiceModerationDemo {

    // Set to true if deployed in a VPC.
    public static boolean isVPC = false;

    // Cache upload tokens keyed by endpoint.
    public static Map<String, DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData> tokenMap = new HashMap<>();

    public static OSS ossClient = null;

    public static Client createClient(String accessKeyId, String accessKeySecret, String endpoint) throws Exception {
        Config config = new Config();
        config.setAccessKeyId(accessKeyId);
        config.setAccessKeySecret(accessKeySecret);
        config.setEndpoint(endpoint);
        return new Client(config);
    }

    public static void initOssClient(DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData tokenData) {
        // Reuse the OSS client to avoid repeated connection creation.
        String endpoint = isVPC ? tokenData.ossInternalEndPoint : tokenData.ossInternetEndPoint;
        ossClient = new OSSClientBuilder().build(endpoint, tokenData.getAccessKeyId(),
                tokenData.getAccessKeySecret(), tokenData.getSecurityToken());
    }

    public static String uploadFile(String filePath, DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData tokenData) throws Exception {
        String[] parts = filePath.split("\\.");
        String objectName = parts.length > 1
                ? tokenData.getFileNamePrefix() + UUID.randomUUID() + "." + parts[parts.length - 1]
                : tokenData.getFileNamePrefix() + UUID.randomUUID();
        ossClient.putObject(new PutObjectRequest(tokenData.getBucketName(), objectName, new File(filePath)));
        return objectName;
    }

    public static void main(String[] args) throws Exception {
        String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        String endpoint = "green-cip.ap-southeast-1.aliyuncs.com";

        // Reuse the client instance to avoid repeated connection creation.
        Client client = createClient(accessKeyId, accessKeySecret, endpoint);
        RuntimeOptions runtime = new RuntimeOptions();

        String filePath = "/path/to/exampleFile.mp3";

        // Get a temporary upload token (refresh if expired).
        if (tokenMap.get(endpoint) == null || tokenMap.get(endpoint).expiration <= System.currentTimeMillis() / 1000) {
            DescribeUploadTokenResponse tokenResponse = client.describeUploadToken();
            tokenMap.put(endpoint, tokenResponse.getBody().getData());
        }
        initOssClient(tokenMap.get(endpoint));

        String objectName = uploadFile(filePath, tokenMap.get(endpoint));

        Map<String, String> serviceParameters = new HashMap<>();
        serviceParameters.put("ossBucketName", tokenMap.get(endpoint).getBucketName());
        serviceParameters.put("ossObjectName", objectName);
        serviceParameters.put("dataId", UUID.randomUUID().toString());

        VoiceModerationRequest request = new VoiceModerationRequest();
        request.setService("audio_multilingual_global");
        request.setServiceParameters(JSON.toJSONString(serviceParameters));

        try {
            VoiceModerationResponse response = client.voiceModerationWithOptions(request, runtime);
            if (response != null && response.getStatusCode() == 200) {
                VoiceModerationResponseBody body = response.getBody();
                if (200 == body.getCode()) {
                    System.out.println("taskId: " + body.getData().getTaskId());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

To retrieve results, use the same VoiceModerationResultDemo from Detect publicly accessible audio.

Canceling a live stream detection task

import com.alibaba.fastjson.JSONObject;
import com.aliyun.green20220302.Client;
import com.aliyun.green20220302.models.VoiceModerationCancelRequest;
import com.aliyun.green20220302.models.VoiceModerationCancelResponse;
import com.aliyun.green20220302.models.VoiceModerationCancelResponseBody;
import com.aliyun.teaopenapi.models.Config;


public class VoiceModerationCancelDemo {

    public static void main(String[] args) throws Exception {
        Config config = new Config();
        /**
         * An 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 methods 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 an environment variable");
        config.setAccessKeySecret("We recommend that you obtain the AccessKey secret of your RAM user from an environment variable");
        // Modify the region and endpoint as needed.
        config.setRegionId("cn-shanghai");
        config.setEndpoint("green-cip.cn-shanghai.aliyuncs.com");
        // Connection timeout period in milliseconds (ms).
        config.setReadTimeout(6000);
        // Read timeout period in milliseconds (ms).
        config.setConnectTimeout(3000);

        // Note: To improve moderation performance, reuse the client instance. This avoids repeated connection creation.
        Client client = new Client(config);

        JSONObject serviceParameters = new JSONObject();
        // The taskId returned when the task was submitted.
        serviceParameters.put("taskId", "The task ID returned for the moderation task.");

        VoiceModerationCancelRequest voiceModerationCancelRequest = new VoiceModerationCancelRequest();
        // Moderation type. audio_media_detection indicates audio file moderation, and live_stream_detection indicates audio live stream moderation.
        voiceModerationCancelRequest.setService("live_stream_detection");
        voiceModerationCancelRequest.setServiceParameters(serviceParameters.toJSONString());

        try {
            VoiceModerationCancelResponse response = client.voiceModerationCancel(voiceModerationCancelRequest);
            if (response.getStatusCode() == 200) {
                VoiceModerationCancelResponseBody 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()) {
                    System.out.println("voice moderation cancel not success. code:" + result.getCode());
                }
            } else {
                System.out.println("response not success. status:" + response.getStatusCode());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Detect audio stored in OSS

Use this scenario when the audio files are already in an Alibaba Cloud Object Storage Service (OSS) bucket. Grant Content Moderation access to your OSS bucket by creating a service role on the Cloud Resource Access Authorization page.

Install the dependency

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

Submit a 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();
        config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
        config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        config.setRegionId("ap-southeast-1");
        config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
        config.setReadTimeout(6000);
        config.setConnectTimeout(3000);

        // Reuse the client instance to avoid repeated connection creation.
        Client client = new Client(config);

        JSONObject serviceParameters = new JSONObject();
        serviceParameters.put("ossBucketName", "<your-bucket-name>");
        serviceParameters.put("ossObjectName", "voice/sample.wav");
        serviceParameters.put("ossRegionId", "ap-southeast-1");

        VoiceModerationRequest request = new VoiceModerationRequest();
        // audio_media_detection for audio files; live_stream_detection for live streams.
        request.setService("audio_media_detection");
        request.setServiceParameters(serviceParameters.toJSONString());

        try {
            VoiceModerationResponse response = client.voiceModeration(request);
            if (response.getStatusCode() == 200) {
                VoiceModerationResponseBody result = response.getBody();
                if (200 == result.getCode()) {
                    System.out.println("taskId: " + result.getData().getTaskId());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

To retrieve results, use the same VoiceModerationResultDemo from Detect publicly accessible audio.

Cancel a live stream detection task

import com.alibaba.fastjson.JSONObject;
import com.aliyun.green20220302.Client;
import com.aliyun.green20220302.models.VoiceModerationCancelRequest;
import com.aliyun.green20220302.models.VoiceModerationCancelResponse;
import com.aliyun.green20220302.models.VoiceModerationCancelResponseBody;
import com.aliyun.teaopenapi.models.Config;


public class VoiceModerationCancelDemo {

    public static void main(String[] args) throws Exception {
        Config config = new Config();
        /**
         * An 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 methods 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 an environment variable");
        config.setAccessKeySecret("We recommend that you obtain the AccessKey secret of your RAM user from an environment variable");
        // Modify the region and endpoint as needed.
        config.setRegionId("cn-shanghai");
        config.setEndpoint("green-cip.cn-shanghai.aliyuncs.com");
        // Connection timeout period in milliseconds (ms).
        config.setReadTimeout(6000);
        // Read timeout period in milliseconds (ms).
        config.setConnectTimeout(3000);

        // Note: To improve moderation performance, reuse the client instance. This avoids repeated connection creation.
        Client client = new Client(config);

        JSONObject serviceParameters = new JSONObject();
        // The taskId returned when the task was submitted.
        serviceParameters.put("taskId", "The task ID returned for the moderation task.");

        VoiceModerationCancelRequest voiceModerationCancelRequest = new VoiceModerationCancelRequest();
        // Moderation type. audio_media_detection indicates audio file moderation, and live_stream_detection indicates audio live stream moderation.
        voiceModerationCancelRequest.setService("live_stream_detection");
        voiceModerationCancelRequest.setServiceParameters(serviceParameters.toJSONString());

        try {
            VoiceModerationCancelResponse response = client.voiceModerationCancel(voiceModerationCancelRequest);
            if (response.getStatusCode() == 200) {
                VoiceModerationCancelResponseBody 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()) {
                    System.out.println("voice moderation cancel not success. code:" + result.getCode());
                }
            } else {
                System.out.println("response not success. status:" + response.getStatusCode());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Python SDK

Source code: PyPI

Requires Python 3.6 or later.

Detect publicly accessible audio

Install the dependency

pip install alibabacloud_green20220302==3.2.4

Submit a moderation task

# coding=utf-8
import os
import json
from alibabacloud_green20220302.client import Client
from alibabacloud_green20220302 import models
from alibabacloud_tea_openapi.models import Config

config = Config(
    # Load credentials from environment variables.
    # Do not hardcode your AccessKey pair in code.
    access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
    access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
    connect_timeout=10000,  # ms
    read_timeout=3000,      # ms
    region_id='ap-southeast-1',
    endpoint='green-cip.ap-southeast-1.aliyuncs.com'
)

# Reuse the client instance to avoid repeated connection creation.
client = Client(config)

service_parameters = {'url': 'https://example.com/sample.wav'}
request = models.VoiceModerationRequest(
    service='audio_multilingual_global',
    service_parameters=json.dumps(service_parameters)
)

try:
    response = client.voice_moderation(request)
    if response.status_code == 200:
        result = response.body
        if result.code == 200:
            print('taskId:', result.data.task_id)
            # Use taskId to poll for results.
        else:
            print('Moderation request failed. code:', result.code)
except Exception as err:
    print(err)

Retrieve the moderation result

# coding=utf-8
import os
import json
from alibabacloud_green20220302.client import Client
from alibabacloud_green20220302 import models
from alibabacloud_tea_openapi.models import Config

config = Config(
    access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
    access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
    connect_timeout=10000,
    read_timeout=3000,
    region_id='ap-southeast-1',
    endpoint='green-cip.ap-southeast-1.aliyuncs.com'
)

client = Client(config)

service_parameters = {'taskId': '<task-id>'}
request = models.VoiceModerationResultRequest(
    service='audio_multilingual_global',
    service_parameters=json.dumps(service_parameters)
)

try:
    response = client.voice_moderation_result(request)
    if response.status_code == 200:
        result = response.body
        if result.code == 200:
            data = result.data
            print('taskId:', data.task_id)
            print('riskLevel:', data.risk_level)
            print('sliceDetails:', data.slice_details)
        else:
            print('Failed to get result. code:', result.code)
except Exception as err:
    print(err)

Detect local audio

Install the dependencies

pip install alibabacloud_green20220302==3.2.4

Submit a moderation task

# coding=utf-8
import os
import json
import uuid
import time
import oss2
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

is_vpc = False
token_dict = {}
bucket = None


def create_client(access_key_id, access_key_secret, endpoint):
    config = Config(
        access_key_id=access_key_id,
        access_key_secret=access_key_secret,
        endpoint=endpoint
    )
    return Client(config)


def init_oss_bucket(is_vpc, upload_token):
    global bucket
    auth = oss2.StsAuth(upload_token.access_key_id, upload_token.access_key_secret, upload_token.security_token)
    end_point = upload_token.oss_internal_end_point if is_vpc else upload_token.oss_internet_end_point
    # Reuse the bucket instance to avoid repeated connection creation.
    bucket = oss2.Bucket(auth, end_point, upload_token.bucket_name)


def upload_file(file_path, upload_token):
    init_oss_bucket(is_vpc, upload_token)
    object_name = upload_token.file_name_prefix + str(uuid.uuid1()) + '.' + file_path.split('.')[-1]
    bucket.put_object_from_file(object_name, file_path)
    return object_name


def invoke(access_key_id, access_key_secret, endpoint):
    # Reuse the client instance to avoid repeated connection creation.
    client = create_client(access_key_id, access_key_secret, endpoint)
    runtime = util_models.RuntimeOptions()

    file_path = '/path/to/exampleFile.mp3'

    # Get a temporary upload token (refresh if expired).
    upload_token = token_dict.get(endpoint)
    if upload_token is None or int(upload_token.expiration) <= int(time.time()):
        response = client.describe_upload_token()
        upload_token = response.body.data
        token_dict[endpoint] = upload_token

    object_name = upload_file(file_path, upload_token)

    service_parameters = {
        'ossBucketName': upload_token.bucket_name,
        'ossObjectName': object_name,
        'dataId': str(uuid.uuid4())
    }

    request = models.VoiceModerationRequest(
        service='audio_multilingual_global',
        service_parameters=json.dumps(service_parameters)
    )

    try:
        return client.voice_moderation_with_options(request, runtime)
    except Exception as err:
        print(err)


if __name__ == '__main__':
    access_key_id = os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
    access_key_secret = os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
    response = invoke(access_key_id, access_key_secret, 'green-cip.ap-southeast-1.aliyuncs.com')
    if response and response.status_code == 200:
        result = response.body
        if result.code == 200:
            print('taskId:', result.data.task_id)

To retrieve results, use the same pattern from Detect publicly accessible audio.

Detect audio stored in OSS

Create a service role to grant Content Moderation access to your OSS bucket on the Cloud Resource Access Authorization page.

Install the dependency

pip install alibabacloud_green20220302==3.2.4

Submit a moderation task

# coding=utf-8
import os
import json
from alibabacloud_green20220302.client import Client
from alibabacloud_green20220302 import models
from alibabacloud_tea_openapi.models import Config

config = Config(
    access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
    access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
    connect_timeout=10000,
    read_timeout=3000,
    region_id='ap-southeast-1',
    endpoint='green-cip.ap-southeast-1.aliyuncs.com'
)

client = Client(config)

service_parameters = {
    'ossBucketName': '<your-bucket-name>',
    'ossObjectName': 'voice/sample.mp3',
    'ossRegionId': 'cn-shanghai'
}
request = models.VoiceModerationRequest(
    service='audio_multilingual_global',
    service_parameters=json.dumps(service_parameters)
)

try:
    response = client.voice_moderation(request)
    if response.status_code == 200:
        result = response.body
        if result.code == 200:
            print('taskId:', result.data.task_id)
except Exception as err:
    print(err)

To retrieve results, use the same pattern from Detect publicly accessible audio.

PHP SDK

Source code: Packagist

Requires PHP 5.6 or later.

Detect publicly accessible audio

Install the dependency

composer require alibabacloud/green-20220302 3.2.4

Submit a 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([]);
// Load credentials from environment variables.
// Do not hardcode your AccessKey pair in code.
$config->accessKeyId = getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
$config->accessKeySecret = getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
$config->regionId = "ap-southeast-1";
$config->endpoint = "green-cip.ap-southeast-1.aliyuncs.com";

// Reuse the client instance to avoid repeated connection creation.
$client = new Green($config);

$request = new VoiceModerationRequest();
$request->service = "audio_multilingual_global";
$serviceParameters = ['url' => 'https://example.com/sample.wav'];
$request->serviceParameters = json_encode($serviceParameters);

$runtime = new RuntimeOptions();
$runtime->readTimeout = 6000;
$runtime->connectTimeout = 3000;

try {
    $response = $client->voiceModeration($request, $runtime);
    if (200 == $response->statusCode) {
        $body = $response->body;
        if (200 == $body->code) {
            echo "taskId: " . $body->data->taskId . PHP_EOL;
            // Use taskId to poll for results.
        } else {
            echo "Moderation request failed. code: " . $body->code . PHP_EOL;
        }
    }
} catch (TeaUnableRetryError $e) {
    var_dump($e->getMessage());
}
<?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([]);
/**
 * An AccessKey pair of an Alibaba Cloud account grants full access to all APIs. We recommend that you use a RAM user for API calls and daily O&M.
 * We strongly recommend that you do not save an AccessKey pair in the project code. Otherwise, the AccessKey pair may be leaked and all resources in your account may be exposed to potential security risks.
 * Common methods for obtaining environment variables:
 * Obtain the AccessKey ID of a RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
 * Obtain the AccessKey secret of a RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
 */
$config->accessKeyId = "Obtain the AccessKey ID of a RAM user from an environment variable.";
$config->accessKeySecret = "Obtain the AccessKey secret of a RAM user from an environment variable.";
// Modify the region and endpoint based on your actual requirements.
$config->regionId = "cn-shanghai";
$config->endpoint = "green-cip.cn-shanghai.aliyuncs.com";
// Set the HTTP proxy.
// $config->httpProxy = "http://10.10.xx.xx:xxxx";
// Set the HTTPS proxy.
// $config->httpsProxy = "http://10.10.xx.xx:xxxx";
// Note: To improve moderation performance, reuse the client that is instantiated in this code as much as possible. This avoids repeated connection establishment.
$client = new Green($config);

$request = new VoiceModerationResultRequest();
// The moderation type. Valid values: audio_media_detection (audio file moderation) and live_stream_detection (live audio stream moderation).
$request->service = "audio_media_detection";
// The ID of the task that is returned after you submit the moderation task.
$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());
}
<?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([]);
/**
 * An AccessKey pair of an Alibaba Cloud account has permissions to call all API operations. We recommend that you use a RAM user to call API operations or perform daily O&M.
 * We strongly recommend that you do not save an AccessKey pair in the project code. Otherwise, the AccessKey pair may be leaked and all resources in your account may be exposed to potential security risks.
 * The following code shows how to obtain an AccessKey pair from environment variables:
 * Obtain the AccessKey ID of a RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
 * Obtain the AccessKey secret of a RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
 */
$config->accessKeyId = "We recommend that you obtain the AccessKey ID of a RAM user from an environment variable.";
$config->accessKeySecret = "We recommend that you obtain the AccessKey secret of a RAM user from an environment variable.";
// Modify the region and endpoint based on your actual requirements.
$config->regionId = "cn-shanghai";
$config->endpoint = "green-cip.cn-shanghai.aliyuncs.com";
// Set an HTTP proxy.
// $config->httpProxy = "http://10.10.xx.xx:xxxx";
// Set an HTTPS proxy.
// $config->httpsProxy = "http://10.10.xx.xx:xxxx";
// Note: To improve detection performance, reuse the client instance. This avoids repeatedly establishing connections.
$client = new Green($config);

$request = new VoiceModerationRequest();
// The detection type. Valid values: audio_media_detection (detects audio files) and live_stream_detection (detects live audio streams).
$request->service = "audio_media_detection";
$serviceParameters = array(
          // The file to be detected. Example: voice/001.wav
        'ossObjectName' => 'voice/001.wav',
        // The region where the bucket that stores the file to be detected is located. Example: cn-shanghai
        'ossRegionId' => 'cn-shanghai',
          // The name of the bucket that stores the file to be detected. Example: bucket001
        'ossBucketName' => 'bucket001',
        // The unique data ID.
        '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());
}
<?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([]);
/**
 * An Alibaba Cloud account's AccessKey has access permissions for all APIs. We recommend that you use a RAM user to make API calls or perform daily O&M.
 * We strongly recommend that you do not save an AccessKey pair in the project code. Otherwise, the AccessKey pair may be leaked and all resources in your account may be exposed to potential security risks.
 * Common methods to obtain environment variables:
 * To obtain the AccessKey ID of a RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
 * To obtain the AccessKey secret of a RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
 */
$config->accessKeyId = "We recommend that you obtain the AccessKey ID of a RAM user from an environment variable";
$config->accessKeySecret = "We recommend that you obtain the AccessKey secret of a RAM user from an environment variable";
// Modify the region and endpoint based on your actual requirements.
$config->regionId = "cn-shanghai";
$config->endpoint = "green-cip.cn-shanghai.aliyuncs.com";
// Set the HTTP proxy.
// $config->httpProxy = "http://10.10.xx.xx:xxxx";
// Set the HTTPS proxy.
// $config->httpsProxy = "http://10.10.xx.xx:xxxx";
// Note: To improve detection performance, reuse the client that is instantiated in this step as much as possible. This avoids repeated connection establishment.
$client = new Green($config);

$request = new VoiceModerationResultRequest();
// The detection type. Valid values: audio_media_detection for audio file detection and live_stream_detection for live audio stream detection.
$request->service = "audio_media_detection";
// The taskId that is returned when the 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());
}

Retrieve the moderation result

<?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;
// The file upload token.
$tokenArray = array();
// The client for file upload requests.
$ossClient = null;

/**
 * Create a request client.
 * @param $accessKeyId
 * @param $accessKeySecret
 * @param $endpoint
 * @return Green
 */
function create_client($accessKeyId, $accessKeySecret, $endpoint): Green
{
    $config = new Config([
        "accessKeyId" => $accessKeyId,
        "accessKeySecret" => $accessKeySecret,
        // Set the HTTP proxy.
        // "httpProxy" => "http://10.10.xx.xx:xxxx",
        // Set the HTTPS proxy.
        // "httpsProxy" => "https://10.10.xx.xx:xxxx",
        "endpoint" => $endpoint,
    ]);
    return new Green($config);
}

/**
 * Create a client for file uploads.
 * @param $tokenData
 * @return void
 */
function create_upload_client($tokenData): void
{

    global $isVPC;
    global $ossClient;
    // Note: We recommend that you reuse the instantiated client to avoid repeated connections and improve 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 the file.
    $ossClient->uploadFile($tokenData->bucketName, $objectName, $filePath);
    return $objectName;
}

/**
 * Submit a 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 to avoid repeated connections and improve moderation performance.
    $client = create_client($accessKeyId, $accessKeySecret, $endpoint);
    // Create a RuntimeObject instance and set runtime parameters.
    $runtime = new RuntimeOptions([]);
    // The full path of a local file. Example: D:\\localPath\\exampleFile.mp3.
    $filePath = "D:\\localPath\\exampleFile.mp3";

    // Obtain the file upload token.
    if (!isset($tokenArray[$endpoint]) || $tokenArray[$endpoint]->expiration <= time()) {
        $token = $client->describeUploadToken();
        $tokenArray[$endpoint] = $token->body->data;
    }

    // Upload the file.
    $objectName = upload_file($filePath, $tokenArray[$endpoint]);

    // Construct moderation parameters.
    $request = new VoiceModerationRequest();
    // The audio moderation service. The value is the serviceCode that is configured for the audio moderation rule of the enhanced edition in the AI Guardrails console. Example: audio_media_detection.
    // For more information about supported services, see https://help.aliyun.com/document_detail/604973.html#p-gcd-2u4-2rj
      $request->service = "audio_media_detection";
    // The OSS information about the audio file to be moderated.
    $serviceParameters = array(
        'ossObjectName' => $objectName,
        'ossBucketName' => $tokenArray[$endpoint]->bucketName,
        'dataId' => uniqid());
    $request->serviceParameters = json_encode($serviceParameters);
    // Submit the moderation request.
    return $client->voiceModerationWithOptions($request, $runtime);
}

/**
* The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M.
* We strongly recommend that you do not save an AccessKey pair in the project code. Otherwise, the AccessKey pair may be leaked and all resources in your account may be exposed to potential security risks.
* The following code provides an example of how to obtain environment variables:
* Obtain the AccessKey ID of the RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
* Obtain the AccessKey secret of the RAM user: getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
*/
$accessKeyId = 'We recommend that you obtain the AccessKey ID of a RAM user from environment variables.';
$accessKeySecret = 'We recommend that you obtain the AccessKey secret of a RAM user from environment variables.';
// Modify the region and endpoint based on your actual requirements.
$endpoint = "green-cip.cn-shanghai.aliyuncs.com";

try {
    $response = invoke($accessKeyId, $accessKeySecret, $endpoint);
    // Automatic routing.
    if (Utils::equalNumber(500, $response->statusCode) || Utils::equalNumber(500, $response->body->code)) {
        // Switch the region to cn-beijing.
        $endpoint = "green-cip.cn-beijing.aliyuncs.com";
        $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 canceling a live stream moderation task

<?php
require('vendor/autoload.php');

use AlibabaCloud\SDK\Green\V20220302\Models\VoiceModerationCancelRequest;
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([]);
/**
 * An 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 strongly recommend that you do not save your AccessKey ID and AccessKey secret in your project code. This can lead to an AccessKey pair leak and compromise the security of all resources in your account.
 * Common methods 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 an environment variable";
$config->accessKeySecret = "We recommend that you obtain the AccessKey secret of your RAM user from an environment variable";
// Modify the region and endpoint as needed.
$config->regionId = "cn-shanghai";
$config->endpoint = "green-cip.cn-shanghai.aliyuncs.com";
// Set an HTTP proxy.
// $config->httpProxy = "http://10.10.xx.xx:xxxx";
// Set an HTTPS proxy.
// $config->httpsProxy = "http://10.10.xx.xx:xxxx";
// Note: To improve moderation performance, reuse the client instance. This avoids repeated connection creation.
$client = new Green($config);

$request = new VoiceModerationCancelRequest();
// Moderation type. audio_media_detection for audio file moderation, live_stream_detection for audio live stream moderation.
$request->service = "audio_media_detection";
// The taskId returned when the task was 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->voiceModerationCancel($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) {
            print_r("voice moderation cancel 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());
}

Detect local audio

Install the dependencies

composer require alibabacloud/green-20220302 3.2.4

Submit a moderation task

<?php
require('vendor/autoload.php');

use AlibabaCloud\SDK\Green\V20220302\Models\VoiceModerationResponse;
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;

$isVPC = false;
$tokenArray = [];
$ossClient = null;

function create_client($accessKeyId, $accessKeySecret, $endpoint): Green
{
    $config = new Config([
        "accessKeyId" => $accessKeyId,
        "accessKeySecret" => $accessKeySecret,
        "endpoint" => $endpoint,
    ]);
    return new Green($config);
}

function create_upload_client($tokenData): void
{
    global $isVPC, $ossClient;
    // Reuse the client instance to avoid repeated connection creation.
    $endpoint = $isVPC ? $tokenData->ossInternalEndPoint : $tokenData->ossInternetEndPoint;
    $ossClient = new OssClient($tokenData->accessKeyId, $tokenData->accessKeySecret,
        $endpoint, false, $tokenData->securityToken);
}

function upload_file($filePath, $tokenData): string
{
    global $ossClient;
    create_upload_client($tokenData);
    $parts = explode(".", $filePath);
    $ext = count($parts) > 1 ? "." . end($parts) : "";
    $objectName = $tokenData->fileNamePrefix . uniqid() . $ext;
    $ossClient->uploadFile($tokenData->bucketName, $objectName, $filePath);
    return $objectName;
}

function invoke($accessKeyId, $accessKeySecret, $endpoint): VoiceModerationResponse
{
    global $tokenArray;
    // Reuse the client instance to avoid repeated connection creation.
    $client = create_client($accessKeyId, $accessKeySecret, $endpoint);
    $runtime = new RuntimeOptions([]);
    $filePath = "/path/to/exampleFile.mp3";

    // Get a temporary upload token (refresh if expired).
    if (!isset($tokenArray[$endpoint]) || $tokenArray[$endpoint]->expiration <= time()) {
        $token = $client->describeUploadToken();
        $tokenArray[$endpoint] = $token->body->data;
    }

    $objectName = upload_file($filePath, $tokenArray[$endpoint]);

    $request = new VoiceModerationRequest();
    $request->service = "audio_multilingual_global";
    $serviceParameters = [
        'ossObjectName' => $objectName,
        'ossBucketName' => $tokenArray[$endpoint]->bucketName,
        'dataId' => uniqid()
    ];
    $request->serviceParameters = json_encode($serviceParameters);

    return $client->voiceModerationWithOptions($request, $runtime);
}

// Load credentials from environment variables.
$accessKeyId = getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
$accessKeySecret = getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
$endpoint = "green-cip.ap-southeast-1.aliyuncs.com";

try {
    $response = invoke($accessKeyId, $accessKeySecret, $endpoint);
    if (200 == $response->statusCode && 200 == $response->body->code) {
        echo "taskId: " . $response->body->data->taskId . PHP_EOL;
    }
} catch (Exception $e) {
    var_dump($e->getMessage());
}

To retrieve results, use the same VoiceModerationResultRequest pattern from Detect publicly accessible audio.

Sample code for canceling a live stream moderation task

<?php
require('vendor/autoload.php');

use AlibabaCloud\SDK\Green\V20220302\Models\VoiceModerationCancelRequest;
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([]);
/**
 * An 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 strongly recommend that you do not save your AccessKey ID and AccessKey secret in your project code. This can lead to an AccessKey pair leak and compromise the security of all resources in your account.
 * Common methods 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 an environment variable";
$config->accessKeySecret = "We recommend that you obtain the AccessKey secret of your RAM user from an environment variable";
// Modify the region and endpoint as needed.
$config->regionId = "cn-shanghai";
$config->endpoint = "green-cip.cn-shanghai.aliyuncs.com";
// Set an HTTP proxy.
// $config->httpProxy = "http://10.10.xx.xx:xxxx";
// Set an HTTPS proxy.
// $config->httpsProxy = "http://10.10.xx.xx:xxxx";
// Note: To improve moderation performance, reuse the client instance. This avoids repeated connection creation.
$client = new Green($config);

$request = new VoiceModerationCancelRequest();
// Moderation type. audio_media_detection for audio file moderation, live_stream_detection for audio live stream moderation.
$request->service = "audio_media_detection";
// The taskId returned when the task was 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->voiceModerationCancel($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) {
            print_r("voice moderation cancel 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());
}

Detect audio stored in OSS

Create a service role on the Cloud Resource Access Authorization page.

Install the dependency

composer require alibabacloud/green-20220302 3.2.4

Submit a moderation task

To retrieve results, use the same VoiceModerationResultRequest pattern from Detect publicly accessible audio.

Sample code for canceling a live stream moderation task

<?php
require('vendor/autoload.php');

use AlibabaCloud\SDK\Green\V20220302\Models\VoiceModerationCancelRequest;
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([]);
/**
 * An 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 strongly recommend that you do not save your AccessKey ID and AccessKey secret in your project code. This can lead to an AccessKey pair leak and compromise the security of all resources in your account.
 * Common methods 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 an environment variable";
$config->accessKeySecret = "We recommend that you obtain the AccessKey secret of your RAM user from an environment variable";
// Modify the region and endpoint as needed.
$config->regionId = "cn-shanghai";
$config->endpoint = "green-cip.cn-shanghai.aliyuncs.com";
// Set an HTTP proxy.
// $config->httpProxy = "http://10.10.xx.xx:xxxx";
// Set an HTTPS proxy.
// $config->httpsProxy = "http://10.10.xx.xx:xxxx";
// Note: To improve moderation performance, reuse the client instance. This avoids repeated connection creation.
$client = new Green($config);

$request = new VoiceModerationCancelRequest();
// Moderation type. audio_media_detection for audio file moderation, live_stream_detection for audio live stream moderation.
$request->service = "audio_media_detection";
// The taskId returned when the task was 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->voiceModerationCancel($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) {
            print_r("voice moderation cancel 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());
}

Go SDK

Detect publicly accessible audio

Install the dependency

go get github.com/alibabacloud-go/green-20220302/v3@v3.2.4

Submit a moderation task

package main

import (
    "encoding/json"
    "fmt"
    openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
    green "github.com/alibabacloud-go/green-20220302/v3/client"
    "github.com/alibabacloud-go/tea/tea"
    "net/http"
    "os"
)

func main() {
    config := &openapi.Config{
        // Load credentials from environment variables.
        // Do not hardcode your AccessKey pair in code.
        AccessKeyId:     tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
        AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
        RegionId:        tea.String("ap-southeast-1"),
        Endpoint:        tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
        // The server-side timeout is 10 seconds. Set ConnectTimeout and ReadTimeout accordingly.
        ConnectTimeout: tea.Int(3000),
        ReadTimeout:    tea.Int(6000),
    }
    // Reuse the client instance to avoid repeated connection creation.
    client, err := green.NewClient(config)
    if err != nil {
        panic(err)
    }

    serviceParameters, _ := json.Marshal(map[string]interface{}{
        "url": "https://example.com/sample.wav",
    })
    request := green.VoiceModerationRequest{
        Service:           tea.String("audio_multilingual_global"),
        ServiceParameters: tea.String(string(serviceParameters)),
    }

    result, err := client.VoiceModeration(&request)
    if err != nil {
        panic(err)
    }
    if tea.IntValue(tea.ToInt(result.StatusCode)) == http.StatusOK {
        body := result.Body
        if tea.IntValue(tea.ToInt(body.Code)) == 200 {
            fmt.Println("taskId:", tea.StringValue(body.Data.TaskId))
            // Use taskId to poll for results with VoiceModerationResult.
        }
    }
}
package main

import (
    "encoding/json"
    "fmt"
    openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
    green "github.com/alibabacloud-go/green-20220302/v3/client"
    "github.com/alibabacloud-go/tea/tea"
    "net/http"
)

func main() {
    config := &openapi.Config{
        /**
         * An Alibaba Cloud account AccessKey has access permissions for all APIs. We recommend that you use a RAM user to make API calls or perform daily O&M.
         * We strongly recommend that you do not save the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and all resources in your account may be exposed to potential security risks.
         * The following sample code provides an example of how to obtain environment variables:
         * Obtain the AccessKey ID of a RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
         * Obtain the AccessKey secret of a RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
         */
        AccessKeyId: tea.String("Obtain the AccessKey ID of a RAM user from an environment variable"),
        AccessKeySecret: tea.String("Obtain the AccessKey secret of a RAM user from an environment variable"),
        // Specify your region.
        RegionId: tea.String("cn-shanghai"),
        Endpoint: tea.String("green-cip.cn-shanghai.aliyuncs.com"),
        // Set an HTTP proxy.
        // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
        // Set an HTTPS proxy.
        // HttpsProxy: tea.String("https://xx.xx.xx.xx:xxxx"),
        /**
         * Set the timeout period. The server-side timeout period for processing the entire link is 10 seconds. Set the parameter accordingly.
         * If the value of ReadTimeout is less than the server-side processing time, a ReadTimeout exception is returned.
         */
        ConnectTimeout: tea.Int(3000),
        ReadTimeout:    tea.Int(6000),
    }
    // Note: To improve detection performance, reuse the instantiated client. This avoids repeatedly establishing connections.
    client, _err := green.NewClient(config)
    if _err != nil {
        panic(_err)
    }

    serviceParameters, _ := json.Marshal(
        map[string]interface{}{
            "taskId": "<Your Task ID>",
        },
    )
    request := green.VoiceModerationResultRequest{
        // The voice moderation service.
        Service:           tea.String("audio_media_detection"),
        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))
    }
}
                                
package main

import (
    "encoding/json"
    "fmt"
    openapi "github.comcom/alibabacloud-go/darabonba-openapi/v2/client"
    green "github.com/alibabacloud-go/green-20220302/v3/client"
    "github.com/alibabacloud-go/tea/tea"
    "net/http"
)

func main() {
    config := &openapi.Config{
        /**
         * An AccessKey pair of an Alibaba Cloud account has permissions to access all APIs. We recommend that you use a RAM user to call APIs or perform daily O&M.
         * We strongly recommend that you do not save an AccessKey pair in the project code. Otherwise, the AccessKey pair may be leaked and all resources in your account may be exposed to potential security risks.
         * You can obtain an AccessKey pair from environment variables. Examples:
         * Obtain the AccessKey ID of a RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
         * Obtain the AccessKey secret of a RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
         */
        AccessKeyId: tea.String("Obtain the AccessKey ID of your RAM user from an environment variable."),
        AccessKeySecret: tea.String("Obtain the AccessKey secret of your RAM user from an environment variable."),
        // Specify your access region.
        RegionId: tea.String("cn-shanghai"),
        Endpoint: tea.String("green-cip.cn-shanghai.aliyuncs.com"),
        // Set an HTTP proxy.
        //HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
        // Set an HTTPS proxy.
        //HttpsProxy: tea.String("https://xx.xx.xx.xx:xxxx"),
        /**
         * Set the timeout period. The server-side timeout period for a full-link request is 10 seconds. Set the parameter accordingly.
         * If the value of ReadTimeout is less than the server-side processing time, a ReadTimeout exception is returned.
         */
        ConnectTimeout: tea.Int(3000),
        ReadTimeout:    tea.Int(6000),
    }
    // Note: Reuse the instantiated client as much as possible to improve detection performance. Avoid repeatedly establishing connections.
    client, _err := green.NewClient(config)
    if _err != nil {
        panic(_err)
    }
    // The URL of the audio file to be moderated.
    serviceParameters, _ := json.Marshal(
        map[string]interface{}{
		// The region where the OSS bucket is located. Example: cn-shanghai
		"ossRegionId": "cn-shanghai",
		// The name of the OSS bucket. Example: bucket001
		"ossBucketName":"bucket001",
		// The name of the OSS object. Example: voice/001.wav
		"ossObjectName":"voice/001.wav",
		// The ID of the data to be moderated.
		"dataId":   uuid.New().String(),
        },
    )
    request := green.VoiceModerationRequest{
        // The voice moderation service.
        Service:           tea.String("audio_media_detection"),
        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))
    }
}
package main

import (
    "encoding/json"
    "fmt"
    openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
    green "github.com/alibabacloud-go/green-20220302/v3/client"
    "github.com/alibabacloud-go/tea/tea"
    "net/http"
)

func main() {
    config := &openapi.Config{
        /**
         * An AccessKey pair of an Alibaba Cloud account has permissions to call all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M.
         * We strongly recommend that you do not save the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and all resources in your account may be exposed to potential security risks.
         * The following code shows how to obtain environment variables:
         * Obtain the AccessKey ID of a RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
         * Obtain the AccessKey secret of a RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
         */
        AccessKeyId: tea.String("Obtain the AccessKey ID from an environment variable"),
        AccessKeySecret: tea.String("Obtain the AccessKey secret from an environment variable"),
        // Specify the ID of your region.
        RegionId: tea.String("cn-shanghai"),
        Endpoint: tea.String("green-cip.cn-shanghai.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"),
        /**
         * Set the timeout period. The server-side timeout period for a full-link request is 10 seconds. Set this parameter accordingly.
         * If the value of ReadTimeout is less than the server-side timeout period, a ReadTimeout exception is returned.
         */
        ConnectTimeout: tea.Int(3000),
        ReadTimeout:    tea.Int(6000),
    }
    // Note: To improve detection performance, reuse the client that is instantiated here as much as possible. This avoids repeated connection establishment.
    client, _err := green.NewClient(config)
    if _err != nil {
        panic(_err)
    }

    serviceParameters, _ := json.Marshal(
        map[string]interface{}{
            "taskId": "<your task ID>",
        },
    )
    request := green.VoiceModerationResultRequest{
        // The voice moderation service.
        Service:           tea.String("audio_media_detection"),
        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))
    }
}
                                
package main

import (
    "encoding/json"
    "fmt"
    openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
    green20220302 "github.com/alibabacloud-go/green-20220302/v3/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"
)
// The token for file upload.
var TokenMap =make(map[string]*green20220302.DescribeUploadTokenResponseBodyData)
// The client for file upload.
var Bucket *oss.Bucket
// Specifies whether the service is deployed in a VPC.
var isVPC = false
// Creates a request client.
func createClient(accessKeyId string, accessKeySecret string, endpoint string) (*green20220302.Client, error) {
    config := &openapi.Config{
    AccessKeyId: tea.String(accessKeyId),
    AccessKeySecret: tea.String(accessKeySecret),
    // Set the HTTP proxy.
    // HttpProxy: tea.String("http://10.10.xx.xx:xxxx"),
    // Set the HTTPS proxy.
    // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"),
    Endpoint: tea.String(endpoint),
    }
    // Note: We recommend that you reuse the client instance to avoid establishing multiple connections and improve detection performance.
    return green20220302.NewClient(config);
}

// Creates a client for file upload.
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));
    }
}

// Uploads 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 the 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 client instance to avoid establishing multiple connections and improve detection performance.
    client, _err := createClient(accessKeyId, accessKeySecret, endpoint)
    if _err != nil {
    return nil,_err
    }
    // Configure runtime parameters. The settings are valid only for requests that use this runtime parameter instance.
    runtime := &util.RuntimeOptions{}
    // The full path of a local file. Example: D:\\localPath\\exampleFile.wav.
    var filePath = "D:\\localPath\\exampleFile.wav"
    // Obtain a temporary token for file upload.
    tokenData,ok:=TokenMap[endpoint];
    if !ok || tea.Int32Value(tokenData.Expiration) <= int32(time.Now().Unix()) {
    // Obtain a temporary token for file upload.
    uploadTokenResponse, _err := client.DescribeUploadToken()
    if _err != nil {
    return nil,_err
    }
    tokenData = uploadTokenResponse.Body.Data
    TokenMap[endpoint] = tokenData
    }
     var objectName, _ = uploadFile(filePath,TokenMap[endpoint])

    // Build 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{
    // The audio moderation service. This is the serviceCode that you configured for the audio moderation rule of the enhanced version in the AI Guardrails console. Example: audio_media_detection
    // For more information about the supported services, see https://help.aliyun.com/document_detail/604973.html#p-gcd-2u4-2rj
      Service:           tea.String("audio_media_detection"),
    ServiceParameters: tea.String(string(serviceParameters)),
    }

    return client.VoiceModerationWithOptions(voiceModerationRequest, runtime)

}

func main() {
    /**
     * An AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M.
     * We strongly recommend that you do not save an AccessKey pair in the project code. Otherwise, the AccessKey pair may be leaked and all resources in your account may be exposed to potential security risks.
     * The following code provides an example of how to obtain environment variables:
     * Obtain the AccessKey ID of a RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
     * Obtain the AccessKey secret of a RAM user: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
     */
    var accessKeyId= "We recommend that you obtain the AccessKey ID of a RAM user from an environment variable.";
    var accessKeySecret= "We recommend that you obtain the AccessKey secret of a RAM user from an environment variable.";
    // Modify the region and endpoint based on your actual requirements.
    var endpoint = "green-cip.cn-shanghai.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. Switch the region to cn-beijing.
    if flag {
    endpoint = "green-cip.cn-beijing.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))
    }
    }
}

Retrieve the moderation result

package main

import (
    "encoding/json"
    "fmt"
    openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
    green "github.com/alibabacloud-go/green-20220302/v3/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. We recommend that you use a RAM user to call API operations or perform routine O&M.
         * We strongly 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."),
        // Specify the region where you want to access the service.
        RegionId: tea.String("cn-shanghai"),
        Endpoint: tea.String("green-cip.cn-shanghai.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 timeout period. The server-side timeout period for processing a request is 10 seconds. You must set the timeout period accordingly.
         * If the value of the ReadTimeout parameter is smaller than the server-side timeout period, a ReadTimeout exception is returned.
         */
        ConnectTimeout: tea.Int(3000),
        ReadTimeout:    tea.Int(6000),
    }
    // Note: We recommend that you reuse the instantiated client to improve moderation performance and avoid establishing repeated connections.
    client, _err := green.NewClient(config)
    if _err != nil {
        panic(_err)
    }

    serviceParameters, _ := json.Marshal(
        map[string]interface{}{
            "taskId": "<your-task-ID>",
        },
    )
    request := green.VoiceModerationResultRequest{
        // The voice moderation service.
        Service:           tea.String("audio_media_detection"),
        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))
    }
}
                                

Sample code for canceling a live stream moderation task

package main

import (
    "encoding/json"
    "fmt"
    openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
    green "github.com/alibabacloud-go/green-20220302/v3/client"
    "github.com/alibabacloud-go/tea/tea"
    "net/http"
)

func main() {
    config := &openapi.Config{
        /**
         * An 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 strongly recommend that you do not save your AccessKey ID and AccessKey secret in your project code. This can lead to an AccessKey pair leak and compromise the security of all resources in your account.
         * Common methods 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 an environment variable"),
        AccessKeySecret: tea.String("We recommend that you obtain the AccessKey secret of your RAM user from an environment variable"),
        // Specify your region.
        RegionId: tea.String("cn-shanghai"),
        Endpoint: tea.String("green-cip.cn-shanghai.aliyuncs.com"),
        // Set an HTTP proxy.
        // HttpProxy: tea.String("http://10.10.xx.xx:xxxx"),
        // Set an HTTPS proxy.
        // HttpsProxy: tea.String("https://10.10.xx.xx:xxxx"),
        /**
         * Set a timeout period. The server-side timeout period for the entire link is 10 seconds. Set the timeout period accordingly.
         * If the ReadTimeout value is less than the server-side processing time, a ReadTimeout exception is returned.
         */
        ConnectTimeout: tea.Int(3000),
        ReadTimeout:    tea.Int(6000),
    }
    // Note: To improve moderation performance, reuse the client instance. This avoids repeated connection creation.
    client, _err := green.NewClient(config)
    if _err != nil {
        panic(_err)
    }

    serviceParameters, _ := json.Marshal(
        map[string]interface{}{
            "taskId": "<The ID of the task to cancel>",
        },
    )
    request := green.VoiceModerationCancelRequest{
        // The voice moderation service.
        Service:           tea.String("audio_media_detection"),
        ServiceParameters: tea.String(string(serviceParameters)),
    }
    result, _err := client.VoiceModerationCancel(&request)
    if _err != nil {
        panic(_err)
    }
    statusCode := tea.IntValue(tea.ToInt(result.StatusCode))
    if statusCode == http.StatusOK {
        cancelResponseBody := result.Body
        fmt.Println("response success. response:" + cancelResponseBody.String())
        if tea.IntValue(tea.ToInt(cancelResponseBody.Code)) != 200 {
            fmt.Println("voice moderation cancel not success. code:" + tea.ToString(tea.Int32Value(cancelResponseBody.Code)))
        }
    } else {
        fmt.Println("response not success. status:" + tea.ToString(statusCode))
    }
}

Detect local audio

Install the dependencies

go get github.com/alibabacloud-go/green-20220302/v3@v3.2.4

For the full Go sample code for local audio moderation, generate it using OpenAPI Explorer.

Sample code for canceling a live stream moderation task

package main

import (
    "encoding/json"
    "fmt"
    openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
    green "github.com/alibabacloud-go/green-20220302/v3/client"
    "github.com/alibabacloud-go/tea/tea"
    "net/http"
)

func main() {
    config := &openapi.Config{
        /**
         * An 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 strongly recommend that you do not save your AccessKey ID and AccessKey secret in your project code. This can lead to an AccessKey pair leak and compromise the security of all resources in your account.
         * Common methods 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 an environment variable"),
        AccessKeySecret: tea.String("We recommend that you obtain the AccessKey secret of your RAM user from an environment variable"),
        // Specify your region.
        RegionId: tea.String("cn-shanghai"),
        Endpoint: tea.String("green-cip.cn-shanghai.aliyuncs.com"),
        // Set an HTTP proxy.
        // HttpProxy: tea.String("http://10.10.xx.xx:xxxx"),
        // Set an HTTPS proxy.
        // HttpsProxy: tea.String("https://10.10.xx.xx:xxxx"),
        /**
         * Set a timeout period. The server-side timeout period for the entire link is 10 seconds. Set the timeout period accordingly.
         * If the ReadTimeout value is less than the server-side processing time, a ReadTimeout exception is returned.
         */
        ConnectTimeout: tea.Int(3000),
        ReadTimeout:    tea.Int(6000),
    }
    // Note: To improve moderation performance, reuse the client instance. This avoids repeated connection creation.
    client, _err := green.NewClient(config)
    if _err != nil {
        panic(_err)
    }

    serviceParameters, _ := json.Marshal(
        map[string]interface{}{
            "taskId": "<The ID of the task to cancel>",
        },
    )
    request := green.VoiceModerationCancelRequest{
        // The voice moderation service.
        Service:           tea.String("audio_media_detection"),
        ServiceParameters: tea.String(string(serviceParameters)),
    }
    result, _err := client.VoiceModerationCancel(&request)
    if _err != nil {
        panic(_err)
    }
    statusCode := tea.IntValue(tea.ToInt(result.StatusCode))
    if statusCode == http.StatusOK {
        cancelResponseBody := result.Body
        fmt.Println("response success. response:" + cancelResponseBody.String())
        if tea.IntValue(tea.ToInt(cancelResponseBody.Code)) != 200 {
            fmt.Println("voice moderation cancel not success. code:" + tea.ToString(tea.Int32Value(cancelResponseBody.Code)))
        }
    } else {
        fmt.Println("response not success. status:" + tea.ToString(statusCode))
    }
}

Detect audio stored in OSS

Use case

If the audio files are stored in Alibaba Cloud OSS, you can authorize the Content Moderation service to access OSS by creating a service role. Voice Moderation Enhanced Editioncan access the OSS files for moderation through the service role. Go to the Cloud Resource Access Authorization pageto create a service role.

  1. Run the following command to install the dependency.

    go get github.com/alibabacloud-go/green-20220302/v3@v3.2.4
  2. Use the Go SDK.

    • 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/v3/client"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
          config := &openapi.Config{
              /**
               * An AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user for API calls or routine O&M.
               * We strongly recommend that you do not save your AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources within your account may be compromised.
               * Common methods 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 an environment variable"),
              AccessKeySecret: tea.String("We recommend that you obtain the AccessKey secret of your RAM user from an environment variable"),
              // Specify your region.
              RegionId: tea.String("cn-shanghai"),
              Endpoint: tea.String("green-cip.cn-shanghai.aliyuncs.com"),
              // Set the HTTP proxy.
              //HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // Set the HTTPS proxy.
              //HttpsProxy: tea.String("https://xx.xx.xx.xx:xxxx"),
              /**
               * The server-side timeout is 10 seconds. Set ConnectTimeout and ReadTimeout accordingly.
               * If ReadTimeout is less than the server processing time, a ReadTimeout exception occurs.
               */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
          // Note: Reuse the client instance to avoid repeated connection creation.
          client, _err := green.NewClient(config)
          if _err != nil {
              panic(_err)
          }
          // URL of the audio to moderate.
          serviceParameters, _ := json.Marshal(
              map[string]interface{}{
      		// Region of the OSS bucket. Example: cn-shanghai
      		"ossRegionId": "cn-shanghai",
      		// Name of the OSS bucket. Example: bucket001
      		"ossBucketName":"bucket001",
      		// Object name of the audio file. Example: voice/001.wav
      		"ossObjectName":"voice/001.wav",
      		// Data ID of the audio to moderate.
      		"dataId":   uuid.New().String(),
              },
          )
          request := green.VoiceModerationRequest{
              // Voice moderation service code.
              Service:           tea.String("audio_media_detection"),
              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 retrieving 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/v3/client"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
          config := &openapi.Config{
              /**
               * An AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user for API calls or routine O&M.
               * We strongly recommend that you do not save your AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources within your account may be compromised.
               * Common methods 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 an environment variable"),
              AccessKeySecret: tea.String("We recommend that you obtain the AccessKey secret of your RAM user from an environment variable"),
              // Specify your region.
              RegionId: tea.String("cn-shanghai"),
              Endpoint: tea.String("green-cip.cn-shanghai.aliyuncs.com"),
              // Set the HTTP proxy.
              // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // Set the HTTPS proxy.
              // HttpsProxy: tea.String("https://xx.xx.xx.xx:xxxx"),
              /**
               * The server-side timeout is 10 seconds. Set ConnectTimeout and ReadTimeout accordingly.
               * If ReadTimeout is less than the server processing time, a ReadTimeout exception occurs.
               */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
          // Note: Reuse the client instance to avoid repeated connection creation.
          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 code.
              Service:           tea.String("audio_media_detection"),
              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))
          }
      }
                                      
    • Sample code for canceling a live stream moderation task

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green "github.com/alibabacloud-go/green-20220302/v3/client"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
          config := &openapi.Config{
              /**
               * An AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user for API calls or routine O&M.
               * We strongly recommend that you do not save your AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources within your account may be compromised.
               * Common methods 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 an environment variable"),
              AccessKeySecret: tea.String("We recommend that you obtain the AccessKey secret of your RAM user from an environment variable"),
              // Specify your region.
              RegionId: tea.String("cn-shanghai"),
              Endpoint: tea.String("green-cip.cn-shanghai.aliyuncs.com"),
              // Set the HTTP proxy.
              // HttpProxy: tea.String("http://10.10.xx.xx:xxxx"),
              // Set the HTTPS proxy.
              // HttpsProxy: tea.String("https://10.10.xx.xx:xxxx"),
              /**
               * The server-side timeout is 10 seconds. Set ConnectTimeout and ReadTimeout accordingly.
               * If ReadTimeout is less than the server processing time, a ReadTimeout exception occurs.
               */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
          // Note: Reuse the client instance to avoid repeated connection creation.
          client, _err := green.NewClient(config)
          if _err != nil {
              panic(_err)
          }
      
          serviceParameters, _ := json.Marshal(
              map[string]interface{}{
                  "taskId": "<Task ID to cancel>",
              },
          )
          request := green.VoiceModerationCancelRequest{
              // Voice moderation service code.
              Service:           tea.String("audio_media_detection"),
              ServiceParameters: tea.String(string(serviceParameters)),
          }
          result, _err := client.VoiceModerationCancel(&request)
          if _err != nil {
              panic(_err)
          }
          statusCode := tea.IntValue(tea.ToInt(result.StatusCode))
          if statusCode == http.StatusOK {
              cancelResponseBody := result.Body
              fmt.Println("response success. response:" + cancelResponseBody.String())
              if tea.IntValue(tea.ToInt(cancelResponseBody.Code)) != 200 {
                  fmt.Println("voice moderation cancel not success. code:" + tea.ToString(tea.Int32Value(cancelResponseBody.Code)))
              }
          } else {
              fmt.Println("response not success. status:" + tea.ToString(statusCode))
          }
      }

C# SDK

Source code: NuGet

Detect publicly accessible audio

Install the dependency

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

Submit a moderation task

using Newtonsoft.Json;
using Tea;

namespace AlibabaCloud.SDK.Sample
{
    public class Sample
    {
        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)
        {
            // Load credentials from environment variables.
            // Do not hardcode your AccessKey pair in code.
            string accessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID");
            string accessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET");

            // Reuse the client instance to avoid repeated connection creation.
            AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret);

            AlibabaCloud.SDK.Green20220302.Models.VoiceModerationRequest request =
                new AlibabaCloud.SDK.Green20220302.Models.VoiceModerationRequest();
            request.Service = "audio_multilingual_global";
            Dictionary<string, object> task = new Dictionary<string, object>();
            task.Add("url", "https://example.com/sample.wav");
            request.ServiceParameters = JsonConvert.SerializeObject(task);

            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            runtime.ReadTimeout = 6000;
            runtime.ConnectTimeout = 3000;

            try
            {
                AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResponse response =
                    client.VoiceModerationWithOptions(request, runtime);
                if (response != null && response.Body != null)
                {
                    if (200 == response.Body.Code)
                    {
                        Console.WriteLine("taskId: " + response.Body.Data.TaskId);
                        // Use taskId to poll for results with VoiceModerationResult.
                    }
                    else
                    {
                        Console.WriteLine("Moderation request failed. code: " + response.Body.Code);
                    }
                }
            }
            catch (TeaException error)
            {
                AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
            }
            catch (Exception _error)
            {
                TeaException error = new TeaException(new Dictionary<string, object>
                {
                    { "message", _error.Message }
                });
                AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
            }
        }
    }
}
using Newtonsoft.Json;
using Tea;

namespace AlibabaCloud.SDK.Sample
{
    public class Sample
    {

        /**
         * Use your AccessKey ID and AccessKey secret to initialize your 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.cn-shanghai.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 all resources in your account may be compromised. The following code provides an example for reference only. We recommend that you use a more secure method, such as Security Token Service (STS).
            /**
            * The AccessKey of an Alibaba Cloud account has permissions on all APIs. We recommend that you use a RAM user to call APIs or perform routine O&M.
            * We strongly recommend that you do not save an AccessKey ID and AccessKey secret in the project code. Otherwise, the AccessKey pair may be leaked and all resources in your account may be exposed to potential security risks.
            * Common methods for obtaining environment variables:
            * Obtain the AccessKey ID of a RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
            * Obtain the AccessKey secret of a RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
            */
            string accessKeyId = "Obtain the AccessKey ID of your RAM user from an environment variable.",
            string accessKeySecret = 'Obtain the AccessKey secret of your RAM user from an environment variable.',
            // Note: To improve detection performance, reuse the client that is instantiated here. Do not create a new connection for each request.
            AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret);
            // Build a voice moderation request.
            AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResultRequest voiceModerationResultRequest = new AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResultRequest();
            // The voice moderation service.
            voiceModerationResultRequest.Service="audio_media_detection";
            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);
            // Create a RuntimeOptions instance and set runtime parameters.
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            runtime.ReadTimeout = 10000;
            runtime.ConnectTimeout = 10000;
            try
            {
                // Submit the voice moderation task.
              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);
            }
        }
    }
}
using Newtonsoft.Json;
using Tea;

namespace AlibabaCloud.SDK.Sample
{
    public class Sample
    {

        /**
         * Use your AccessKey ID and AccessKey secret to initialize a 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.cn-shanghai.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 all resources in your account may be compromised. The following sample code is for reference only. We recommend that you use a more secure method, such as Security Token Service (STS), to perform the call.
            /**
            * An AccessKey pair for an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M.
            * We strongly recommend that you do not save an AccessKey pair in the project code. Otherwise, the AccessKey pair may be leaked and all resources in your account may be exposed to potential security risks.
            * Common methods for obtaining environment variables:
            * Obtain the AccessKey ID of a RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
            * Obtain the AccessKey secret of a RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
            */
            string accessKeyId = "Get the AccessKey ID of the RAM user from an environment variable.",
            string accessKeySecret = 'Get the AccessKey secret of the RAM user from an environment variable.',
            // Note: We recommend that you reuse the client instance to improve detection performance. Avoid creating a new connection for each request.
            AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret);
            // Build a voice moderation request.
            AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResultRequest voiceModerationResultRequest = new AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResultRequest();
            // The voice moderation service.
            voiceModerationResultRequest.Service="audio_media_detection";
            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);
            // Create a RuntimeObject instance and set runtime parameters.
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            runtime.ReadTimeout = 10000;
            runtime.ConnectTimeout = 10000;
            try
            {
                // Submit the voice moderation task.
              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);
            }
        }
    }
}

Retrieve the moderation result

Detect local audio

Install the dependencies

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

Install the OSS SDK via NuGet: search for Aliyun.OSS.SDK (for .NET Framework) or Aliyun.OSS.SDK.NetCore (for .NET Core) in the NuGet Package Manager.

For the full C# sample code for local audio moderation, generate it using OpenAPI Explorer.

Detect audio stored in OSS

Create a service role on the Cloud Resource Access Authorization page.

Install the dependency

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

Submit a moderation task

using Newtonsoft.Json;
using Tea;

namespace AlibabaCloud.SDK.Sample
{
    public class Sample
    {
        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,
            };
            config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
            return new AlibabaCloud.SDK.Green20220302.Client(config);
        }

        public static void Main(string[] args)
        {
            string accessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID");
            string accessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET");

            // Reuse the client instance to avoid repeated connection creation.
            AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret);

            AlibabaCloud.SDK.Green20220302.Models.VoiceModerationRequest request =
                new AlibabaCloud.SDK.Green20220302.Models.VoiceModerationRequest();
            request.Service = "audio_multilingual_global";
            Dictionary<string, object> task = new Dictionary<string, object>();
            task.Add("ossBucketName", "<your-bucket-name>");
            task.Add("ossObjectName", "voice/001.wav");
            task.Add("ossRegionId", "cn-shanghai");
            request.ServiceParameters = JsonConvert.SerializeObject(task);

            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            runtime.ReadTimeout = 6000;
            runtime.ConnectTimeout = 3000;

            try
            {
                AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResponse response =
                    client.VoiceModerationWithOptions(request, runtime);
                if (response != null && response.Body != null)
                {
                    if (200 == response.Body.Code)
                    {
                        Console.WriteLine("taskId: " + response.Body.Data.TaskId);
                    }
                }
            }
            catch (TeaException error)
            {
                AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
            }
            catch (Exception _error)
            {
                TeaException error = new TeaException(new Dictionary<string, object>
                {
                    { "message", _error.Message }
                });
                AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
            }
        }
    }
}

To retrieve results, use the same VoiceModerationResultRequest pattern from Detect publicly accessible audio.

Node.js SDK

Source code: npm package

The SDK supports three audio moderation scenarios.

Detect publicly accessible audio

Use case

When the audio file is accessible from a public URL, Voice Moderation Enhanced Editioncan retrieve the file via the URL for moderation.

  1. Run the following command to install the dependency.

    npm install @alicloud/green20220302@3.2.4

  2. Use the Node.js SDK.

    • 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: Reuse the client instance to avoid repeated connection creation.
      // 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 environment variable is configured:  ALIBABA_CLOUD_ACCESS_KEY_ID。
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // Required. Make sure that the environment variable is configured:  ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.cn-shanghai.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // Construct the request object
              const voiceModerationRequest = new Green20220302.VoiceModerationRequest({
                  "service": "audio_media_detection",
                  "serviceParameters": JSON.stringify({"url":"http://aliyundoc.com/test.flv"})
              });
              // Create a runtime configuration object
              const runtime = new Util.RuntimeOptions();
              try {
                  // Send the request and get the response
                  const response = await client.voiceModerationWithOptions(voiceModerationRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // This is for demonstration only. Handle exceptions properly in production.
                  // Error message
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();
    • Sample code for retrieving voice moderation results

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // Note: Reuse the client instance to avoid repeated connection creation.
      // 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 environment variable is configured:  ALIBABA_CLOUD_ACCESS_KEY_ID。
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // Required. Make sure that the environment variable is configured:  ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.cn-shanghai.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // Construct the request object
              const voiceModerationResultRequest = new Green20220302.VoiceModerationResultRequest({
                  // Voice moderation service code.
                  "service": "audio_media_detection",
                  "serviceParameters": JSON.stringify({"taskId":"<Task ID of the voice moderation result to query>"})
              });
              // Create a runtime configuration object
              const runtime = new Util.RuntimeOptions();
              try {
                  // Send the request and get the response
                  const response = await client.voiceModerationResultWithOptions(voiceModerationResultRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // This is for demonstration only. Handle exceptions properly in production.
                  // Error message
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();
    • Sample code for canceling a live stream moderation task

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // Note: Reuse the client instance to avoid repeated connection creation.
      // 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 environment variable is configured:  ALIBABA_CLOUD_ACCESS_KEY_ID。
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // Required. Make sure that the environment variable is configured:  ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.cn-shanghai.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // Construct the request object
              const voiceModerationCancelRequest = new Green20220302.VoiceModerationCancelRequest({
                  // Voice moderation service code.
                  "service": "audio_media_detection",
                  // Task ID of the live stream moderation task to cancel.
                  "serviceParameters": JSON.stringify({"taskId":"<Task ID of the live stream moderation task to cancel>"})
              });
              // Create a runtime configuration object
              const runtime = new Util.RuntimeOptions();
              try {
                  // Send the request and get the response
                  const response = await client.voiceModerationCancelWithOptions(voiceModerationCancelRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // This is for demonstration only. Handle exceptions properly in production.
                  // Error message
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();

Detect local audio

Use case

When the audio file is on a local machine without a public URL, you can upload it to the OSS bucket provided by Content Moderation. Voice Moderation Enhanced Editioncan directly access OSS to retrieve the audio content for moderation.

  1. Run the following command to install the dependency.

    npm install @alicloud/green20220302@3.2.4

    Install the OSS SDK:

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

    • 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: Reuse the client instance to avoid repeated connection creation.
      // 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.
      
      //Whether the service is deployed on VPC
      var isVPC = false;
      //File upload token
      var tokenDic = new Array();
      //File upload client
      var ossClient;
      //Set the endpoint
      var endpoint = 'green-cip.cn-shanghai.aliyuncs.com'
      //Local file path
      var filePath = 'D:\\test\\voice\\cf02.wav'
      //Moderation service code
      var service = 'audio_media_detection'
      
      class Client {
          static createClient() {
              const config = new OpenApi.Config({
                  // Required. Make sure that the environment variable is configured:  ALIBABA_CLOUD_ACCESS_KEY_ID。
                  accessKeyId: process.env["ALIBABA_CLOUD_ACCESS_KEY_ID"],
                  // Required. Make sure that the environment variable is configured:  ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                  accessKeySecret: process.env["ALIBABA_CLOUD_ACCESS_KEY_SECRET"],
                  endpoint: endpoint,
              });
              return new Green20220302.default(config);
          }
      
          // Create file upload client
          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();
              
              //Get file upload token
              if (tokenDic[endpoint] == null || tokenDic[endpoint]['expiration'] <= Date.parse(new Date() / 1000)) {
                  var tokenResponse = await client.describeUploadTokenWithOptions(runtime)
                  tokenDic[endpoint] = tokenResponse.body.data;
              }
      
              //Get file upload client
          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 file
              const result = await ossClient.put(objectName, path.normalize(filePath));
      
              // Construct the request object
              const voiceModerationRequest = new Green20220302.VoiceModerationRequest({
                  // Moderation service code。
                  "service": service,
                  // URL of the audio to moderate.
                  "serviceParameters": JSON.stringify({
                      "ossBucketName": tokenDic[endpoint].bucketName,
                      "ossObjectName": objectName,
                  })
                  });
      
              try {
                  // Send the request and get the response
                  const response = await client.voiceModerationWithOptions(voiceModerationRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // This is for demonstration only. Handle exceptions properly in production.
                  // Error message
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();
    • Sample code for retrieving voice moderation results

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // Note: Reuse the client instance to avoid repeated connection creation.
      // 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 environment variable is configured:  ALIBABA_CLOUD_ACCESS_KEY_ID。
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // Required. Make sure that the environment variable is configured:  ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.cn-shanghai.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // Construct the request object
              const voiceModerationResultRequest = new Green20220302.VoiceModerationResultRequest({
                  // Voice moderation service code.
                  "service": "audio_media_detection",
                  "serviceParameters": JSON.stringify({"taskId":"<Task ID of the voice moderation result to query>"})
              });
              // Create a runtime configuration object
              const runtime = new Util.RuntimeOptions();
              try {
                  // Send the request and get the response
                  const response = await client.voiceModerationResultWithOptions(voiceModerationResultRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // This is for demonstration only. Handle exceptions properly in production.
                  // Error message
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();
    • Sample code for canceling a live stream moderation task

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // Note: Reuse the client instance to avoid repeated connection creation.
      // 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 environment variable is configured:  ALIBABA_CLOUD_ACCESS_KEY_ID。
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // Required. Make sure that the environment variable is configured:  ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.cn-shanghai.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // Construct the request object
              const voiceModerationCancelRequest = new Green20220302.VoiceModerationCancelRequest({
                  // Voice moderation service code.
                  "service": "audio_media_detection",
                  // Task ID of the live stream moderation task to cancel.
                  "serviceParameters": JSON.stringify({"taskId":"<Task ID of the live stream moderation task to cancel>"})
              });
              // Create a runtime configuration object
              const runtime = new Util.RuntimeOptions();
              try {
                  // Send the request and get the response
                  const response = await client.voiceModerationCancelWithOptions(voiceModerationCancelRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // This is for demonstration only. Handle exceptions properly in production.
                  // Error message
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();

Detect audio stored in OSS

Use case

If the audio files are stored in Alibaba Cloud OSS, you can authorize the Content Moderation service to access OSS by creating a service role. Voice Moderation Enhanced Editioncan access the OSS files for moderation through the service role. Go to the Cloud Resource Access Authorization pageto create a service role.

  1. Run the following command to install the dependency.

    npm install @alicloud/green20220302@3.2.4

  2. Use the Node.js SDK.

    • 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: Reuse the client instance to avoid repeated connection creation.
      // 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 environment variable is configured:  ALIBABA_CLOUD_ACCESS_KEY_ID。
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // Required. Make sure that the environment variable is configured:  ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.cn-shanghai.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // Construct the request object
              const voiceModerationRequest = new Green20220302.VoiceModerationRequest({
                  "service": "audio_media_detection",
                  "serviceParameters": JSON.stringify({
                  // Region of the bucket. Example: cn-shanghai
                  "ossRegionId": "cn-shanghai",
                  // Name of the bucket. Example: bucket001
                  "ossBucketName": "bucket001",
                  // File to moderate. Example: voice/001.wav
                  "ossObjectName": "voice/001.wav",})
              });
              // Create a runtime configuration object
              const runtime = new Util.RuntimeOptions();
              try {
                  // Send the request and get the response
                  const response = await client.voiceModerationWithOptions(voiceModerationRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // This is for demonstration only. Handle exceptions properly in production.
                  // Error message
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();
    • Sample code for retrieving voice moderation results

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // Note: Reuse the client instance to avoid repeated connection creation.
      // 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 environment variable is configured:  ALIBABA_CLOUD_ACCESS_KEY_ID。
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // Required. Make sure that the environment variable is configured:  ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.cn-shanghai.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // Construct the request object
              const voiceModerationResultRequest = new Green20220302.VoiceModerationResultRequest({
                  // Voice moderation service code.
                  "service": "audio_media_detection",
                  "serviceParameters": JSON.stringify({"taskId":"<Task ID of the voice moderation result to query>"})
              });
              // Create a runtime configuration object
              const runtime = new Util.RuntimeOptions();
              try {
                  // Send the request and get the response
                  const response = await client.voiceModerationResultWithOptions(voiceModerationResultRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // This is for demonstration only. Handle exceptions properly in production.
                  // Error message
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();
    • Sample code for canceling a live stream moderation task

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // Note: Reuse the client instance to avoid repeated connection creation.
      // 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 environment variable is configured:  ALIBABA_CLOUD_ACCESS_KEY_ID。
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // Required. Make sure that the environment variable is configured:  ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.cn-shanghai.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // Construct the request object
              const voiceModerationCancelRequest = new Green20220302.VoiceModerationCancelRequest({
                  // Voice moderation service code.
                  "service": "audio_media_detection",
                  // Task ID of the live stream moderation task to cancel.
                  "serviceParameters": JSON.stringify({"taskId":"<Task ID of the live stream moderation task to cancel>"})
              });
              // Create a runtime configuration object
              const runtime = new Util.RuntimeOptions();
              try {
                  // Send the request and get the response
                  const response = await client.voiceModerationCancelWithOptions(voiceModerationCancelRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // This is for demonstration only. Handle exceptions properly in production.
                  // Error message
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();

HTTPS native call

  • Call method

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

    Protocol: HTTPS

    Method: POST

  • Common request parameters

    The input parameters of Voice Moderation Enhanced Edition API include common request parameters and operation-specific parameters. Common request parameters are required for every API call. The following table describes the common request parameters.

    Name

    Type

    Required

    Description

    Format

    String

    Yes

    Format of the response. Valid values:

    • JSON(default)

    • XML

    Version

    String

    Yes

    APIAPI version in YYYY-MM-DD format. Current version: 2022-03-02.

    AccessKeyId

    String

    Yes

    The AccessKey ID issued by Alibaba Cloud for accessing services.

    Signature

    String

    Yes

    The signature string. For the calculation method, see the Signature mechanism section below.

    SignatureMethod

    String

    Yes

    The signature method. Currently, only HMAC-SHA1 is supported.

    Timestamp

    String

    Yes

    The timestamp of the request. Specify the time in the ISO 8601 standard in UTC.

    Format: yyyy-MM-ddTHH:mm:ssZ.

    For example, 2022-12-12T09:13:14 (UTC+8) is expressed as 2022-12-12T01:13:14Z.

    SignatureVersion

    String

    Yes

    Signature algorithmVersion. Fixed value: 1.0.

    SignatureNonce

    String

    Yes

    A unique random number to prevent replay attacks. Use a different value for each request.

    Action

    String

    Yes

    Valid values:

    • VoiceModeration

    • VoiceModerationResult

    • VoiceModerationCancel

  • Common response parameters

    For each API request, regardless of success or failure, the system returns a unique identifier (RequestId). Other response parameters vary depending on the service called.

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

    The following response examples are formatted for readability. Actual responses are not formatted.

    • Submit moderation task example

      Request example

      http://green-cip.cn-shanghai.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_media_detection
      &ServiceParameters={"url": "https://xxxxxx.aliyuncs.com/sample/****.wav"}

      Response example

      {
          "RequestId":"20B935A9-XXXXXXXX-XXXXXXXX0C2",
          "Message":"SUCCESS",
          "Data":{
              "TaskId":"au_f_O5xxxxxxxxxxxxxxqa-1x****"
          },
          "Code":200
      }
    • Query task result example

      Request example

      http://green-cip.cn-shanghai.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_media_detection
      &ServiceParameters={"taskId": "au_f_O5zxxxxxxxxxxxxxxxx-1x****"}

      Response example

      {
          "RequestId":"926AD581-XXXXXXXXXXXXXX-7902AE",
          "Message":"success finished",
          "Data":{
              "SliceDetails":[
                  {
                      "EndTime":6,
                      "StartTime":0,
                      "Text":"The weather is nice today.",
                      "Labels":"",
                      "Url":"http://xxxx.aliyuncs.com/cip-media/voice/****.wav"
                  }
              ]
          },
          "Code":200
      }
  • Signature mechanism

    Voice Moderation Enhanced Edition authenticates every access request. Therefore, you must include signature (Signature) information in each request. Voice Moderation Enhanced Edition uses symmetric encryption with an AccessKey ID and AccessKey Secret to verify the identity of the request sender.

    AccessKey IDAccessKey ID and AccessKey Secret are issued by Alibaba Cloud (you can apply for and manage them on the Alibaba Cloud website). AccessKey ID identifies the visitor; AccessKey Secret is the key used to encrypt and verify the signature string. It must be kept strictly confidential.

    When accessing the service, sign the request as follows:

    1. Construct a canonicalized query string using the request parameters.

      1. Sort all request parameters in alphabetical order (including Common request parameters and operation-specific parameters, but excluding theSignature parameter itself) in lexicographic order。

      2. URL-encode the parameter names and values using UTF-8.

        Note

        Most URL encoding libraries (such as java.net.URLEncoder in Java) encode based on the application/x-www-form-urlencoded MIME type. You can use this encoding and then replace plus signs (+) with %20, asterisks (*) with %2A, and %7E back to tildes (~).to obtain the encoded string as described above.

        The URL encoding rules are as follows:

        • Characters A-Z, a-z, 0-9, hyphens (-), underscores (_), periods (.), and tildes (~) are not encoded.

        • Other characters are encoded as %XYformat, where XY is the hexadecimal representation of the character's ASCII code. For example, double quotes (") is encoded as%22

        • Extended UTF-8 characters are encoded as %XY%ZA… format.

        • Note that a space character ( ) must be encoded as%20, not plus signs (+).

      3. Connect each encoded parameter name and its value with an equals sign (=).

      4. Join the parameter=value pairs in alphabetical order with ampersand (&) to form the canonicalized query string.

    2. Construct the string for signature calculation using the canonicalized string from step a.i:

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

      Where HTTPMethod is the HTTP method used to submit the request, such as POST. percentEncode(/) is the value obtained by URL-encoding the character (/) according to the URL encoding rules described in step a.ii, which is%2F. percentEncode(CanonicalQueryString) is the string obtained by URL-encoding the canonicalized query string constructed in step a.i according to the URL encoding rules described in step a.ii.

    3. Calculate the HMAC value using the string to sign as defined in RFC 2104.

      Note

      Note: The key used for signature calculation is the AccessKey Secret followed by an & character (ASCII: 38). The hash algorithm used is SHA1.

    4. Encode the HMAC value using Base64 to get the Signature.

    5. Add the signature value as the Signature parameter to the request parameters to complete the signing process.

      Note

      When submitting the signature value to the Content Moderation server as the final request parameter, URL-encode it according to RFC 3986, same as other parameters.

If you encounter any issues, Please join the DingTalk group (group ID: 35573806), to contact product technical experts for consultation.

Usage notes

  • Reuse client instances. Creating a new client for each request creates unnecessary connections. Initialize one client per endpoint and reuse it across requests.

  • Load credentials from environment variables. Set ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET as environment variables. Do not hardcode AccessKey values in your code.

  • Upload token expiration. Temporary upload tokens from DescribeUploadToken expire. Check the expiration field and refresh the token before it expires.

  • VPC endpoints. If your application runs in a VPC, use the VPC endpoint (green-cip-vpc.ap-southeast-1.aliyuncs.com) to avoid public network egress costs.

What's next