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实例 暂时不支持多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)的权限
在这里插入图片描述

三、完整代码

可点击此处下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/712605.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++面向对象程序设计 - 函数库

C语言程序中各种功能基本上都是由函数来实现的&#xff0c;在C语言的发展过程中建立了功能丰富的函数库&#xff0c;C从C语言继承了些函数功能。如果要用函数库中的函数&#xff0c;就必须在程序文件中包含文件中有关的头文件&#xff0c;在不同的头文件中&#xff0c;包含了不…

RabbitMQ实践——交换器(Exchange)绑定交换器

在《RabbitMQ实践——交换器&#xff08;Exchange&#xff09;和绑定&#xff08;Banding&#xff09;》一文中&#xff0c;我们实验了各种交换器。我们可以把交换器看成消息发布的入口&#xff0c;而消息路由规则则是由“绑定关系”&#xff08;Banding&#xff09;来定义&…

GitLab教程(二):快速上手Git

文章目录 1.将远端代码克隆到本地2.修改本地代码并提交到远程仓库3.Git命令总结git clonegit statusgit addgit commitgit pushgit log 首先&#xff0c;我在Gitlab上创建了一个远程仓库&#xff0c;用于演示使用Gitlab进行版本管理的完整流程&#xff1a; 1.将远端代码克隆到本…

快速构建本地RAG聊天机器人:使用LangFlow和Ollama实现无代码开发

基于LangChain的快速RAG应用原型制作方法 还记得构建智能聊天机器人需要数月编码的日子吗&#xff1f; LangChain这样的框架确实简化了开发流程&#xff0c;但对非程序员来说&#xff0c;数百行代码仍然是一道门槛。 有没有更简单的方法呢&#xff1f; 图片由 Ravi Palwe 在…

数字政协:迈向智慧时代,开启政协工作新篇章

在信息化浪潮席卷全球的今天&#xff0c;数字技术不仅改变了我们的生活方式&#xff0c;也深刻影响着政治生态的变革。其中&#xff0c;“数字政协”的崛起&#xff0c;正是新时代政协工作创新发展的重要标志。那么&#xff0c;什么是数字政协&#xff1f;它又将如何助力政协工…

[图解]建模相关的基础知识-09

1 00:00:01,350 --> 00:00:03,780 首先&#xff0c;我们来看一下什么叫关系 2 00:00:05,370 --> 00:00:08,990 这个关系跟下面说的这些关系 3 00:00:09,000 --> 00:00:10,390 它不是一个东西 4 00:00:11,110 --> 00:00:14,950 比如说&#xff0c;我们UML类图上&…

门控循环单元GRU与长短期记忆网络LSTM

门控循环单元与长短期记忆网络 门控隐状态 问题提出&#xff1a;对于一个序列来说不是每个观察值都是同等重要想只记住相关的观察需要&#xff1a; 能关注的机制&#xff08;更新门&#xff09;能遗忘的机制&#xff08;重置门&#xff09; 第一个词元的影响至关重要。 我们…

使用vuejs3时,报错:Uncaught (in promise)

解决&#xff1a; vite.config.js里 import {fileURLToPath, URL} from node:urlimport {defineConfig} from vite import vue from vitejs/plugin-vue// https://vitejs.dev/config/ export default defineConfig({resolve: {alias: {: fileURLToPath(new URL(./src, import…

LeetCode | 520.检测大写字母

这道题直接分3种情况讨论&#xff1a;1、全部都为大写&#xff1b;2、全部都为小写&#xff1b;3、首字母大写其余小写。这里我借用了一个全是大写字母的串和一个全为小写字母的串进行比较 class Solution(object):def detectCapitalUse(self, word):""":type …

通过Vue3+高德地图的JS API实现市区地图渲染

效果图: 核心代码: <script setup>import { onMounted, onUnmounted } from vue;import AMapLoader from @amap/amap-jsapi-loader;import { message } from ant-design-vue;import school from @/assets/icons/school.svg;import enterprise from @/assets/icons/ent…

pytest + yaml 框架 -61.jenkins+allure+钉钉通知添加测试结果

前言 上一篇pytest + yaml 框架 -60.git+jenkins+allure+钉钉通知反馈 已经实现测试结果用钉钉通知。 本篇继续在钉钉通知里添加测试的汇总结果,此功能在pytest-yaml-yoyo v1.5.2版本上实现。 Environment Injector 插件 在运行完用例后会生成一个summary.json 文件,汇总…

JAVA小知识20:万字详解List与ArrayList

一、集合简介 1.1、什么是集合&#xff1f; 可同时存储多个元素的数据结构就是集合。 1.2、为什么要有集合&#xff1f; 我们可以使用数组同时存储多个元素&#xff0c;但是数组有个弊端。数组创建之后长度就会固定&#xff0c;如需扩容则需要手动扩容&#xff0c;我们需要…

【计算机视觉】人脸算法之图像处理基础知识(四)

图像的几何变换 图像的几何变换是指在不改变图像内容的前提下对图像的像素进行空间几何变换。主要包括图像的平移变换、镜像变换、缩放和旋转等。 1.插值算法 插值通常用来放缩图像大小&#xff0c;在图像处理中常见的插值算法有最邻近插值法、双线性插值法、二次立方、三次…

中小制造业工厂要不要上MES系统

MES系统的主要功能包括制造数据管理、计划排产管理、生产调度管理、库存管理、质量管理、人力资源管理、工作中心/设备管理、工具工装管理、采购管理、成本管理、项目看板管理、生产过程控制、底层数据集成分析、上层数据集成分解等。通过这些模块&#xff0c;MES为企业打造一个…

【网络安全学习】使用Kali做渗透情报收集-01-<域名信息主机信息>

1.收集开源情报 开源情报(Open Source Intelligence&#xff0c;OSINT)是指从各种公开的渠道中寻找和获取有价值的信息 如&#xff1a;互联网、媒体、社交网络、公共数据库等开源情报具有以下特点&#xff1a; - 丰富性&#xff1a;开源情报涵盖了各种类型和领域的信息 - 可…

【学习】什么样的软件测试项目适合做自动化测试

随着科技的发展和社会的进步, 软件行业也在不断地壮大和发展。在这个过程中&#xff0c;软件测试变得越来越重要&#xff0c;并且成为了保证软件质量的关键环节。而自动化测试作为软件测试的一种方法&#xff0c;在提高测试效率、降低人力成本等方面具有显著的优势。那么什么样…

SpringBoot集成mqtt上下线提醒功能设计

目录 1.首先安装emqx&#xff0c;去官网下载emqx压缩包&#xff0c;并且解压。 2.使用emqx start 命令启动emqx后台管理 3.下载mqttx调试工具&#xff0c;使用mqttx调试mqtt连接。下载地址:MQTTX下载-MQTTX官方版下载,下载完成直接打开&#xff0c;便可进行mqtt连接调试 4.…

超详解——Python 字典详解——小白篇

目录 1. 创建字典 示例&#xff1a; 2. 访问字典中的元素 示例&#xff1a; 3. 修改字典元素 示例&#xff1a; 4. 删除字典元素 示例&#xff1a; 5. 查找元素是否是字典的键 示例&#xff1a; 6. 标准类型操作符 获取字典长度 合并两个字典 7. 常用内置函数 k…

el-table表头修改文字或者背景颜色,通过header-row-style设置样式

方式一 <el-table :header-cell-style"{text-align: center}" />方式二 <template><el-table :header-cell-style"tableHeaderColor" /> </template> <script> export default {methods: {tableHeaderColor ({row, column…

socket收发数据的处理

1. TCP 协议是一种基于数据流的协议 Socket的Receive方法只是把接收缓冲区的数据提取出来,当系统的接收缓冲区为空,Receive方法会被阻塞,直到里面有数据。 Socket的Send方法只是把数据写入到发送缓冲区里,具体的发送过程由操作系统负责。当操作系统的发送缓冲区满了,Send方法会…