阿里云外呼机器人对接记录
最近公司要做一个外呼机器人相关的功能,这里做个记录。
1、阿里云控制台开通智能外呼机器人,必须要企业账号才行。
2、外呼号码申请,这里可以是客户自己的,也可以买三方的,我们这边是购买的三方的。在阿里云控制台填写申请单,后续有人对接。
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,其他的都是接口调用返回的数据。剩下的就是根据接口返回的数据,存储需要的内容,做自己的业务逻辑了。
本文来自博客园,作者:Rolay,转载请注明原文链接:https://www.cnblogs.com/rolayblog/p/19015604