> 文档中心 > 微信公众号接入图灵机器人实现自动回复消息

微信公众号接入图灵机器人实现自动回复消息

目录

1、创建图灵机器人

2、后端代码开始接入

常量类

服务层处理文本消息

基础消息

应用常量

最后服务层处理来自文本消息

结果


1、创建图灵机器人

    进入图灵机器人网址:http://www.tuling123.com/

    登录/注册,进入机器人管理,然后点击创建机器人

然后我们选择或填写机器人的相关属性,这里我选择的是聊天社交,模拟真人聊天的机器人,应用终端由于是微信公众号接入,机器人设置里面,我们可以拿到接口api相关的信息。。直接上图:

2、后端代码开始接入

常量类

public final class Constants {    /**     * GET或POST必须大写,不可更改     */    public static final String GET = "GET";    public static final String POST = "POST";   /* 微信请求消息类型(由微信方规定,不可更改) */    /**     * 文本     */    public static final String REQ_TEXT_TYPE = "text";    /**     * 事件     */    public static final String REQ_EVENT_TYPE = "event";    /**     * 订阅     */    public static final String REQ_SUBSCRIBE_TYPE = "subscribe";    /**     * 取消订阅     */    public static final String REQ_UNSUBSCRIBE_TYPE = "unsubscribe";   /* 微信返回消息类型(由微信方规定,不可更改) */    /**     * 文本     */    public static final String RESP_TEXT_TYPE = "text";    /**     * 图文     */    public static final String RESP_NEWS_TYPE = "news";   /* 图灵机器人返回数据类型状态码(官方固定) */    /**     * 文本     */    public static final Integer TEXT_CODE = 100000;    /**     * 列车     */    public static final Integer TRAIN_CODE = 305000;    /**     * 航班     */    public static final Integer FLIGHT_CODE = 306000;    /**     * 链接类     */    public static final Integer LINK_CODE = 200000;    /**     * 新闻     */    public static final Integer NEWS_CODE = 302000;    /**     * 菜谱、视频、小说     */    public static final Integer MENU_CODE = 308000;    /**     * key的长度错误(32位)     */    public static final Integer LENGTH_WRONG_CODE = 40001;    /**     * 请求内容为空     */    public static final Integer EMPTY_CONTENT_CODE = 40002;    /**     * key错误或帐号未激活     */    public static final Integer KEY_WRONG_CODE = 40003;    /**     * 当天请求次数已用完     */    public static final Integer NUMBER_DONE_CODE = 40004;    /**     * 暂不支持该功能     */    public static final Integer NOT_SUPPORT_CODE = 40005;    /**     * 服务器升级中     */    public static final Integer UPGRADE_CODE = 40006;    /**     * 服务器数据格式异常     */    public static final Integer DATA_EXCEPTION_CODE = 40007;    /**     * 获取access_token的接口地址     */    public final static String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=&secret=";    /**     * 图灵机器人接口地址     */    public final static String TURING_API_URL = "http://www.tuling123.com/openapi/api";    private Constants() {    }}

服务层处理文本消息

@Servicepublic class TextMessageHandle {    /**     * 处理文本消息     *     * @param customName  用户     * @param severName   微信服务器     * @param textContent 文本内容     * @return     * @throws Exception     */    public String processMessage(String customName, String severName, String textContent) throws Exception { String fromUserName = customName; String toUserName = severName; String content = textContent; String info = URLEncoder.encode(content, "utf-8"); String requestUrl = Constants.TURING_API_URL + "?key=" + AppConstants.API_KEY  + "&info=" + info + "&userid=" + fromUserName; String result = HttpUtil.get(requestUrl); Object obj = MessageUtil.processTuRingResult(result, toUserName,  fromUserName); return MessageUtil.ObjectToXml(obj);    }}文本消息类@XStreamAlias("xml")public class TextMessage extends BaseMessage{    @XStreamAlias("Content")    @XStreamCDATA    private String Content;    public TextMessage() {    }    public TextMessage(String fromUserName, String toUserName, String content) { super(fromUserName, toUserName); super.setMsgType(Constants.RESP_TEXT_TYPE); this.Content = content;    }    public String getContent() { return Content;    }    public void setContent(String content) { Content = content;    }}

基础消息

public class BaseMessage implements Serializable {    @XStreamAlias("ToUserName")    @XStreamCDATA    private String ToUserName;    @XStreamAlias("FromUserName")    @XStreamCDATA    private String FromUserName;    @XStreamAlias("CreateTime")    private Long CreateTime;    @XStreamAlias("MsgType")    @XStreamCDATA    private String MsgType;    public BaseMessage() { super();    }    public BaseMessage(String fromUserName, String toUserName) { super(); FromUserName = fromUserName; ToUserName = toUserName; CreateTime = System.currentTimeMillis();    }    public String getToUserName() { return ToUserName;    }    public void setToUserName(String toUserName) { ToUserName = toUserName;    }    public String getFromUserName() { return FromUserName;    }    public void setFromUserName(String fromUserName) { FromUserName = fromUserName;    }    public Long getCreateTime() { return CreateTime;    }    public void setCreateTime(Long createTime) { CreateTime = createTime;    }    public String getMsgType() { return MsgType;    }    public void setMsgType(String msgType) { MsgType = msgType;    }}

应用常量

public final class AppConstants {    /**     * 应用id     */    public static String APP_ID = "";    /**     * 应用秘钥     */    public static String APP_SECRET = "";    /**     * 令牌     */    public static String TOKEN = "";    /**     * 图灵机器人应用key     */    public static String API_KEY = "";}

最后服务层处理来自文本消息

else if (MsgType.TEXT.getValue().equals(msgType)) {    //点击菜单    //回复微信服务器成功    try { String result; result = textMessageHandle.processMessage(custermname, servername, content); writeText(result, response); }    } catch (Exception e) { logger.error("接收来至微信服务器的消息出现错误", e); writeText(MessageUtil.ObjectToXml(new TextMessage(custermname,  servername, "我竟无言以对!")), response); e.printStackTrace();    }
private void writeText(String content, HttpServletResponse response) {    Writer writer = null;    try { response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); writer = response.getWriter(); writer.write(content); writer.flush();    } catch (IOException e) { logger.error("响应客户端文本内容出现异常", e);    } finally { IOUtils.close(writer);    }}

结果


不忘初心,如果您认为这篇文章有价值,认同作者的付出,可以微信二维码打赏任意金额给作者(微信号:cx18375319923)哦,Thanks♪(・ω・)ノ