.Net6+Fruion+Sqlsugar+SenparcSdk開發微信公眾號系列之六:其他訊息處理
阿新 • • 發佈:2022-05-25
一、回覆圖文訊息
表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;
}
上傳伺服器,測試,沒毛病