freeswitch 科大讯飞、百度的语音识别(asr、tts) 参考

FreeSwitch采用mrcp协议对接科大讯飞asr和tts以及对话系统 FreeSwitch采用mrcp协议对接科大讯飞asr和tts对接过程 阅读详情
AI摘要

博客介绍了基于freeswitch和科大讯飞的语音识别(asr)实现。给出了基于unimrcp的实现参考链接及代码示例,还介绍了基于mod_pocketsphinx模块实现,可自定义控制并对识别的pcm播放,同时给出测试代码及效果说明,还提及百度识别参考链接。

freeswitch 科大讯飞 语音识别(asr) 具体参考:

(如果你觉得实现下面麻烦可以到 https://item.taobao.com/item.htm?id=620078442889哦)

https://github.com/wangkaisine/mrcp-plugin-with-freeswitch/blob/master/README.md

1.asr写的很详细

2.tts使用方式

<extension name="unimrcp"> 
<condition field="destination_number" expression="^8520$">  

<action application="answer"/>

<action application="set" data="tts_engine=unimrcp:unimrcpserver-mrcp2"/>
 <action application="set" data="tts_voice=awb"/>
 <action application="sleep" data="500"/> 

 <action application="speak" data="李林您好我爱你"/>

 <action application="sleep" data="500"/> 
 <action application="lua" data="names.lua"/>
 </condition> </extension>

百度识别请参考https://ai.baidu.com/docs#/BICC-ASR-MrcpServer/top

创建应用注意权限

 

以上是基于unimrcp 的实现

以下基于mod_pocketsphinx 模块实现  主要实现switch_asr_interface_t 接口 

(如果你觉得实现麻烦可以到 https://item.taobao.com/item.htm?id=620078442889哦)

 此方式可以自定义控制 还可以对识别的pcm播放

  

测试

<extension name="asr">
      <condition field="destination_number" expression="^88888$">
        <action application="answer"/>
        <action application="log" data="===begin=="/>
        <action application="sleep" data="2000"/>
        <action application="log" data="ERR ===begin=="/>
        <action application="play_and_detect_speech" data="/usr/local/freeswitch/sounds/2.wav detect:pocketsphinx yes_no"/>
        <action application="log" data="===${detect_speech_result}"/> 
        <action application="sleep" data="2000"/>
      </condition>
    </extension>
play_and_detect_speech 如果播放声音不好的就播放个1s 静音 在次之前播放吧
效果

 

(如果你觉得实现麻烦可以到 https://item.taobao.com/item.htm?id=620078442889哦)

对此感兴趣的可以加群261074724 

基于FreeSWITCH 实现语音的形式向大模型提问,语音机器人回答,与灵积大模型对接 通义千问 这个项目是使用java 代码实现与灵积大模型对接,实现机器人问答功能。可以直接去github 上下载代码,填写apikey redis 账号密码等相关信息。 阅读详情

相关推荐

基于FreeSWITCH构建IVR呼叫中心:架构设计与实战指南

交互式语音应答(IVR)系统是现代呼叫中心和客户服务自动化的核心技术,它通过语音菜单和按键导航,实现7x24小时不间断的客户自助服务,大幅提升服务效率与体验。其核心原理在于将电话信令、媒体流与业务逻辑解耦,通过事件驱动模型响应呼叫流程。在技术实现上,开源软交换平台FreeSWITCH凭借其强大的媒体处理能力、模块化设计及对SIP等协议的原生支持,成为构建高定制化、成本可控IVR系统的理想技术选型。结合事件套接字库(ESL)进行实时事件监听与控制,开发者可以灵活设计IVR流程引擎,实现从基础语音播报、收号导航

afeyfre41671的博客 527

基于Freeswitch对接免费的ASR语音识别引擎

目前大部分的只能呼叫中心系统都对接了ASR语音识别引擎,主流的识别引擎有科大讯飞,阿里,百度等大厂的产品,价格不菲,有没有什么免费的引擎可以使用呢,答案是肯定的。

shanghaimoon的专栏 5712

基于FreeSWITCH的智能电话机器人:从配置到实战应用

本文详细介绍了基于FreeSWITCH开源平台从零搭建智能电话机器人的完整流程。内容涵盖环境配置、SIP网关与拨号计划设置,并重点阐述了如何通过HTTP API将FreeSWITCH与后端AI引擎(ASR/NLU/TTS)解耦集成,实现灵活可控的智能外呼与客服应用,同时兼顾数据安全与成本效益。

brown的博客 635

freeswitch智能语音开发之ASR

ASR(Automatic Speech Recognition)自动语音识别技术是一种将人的语音转换为文本的技术。一、freeswitch如何使用asrfreeswitch提供两个app功能detect_speech和play_and_detect_speech给用户调用,detect_speech是异步的,play_and_detect_speech是同步的。1、detect_speech1.1语法:mod_name: 识别模块名称 如ali_asr[:params],其中params是param1=v

飞鸟的博客 7119

freeswitch对接讯飞语音识别模块

freeswitch对接讯飞语音识别模块

Freeswitch集成科大讯飞及百度语音服务.docx

Freeswitch集成科大讯飞及百度语音服务,Freeswitch集成科大讯飞及百度语音服务,Freeswitch集成科大讯飞及百度语音服务

freeswitch语音识别一系列干货

转载 https://blog.youkuaiyun.com/qq_16633405/article/details/87920034 文章目录 1、使用Pocket Sphinx进行英文语音识别 2、PocketSphinx语音识别系统语言模型的训练和声学模型的改进 3、PocketSphinx语音识别系统的编译、安装和使用 4、FS之play_and_detect_speech模块 5、一些开源的语音识别...

irizhao的专栏 4911

freeswitch基于阿里云的的语音识别检测模块

本模块已经编译好了 可以直接使用 也有源码在里面 对freeswitch的空号识别有兴趣 已经想学习编写freeswitch模块的人 可以下载看看

EasyMrcp——集成ASR/TTS的mrcp服务器

欢迎使用EasyMrcp!EasyMrcp使用java编写,目前提供了多种不同的asr和tts的集成,做到真正简单使用MRCP。可直接替代UniMrcp,部分功能正在完善中.......

探索mrcp 1786

PMAC上位机通信原理(C#)

基础是引用 两个 ODT dll 原理是先注册到communication.AsyncDataAvailable事件中去 if (bSuccess1) { communication.AsyncDataAvailable += communication_AsyncDataAvailable; } bool bSuccess2 = communication1.GPAsciiConnect(strIP, iPort, strName, strPassword); i

weixin_45507349的博客 1086

android11-修改屏幕显示方向和触摸方向

参数0表示12点钟方向显示参数90表示3点钟方向显示参数180表示6点钟方向显示参数270表示9点钟方向显示。

Paper_Love的博客 2118

源码安装部署除了freeswitch外,智能电话机器人核心技术:ASR

随着人工智能科技的发展,市场上也出现了越来越多的应用,光是人工智能语音识别系列的产品就非常多了,例如电话机器人、早教机器人、智能音响等等。其中大部分应用产品都是陪伴或者娱乐性质为主,而智能电话机器人是一款营销类产品,可以用于电销企业节约大量人力成本,提升工作效率。 智能电话机器人是基于ASR、NLP、TTS等技术开发的一款人机交互的语音系统,可以智能的与客户交流,回答客户的问题,声音也是真人语音。如此强大的功能归功于人工智能的发展及技术的支持,今天小编就给大家介绍一下其中一项核心技术:ASR。 什么是ASR

AI_wx_3307623172的博客 784

2024高项范文-论项目成本管理

例如,在需求分析和设计阶段,安排了较多经验丰富的人员,确保基础工作的高质量完成,同时也避免了后续因需求变更等问题导致的时间和成本浪费。虽然项目进度略有延迟,但通过有效的成本管理和调整,最终在可控的成本范围内完成了项目,并且软件的质量也得到了保障。通过这个案例可以看出,在项目成本管理过程中,要紧密结合时间管理,根据实际情况灵活调整策略,注重风险的防范和应对,才能实现时间和成本的平衡,确保项目的成功。资源规划是成本基准形成的基础。识别和评估项目中的成本风险,并制定相应的应对措施,以降低风险对项目成本的影响。

xjflion的博客 1188

电话机器人开发

电话机器人,也有人叫语音对话机器人,外呼机器人等,主要是通过ASR(语音识别)和TTS(文本转语音)模拟真人和用户通话,可用于问卷调查,自动催缴,外呼营销等业务,支持百度,科大,阿里云等ASR系统,可以真人预先录音,用户完全察觉不到是机器人。电话机器人和文本对话机器人的区别是,文本机器人是文字对话,电话机器人是语音对话。最近很火的chatgpt就是文本对话机器人。

FreeSWITCH二次开发-CTI接口 2063

SUMO仿真教程(1) ——安装环境的设置(Windows 10系统)

SUMO安装环境的设置 目录一.SUMO下载的官方网址二.下载步骤:三.环境设置:1.打开设置环境变量的界面2.用户(Administrator)变量设置3.系统变量设置四.总述 一.SUMO下载的官方网址 sumo的下载地址: 二.下载步骤: 1.以sumo1.8.0为示例进行演示,点击下载地址; 2.选择Windows64位的安装版本,如下图所示: 3.点击对应版本会跳转到如下图所示的界面,等待几秒后会自动下载(温馨提示:请将下载路径提前设置好): 4.到目标存储路径下查看下载完成的SUMO(本

weixin_50632459的博客 1万+

Gromacs实战:从蛋白质-小分子对接到分子动力学模拟全流程解析

本文详细解析了使用Gromacs进行蛋白质-小分子复合物分子动力学模拟的全流程。从处理AutoDock等对接软件的结果文件开始,逐步指导如何为蛋白质和小分子分别生成拓扑文件,并解决力场合并的核心挑战。文章涵盖了构建模拟盒子、添加溶剂离子、能量最小化、平衡模拟以及关键的轨迹分析步骤,为计算生物学和药物设计研究者提供了一套从静态对接到动态评估的完整实战指南。

weixin_29251337的博客 1218

智能电话机器人(AI语音机器人)时什么?

通过ASR(语音识别)和TTS(文本转语音)模拟真人和用户通话,可用于问卷调查,自动催缴等业务,电话咨询服务,支持百度,科大,阿里云,腾讯等ASR系统,可以真人预先录音,用户完全察觉不到是机器人。...

OKCC_kelaile520的博客 754

从想法到零件:手把手拆解一个汽车功能如何从PRD写到SSTS和CTS

本文详细拆解了汽车电子需求从市场文档(MRD)到零部件技术规范(CTS)的完整流程,以雨天自动关窗功能为例,展示了PRD、SSTS和CTS的编写要点与交互设计。文章重点解析了系统分解的艺术和零部件落地的精确参数要求,为汽车电子工程师提供了从概念到实现的全流程实践指南。

weixin_30300225的博客 480

AI辅助快速搭建FreeSWITCH电话系统:从环境配置到智能语音交互

在通信系统开发领域,软交换技术是实现语音、视频等实时通信的核心基础。其原理是通过软件控制信令与媒体流的交换,替代传统硬件交换机,从而实现灵活、可编程的通信服务。这项技术的价值在于大幅降低了通信系统的部署与运维成本,并支持快速集成各类增值业务。典型的应用场景包括企业IP电话系统、呼叫中心、智能IVR以及融合通信平台等。随着AI技术的普及,利用AI工具生成配置脚本和排查问题,已成为提升通信项目开发效率的新范式。本文聚焦于如何借助AI助手,快速完成FreeSWITCH这一主流开源软交换平台的部署、配置,并实现基础

weixin_34318272的博客 314

Jupyter Lab 无法启动 Kernel 问题排查与解决总结

使用 curl,telnet,或 Python websocket-client 库可以本地模拟 WebSocket 握手行为,帮助分析服务端响应状态。避免使用 http:// + ws:// 组合方式部署 Jupyter Lab,特别是在远程或跨域访问场景。建议统一采用 https:// + wss:// 方式部署,确保浏览器信任并兼容。确认 WebSocket 已升级为 wss://,内核可正常启动。但在远程访问时,浏览器出于安全策略,默认拒绝 ws:// 协议。

weixin_43866043的博客 1853

[Dify实战] 合同审阅助手:识别风险条款、生成修改建议-带绑定资源

摘要: Dify合同审阅助手通过AI技术提升合同审阅效率,快速识别风险条款并输出结构化修改建议。方案包括合同输入、关键条款识别、风险评级和报告生成流程,重点关注付款、责任限制等核心条款。采用分层风险分级(高/中/低)和"红线清单"机制,确保审阅标准化。实施建议先建立条款库和模板,通过样本测试优化模型,定期更新规则库。该方案可缩短审阅时间50%以上,提高风险识别准确率,最终实现法务经验的可复用沉淀。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 594

智能电话机器人介绍(AI语音机器人)

提供RESTful API接口,php,java,等任何语言都可以开发业务流程,也提供FreeSWITCH的原生接口mod_vad,使用esl或者lua,python,dialplan 等FreeSWITCH支持的二次开发接口,也可以通过SIP让其他软交换如Asterisk支持电话机器人功能。通过ASR(语音识别)和TTS(文本转语音)模拟真人和用户通话,可用于问卷调查,自动催缴等业务,电话咨询服务,支持百度,科大,阿里云,腾讯等ASR系统,可以真人预先录音,用户完全察觉不到是机器人。

w519021660 741

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

智能电话机器人(AI语音机器人)是什么

如果你们懂FreeSWITCH会ESL二次开发,就可以直接使用FreeSWITCH接口mod_vad进行业务逻辑开发,如果你们不懂FreeSWITCH,也不懂呼叫中心,也没关系,只需要会web开发就可以使用http接口RESTful API完成话术业务逻辑开发和web管理后台开发。通过ASR(语音识别)和TTS(文本转语音)模拟真人和用户通话,可用于问卷调查,自动催缴等业务,电话咨询服务,支持百度,科大,阿里云,腾讯等ASR系统,可以真人预先录音,用户完全察觉不到是机器人。支持真人预先录音和TTS放音。

m0_75193727的博客 387

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

电话机器人介绍

前言 随着人工智能的普及,AI渗透到各行各业,本文介绍了利用最前沿的AI技术实现电话机器人的原理。 什么是电话机器人 通过ASR(语音识别)和TTS(文本转语音)模拟真人和用户通话,可用于企业总机,问卷调查,自动催缴,外呼营销等业务,支持百度,科大,阿里云等ASR系统,可以真人预先录音,用户完全察觉不到是机器人。 如何开发一个电话机器人 FreeSWITCH/Asterisk是一...

FreeSWITCH二次开发-CTI接口 3780

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: java+OpenCV3 +百度OCR(或tesseract) 识别表格数据
下一篇: freeswitch conference命令解释(mod_ conference)
java_lilin
博客等级 码龄14年 364粉丝 124原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值