333
This commit is contained in:
@@ -0,0 +1,497 @@
|
||||
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<MessageContext<IRequestMessageBase, IResponseMessageBase>>
|
||||
{
|
||||
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<ResponseMessageText>();
|
||||
return responseMessage;
|
||||
}
|
||||
|
||||
|
||||
// /// <summary>
|
||||
// /// 处理文字请求
|
||||
// /// </summary>
|
||||
// /// <returns></returns>
|
||||
// public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage)
|
||||
// {
|
||||
// //说明:实际项目中这里的逻辑可以交给Service处理具体信息,参考OnLocationRequest方法或/Service/LocationSercice.cs
|
||||
// var requestHandler = requestMessage.StartHandler();
|
||||
// var defaultResponseMessage = base.CreateResponseMessage<ResponseMessageText>();
|
||||
// // 获取主公众号关键词回复配置
|
||||
// GetCurrentAutoreplyInfoResult AutoreplyInfoResult = GetCurrentAutoreplyInfo();
|
||||
// KeywordAutoReplyInfo keywordAutoReplyInfo = null;
|
||||
// // 关键词自动回复列表
|
||||
// List<KeywordAutoReplyInfo_Item> keywordAutoReplyInfoItemlist = null;
|
||||
// // 匹配的关键词列表
|
||||
// List<KeywordListInfoItem> keywordListInfoList = null;
|
||||
// // 回复内容列表
|
||||
// List<ReplyListInfoItem> 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<ResponseMessageText>();
|
||||
// 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<ResponseMessageText>();
|
||||
// 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<ResponseMessageText>();
|
||||
// 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<ResponseMessageText>();
|
||||
// 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;
|
||||
// }
|
||||
|
||||
// /// <summary>
|
||||
// /// 关键词自动回复
|
||||
// /// </summary>
|
||||
// /// <param name="requestMessage"></param>
|
||||
// /// <param name="requestHandler"></param>
|
||||
// /// <param name="defaultResponseMessage"></param>
|
||||
// /// <param name="replyListInfo"></param>
|
||||
// /// <param name="replyType"></param>
|
||||
// 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>();
|
||||
// responseMessageText.Content = replyListInfo.content;
|
||||
// requestHandler.ResponseMessage = responseMessageText;
|
||||
// break;
|
||||
// case AutoReplyType.img:
|
||||
// var responseMessageImage = base.CreateResponseMessage<ResponseMessageImage>();
|
||||
// responseMessageImage.Image.MediaId = replyListInfo.content;
|
||||
// requestHandler.ResponseMessage = responseMessageImage;
|
||||
// break;
|
||||
// case AutoReplyType.voice:
|
||||
// var responseMessageVoice = base.CreateResponseMessage<ResponseMessageVoice>();
|
||||
// responseMessageVoice.Voice.MediaId = replyListInfo.content;
|
||||
// requestHandler.ResponseMessage = responseMessageVoice;
|
||||
// break;
|
||||
// case AutoReplyType.video:
|
||||
// var responseMessageVideo = base.CreateResponseMessage<ResponseMessageVideo>();
|
||||
// responseMessageVideo.Video.MediaId = replyListInfo.content;
|
||||
// requestHandler.ResponseMessage = responseMessageVideo;
|
||||
// break;
|
||||
// case AutoReplyType.news:
|
||||
// var responseMessageNews = base.CreateResponseMessage<ResponseMessageNews>();
|
||||
// //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;
|
||||
// }
|
||||
|
||||
// /// <summary>
|
||||
// /// 推送客服消息
|
||||
// /// </summary>
|
||||
// /// <param name="accessToken"></param>
|
||||
// /// <param name="requestMessage"></param>
|
||||
// /// <param name="replyListInfo"></param>
|
||||
// /// <param name="replyType"></param>
|
||||
// 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<Article> articles = new List<Article>();
|
||||
// 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;
|
||||
// }
|
||||
// }
|
||||
|
||||
// /// <summary>
|
||||
// /// 获取主公众号自动回复规则设置
|
||||
// /// </summary>
|
||||
// /// <returns></returns>
|
||||
// protected GetCurrentAutoreplyInfoResult GetCurrentAutoreplyInfo()
|
||||
// {
|
||||
|
||||
// // 进行缓存
|
||||
// GetCurrentAutoreplyInfoResult infoResult = null;
|
||||
// try
|
||||
// {
|
||||
// IContainerCacheStrategy containerCache = LocalContainerCacheStrategy.Instance;
|
||||
// IBaseObjectCacheStrategy baseCache = containerCache.BaseCacheStrategy();
|
||||
// string key = "AutoreplyInfo:" + appId;
|
||||
// HashSetCacheModel<GetCurrentAutoreplyInfoResult> cacheModel = null;
|
||||
// if (baseCache.CheckExisted(key))
|
||||
// {
|
||||
// cacheModel = baseCache.Get<HashSetCacheModel<GetCurrentAutoreplyInfoResult>>(key);
|
||||
// if (cacheModel.ExpireAt < DateTime.Now)
|
||||
// {
|
||||
// // 过期了,要更新一次
|
||||
// infoResult = AutoReplyApi.GetCurrentAutoreplyInfo(appId);
|
||||
// cacheModel = new HashSetCacheModel<GetCurrentAutoreplyInfoResult>();
|
||||
// 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<GetCurrentAutoreplyInfoResult>();
|
||||
// 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;
|
||||
// }
|
||||
//}
|
||||
|
||||
///// <summary>
|
||||
///// HashSetCacheModel<T>
|
||||
///// HashSet结构
|
||||
/////
|
||||
///// 修改纪录
|
||||
/////
|
||||
///// 2018-07-02版本:1.0 JiShiYu 创建文件。
|
||||
/////
|
||||
///// <author>
|
||||
///// <name>JiShiYu</name>
|
||||
///// <date>2018-07-02</date>
|
||||
///// </author>
|
||||
///// </summary>
|
||||
//public class HashSetCacheModel<T>
|
||||
//{
|
||||
// /// <summary>
|
||||
// /// 进入缓存的时间
|
||||
// /// </summary>
|
||||
// public DateTime CreateOn { set; get; } = DateTime.Now;
|
||||
|
||||
// /// <summary>
|
||||
// /// 缓存过期时间
|
||||
// /// </summary>
|
||||
// public DateTime ExpireAt { set; get; }
|
||||
|
||||
// /// <summary>
|
||||
// /// 缓存对象的值
|
||||
// /// </summary>
|
||||
// public T Value { get; set; }
|
||||
//}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user