예제 #1
0
        /// <summary>
        /// 获取XML版的回复消息
        /// </summary>
        /// <param name="domainContext"></param>
        /// <param name="toUserName"></param>
        /// <param name="autoReply"></param>
        /// <returns></returns>
        public static KFMessageBase GetKFMessage(ClientDomainContext domainContext, string toUserName,
                                                 IAutoReply autoReply)
        {
            if (autoReply == null)
            {
                return(null);
            }

            KFMessageBase replyMessage = null;

            switch (autoReply.Type)
            {
            case EnumAutoReplyType.Text:
                //不能返回空白 Content 的XML给微信 API
                //否则它会在客户端提示该公众号暂时无法提供服务
                if (String.IsNullOrEmpty(autoReply.Content) == false)
                {
                    KFTextMessage textMessage = new KFTextMessage();
                    textMessage.Text.Content = autoReply.Content;
                    replyMessage             = textMessage;
                }
                break;

            case EnumAutoReplyType.Image:
                KFImageMessage imageMessage = new KFImageMessage();
                imageMessage.Image.MediaId = autoReply.MediaId;
                replyMessage = imageMessage;
                break;

            case EnumAutoReplyType.Article:
                //微信的图文消息有几种不同的格式,此处专用于自动回复
                //所以只考虑客服接口的内部文章页面格式
                //图文素材可能会被删除
                string mediaId = _materialManager.GetArticleMaterialMediaId(autoReply.ArticleId);
                if (String.IsNullOrEmpty(mediaId) == false)
                {
                    KFMpArticleMessage articleMessage = new KFMpArticleMessage();
                    articleMessage.Mpnews.MediaId = mediaId;
                    replyMessage = articleMessage;
                }
                break;

            default:
                Debug.Assert(false, "GetKFMessage 不支持的 AutoReplyOnKeyWordsRule.Type:" + autoReply.Type.ToString());
                _log.Write("GetKFMessage 不支持的 AutoReplyOnKeyWordsRule.Type:" + autoReply.Type.ToString(),
                           domainContext.AutoReplyOnSubscribe.Type.ToString(), TraceEventType.Error);
                break;
            }

            if (replyMessage != null)
            {
                replyMessage.ToUserName = toUserName;
            }
            return(replyMessage);
        }
예제 #2
0
        private static void SendKFMessage(object state)
        {
            _timer.Change(-1, -1);

            KFTextMessage textMessage = new KFTextMessage();

            textMessage.Text.Content = _query_auth_code + "_from_api";
            textMessage.ToUserName   = _fromUserName;
            KFApi.Send(_accessToken, textMessage);

            _log.Write("调用客服接口回复测试消息", JsonConvert.SerializeObject(textMessage), TraceEventType.Verbose);
        }