国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

C#開發(fā)微信門戶及應(yīng)用(12)-使用語音處理

2019-11-17 03:08:18
字體:
供稿:網(wǎng)友

C#開發(fā)微信門戶及應(yīng)用(12)-使用語音處理

我們知道,微信最開始就是做語音聊天而使得其更加流行的,因此語音的識別處理自然也就成為微信交流的一個重要途徑,微信的開發(fā)接口,也提供了對語音的消息請求處理。本文主要介紹如何利用語音的識別,對C#開發(fā)的微信門戶應(yīng)用的整個事件鏈的處理操作,使得在我們的微信賬號里面,更加方便和多元化對用戶的輸入進行處理。

1、微信語音接口的定義0

微信的API這么定義語音的識別的:開通語音識別功能,用戶每次發(fā)送語音給公眾號時,微信會在推送的語音消息xml數(shù)據(jù)包中,增加一個Recongnition字段

語音的消息格式如下所示。

<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>
參數(shù)描述
ToUserName開發(fā)者微信號
FromUserName發(fā)送方帳號(一個OpenID)
CreateTime消息創(chuàng)建時間 (整型)
MsgType語音為voice
MediaId語音消息媒體id,可以調(diào)用多媒體文件下載接口拉取數(shù)據(jù)。
Format語音格式,如amr,speex等
MsgID消息id,64位整型

根據(jù)以上微信接口的定義,我們可以定義一個實體類來對消息的傳遞進行處理,如下所示。

    /// <summary>    /// 接收的語音消息    /// </summary>    [System.Xml.Serialization.XmlRoot(ElementName = "xml")]    public class RequestVoice : BaseMessage    {        public RequestVoice()        {            this.MsgType = RequestMsgType.Voice.ToString().ToLower();        }        /// <summary>        /// 語音格式,如amr,speex等        /// </summary>        public string Format { get; set; }        /// <summary>        /// 語音消息媒體id,可以調(diào)用多媒體文件下載接口拉取數(shù)據(jù)。        /// </summary>        public string MediaId { get; set; }          /// <summary>        /// 消息ID        /// </summary>        public Int64 MsgId { get; set; }        /// <summary>        /// 語音識別結(jié)果,UTF8編碼        /// </summary>        public string Recognition  { get; set; }    }

我們看到,這里我們最感興趣的是語音的識別結(jié)果,也就是Recognition的字段,這個就是微信服務(wù)器自動根據(jù)用戶的語音轉(zhuǎn)換過來的內(nèi)容,我測試過,識別率還是非常高的。

這個實體類,在整個微信應(yīng)用的消息傳遞中的關(guān)系如下所示:

2、語音的處理操作

明確了上面的語音對象實體,我們就可以看看它們之間是如何處理的。

微信消息的處理邏輯如下圖所示。

其中我們來看看語音的處理操作,我的代碼處理邏輯如下所示。

        /// <summary>        /// 對語音請求信息進行處理        /// </summary>        /// <param name="info">語音請求信息實體</param>        /// <returns></returns>        public string HandleVoice(Entity.RequestVoice info)        {            string xml = "";            // 開通語音識別功能,用戶每次發(fā)送語音給公眾號時,            // 微信會在推送的語音消息XML數(shù)據(jù)包中,增加一個Recongnition字段。            if (!string.IsNullOrEmpty(info.Recognition))            {                TextDispatch dispatch = new TextDispatch();                xml = dispatch.HandleVoiceText(info, info.Recognition);            }            else            {                xml = "";            }            return xml;        }

在這里,我先看看,是否獲得了微信的語音識別結(jié)果,如果獲得,那么這個時候,就是和處理用戶文本輸入的操作差不多了,因此把它轉(zhuǎn)給TextDispatch的處理類進行處理。

其中這里面的處理邏輯如下所示。

首先我根據(jù)識別結(jié)果,尋找是否用戶讀出了微信門戶的菜單名稱,如果根據(jù)語音結(jié)果找到對應(yīng)的菜單記錄,那么我們執(zhí)行菜單事件(如果是URL的View類型菜單,我們沒辦法重定向到指定的鏈接,因此給出一個鏈接文本提示,給用戶單擊進入;如果沒有找到菜單記錄,那么我們就把語音識別結(jié)果作為一般的事件進行處理,如果事件邏輯沒有處理,那么我們最后給出一個默認的語音應(yīng)答提示結(jié)果就可以了。

具體的處理代碼如下所示。

        /// <summary>        /// 如果用戶用語音讀出菜單的內(nèi)容,那么我們應(yīng)該先根據(jù)菜單對應(yīng)的事件觸發(fā),最后再交給普通事件處理        /// </summary>        /// <param name="info"></param>        /// <returns></returns>        public string HandleVoiceText(BaseMessage info, string voiceText)        {            string xml = "";            MenuInfo menuInfo = BLLFactory<Menu>.Instance.FindByName(voiceText);            if (menuInfo != null)            {                #region 如果找到菜單對象的處理                if (menuInfo.Type == "click")                {                    //模擬單擊事件                    RequestEventClick eventInfo = new RequestEventClick();                    eventInfo.CreateTime = info.CreateTime;                    eventInfo.EventKey = menuInfo.Key;                    eventInfo.FromUserName = info.FromUserName;                    eventInfo.ToUserName = info.ToUserName;                    xml = base.DealEvent(eventInfo, eventInfo.EventKey);                }                else                {                    //由于無法自動切換到連接,                    //轉(zhuǎn)換為連接文本供用戶進入                    string content = string.Format("請單擊鏈接進入<a href=/"{0}/">{1}</a> ", menuInfo.Url, menuInfo.Name);                    ResponseText textInfo = new ResponseText(info);                    textInfo.Content = content;                    xml = textInfo.ToXml();                }                 #endregion            }            else            {                //交給事件機制處理                if (string.IsNullOrEmpty(xml))                {                    xml = HandleText(info, voiceText);                }            }            //最后如果沒有處理到,那么提示用戶的語音內(nèi)容            if (string.IsNullOrEmpty(xml))            {                ResponseText textInfo = new ResponseText(info);                textInfo.Content = string.Format("非常抱歉,您輸入的語音內(nèi)容沒有找到對應(yīng)的處理方式。您的語音內(nèi)容為:{0}", voiceText);                xml = textInfo.ToXml();            }            return xml;        }

微信門戶測試界面效果如下所示。

為了方便對客戶會話的記錄,我的微信門戶后臺,會記錄用戶的語音輸入內(nèi)容,如下所示。

當(dāng)然,微信后臺的管理界面,也能夠查到相應(yīng)的語音記錄,界面如下所示。

以上就是我對微信語音的消息定義和事件處理的邏輯,其實語音是一個重要的輸入,如果正確的識別內(nèi)容,比手工輸入的效果更好,給用戶提供另外一種高效的輸入和事件處理操作。

這樣的處理模式,能夠使得我們整個微信門戶框架,不管是對于用戶的語音輸入,還是文本輸入,還是菜單事件的處理,都可以融為一體,實現(xiàn)更加完美的銜接。

如果對這個《C#開發(fā)微信門戶及應(yīng)用》系列感興趣,可以關(guān)注我的其他文章,系列隨筆如下所示:

C#開發(fā)微信門戶及應(yīng)用(25)-微信企業(yè)號的客戶端管理功能

C#開發(fā)微信門戶及應(yīng)用(24)-微信小店貨架信息管理

C#開發(fā)微信門戶及應(yīng)用(23)-微信小店商品管理接口的封裝和測試

C#開發(fā)微信門戶及應(yīng)用(22)-微信小店的開發(fā)和使用

C#開發(fā)微信門戶及應(yīng)用(21)-微信企業(yè)號的消息和事件的接收處理及解密

C#開發(fā)微信門戶及應(yīng)用(20)-微信企業(yè)號的菜單管理

C#開發(fā)微信門戶及應(yīng)用(19)-微信企業(yè)號的消息發(fā)送(文本、圖片、文件、語音、視頻、圖文消息等)

C#開發(fā)微信門戶及應(yīng)用(18)-微信企業(yè)號的通訊錄管理開發(fā)之成員管理

C#開發(fā)微信門戶及應(yīng)用(17)-微信企業(yè)號的通訊錄管理開發(fā)之部門管理

C#開發(fā)微信門戶及應(yīng)用(16)-微信企業(yè)號的配置和使用

C#開發(fā)微信門戶及應(yīng)用(15)-微信菜單增加掃一掃、發(fā)圖片、發(fā)地理位置功能

C#開發(fā)微信門戶及應(yīng)用(14)-在微信菜單中采用重定向獲取用戶數(shù)據(jù)

C#開發(fā)微信門戶及應(yīng)用(13)-使用地理位置擴展相關(guān)應(yīng)用

C#開發(fā)微信門戶及應(yīng)用(12)-使用語音處理

C#開發(fā)微信門戶及應(yīng)用(11)--微信菜單的多種表現(xiàn)方式介紹

C#開發(fā)微信門戶及應(yīng)用(10)--在管理系統(tǒng)中同步微信用戶分組信息

C#開發(fā)微信門戶及應(yīng)用(9)-微信門戶菜單管理及提交到微信服務(wù)器

C#開發(fā)微信門戶及應(yīng)用(8)-微信門戶應(yīng)用管理系統(tǒng)功能介紹

C#開發(fā)微信門戶及應(yīng)用(7)-微信多客服功能及開發(fā)集成

C#開發(fā)微信門戶及應(yīng)用(6)--微信門戶菜單的管理操作

C#開發(fā)微信門戶及應(yīng)用(5)--用戶分組信息管理

C#開發(fā)微信門戶及應(yīng)用(4)--關(guān)注用戶列表及詳細信息管理

C#開發(fā)微信門戶及應(yīng)用(3)--文本消息和圖文消息的應(yīng)答

C#開發(fā)微信門戶及應(yīng)用(2)--微信消息的處理和應(yīng)答

C#開發(fā)微信門戶及應(yīng)用(1)--開始使用微信接口


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 河东区| 和静县| 桓仁| 汝阳县| 木兰县| 汉中市| 胶南市| 怀来县| 浙江省| 蒙山县| 名山县| 即墨市| 寻甸| 洪雅县| 松潘县| 文安县| 资兴市| 泌阳县| 东乡族自治县| 信宜市| 枞阳县| 泾源县| 綦江县| 永德县| 公安县| 龙游县| 宣恩县| 潼南县| 济阳县| 闻喜县| 襄垣县| 三原县| 枣阳市| 隆化县| 靖安县| 教育| 南皮县| 黑龙江省| 栾川县| 济南市| 宜兰市|