微信机器人开发教程的实例详解
微信公众平台开发教程(四) 实例入门:机器人(附源码) 上一篇文章,写了基本框架,可能很多人会觉得晕头转向,这里提供一个简单的例子来予以说明,希望能帮你解开谜团。一、功能介绍通过微信公众平台实现在线客服机器人功能。主要的功能包括:简单对话、查询天气等服务。
这里只是提供比较简单的功能,重在通过此实例来说明公众平台的具体研发过程。只是一个简单DEMO,如果需要的话可以在此基础上进行扩展。
当然后续我们还会推出比较复杂的应用实例。 二、具体实现1、提供访问接口这里不再赘述,参照上一章,微信公众账号开发教程(二) 基础框架搭建www.cnblogs.com/yank/p/3392394.html2、签名认证和分发请求这里不再赘述,参照上一章,微信公众账号开发教程(二) 基础框架搭建www.cnblogs.com/yank/p/3392394.html3、处理请求,并响应1)关注当微信用户关注公众账号时,可以给其适当的提示。可以是欢迎词,可以是帮助提示。
直接上代码: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 = "欢迎您关注***,我是大哥大,有事就问我,呵呵!nn";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 Citieswhere 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!~41!","tempF2": "60.8!~41!","tempF3": "64.4!~39.2!","tempF4": "62.6!~41!","tempF5": "57.2!~42.8!","tempF6": "57.2!~35.6!","weather1": "晴转多云","weather2": "多云","weather3": "多云转晴","weather4": "晴转多云","weather5": "多云转阴","weather6": "阴转晴","img1": "0","img2": "1","img3": "1","img4": "99","img5": "1","img6": "0","img7": "0","img8": "1","img9": "1","img10": "2","img11": "2","img12": "0","img_single": "0","img_title1": "晴","img_title2": "多云","img_title3": "多云","img_title4": "多云","img_title5": "多云","img_title6": "晴","img_title7": "晴","img_title8": "多云","img_title9": "多云","img_title10": "阴","img_title11": "阴","img_title12": "晴","img_title_single": "晴","wind1": "微风","wind2": "微风","wind3": "微风","wind4": "微风","wind5": "微风","wind6": "北风4-5级","fx1": "微风","fx2": "微风","fl1": "小于3级","fl2": "小于3级","fl3": "小于3级","fl4": "小于3级","fl5": "小于3级","fl6": "4-5级","index": "较冷","index_d": "建议着大衣、呢外套加毛衣、卫衣等服装。体弱者宜着厚外套、厚毛衣。因昼夜温差较大,注意增减衣服。","index48": "冷","index48_d": "天气冷,建议着棉服、羽绒服、皮夹克加羊毛衫等冬季服装。年老体弱者宜着厚棉衣、冬大衣或厚羽绒服。","index_uv": "中等","index48_uv": "弱","index_xc": "适宜","index_tr": "适宜","index_co": "舒适","st1": "17","st2": "5","st3": "17","st4": "5","st5": "18","st6": "6","index_cl": "适宜","index_ls": "适宜","index_ag": "极不易发"}}*/#endregion}}else{result = "没有获取到该城市的天气,请确定输入了正确的城市名称,如'北京'或者'beijing'或者'bj'";}//返回return result;}/// <summary>/// 内部类:城市/// </summary>internal class City{/// <summary>/// 编码/// </summary>public string Code { get; set; }/// <summary>/// 名称/// </summary>public string Name { get; set; }/// <summary>/// 拼音/// </summary>public string PinYin { get; set; }/// <summary>/// 拼音首字母/// </summary>public string FristLetter { get; set; }}}【相关推荐】
1. 微信公众号平台源码下载
2. 阿狸子订单系统源码以上就是微信机器人开发教程的实例详解的详细内容,更多请关注小潘博客其它相关文章!