SpringBoot 实现 阿里云语音通知(SingleCallByTts)
目录
- 一、准备工作
- 1.开通 阿里云语音服务
- 2.申请企业资质
- 3.创建语音通知模板,审核通过
- 4.调用API接口---SingleCallByTts
- 5.调试API接口---SingleCallByTts
- 二、代码实现
- 1.导入依赖 com.aliyun:aliyun-java-sdk-dyvmsapi:3.0.2
- 2.创建工具类,用于发送语音通知
- 3.在你的业务逻辑中调用AliyunVoiceClientUtil 发送语音通知。
- 三、完整代码
一、准备工作
- 注册阿里云账号并完成企业实名认证。
- 已开通语音服务。
- 申请企业资质并审核通过。
- 若选用专属模式外呼则需要真实号管理;
若选用公共模式外呼(推荐使用),由阿里云提供统一的号码池,您无需自行购买号码 - 创建语音通知模板
- 调用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.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.创建工具类,用于发送语音通知
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实例 暂时不支持多regionDefaultProfile 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模板IDrequest.setTtsCode(ttsCode);//语音模板中的变量参数 示例:{"name":"123456","rainfall":50}request.setTtsParam(ttsParam);//可选-音量 取值范围 0--100 默认取值 100request.setVolume(100);//可选-播放次数 默认取3request.setPlayTimes(3);//可选-语音通话的语速。取值范围为:-500~500request.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 {@Autowiredprivate 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)的权限

三、完整代码
可点击此处下载
相关文章:
SpringBoot 实现 阿里云语音通知(SingleCallByTts)
目录 一、准备工作1.开通 阿里云语音服务2.申请企业资质3.创建语音通知模板,审核通过4.调用API接口---SingleCallByTts5.调试API接口---SingleCallByTts 二、代码实现1.导入依赖 com.aliyun:aliyun-java-sdk-dyvmsapi:3.0.22.创建工具类,用于发送语音通知…...
IDEA 连接GitHub仓库并上传项目(同时解决SSH问题)
目录 1 确认自己电脑上已经安装好Git 2 添加GitHub账号 2.1 Setting -> 搜索GitHub-> ‘’ -> Log In with Token 2.2 点击Generate 去GitHub生成Token 2.3 勾选SSH后其他不变直接生成token 2.4 然后复制token添加登录账号即可 3 点击导航栏中VCS -> Create…...
vue/react/js 常用的原生获取当前页面的url网址的相关方法
目录 第一章 场景 第二章 总结 第一章 场景 最近实现需求时遇到这么一种情况: 本地url —— 线上url —— 需求:需要将token清除掉 注意事项:token不是#/后面的参数,说明并不是我们前端返回的,vue路由的方法使用不…...
java-final 关键字
## Java中的final关键字 ### 1. final关键字的基本概念 final是Java中一个非常重要的关键字,用于声明常量、阻止继承和重写,确保类、方法和变量的不可变性。具体来说,final关键字可以用来修饰类、方法和变量(包括成员变量和局部…...
ARM32开发--IIC软实现
知不足而奋进 望远山而前行 目录 文章目录 前言 开发流程 GD32F4软件I2C初始化 GD32F4软件I2C引脚功能 写操作 读操作 总结 前言 在嵌入式系统开发中,软件实现的I2C通信协议扮演着至关重要的角色。本文将深入探讨如何在GD32F4系列微控制器上实现软件I2C功能…...
在有向无环图(DAG)中实现拓扑排序与最短路径和最长路径算法
有向无环图(DAG)是一类非常重要的图结构,广泛应用于任务调度、数据依赖分析等领域。本文将介绍如何在DAG中实现拓扑排序、单源最短路径和单源最长路径算法,并提供完整的Java代码示例。 图结构定义 首先,我们定义一个…...
SQLServer按照年龄段进行分组查询数据
1.按照年龄段对数据进行分组, 将人群分为:青年,中年,老年三种类型,人群类型加上其他分组字段如:性别,进行多条件分组,统计各个年龄段多少人 Select case sex when 1 then ‘男’ when 2 then …...
开放式耳机哪个品牌质量比较好?2024高性价比机型推荐!
随着音乐技术的不断发展,开放式耳机已成为音乐发烧友们的另外一种选择。从最初的简单音质,到如今的高清解析,开放式耳机不断进化升级。音质纯净,佩戴舒适,无论是街头漫步还是家中放松时候,都能带给你身临其…...
Blender骨骼创建
骨骼系统 建立 使用Shift A添加骨骼或在添加|骨架中添加一段骨骼 骨骼的三种模式 -物体模式:做动画,摆人物pose时在该模式 -编辑模式:进行骨骼搭建(选择一段骨骼,然后按E挤出一段骨骼并进行调整) -姿…...
DevExpress WPF中文教程:Grid - 如何完成列和编辑器配置(设计时)?
DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…...
高考完的三个月想自学点编程,有没有什么建议
👆点击关注 获取更多编程干货👆 对于刚刚完成高考的学生来说,无论未来是否选择计算机科学作为专业方向,自学编程技能是一项非常有价值的投资,掌握编程知识能够帮助同学们为将来的学习和科研 实践奠定一个基础。 随着…...
运维开发(DevOps):加速软件交付的关键方法
1. 什么是运维开发 运维开发(DevOps)是将软件开发(Development)与信息技术运维(Operations)的流程整合在一起的实践方法。DevOps的目标是通过增强开发和运维团队之间的协作,提高软件产品的发布…...
Vue前端环境搭建:从四个方面、五个方面、六个方面和七个方面深度解析
Vue前端环境搭建:从四个方面、五个方面、六个方面和七个方面深度解析 在构建Vue.js项目时,搭建一个稳定且高效的前端环境至关重要。这不仅关乎项目的顺利推进,更直接影响开发者的效率和代码质量。本文将从四个方面、五个方面、六个方面和七个…...
农业领域科技查新点提炼方法附案例!
农业学科是人类通过改造和利用生物有机体(植物、动物、微生物等)及各种自然资源(光、热、水、土壤等)生产出人类需求的农产品的过程,人类在这一过程中所积累的科学原理、技术、工艺和技能,统称为农业科学技术,该领域具有研究范围广、综合性强…...
【Bazel入门与精通】 rules之属性
https://bazel.build/extending/rules?hlzh-cn#attributes Attributes An attribute is a rule argument. Attributes can provide specific values to a target’s implementation, or they can refer to other targets, creating a graph of dependencies. Rule-specifi…...
Elementor无需第三方插件实现高级下拉菜单/巨型菜单
使用新的嵌套功能创建美观的菜单和大型菜单。巨型菜单是具有复杂导航结构和独特设计的网站的理想选择。 Elementor-设置-特性-Menu启用 之后再去前端编辑器设计即可,就会有一个新的menu菜单模块了。 这个菜单的下拉则是通过Elementor直接来设计,也就以为…...
【数学】什么是傅里叶变换?什么是离散傅里叶变换?什么是拉普拉斯变换?
文章目录 什么是傅里叶变换?什么是离散傅里叶变换?什么是拉普拉斯变换?背景公式示例题目详细讲解Python代码求解实际生活中的例子 什么是线性时不变系统线性性(Linearity)时不变性(Time-Invariance…...
opencv安装笔记 各种平台
目录 python安装opencv-python c 麒麟arm系统安装和用法 python安装opencv-python pypi上搜索 Search results PyPI 现在安装是一个版本,大于3.6都可以安装 c 麒麟arm系统安装和用法 参考: ffmpeg rknn麒麟系统 安装 opencv_ffmpeg4 解码示例-CSDN…...
前端开发中的热更新原理
一、什么是热更新 热更新(Hot Module Replacement,HMR)是一种在前端开发中极为重要的技术。它允许开发者在不重新加载整个页面的情况下,实时更新应用程序中的某些模块。简单来说,热更新能让你在开发过程中即时看到代码…...
unix环境高级编程第2版:深入探索UNIX编程的奥秘
unix环境高级编程第2版:深入探索UNIX编程的奥秘 在数字世界的浩瀚海洋中,UNIX环境以其稳定、高效和灵活的特性,一直备受程序员们的青睐。而《unix环境高级编程第2版》这本书,无疑是探索UNIX编程奥秘的绝佳指南。接下来࿰…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
