栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript

微信公众平台开发教程(四) 实例入门:机器人回复(附源码)

JavaScript 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

微信公众平台开发教程(四) 实例入门:机器人回复(附源码)

上一篇文章,写了基本框架,可能很多人会觉得晕头转向,这里提供一个简单的例子来予以说明,希望能帮你解开谜团。

一、功能介绍

通过微信公众平台实现在线客服机器人功能。主要的功能包括:简单对话、查询天气等服务。

这里只是提供比较简单的功能,重在通过此实例来说明公众平台的具体研发过程。只是一个简单DEMO,如果需要的话可以在此基础上进行扩展。

当然后续我们还会推出比较复杂的应用实例。

二、具体实现

1、提供访问接口

这里不再赘述,参照上一章,微信公众账号开发教程(二) 基础框架搭建
https://www.jb51.net/article/98754.htm

2、签名认证和分发请求

这里不再赘述,参照上一章,微信公众账号开发教程(二) 基础框架搭建
https://www.jb51.net/article/98754.htm

3、处理请求,并响应

1)关注

当微信用户关注公众账号时,可以给其适当的提示。可以是欢迎词,可以是帮助提示。

直接上代码:

class EventHandler : IHandler
  {
    /// 
    /// 请求的xml
    /// 
    private string RequestXml { get; set; }
    /// 
    /// 构造函数
    /// 
    /// 
    public EventHandler(string requestXml)
    {
      this.RequestXml = requestXml;
    }
    /// 
    /// 处理请求
    /// 
    /// 
    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)问候

简单的交流问候,比如你好、帮助等等,跟我们使用微信聊天一样,不过回应是由我们的程序响应。具体功能,可以根据自己的需要进行添加。

微信本来就是沟通的平台。这个案例,可以用于在线服务机器人,类似于淘宝的客服机器人,可是我们这个是微信版的。呵呵
其实,很简单,获取请求消息,根据关键字来匹配回应。当然这里可能要做的工作很多,如何支持智能匹配,如何支持模糊匹配等。

代码如下:

/// 
  /// 文本信息处理类
  /// 
  public class TextHandler : IHandler
  {
    /// 
    /// 请求的XML
    /// 
    private string RequestXml { get; set; }
    /// 
    /// 构造函数
    /// 
    /// 请求的xml
    public TextHandler(string requestXml)
    {
      this.RequestXml = requestXml;
    }
    /// 
    /// 处理请求
    /// 
    /// 
    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;
    }
    /// 
    /// 处理其他消息
    /// 
    /// 
    /// 
    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
  {
    /// 
    /// 城市集合字段
    /// 
    private static Dictionary mCities;
    /// 
    /// 城市集合
    /// 
    public static Dictionary Cities
    {
      get
      {
 if (mCities == null)
 {
   LoadCities();
 }

 return mCities;
      }
    }
    /// 
    /// 加载城市
    /// 
    private static void LoadCities()
    {
      mCities = new Dictionary();
      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" });
      
    }
    /// 
    /// 获取城市的天气
    /// 
    /// 城市名称、拼音或首字母
    /// 
    public static string GetWeather(string name)
    {
      string result = string.Empty;
      string cityCode = string.Empty;
      //获取城市编码
      IEnumerable 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();
      }

      //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数据格式
   
   #endregion

 }
      }
      else
      {
 result = "没有获取到该城市的天气,请确定输入了正确的城市名称,如'北京'或者'beijing'或者'bj'";
      }

      //返回
      return result;
    }
    /// 
    /// 内部类:城市
    /// 
    internal class City
    {
      /// 
      /// 编码
      /// 
      public string Code { get; set; }
      /// 
      /// 名称
      /// 
      public string Name { get; set; }
      /// 
      /// 拼音
      /// 
      public string PinYin { get; set; }
      /// 
      /// 拼音首字母
      /// 
      public string FristLetter { get; set; }
    }
  }

 三、源码

这里可是可执行的代码哦。应大家的需求,这里提供全部的源代码。

demo下载

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/92335.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号