1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 实例:用C#.NET手把手教你做微信公众号开发(5)--普通消息处理之语音

实例:用C#.NET手把手教你做微信公众号开发(5)--普通消息处理之语音

时间:2021-10-01 02:33:03

相关推荐

实例:用C#.NET手把手教你做微信公众号开发(5)--普通消息处理之语音

本篇讲解微信客户端向公众号发送语音的处理方式。

语音消息常见应用:

在线翻译,不同语言之间的翻译;

代替文本输入方式;

语音处理,比如变更声调、插入或剪辑语音片段等;

收集客户的语音教学或说书录音,打造自己的在线语音教学等等。

反正是能对语音做处理的,你都能做,只要你有足够的语音处理知识。

用户发送的图片,经微信服务器处理后,形成如下XML格式发到你的服务器:

<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1357290913</CreateTime><MsgType><![CDATA[voice]]></MsgType><MediaId><![CDATA[media_id]]></MediaId><Format><![CDATA[Format]]></Format><MsgId>1234567890123456</MsgId></xml>

上面信息中各个关键字解释如下:

注意,开通语音识别后,用户每次发送语音给公众号时,微信会在推送的语音消息XML数据包中,增加一个Recognition字段,内容是微信服务器对语音翻译后的文字(注:由于客户端缓存,开发者开启或者关闭语音识别功能,对新关注者立刻生效,对已关注用户需要24小时生效。开发者可以重新关注此帐号进行测试)。开启语音识别后的语音XML数据包如下:

微信公众号开通语音识别功能操作截图如下:

开启后微信服务器发送的xml消息格式如下:

在接收到微信服务器发来的内容之后,首先由指定的接口网页AccessWx.aspx对信息类型进行判别,然后交给指定的消息处理类处理和回应。在本系列文章第1篇介绍的AccessWx.aspx.cs中完善下面这一段,增加本篇给出的语音消息处理环节。

else if(MsgType == "voice"){//对用户发送的语音消息处理,使用QinMing.Weixin.MessageHandlerVoice命名空间下的VoiceMessageDeal类VoiceMessageDeal imd = new VoiceMessageDeal();Response.Write(imd.DealResult(weixinXML));}

在命名空间QinMing.Weixin.MessageHandlerVoice下新建一个类VoiceMessageDeal,用来处理微信服务器发来的语音消息。记得类源码文件要放在App_Code目录下!

QinMingWeixinMessageHandlerVoice.cs文件内容如下:

using System;using System.Web;using System.Xml;using System.Text;using System.IO;using System.Drawing;using System.Drawing.Imaging;using ;using QinMing.Config;using QinMing.Weixin.ReturnContent;using QinMing.WeixinContainer;//using QinMing.WeixinSendTemplateMessage;//using QinMing.Tools;namespace QinMing.Weixin.MessageHandlerVoice{//图片消息处理public class VoiceMessageDeal :System.Web.UI.Page{public string DealResult(string weixinXML){string content = DealVoice(weixinXML); return content;}public string DealVoice(string weixinXML){XmlDocument doc = new XmlDocument();doc.LoadXml(weixinXML);XmlNodeList list = doc.GetElementsByTagName("xml");XmlNode xn = list[0];string FromUserName = xn.SelectSingleNode("//FromUserName").InnerText; //关注用户的加密后openidstring ToUserName = xn.SelectSingleNode("//ToUserName").InnerText; //公众微信号原始IDstring MsgType = xn.SelectSingleNode("//MsgType").InnerText;string MediaId = xn.SelectSingleNode("//MediaId").InnerText.ToString().Trim();string Format = xn.SelectSingleNode("//Format").InnerText.ToString().Trim();string Recognition = xn.SelectSingleNode("//Recognition").InnerText.ToString().Trim();string strresponse = "";//保存用户发来的语音文件,并把发送记录写入数据库用于后期分析DownloadFileByMediaId(FromUserName, MediaId, Format); //引用QinMing.Weixin.ReturnContent命名空间下的ReturnMsg类来生成固定格式的回应消息ReturnMsg rm = new ReturnMsg();strresponse = rm.ReturnText(FromUserName, ToUserName, "您刚发的语音翻译后的文字为:" + Recognition);//strresponse = rm.ReturnVoice(FromUserName, ToUserName, MediaId); //向微信用户发送其自己发的语音内容//告知客服人员有新的留言,或者启动客服消息管理工单流程//QinMingWeixinSendTemplateMessage SendTempMsg = new QinMingWeixinSendTemplateMessage();//SendTempMsg.SendTempMsgRemind("管理员的openid", "客户发送语音内容:" + Recognition, ""); return strresponse; }//使用MediaId加基础access_token从微信服务器下载语音文件public void DownloadFileByMediaId(string FromUserName, string MediaId, string Format){//获取普通基础access_tokenQinMingWeixinContainer wc = new QinMingWeixinContainer();string access_token = wc.GetAccessToken();string imgurl = "";string TmpDir = "E:\\web\\Voice\\Upload\\";string TmpFileName = FromUserName + DateTime.Now.Ticks.ToString() + "." + Format;//从微信服务器下载语音文件到本地string strUrl = "https://api./cgi-bin/media/get?access_token=" + access_token + "&media_id=" + MediaId; .WebClient webClient = new .WebClient();webClient.DownloadFile(strUrl, TmpDir + TmpFileName);//QinMingTools.WriteLog("用mediaid从微信服务器获取语音", strUrl);//此处可以添加用户发送语音保存到数据库记录处理,用于对粉丝进行行为分析,以及使用客户发送的语音文件}}}

演示结果如下:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。