using Senparc.Weixin.MP.MessageHandlers; using Senparc.Weixin.MP.Entities; using System.Xml.Linq; using Senparc.Weixin.MP.Entities.Request; using Senparc.NeuChar.Context; using Senparc.NeuChar.Entities; namespace MyCode.Project.Services.CustomMessageHandler { public partial class CustomMessageHandler : MessageHandler> { public CustomMessageHandler(XDocument requestDoc, PostModel postModel = null, int maxRecordCount = 0) : base(requestDoc, postModel, maxRecordCount) { } public CustomMessageHandler(RequestMessageBase requestMessage, PostModel postModel = null, int maxRecordCount = 0) : base(requestMessage, postModel, maxRecordCount) { } public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage) { var responseMessage = this.CreateResponseMessage(); return responseMessage; } // /// // /// 处理文字请求 // /// // /// // public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage) // { // //说明:实际项目中这里的逻辑可以交给Service处理具体信息,参考OnLocationRequest方法或/Service/LocationSercice.cs // var requestHandler = requestMessage.StartHandler(); // var defaultResponseMessage = base.CreateResponseMessage(); // // 获取主公众号关键词回复配置 // GetCurrentAutoreplyInfoResult AutoreplyInfoResult = GetCurrentAutoreplyInfo(); // KeywordAutoReplyInfo keywordAutoReplyInfo = null; // // 关键词自动回复列表 // List keywordAutoReplyInfoItemlist = null; // // 匹配的关键词列表 // List keywordListInfoList = null; // // 回复内容列表 // List replyListInfoList = null; // ReplyListInfoItem replyListInfo = null; // // 关键词内容 // string content = null; // // 回复匹配模式 contain 0:消息内容必须和关键词严格相同,equal 1:消息内容必须和关键词严格相同 // AutoReplyMatchMode matchMode; // // 回复模式 reply_all 0:全部回复,random_one 1 回复其中任意一条 // AutoReplyMode autoReplyMode; // // 回复类型 关键词的 貌似没用 // AutoReplyType keywordType; // int randomone = 0; // string[] keyWordArray; // string wxUserName = requestMessage.ToUserName; // //WechatAccountSettingEntity model = new WechatAccountSettingManager().GetObjectByUserName(wxUserName); // //var accessToken = GlobalSetting.GetAuthorizerAccessToken(model); // //int circleNum = 0; // if (AutoreplyInfoResult == null) // { // //defaultResponseMessage.Content = "您刚才发送了文字信息:{0}\r\n\r\n", requestMessage.Content; // //return defaultResponseMessage; // requestHandler.Default(() => // { // var responseMessageText = base.CreateResponseMessage(); // var result = new StringBuilder(); // result.AppendFormat("您刚才发送了文字信息:{0}\r\n\r\n", requestMessage.Content); // result.AppendLine("\r\n"); // result.AppendLine("目前系统还没办法给你回复~~~"); // responseMessageText.Content = result.ToString(); // return responseMessageText; // }); // } // else // { // // 可以自定义系统的操作参数 而且可以指定必须是某个OpenId才可以 // if (string.Equals("刷新", requestMessage.Content)) // { // requestHandler // //关键字不区分大小写,按照顺序匹配成功后将不再运行下面的逻辑 // .Default(() => // { // //AutoreplyInfoResult = GetCurrentAutoreplyInfo(true); // ////var result = new StringBuilder(); // ////result.AppendLine("主公众号关键词配置已强制刷新完毕"); // ////result.AppendLine("\r\n 数据内容"); // ////result.AppendLine(AutoreplyInfoResult.FastToJson()); // //defaultResponseMessage.Content = "主公众号关键词配置已强制刷新完毕"; // try // { // //string authorizerAccessToken = GetAuthorizerAccessToken(model); // //CustomApi.SendText(accessToken, requestMessage.FromUserName, "现在时间是:" + DateTime.Now); // defaultResponseMessage.Content = "后台代码消息"; // } // catch (Exception ex) // { // defaultResponseMessage.Content += ",出现异常:" + ex.Message; // } // return defaultResponseMessage; // }); // } // else // { // keywordAutoReplyInfo = AutoreplyInfoResult.keyword_autoreply_info; // if (keywordAutoReplyInfo == null) // { // requestHandler.Default(() => // { // var responseMessageText = base.CreateResponseMessage(); // var result = new StringBuilder(); // result.AppendFormat("您刚才发送了文字信息:{0}\r\n\r\n", requestMessage.Content); // result.AppendLine("\r\n"); // result.AppendLine("没有获取到任何回复信息,貌似主系统没有配置或关闭了关键词回复功能"); // responseMessageText.Content = result.ToString(); // return responseMessageText; // }); // } // else // { // // 关键词回复信息列表 // keywordAutoReplyInfoItemlist = keywordAutoReplyInfo.list; // if (keywordAutoReplyInfoItemlist != null && keywordAutoReplyInfoItemlist.Any()) // { // // 判断输入的关键词是否在List中 // foreach (var item in keywordAutoReplyInfoItemlist) // { // // 关键词列表 判断关键词是否符合输入的内容 // keywordListInfoList = item.keyword_list_info; // autoReplyMode = item.reply_mode; // if (keywordListInfoList != null && keywordListInfoList.Any()) // { // foreach (var keywordListInfoItem in keywordListInfoList) // { // replyListInfoList = item.reply_list_info; // content = keywordListInfoItem.content; // // 是否精确匹配 // matchMode = keywordListInfoItem.match_mode; // keywordType = keywordListInfoItem.type; // if (!string.IsNullOrWhiteSpace(content)) // { // // 只要包含了英文的,就是要进行分组 // if (content.IndexOf(",") > 0) // { // keyWordArray = content.Split(','); // } // else // { // keyWordArray = new string[] { content }; // } // // 判断如果是随机回复一条 设置随机值 // if (autoReplyMode == AutoReplyMode.random_one) // { // Random rd = new Random(); // randomone = rd.Next(0, replyListInfoList.Count); // } // bool matchSuccessed = false; // // 关键词列表 匹配 // foreach (var keyword in keyWordArray) // { // if (matchMode == AutoReplyMatchMode.equal) // { // // 精确匹配 // if (!requestHandler.MatchSuccessed && // ((requestHandler.CaseSensitive && requestMessage.Content == keyword) || // (!requestHandler.CaseSensitive && requestMessage.Content.ToUpper() == keyword.ToUpper()))) // { // matchSuccessed = true; // //requestHandler.ResponseMessage = func(); // break; // } // } // else // { // //// 只要包含就可以 // //if (!requestHandler.MatchSuccessed && // // ((requestHandler.CaseSensitive && RequestMessageTextExtension.ContainEachOther(requestMessage.Content, keyword)) || // // (!requestHandler.CaseSensitive && RequestMessageTextExtension.ContainEachOther(requestMessage.Content.ToUpper(), keyword.ToUpper())))) // //{ // // matchSuccessed = true; // // //requestHandler.ResponseMessage = func(); // // break; // //} // } // } // if (matchSuccessed) // { // for (int i = 0; i < replyListInfoList.Count; i++) // { // // 使用自动回复 // if (matchMode == AutoReplyMatchMode.equal) // { // replyListInfo = replyListInfoList[i]; // } // else // { // replyListInfo = replyListInfoList[0]; // } // AutoReplyType replyType = replyListInfo.type; // SetRequestHandler(requestMessage, requestHandler, defaultResponseMessage, replyListInfo, replyType); // //if (matchMode == AutoReplyMatchMode.equal && i == randomone) // //{ // // continue; // //} // //else if (i == 0) // //{ // // continue; // //} // //else // //{ // // // 使用客服接口发送 // // try // // { // // replyListInfo = replyListInfoList[i]; // // //SendCustomMessagei(accessToken, requestMessage, replyListInfo); // // } // // catch (Exception ex) // // { // // //NLogHelper.Warn(ex, "关键词回复时,客户接口异常"); // // } // //} // } // // 匹配完毕不再执行 // break; // } // //// 回复内容列表 // //for (int i = 0; i < replyListInfoList.Count; i++) // ////foreach (var replyListInfo in replyListInfoList) // //{ // // replyListInfo = replyListInfoList[i]; // // // 是随机回复一条的模式 // // if (autoReplyMode == AutoReplyMode.random_one) // // { // // // 此处思路不对,关键词是否符合是在HandlerRequest里判断的 需要移到外面判断?? // // if (randomone == i) // // { // //HandlerRequest(requestHandler, requestMessage, defaultResponseMessage, replyListInfo, matchMode, keyWordArray); // // break; // // } // // } // // else // // { // // HandlerRequest(requestHandler, requestMessage, defaultResponseMessage, replyListInfo, matchMode, keyWordArray); // // } // // circleNum++; // // if (requestHandler.MatchSuccessed) // // { // // break; // // } // //} // } // } // } // // requestHandler.GetResponseMessage(); // // 只要匹配成功就不再继续了 // //if (requestHandler.MatchSuccessed) // //{ // // NLogHelper.Debug(requestMessage.Content + "匹配成功:autoReplyMode = " + AutoReplyMode.random_one + ",输出 ResponseMessage=" + requestHandler.GetResponseMessage().FastToJson()); // // break; // //} // } // } // else // { // var responseMessageText = base.CreateResponseMessage(); // var result = new StringBuilder(); // result.AppendFormat("您刚才发送了文字信息:{0}\r\n\r\n", requestMessage.Content); // result.AppendLine("\r\n"); // result.AppendLine("没有获取到关键词回复列表数据"); // responseMessageText.Content = result.ToString(); // return responseMessageText; // } // } // } // } // if (!requestHandler.MatchSuccessed) // { // requestHandler.Default(() => // { // var responseMessageText = base.CreateResponseMessage(); // var result = new StringBuilder(); // result.AppendFormat("您刚才发送了信息:{0}\r\n\r\n", requestMessage.Content); // result.AppendLine("\r\n"); // result.AppendLine("目前还不能理解您的意思。"); // responseMessageText.Content = result.ToString(); // return responseMessageText; // }); // } // return requestHandler.GetResponseMessage() as IResponseMessageBase; // } // /// // /// 关键词自动回复 // /// // /// // /// // /// // /// // /// // private void SetRequestHandler(RequestMessageText requestMessage, RequestMessageTextKeywordHandler requestHandler, ResponseMessageText defaultResponseMessage, ReplyListInfoItem replyListInfo, AutoReplyType replyType) // { // LogHelper.Info("replyType" + replyType.ToString()); // switch (replyType) // { // case AutoReplyType.text: // var responseMessageText = base.CreateResponseMessage(); // responseMessageText.Content = replyListInfo.content; // requestHandler.ResponseMessage = responseMessageText; // break; // case AutoReplyType.img: // var responseMessageImage = base.CreateResponseMessage(); // responseMessageImage.Image.MediaId = replyListInfo.content; // requestHandler.ResponseMessage = responseMessageImage; // break; // case AutoReplyType.voice: // var responseMessageVoice = base.CreateResponseMessage(); // responseMessageVoice.Voice.MediaId = replyListInfo.content; // requestHandler.ResponseMessage = responseMessageVoice; // break; // case AutoReplyType.video: // var responseMessageVideo = base.CreateResponseMessage(); // responseMessageVideo.Video.MediaId = replyListInfo.content; // requestHandler.ResponseMessage = responseMessageVideo; // break; // case AutoReplyType.news: // var responseMessageNews = base.CreateResponseMessage(); // //responseMessageNews.Articles = replyListInfo.news_info.list; // //return responseMessageNews; // foreach (var newsInfo in replyListInfo.news_info.list) // { // responseMessageNews.Articles.Add(new Article() // { // Title = newsInfo.title, // Description = newsInfo.digest, // Url = newsInfo.content_url, // PicUrl = newsInfo.cover_url // }); // } // requestHandler.ResponseMessage = responseMessageNews; // break; // default: // var result = new StringBuilder(); // result.AppendFormat("您刚才发送了文字信息:{0}\r\n\r\n", requestMessage.Content); // result.AppendLine("\r\n"); // result.AppendFormat("由于没有这个类型:{0},系统不能给你任何回复", replyListInfo.type); // defaultResponseMessage.Content = result.ToString(); // requestHandler.ResponseMessage = defaultResponseMessage; // break; // } // // 设置匹配成功 // requestHandler.MatchSuccessed = true; // } // /// // /// 推送客服消息 // /// // /// // /// // /// // /// // private void SendCustomMessagei(string accessToken, RequestMessageText requestMessage, ReplyListInfoItem replyListInfo) // { // AutoReplyType replyType = replyListInfo.type; // switch (replyType) // { // case AutoReplyType.text: // CustomApi.SendText(accessToken, requestMessage.FromUserName, replyListInfo.content); // break; // case AutoReplyType.img: // CustomApi.SendImage(accessToken, requestMessage.FromUserName, replyListInfo.content); // break; // case AutoReplyType.voice: // CustomApi.SendVoice(accessToken, requestMessage.FromUserName, replyListInfo.content); // break; // case AutoReplyType.video: // CustomApi.SendVideo(accessToken, requestMessage.FromUserName, replyListInfo.content, "视频回复", "视频消息"); // break; // case AutoReplyType.news: // List
articles = new List
(); // foreach (var newsInfo in replyListInfo.news_info.list) // { // articles.Add(new Article() // { // Title = newsInfo.title, // Description = newsInfo.digest, // Url = newsInfo.content_url // }); // } // CustomApi.SendNews(accessToken, requestMessage.FromUserName, articles); // break; // } // } // /// // /// 获取主公众号自动回复规则设置 // /// // /// // protected GetCurrentAutoreplyInfoResult GetCurrentAutoreplyInfo() // { // // 进行缓存 // GetCurrentAutoreplyInfoResult infoResult = null; // try // { // IContainerCacheStrategy containerCache = LocalContainerCacheStrategy.Instance; // IBaseObjectCacheStrategy baseCache = containerCache.BaseCacheStrategy(); // string key = "AutoreplyInfo:" + appId; // HashSetCacheModel cacheModel = null; // if (baseCache.CheckExisted(key)) // { // cacheModel = baseCache.Get>(key); // if (cacheModel.ExpireAt < DateTime.Now) // { // // 过期了,要更新一次 // infoResult = AutoReplyApi.GetCurrentAutoreplyInfo(appId); // cacheModel = new HashSetCacheModel(); // cacheModel.CreateOn = DateTime.Now; // cacheModel.ExpireAt = DateTime.Now.AddMinutes(10); // cacheModel.Value = infoResult; // baseCache.Update(key, cacheModel); // } // infoResult = cacheModel.Value; // } // else // { // infoResult = AutoReplyApi.GetCurrentAutoreplyInfo(appId); // cacheModel = new HashSetCacheModel(); // cacheModel.CreateOn = DateTime.Now; // cacheModel.ExpireAt = DateTime.Now.AddMinutes(10); // cacheModel.Value = infoResult; // baseCache.Set(key, cacheModel); // } // } // catch (Exception ex) // { // LogHelper.Error("GetCurrentAutoreplyInfo", ex); // } // return infoResult; // } //} ///// ///// HashSetCacheModel ///// HashSet结构 ///// ///// 修改纪录 ///// ///// 2018-07-02版本:1.0 JiShiYu 创建文件。 ///// ///// ///// JiShiYu ///// 2018-07-02 ///// ///// //public class HashSetCacheModel //{ // /// // /// 进入缓存的时间 // /// // public DateTime CreateOn { set; get; } = DateTime.Now; // /// // /// 缓存过期时间 // /// // public DateTime ExpireAt { set; get; } // /// // /// 缓存对象的值 // /// // public T Value { get; set; } //} } }