• 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

    <dependency>
        <groupId>com.aliyungroupId>
        <artifactId>aliyun-java-sdk-coreartifactId>
        <version>3.2.5version>
    dependency>
    
    <dependency>
        <groupId>com.aliyungroupId>
        <artifactId>aliyun-java-sdk-dyvmsapiartifactId>
        <version>3.0.2version>
    dependency>
    

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

    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 发送语音通知。

    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)的权限
    在这里插入图片描述

    三、完整代码

    可点击此处下载

  • 相关阅读:
    浅谈Vue组件开发几个原则
    目标检测 YOLOv3 基本思想
    信息检索度量指标(MAP@N, P@N)
    康耐视VisionPro 9.0 R2破解安装教程
    代码随想录-024-454.四数相加 II
    人工智能知识全面讲解:多层神经网络与误差逆传播算法
    【计算机网络】运输层习题(谢希仁)(1)
    小程序开发平台源码系统+ 带前后端完整搭建教程
    被誉为“芯片之母”,中国团队拿下EDA全球冠军,平均年龄24岁
    Easy Future亮点集锦|品牌升级,加速产业数字化
  • 原文地址:https://blog.csdn.net/qq_26383975/article/details/139673720