SpringBoot 实现 阿里云语音通知(SingleCallByTts)

目录

一、准备工作

  • 注册阿里云账号并完成企业实名认证
  • 已开通语音服务
  • 申请企业资质并审核通过。
  • 若选用专属模式外呼则需要真实号管理若选用公共模式外呼(推荐使用)由阿里云提供统一的号码池,您无需自行购买号码
  • 创建语音通知模板
  • 调用API接口前,您可以根据API文档了解接口说明,并查询必选的请求参数。发送请求后报错时,您可以在相应API文档中获取说明

1.开通 阿里云语音服务

登录阿里云官网,选择产品 > 企业服务与云通信 > 语音服务:

单击立即开通(语音服务开通):

2.申请企业资质

语音服务 开通 之后,申请企业资质:

3.创建语音通知模板,审核通过

4.调用API接口---SingleCallByTts

SingleCallByTts

5.调试API接口---SingleCallByTts

SingleCallByTts

二、代码实现

SingleCallByTts:发送 文本转语音类型的语音通知

1.导入依赖 com.aliyun:aliyun-java-sdk-dyvmsapi:3.0.2

xml 复制代码
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>3.2.5</version>
</dependency>

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-dyvmsapi</artifactId>
    <version>3.0.2</version>
</dependency>

2.创建工具类,用于发送语音通知

java 复制代码
package com.example.notificationdemo.util;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dyvmsapi.model.v20170525.SingleCallByTtsRequest;
import com.aliyuncs.dyvmsapi.model.v20170525.SingleCallByTtsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import lombok.extern.slf4j.Slf4j;

/**
 * 阿里云 语音通话 --- 根据文本转语音模板进行语音通话
 * @author qzz
 * @date 2024/6/14
 */
@Slf4j
public class AliyunVoiceClientUtil {

    private  String accessKeyId = "你的阿里云Key";
    private  String accessKeySecret = "你的阿里云Secret";

    /**
     * 语音通话到某个用户
     * @param phoneNumber 被叫号码
     * @param ttsParam 语音模板中的变量参数---请按模版参数有序存入
     * @param ttsCode Tts模板ID
     * @return
     */
    public SingleCallByTtsResponse sendSingleCallToUser(String phoneNumber, String ttsCode, String ttsParam, String outId) throws ClientException {
        //1.初始化acsClient实例 暂时不支持多region
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
        DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", "Dyvmsapi", "dyvmsapi.aliyuncs.com");
        IAcsClient acsClient = new DefaultAcsClient(profile);

        //2.创建请求并设置参数
        SingleCallByTtsRequest request = new SingleCallByTtsRequest();
        //必填-被叫号码
        request.setCalledNumber(phoneNumber);
        //必填-Tts模板ID
        request.setTtsCode(ttsCode);
        //语音模板中的变量参数 示例:{"name":"123456","rainfall":50}
        request.setTtsParam(ttsParam);
        //可选-音量 取值范围 0--100 默认取值 100
        request.setVolume(100);
        //可选-播放次数 默认取3
        request.setPlayTimes(3);
        //可选-语音通话的语速。取值范围为:-500~500
        request.setSpeed(5);
        //可选-外部扩展字段,此ID将在回执消息中带回给调用方
        request.setOutId(outId);

        //3.发送请求并获取响应
        SingleCallByTtsResponse singleCallByTtsResponse = acsClient.getAcsResponse(request);
        if(singleCallByTtsResponse.getCode() != null && singleCallByTtsResponse.getCode().equals("OK")) {
            //请求成功
            log.info("processing sendCVoice success!RequestId = %s , Code = %s , phone = %s",
                    singleCallByTtsResponse.getRequestId(), singleCallByTtsResponse.getCode(), phoneNumber);
        }
        return singleCallByTtsResponse;
    }
}

3.在你的业务逻辑中调用AliyunVoiceClientUtil 发送语音通知。

java 复制代码
package com.example.notificationdemo.controller;

import com.aliyuncs.exceptions.ClientException;
import com.example.notificationdemo.util.AliyunVoiceClientUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author qzz
 * @date 2024/6/14
 */
@RestController
public class TestController {

    @Autowired
    private AliyunVoiceClientUtil aliyunVoiceClientUtil;

    /**
     * 发送语音通话
     * @param phoneNumber 被叫手机号
     * @param ttsCode Tts模板ID
     * @param ttsParam 语音模板中的变量参数---请按模版参数有序存入
     * @param outId 可选-外部扩展字段,此ID将在回执消息中带回给调用方
     * @return
     */
    @PostMapping(value = "/api/{version}/send/single-call/")
    public void sendSingleCall(@RequestParam("phoneNumber") String phoneNumber, @RequestParam("ttsCode") String ttsCode,
                               @RequestParam("ttsParam") String ttsParam,
                               @RequestParam(value = "outId", required = false) String outId) throws ClientException {

        aliyunVoiceClientUtil.sendSingleCallToUser(phoneNumber,ttsCode,ttsParam,outId);

    }
}

注意:
使用 accessKeyId、accessKeySecret 需要 授权 管理语音服务(VMS)的权限

三、完整代码

可点击此处下载

相关推荐
霸道流氓气质11 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
于先生吖11 小时前
SpringBoot对接大模型开发AI命理测算系统:八字排盘与AI解析接口源码全解
人工智能·spring boot·后端
小小工匠12 小时前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
Flittly12 小时前
【AgentScope Java新手村系列】(10)实战-多Agent天气助手
java·spring boot·spring
Inhand陈工12 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Database_Cool_14 小时前
什么是数据仓库物化视图?AnalyticDB MySQL 实时物化视图能力解析
人工智能·mysql·阿里云
星落zx14 小时前
Spring Boot 多模型集成:优雅调用全球主流大模型
人工智能·spring boot·chatgpt
Database_Cool_14 小时前
大规模数据分析降本指南:AnalyticDB Serverless 弹性架构实战
数据仓库·阿里云·架构·数据分析·serverless
一杯奶茶¥15 小时前
水果销售网站 CRM客户信息管理系统 超市管理系 酒店管理系统 健身房管理系统 在线音乐网站 校园招聘系统
java·vue.js·spring boot·mysql·spring·java项目
进阶的小名16 小时前
Spring Boot SSE + Nginx 配置:解决 EventSource 不实时返回、连接超时、流式响应被缓冲问题
spring boot·后端·nginx