[微信開發] - 消息回復及事件響應
阿新 • • 發佈:2018-12-08
handler lse jpg right 設定 public 可能 ... set
微信平臺的消息回復,的關鍵字(及)消息回復及關註事件消息響應,
其不同點如圖:
在weixin4j作者的註釋中,提到微信公眾平臺接受消息一共有這麽8類:
* <p> * Description: 接受消息分8類,普通消息(1.文本消息、2.圖片消息、3.語音消息<br /> * 、4.視頻消息、5.地理位置消息、6.鏈接消息)<br /> * 事件推送(1.關註/取消關註事件、2.掃描帶二維碼參數事件、3.上報地理位置事件、4.自定義<br /> * 菜單事件、5.點擊菜單拉取消息時事件推送、6.點擊菜單跳轉鏈接時的事件推送</p> *
其中普通消息分為: 1.文本 2.圖片 3.語音 4.視頻 5.地理位置 6.鏈接
這些消息處理放到了一個處理器接口 public interface INormalMessageHandler
/** * 文字內容的消息處理 * * @param msg 接受消息對象 * @return 輸出消息對象 */ public OutputMessage textTypeMsg(TextInputMessage msg);
/** * 圖片類型的消息處理 * * @parammsg 接受消息對象 * @return 輸出消息對象 */ public OutputMessage imageTypeMsg(ImageInputMessage msg);
/** * 語音類型的消息處理 * * @param msg 接受消息對象 * @return 輸出消息對象 */ public OutputMessage voiceTypeMsg(VoiceInputMessage msg);
/** * 視頻類型的消息處理 * *@param msg 接受消息對象 * @return 輸出消息對象 */ public OutputMessage videoTypeMsg(VideoInputMessage msg);
/** * 小視頻類型的消息處理 * * @param msg 接受消息對象 * @return 輸出消息對象 */ public OutputMessage shortvideoTypeMsg(ShortVideoInputMessage msg);
/** * 地理位置類型的消息處理 * * @param msg 接受消息對象 * @return 輸出消息對象 */ public OutputMessage locationTypeMsg(LocationInputMessage msg);
/** * 鏈接類型的消息處理 * * @param msg 接受消息對象 * @return 輸出消息對象 */ public OutputMessage linkTypeMsg(LinkInputMessage msg);
另外有一個實現類實現了該消息處理類,可以根據需要根據不同類型的消息進行回復.
也就是像微軟小冰這樣的智能客服(做為微信接入時)也可能是按照這種微信端的數據進行了數據篩選分類,從而做出正確合乎邏輯的智能回復.
在實現類中
將傳入的text類型信息做分類處理並回復 (簡單版本)
@Override public OutputMessage textTypeMsg(TextInputMessage msg) { TextOutputMessage out = new TextOutputMessage(); String inputText = msg.getContent(); if(inputText.equals("你好")){ out.setContent("你也好"); }else if(inputText.equals("官方網站")){ out.setContent("http://www.baigehuidi.com"); }else{ } return out; }
那跑起程序來是不是就按照輸入內容的不同進行不同的回復.
當前端頁面是要這樣設定時,就可以這樣做.
下面看看微信平臺官方的"智能回復"
現階段可以只先回復文本內容.
整個設計從form表單提交過來之後,將"關鍵字"與"回復消息"存入文本消息回復數據庫表.
當用戶輸入某個信息到微信平臺後,處理器根據輸入字段查詢回復數據庫表,進行消息的回復.
(其中也可以進行模糊查找,半匹配機制,並通過客戶回復"您是不是要問.....****.....?").
DefaultNormalMessageHandler
/* * 微信公眾平臺(JAVA) SDK * limitations under the License. */ package com.baigehuidi.demo.weixin4j.spi; import com.baigehuidi.demo.weixin4j.model.message.OutputMessage; import com.baigehuidi.demo.weixin4j.model.message.normal.*; import com.baigehuidi.demo.weixin4j.model.message.output.TextOutputMessage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.ArrayList; /** * <p> * Title: 微信公眾平臺接受消息處理器</p> * * <p> * Description: 此消息處理器只負責接收消息和返回已收到消息的功能,無特殊功能。</p> * * @author 楊啟盛<qsyang @ ansitech.com> * @since 0.0.6 */ @Component public class DefaultNormalMessageHandler implements INormalMessageHandler { /** * 匹配所有類型消息 進行回復 ~ * * @param msg * @return */ private OutputMessage allType(NormalMessage msg) { TextOutputMessage out = new TextOutputMessage(); out.setContent("你的消息已經收到! DefaultNormalMessageHandler"); return out; } /** * 文本回復 根據前臺form提交的數據->智能回復數據表->獲取關鍵字/回復字段/ * * @param msg 接受消息對象 * @return */ @Override public OutputMessage textTypeMsg(TextInputMessage msg) { //獲取關鍵字 String keyWord = msg.getContent(); //從數據庫搜索此關鍵字 //select 回復字 from A where 關鍵字 = "" //返回(單個匹配字段數據 或 多個匹配字段(模糊查詢的) list 集合 進行隨機回復) //根據微信平臺設定關鍵字的原樣式,幾個關鍵字同時能對應一個或幾個回復 // // 假定messageMapper是從數據庫獲取回復字段 // @Autowired // private MessageMapper messageMapper; // 獲取符合關鍵字的字段value,集合,使用random進行隨機回復 // ArrayList<String> valuesList = messageMapper.getValuesByKey(keyWord); // 或1對1獲取 // String valueMessage = messageMapper.getValueByKey(keyWord); // 將獲取到的valueMesssage返回到前端就可以了 // 當使用多個線程處理消息時: /////* 之下為固定字段 *///// TODO 先做完用戶信息獲取 2018-12-08 TextOutputMessage out = new TextOutputMessage(); String inputText = msg.getContent(); if (inputText.equals("你好")) { out.setContent("你也好"); } else if (inputText.equals("官方網站")) { out.setContent("http://www.baigehuidi.com"); } else { out.setContent("NULL"); } return out; } @Override public OutputMessage imageTypeMsg(ImageInputMessage msg) { return allType(msg); } @Override public OutputMessage voiceTypeMsg(VoiceInputMessage msg) { return allType(msg); } @Override public OutputMessage videoTypeMsg(VideoInputMessage msg) { return allType(msg); } @Override public OutputMessage shortvideoTypeMsg(ShortVideoInputMessage msg) { return allType(msg); } @Override public OutputMessage locationTypeMsg(LocationInputMessage msg) { return allType(msg); } @Override public OutputMessage linkTypeMsg(LinkInputMessage msg) { return allType(msg); } }
事件推送為一大類 : 有 1. 關註/取消關註事件 2.掃描帶二維碼參數事件 3.上報地理位置事件 4.自定義事件
菜單事件分為 : 1.點擊菜單拉取消息時事件推送 2.點擊菜單跳轉鏈接時的事件推送
DefaultNormalMessageHandler
[微信開發] - 消息回復及事件響應