阿里云外呼机器人对接记录

最近公司要做一个外呼机器人相关的功能,这里做个记录。

1、阿里云控制台开通智能外呼机器人,必须要企业账号才行。

2、外呼号码申请,这里可以是客户自己的,也可以买三方的,我们这边是购买的三方的。在阿里云控制台填写申请单,后续有人对接。

image

 3、对话场景创建-流程图绘制

这里值得说的是:

 1、我试过用大模型场景,它总是会自己有一些想法,说一些无法控制的内容。所以我用的是小模型场景。

 2、流程图的绘制需要研究一下,类似工作流,比较简单。

4、接口的调用

阿里云的文档写的都比较清楚了,我是引用的sdk maven方式。提供了内部方法,直接调用就行,大概流程 :

CreateJobGroup->assignJobs->QueryJobsWithResult->DescribeJob->DownloadRecording
其中assignJobs就是提交基本信息,被呼叫的电话,流程图里面设计的变量这些东西。
5、调用测试代码
 static  final String accessKeyId="";
   static  final String accessKeySecret="";
    @Test
    void testCreateJobGroup() throws ExecutionException, InterruptedException {
        // 从环境变量中获取 AccessKey
        StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
                .accessKeyId(accessKeyId)
                .accessKeySecret(accessKeySecret)
                // .securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // 如使用STS,可取消注释
                .build());

        // 使用 try-with-resources 自动关闭 AsyncClient
        try (AsyncClient client = AsyncClient.builder()
                .region("cn-shanghai") // 设置区域
                .credentialsProvider(provider)
                .overrideConfiguration(ClientOverrideConfiguration.create()
                        .setEndpointOverride("outboundbot.cn-shanghai.aliyuncs.com")) // 设置服务 endpoint
                .build()) {

            // 构建创建任务组请求
            CreateJobGroupRequest request = CreateJobGroupRequest.builder()
                    .instanceId("58f1a15a-a1be-4049-9f7e-7f324dd34e2a")
                    .jobGroupName("打电话")
                    .jobGroupDescription("测试任务组")
                    .scriptId("04f54cb7-3eca-456d-97d8-78e54cd8fba9")
                    .build();

            // 异步请求,使用 get() 转为同步等待结果
            CompletableFuture<CreateJobGroupResponse> future = client.createJobGroup(request);
            CreateJobGroupResponse response = future.get();

            // 正确打印结果(避免错误类型转换)
            System.out.println(JSON.toJSONString(response.getBody()));

        } catch (Exception e) {
            System.err.println("创建任务组失败:" + e.getMessage());
            e.printStackTrace();
        }
    }

    @Test
       void assignJobs() throws ExecutionException, InterruptedException {
        StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
                .accessKeyId(accessKeyId)
                .accessKeySecret(accessKeySecret)
                .build());

        try (AsyncClient client = AsyncClient.builder()
                .region("cn-shanghai")
                .credentialsProvider(provider)
                .overrideConfiguration(ClientOverrideConfiguration.create()
                        .setEndpointOverride("outboundbot.cn-shanghai.aliyuncs.com"))
                .build()) {

            String jobJson = "{\n" +
                    "  \"extras\": [\n" +
                    "    {\"key\": \"name\", \"value\": \"何伯\"}"+
                    "  ],\n" +
                    "  \"contacts\": [\n" +
                    "    {\n" +
                    "      \"phoneNumber\": \"*****\",\n" +
                    "      \"name\": \"何伯\",\n" +
                    "      \"referenceId\": \"C01\",\n" +
                    "      \"role\": \"132\",\n" +
                    "      \"honorific\": \"何伯\"\n" +
                    "    }\n" +
                    "  ]\n" +
                    "}";

            AssignJobsRequest assignJobsRequest = AssignJobsRequest.builder()
                    .instanceId("58f1a15a-a1be-4049-9f7e-7f324dd34e2a")
                    .jobGroupId("7881697e-6064-45e4-aace-a3ad6d3fce29")
                    .jobsJson(Collections.singletonList(jobJson))
                    .build();

            CompletableFuture<AssignJobsResponse> response = client.assignJobs(assignJobsRequest);
            AssignJobsResponse resp = response.get();
            System.out.println(JSON.toJSONString(resp.getBody()));

        } catch (Exception e) {
            System.err.println("分配任务失败: " + e.getMessage());
            e.printStackTrace();
        }
    }

    @Test
    void QueryJobsWithResult() throws ExecutionException, InterruptedException {
        StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
                .accessKeyId(accessKeyId)
                .accessKeySecret(accessKeySecret)
                .build());

        // Configure the Client
        AsyncClient client = AsyncClient.builder()
                .region("cn-shanghai") // Region ID
                .credentialsProvider(provider)
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                // Endpoint 请参考 https://api.aliyun.com/product/OutboundBot
                                .setEndpointOverride("outboundbot.cn-shanghai.aliyuncs.com")
                        //.setConnectTimeout(Duration.ofSeconds(30))
                )
                .build();

        // Parameter settings for API request
        QueryJobsWithResultRequest queryJobsWithResultRequest = QueryJobsWithResultRequest.builder()
                .jobGroupId("7881697e-6064-45e4-aace-a3ad6d3fce29")
                .instanceId("58f1a15a-a1be-4049-9f7e-7f324dd34e2a")
                .pageNumber(1)
                .pageSize(10)
                // Request-level configuration rewrite, can set Http request parameters, etc.
                // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
                .build();

        CompletableFuture<QueryJobsWithResultResponse> response = client.queryJobsWithResult(queryJobsWithResultRequest);
        QueryJobsWithResultResponse resp = response.get();
        System.out.println(JSON.toJSONString(resp.getBody()));
        client.close();
    }

    @Test
    void DownloadRecording() throws ExecutionException, InterruptedException {
        StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
                .accessKeyId(accessKeyId)
                .accessKeySecret(accessKeySecret)
                .build());

        AsyncClient client = AsyncClient.builder()
                .region("cn-shanghai") // Region ID
                .credentialsProvider(provider)
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setEndpointOverride("outboundbot.cn-shanghai.aliyuncs.com")
                )
                .build();

        DownloadRecordingRequest downloadRecordingRequest = DownloadRecordingRequest.builder()
                .instanceId("58f1a15a-a1be-4049-9f7e-7f324dd34e2a")
                .taskId("e2cff230-5aa6-4692-bd0c-7ada00f6c862")
                .build();

        CompletableFuture<DownloadRecordingResponse> response = client.downloadRecording(downloadRecordingRequest);
        DownloadRecordingResponse resp = response.get();
        System.out.println(JSON.toJSONString(resp.getBody()));
        client.close();
    }

    @Test
    void DescribeJob() throws ExecutionException, InterruptedException {
        StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
                .accessKeyId(accessKeyId)
                .accessKeySecret(accessKeySecret)
                .build());

        AsyncClient client = AsyncClient.builder()
                .region("cn-shanghai") // Region ID
                .credentialsProvider(provider)
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                // Endpoint 请参考 https://api.aliyun.com/product/OutboundBot
                                .setEndpointOverride("outboundbot.cn-shanghai.aliyuncs.com")
                )
                .build();

        DescribeJobRequest describeJobRequest = DescribeJobRequest.builder()
                .instanceId("58f1a15a-a1be-4049-9f7e-7f324dd34e2a")
                .jobId("1753949510090-496a-9b94-eba402b3cd59")
                .build();

        CompletableFuture<DescribeJobResponse> response = client.describeJob(describeJobRequest);
        DescribeJobResponse resp = response.get();
        System.out.println(JSON.toJSONString(resp.getBody()));
        client.close();
    }

大概就是这样,instanceId 就是你创建的场景的id,其他的都是接口调用返回的数据。剩下的就是根据接口返回的数据,存储需要的内容,做自己的业务逻辑了。

 

posted @ 2025-07-31 17:30  Rolay  阅读(46)  评论(0)    收藏  举报