上一篇文章,寫了基本框架,可能很多人會覺得暈頭轉向,這里提供一個簡單的例子來予以說明,希望能幫你解開謎團。
一、功能介紹
通過微信公眾平臺實現在線客服機器人功能。主要的功能包括:簡單對話、查詢天氣等服務。
這里只是提供比較簡單的功能,重在通過此實例來說明公眾平臺的具體研發過程。只是一個簡單DEMO,如果需要的話可以在此基礎上進行擴展。
當然后續我們還會推出比較復雜的應用實例。
二、具體實現
1、提供訪問接口
這里不再贅述,參照上一章,微信公眾賬號開發教程(二) 基礎框架搭建
//www.companysz.com/article/98754.htm
2、簽名認證和分發請求
這里不再贅述,參照上一章,微信公眾賬號開發教程(二) 基礎框架搭建
//www.companysz.com/article/98754.htm
3、處理請求,并響應
1)關注
當微信用戶關注公眾賬號時,可以給其適當的提示??梢允菤g迎詞,可以是幫助提示。
直接上代碼:
class EventHandler : IHandler { /// <summary> /// 請求的xml /// </summary> private string RequestXml { get; set; } /// <summary> /// 構造函數 /// </summary> /// <param name="requestXml"></param> public EventHandler(string requestXml) { this.RequestXml = requestXml; } /// <summary> /// 處理請求 /// </summary> /// <returns></returns> public string HandleRequest() { string response = string.Empty; EventMessage em = EventMessage.LoadFromXml(RequestXml); if (em.Event.Equals("subscribe",StringComparison.OrdinalIgnoreCase)) { //回復歡迎消息 TextMessage tm = new TextMessage(); tm.ToUserName = em.FromUserName; tm.FromUserName = em.ToUserName; tm.CreateTime = Common.GetNowTime(); tm.Content = "歡迎您關注***,我是大哥大,有事就問我,呵呵!/n/n"; response = tm.GenerateContent(); } return response; } }
2)問候
簡單的交流問候,比如你好、幫助等等,跟我們使用微信聊天一樣,不過回應是由我們的程序響應。具體功能,可以根據自己的需要進行添加。
微信本來就是溝通的平臺。這個案例,可以用于在線服務機器人,類似于淘寶的客服機器人,可是我們這個是微信版的。呵呵
其實,很簡單,獲取請求消息,根據關鍵字來匹配回應。當然這里可能要做的工作很多,如何支持智能匹配,如何支持模糊匹配等。
代碼如下:
/// <summary> /// 文本信息處理類 /// </summary> public class TextHandler : IHandler { /// <summary> /// 請求的XML /// </summary> private string RequestXml { get; set; } /// <summary> /// 構造函數 /// </summary> /// <param name="requestXml">請求的xml</param> public TextHandler(string requestXml) { this.RequestXml = requestXml; } /// <summary> /// 處理請求 /// </summary> /// <returns></returns> public string HandleRequest() { string response = string.Empty; TextMessage tm = TextMessage.LoadFromXml(RequestXml); string content = tm.Content.Trim(); if (string.IsNullOrEmpty(content)) { response = "您什么都沒輸入,沒法幫您啊,%>_<%。"; } else { if (content.StartsWith("tq", StringComparison.OrdinalIgnoreCase)) { string cityName = content.Substring(2).Trim(); response = WeatherHelper.GetWeather(cityName); } else { response = HandleOther(content); } } tm.Content = response; //進行發送者、接收者轉換 string temp = tm.ToUserName; tm.ToUserName = tm.FromUserName; tm.FromUserName = temp; response = tm.GenerateContent(); return response; } /// <summary> /// 處理其他消息 /// </summary> /// <param name="tm"></param> /// <returns></returns> private string HandleOther(string requestContent) { string response = string.Empty; if (requestContent.Contains("你好") || requestContent.Contains("您好")) { response = "您也好~"; } else if (requestContent.Contains("傻")) { response = "我不傻!哼~ "; } else if (requestContent.Contains("逼") || requestContent.Contains("操")) { response = "哼,你說臟話! "; } else if (requestContent.Contains("是誰")) { response = "我是大哥大,有什么能幫您的嗎?~"; } else if (requestContent.Contains("再見")) { response = "再見!"; } else if (requestContent.Contains("bye")) { response = "Bye!"; } else if (requestContent.Contains("謝謝")) { response = "不客氣!嘿嘿"; } else if (requestContent == "h" || requestContent == "H" || requestContent.Contains("幫助")) { response = @"查詢天氣,輸入tq 城市名稱/拼音/首字母"; } else { response = "您說的,可惜,我沒明白啊,試試其他關鍵字吧。"; } return response; } }
3)查詢天氣
這個功能需要請求實時查詢的,請求官方的天氣發布網站,然后解析其返回值,按照我們需要的格式,組織天氣信息,最后發送給微信客戶。
采用文本消息方式處理。
用戶請求,只需輸入:tq 城市名稱/拼音/首字母,即可獲取消息。
回復的消息:(以北京為例)
北京
2013年11月6日 星期三
今天:(17℃~4℃)晴北風4-5級轉3-4級4-5級轉3-4級
24小時穿衣指數:天氣冷,建議著棉服、羽絨服、皮夾克加羊毛衫等冬季服裝。年老體弱者宜著厚棉衣、冬大衣或厚羽絨服。
明天:(14℃~3℃)晴轉多云微風小于3級
48小時穿衣指數:天氣冷,建議著棉服、羽絨服、皮夾克加羊毛衫等冬季服裝。年老體弱者宜著厚棉衣、冬大衣或厚羽絨服。
來看源碼吧:
class WeatherHelper { /// <summary> /// 城市集合字段 /// </summary> private static Dictionary<string, City> mCities; /// <summary> /// 城市集合 /// </summary> public static Dictionary<string, City> Cities { get { if (mCities == null) { LoadCities(); } return mCities; } } /// <summary> /// 加載城市 /// </summary> private static void LoadCities() { mCities = new Dictionary<string, City>(); mCities.Clear(); mCities.Add("101010100", new City() { Code = "101010100", Name = "北京", PinYin = "beijing", FristLetter = "bj" }); mCities.Add("101020100", new City() { Code = "101020100", Name = "上海", PinYin = "shanghai", FristLetter = "sh" }); mCities.Add("101200101", new City() { Code = "101200101", Name = "武漢", PinYin = "wuhai", FristLetter = "wh" }); } /// <summary> /// 獲取城市的天氣 /// </summary> /// <param name="name">城市名稱、拼音或首字母</param> /// <returns></returns> public static string GetWeather(string name) { string result = string.Empty; string cityCode = string.Empty; //獲取城市編碼 IEnumerable<string> codes = from item in Cities where item.Value != null && (item.Value.Name.Equals(name, StringComparison.OrdinalIgnoreCase) || item.Value.PinYin.Equals(name, StringComparison.OrdinalIgnoreCase) || item.Value.FristLetter.Equals(name, StringComparison.OrdinalIgnoreCase)) select item.Value.Code; if (codes != null && codes.Count() > 0) { cityCode = codes.First<string>(); } //http請求,獲取天氣 if (!string.IsNullOrEmpty(cityCode)) { string url = "http://m.weather.com.cn/data/{0}.html"; url = string.Format(url, cityCode); WebRequest request = HttpWebRequest.Create(url); //超時時間為:2秒 request.Timeout = 2000; request.Credentials = CredentialCache.DefaultCredentials; WebResponse response = request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); string weahterInfo = reader.ReadToEnd(); if (string.IsNullOrEmpty(weahterInfo)) { result = "暫時沒有取到天氣數據,請稍后再試"; } else { XmlDocument doc = JsonConvert.DeserializeXmlNode(weahterInfo); if (doc != null) { XmlNode node = doc.DocumentElement; if (node != null) { StringBuilder builder = new StringBuilder(); builder.Append(node["city"].InnerText).Append("/n"); builder.Append(node["date_y"].InnerText).Append(" ").Append(node["week"].InnerText).Append("/n"); builder.Append("今天:").Append("(").Append(node["temp1"].InnerText).Append(")").Append(node["weather1"].InnerText).Append(node["wind1"].InnerText).Append(node["fl1"].InnerText).Append("/n"); builder.Append("24小時穿衣指數:").Append(node["index_d"].InnerText).Append("/n"); builder.Append("明天:").Append("(").Append(node["temp2"].InnerText).Append(")").Append(node["weather2"].InnerText).Append(node["wind2"].InnerText).Append(node["fl2"].InnerText).Append("/n"); builder.Append("48小時穿衣指數:").Append(node["index48_d"].InnerText).Append("/n"); result = builder.ToString(); } } #region 天氣json數據格式 /* { "weatherinfo": { "city": "北京", "city_en": "beijing", "date_y": "2013年11月4日", "date": "", "week": "星期一", "fchh": "11", "cityid": "101010100", "temp1": "17℃~5℃", "temp2": "16℃~5℃", "temp3": "18℃~4℃", "temp4": "17℃~5℃", "temp5": "14℃~6℃", "temp6": "14℃~2℃", "tempF1": "62.6 主站蜘蛛池模板: 一本色道久久99精品综合蜜臀 | 一级电影在线免费观看 | 国产精品一区2区3区 | 久久国产精品一区 | 免费国产不卡午夜福在线 | 欧美18一19sex性护士农村 | 国产做爰 | 久久色在线 | 在线播放h | 免费观看一区二区三区视频 | 毛片大全在线观看 | 91短视频在线 | 91av视频大全| 久久精品亚洲一区 | 美女网站色免费 | 欧洲色阁中文字幕 | 亚洲国产精品久久久久久久久 | 性生活视频一级 | 中文字幕在线观看亚洲 | 中国hdxxxx护士爽在线观看 | av国产在线被下药迷网站 | 在线免费av网站 | mmmwww| 国产精品刺激对白麻豆99 | 中文字幕h| 日日艹夜夜艹 | 免费国产一级特黄久久 | 成人视屏免费看 | 精选久久 | 日韩视频在线观看免费 | 日本不卡一区二区三区在线观看 | 亚洲综合91 | 91色琪琪电影亚洲精品久久 | 免费在线观看毛片 | 日韩av有码在线 | 欧美成人影院 | 一级做a爰片性色毛片2021 | 成人毛片100部 | 黄色高清免费 | 最污网站 | 色综合久久久久综合99 |