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编程奥秘的绝佳指南。接下来࿰…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
TCP/IP 网络编程 | 服务端 客户端的封装
设计模式 文章目录 设计模式一、socket.h 接口(interface)二、socket.cpp 实现(implementation)三、server.cpp 使用封装(main 函数)四、client.cpp 使用封装(main 函数)五、退出方法…...
统计学(第8版)——统计抽样学习笔记(考试用)
一、统计抽样的核心内容与问题 研究内容 从总体中科学抽取样本的方法利用样本数据推断总体特征(均值、比率、总量)控制抽样误差与非抽样误差 解决的核心问题 在成本约束下,用少量样本准确推断总体特征量化估计结果的可靠性(置…...
6.9本日总结
一、英语 复习默写list11list18,订正07年第3篇阅读 二、数学 学习线代第一讲,写15讲课后题 三、408 学习计组第二章,写计组习题 四、总结 明天结束线代第一章和计组第二章 五、明日计划 英语:复习l默写sit12list17&#…...
