WeChat 로봇 개발 튜토리얼의 자세한 예

Y2J
풀어 주다: 2017-05-05 10:17:37
원래의
4063명이 탐색했습니다.

WeChat 공개 플랫폼 개발 튜토리얼(4) 예제 시작하기: 로봇(소스 코드 포함)

이전 기사에서 기본 프레임워크를 작성했는데 다음은 간단한 예제입니다. 설명을 통해 미스터리를 해결하는 데 도움이 되기를 바랍니다.

1. 기능 소개

위챗 공개 플랫폼을 통해 온라인 고객 서비스 로봇 기능을 구현합니다. 주요 기능은 간단한 대화, 날씨 조회, 기타 서비스입니다.

여기에서는 공개 플랫폼의 구체적인 개발 프로세스를 설명하기 위해 이 예제를 사용하는 데 중점을 두고 비교적 간단한 기능만 제공합니다. 이는 단순한 DEMO일 뿐이며 필요한 경우 이를 기반으로 확장할 수 있습니다.

물론 앞으로는 더 복잡한 애플리케이션 예제를 출시할 예정입니다.

2. 구체적인 구현

1. 인터페이스에 대한 액세스 제공

여기서는 이전 장을 참조하지 않겠습니다. 위챗 공개계정 개발 튜토리얼(2편) ) 기본 프레임워크 구축
www.cnblogs.com/yank/p/3392394.html

2.서명인증 및 배포요청

당첨되었습니다. 여기서 자세한 내용은 다루지 말고 이전 장인 WeChat 공개 계정 개발 튜토리얼을 참조하세요. (2) 기본 프레임워크 구성
www.cnblogs.com/yank/p/3392394.html

3. 그리고 응답

1) 팔로우

WeChat 사용자가 공개 계정을 팔로우하면 적절한 메시지가 표시될 수 있습니다. 환영 메시지일 수도 있고 도움말 팁일 수도 있습니다.

코드 직접 입력:

    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) 날씨 쿼리

이 함수는 실시간 쿼리를 요청하고 공식 날씨 발표 웹 사이트를 요청한 후 파싱해야 합니다. 우리의 요구 형식에 따라 값을 반환하고, 날씨 정보를 정리하여 최종적으로 WeChat 고객에게 보냅니다.
문자 메시지 처리를 사용합니다.
사용자 요청: 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℉~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 = "没有获取到该城市的天气,请确定输入了正确的城市名称,如\&#39;北京\&#39;或者\&#39;beijing\&#39;或者\&#39;bj\&#39;";
            }            //返回
            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. 알리지 주문 시스템 소스코드

위 내용은 WeChat 로봇 개발 튜토리얼의 자세한 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿