.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;
        }

上傳服務器,測試,沒毛病

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