.Net6+Fruion+Sqlsugar+SenparcSdk开发微信公众号系列之六:其他消息处理

一、回复图文消息

表MessageReceive新增一条数据

INSERT INTO "MessageReceive" VALUES (4, 2, '图片', 'https://pic.cnblogs.com/avatar/668465/20210318093258.png');

IMessageService定义回复图文的接口

        /// <summary>
        /// 处理文字消息,包括回复图片
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        Task<IResponseMessageBase> OnReceiveDbRequestAsync(RequestMessageText requestMessage);

实现接口,按理说图片和图文应该是分开来的,这里我仅仅是演示就直接把他们归为一类,实际肯定是要分开的。

        public async Task<IResponseMessageBase> OnReceiveDbRequestAsync(RequestMessageText requestMessage)
        {
            var receives = await DbContext.Db.Queryable<MessageReceive>().ToListAsync();//获取列表
            var receive = receives.Where(it => it.KeyWords == requestMessage.Content).FirstOrDefault();//查找关键字是否存在
            if (receive != null)
            {

                switch (receive.ReceiveType)
                {
                    case ReceiveType.文字:
                        var responseText = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage);
                        responseText.Content = receive.ReceiveString;
                        return responseText;
                    case ReceiveType.图片:
                        var responseImage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageNews>(requestMessage);
                        responseImage.Articles.Add(new Article()
                        {
                            Title = "欢迎",
                            Description = "这是一张图片消息",
                            PicUrl = receive.ReceiveString,
                            Url = "https://www.cnblogs.com/huguodong/"
                        });
                        return responseImage;
                    default:
                        var responseOther = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage);
                        responseOther.Content = receive.ReceiveString;
                        return responseOther;
                }
            }
            else
            {
                var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage);
                //如果关键字搜不到,列出关键字
                var result = new StringBuilder();
                result.AppendFormat("听不懂你再说什么,可以试试下面的关键字\r\n");
                for (int i = 0; i < receives.Count; i++)
                {
                    result.AppendFormat($"{i + 1}:{receives[i].KeyWords}\r\n");
                }
                responseMessage.Content = result.ToString();
                return responseMessage;

            }
        }

修改CustomMessageHandler的OnTextRequestAsync

   var result = await _messageService.OnReceiveDbRequestAsync(requestMessage);

发布到服务器,查看效果,没毛病

二、图片消息处理与回复

 IMessageService定义接口


        /// <summary>
        /// 处理图片
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        Task<IResponseMessageBase> OnReceiveImageRequestAsync(RequestMessageImage requestMessage);

实现接口,这里传什么图片我就返回什么图片

      public async Task<IResponseMessageBase> OnReceiveImageRequestAsync(RequestMessageImage requestMessage)
        {
            var responseImage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageImage>(requestMessage);
            responseImage.Image.MediaId = requestMessage.MediaId;
            return responseImage;
        }

CustomMessageHandler重写OnImageRequestAsync方法

        /// <summary>
        /// 处理图片
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public override async Task<IResponseMessageBase> OnImageRequestAsync(RequestMessageImage requestMessage)
        {
            var result = await _messageService.OnReceiveImageRequestAsync(requestMessage);
            return result;
        }

发布到云服务器,看看效果,没毛病

三、语音消息的处理与回复

首先去公众号官网设置接口权限开通语音识别

IMessageService定义接口

        /// <summary>
        /// 处理语音消息
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        Task<IResponseMessageBase> OnReceiveVoiceRequestAsync(RequestMessageVoice requestMessage);

实现接口

     public async Task<IResponseMessageBase> OnReceiveVoiceRequestAsync(RequestMessageVoice requestMessage)
        {

            var recognition = requestMessage.Recognition;//文字识别结果
            Console.WriteLine($"文字识别结果:{recognition}");
            if (string.IsNullOrEmpty(recognition))
            {
                var responseText = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage);
                responseText.Content = "抱歉,听不清你在说啥!";
                return responseText;
            }
            else
            {
                var responseVoice = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageVoice>(requestMessage);
                responseVoice.Voice.MediaId = requestMessage.MediaId;
                return responseVoice;
            }

        }

CustomMessageHandler重写OnVoiceRequestAsync

        /// <summary>
        /// 处理音频
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public override async Task<IResponseMessageBase> OnVoiceRequestAsync(RequestMessageVoice requestMessage)
        {
            var result = await _messageService.OnReceiveVoiceRequestAsync(requestMessage);
            return result;
        }

上传服务器,测试,没毛病

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章