微信营销论坛

普通会员

45

帖子

0

回复

88

积分

楼主
发表于 2019-02-13 14:43:12 | 查看: 1730 | 回复: 0

出自秋天不穿秋裤,天冷也要风度的程序猿之手,必属精品!

今天给大家介绍微信个人号自动回复机器人的开发教程!使用微信机器人托管微信,可以避免不及时回复错过的消息!

少啰嗦,上代码!

1、接收所有微信消息类型
 /**
     * 微信好友发来文本消息
     * 
     * @param message
     */
    @Bind(msgType = MsgType.TEXT)
    public void handleText(WeChatMessage message) {
        if (StringUtils.isNotEmpty(message.getName())) {
            log.info("接收到 [{}] 的文本消息: {}", message.getName(), message.getText());
            sendMsg(message);
        }
    }

    /**
     * 微信好友发来图片消息
     * 
     * @param message
     */
    @Bind(msgType = MsgType.IMAGE)
    public void handleImage(WeChatMessage message) {
        if (StringUtils.isNotEmpty(message.getName())) {
            log.info("接收到 [{}] 的图片消息: {}", message.getName(), message.getImagePath());
            sendMsg(message);
        }
    }

    /**
     * 微信好友发来音频消息
     * 
     * @param message
     */
    @Bind(msgType = MsgType.VOICE)
    public void handleVoice(WeChatMessage message) {
        if (StringUtils.isNotEmpty(message.getName())) {
            log.info("接收到 [{}] 的音频消息: {}", message.getName(), message.getVoicePath());
            sendMsg(message);
        }
    }

    /**
     * 微信好友发来视频消息
     * 
     * @param message
     */
    @Bind(msgType = MsgType.VIDEO)
    public void handleVideo(WeChatMessage message) {
        if (StringUtils.isNotEmpty(message.getName())) {
            log.info("接收到 [{}] 的音频消息: {}", message.getName(), message.getVideoPath());
            sendMsg(message);
        }
    }

    /**
     * 微信好友发来名片消息
     * 
     * @param message
     */
    @Bind(msgType = MsgType.PERSON_CARD)
    public void handlePersonCard(WeChatMessage message) {
        if (StringUtils.isNotEmpty(message.getName())) {
            log.info("接收到 [{}] 的名片消息: {}", message.getName(), message.getRecommend());
            this.api().verify(message.getRecommend());
            sendMsg(message);
        }
    }

    /**
     * 微信好友发来动画消息
     * 
     * @param message
     */
    @Bind(msgType = MsgType.EMOTICONS)
    public void handleEMOTICONS(WeChatMessage message) {
        if (StringUtils.isNotEmpty(message.getName())) {
            log.info("接收到 [{}] 的动画表情消息: {}", message.getName(), JSON.toJSONString(message.getRaw()));
            sendMsg(message);
        }
    }

    /**
     * 微信好友发来分享消息
     * 
     * @param message
     */
    @Bind(msgType = MsgType.SHARE)
    public void handleShare(WeChatMessage message) {
        if (StringUtils.isNotEmpty(message.getName())) {
            log.info("接收到 [{}] 的动画表情消息: {}", message.getName(), JSON.toJSONString(message.getRaw()));
            sendMsg(message);
        }
    }

    /**
     * 发送自定义消息
     * 
     * @param fromUser
     */
    public void sendMsg(WeChatMessage message) {
        //1、检查匹配回复
        //2、是否交给机器人
        String text =  message.getText();
        boolean sendFlag = false;
        if(StringUtils.isNotEmpty(text) && null != autoMsg && autoMsg.getList().size()>0 ){
            //匹配规则
            List<Msg>  msgList = autoMsg.getList();
            for(Msg msg :msgList){
                if(text.contains(msg.getKey())){
                    this.sendMsg(message.getFromUserName(), msg.getValue());
                    sendFlag = true;
                    break;
                }
            }
        }
        if(!sendFlag){//没有匹配上
            //判断是否是个人聊天
            if(!message.isGroup()){//不是群消息,个人消息
                sendRobotMsg(message);
            }else{//是群消息
                sendRobotMsg(message);
            }
        }
         
    }
    
    /**
     * 请求机器人获取消息,再发送给其他人
     * @param message
     */
    public  void sendRobotMsg(WeChatMessage message){
        //判断消息类型,只有文本消息才处理
        if(message.getMsgType().equals(MsgType.TEXT)){
            String url = autoMsg.getAuto().getCustomRobotUrl();//自定义机器人时的请求地址
            String remoteMst = requestRemoteService(message.getText(), url);
            if(StringUtils.isNotBlank(remoteMst)){
                this.sendMsg(message.getFromUserName(), remoteMst);
            }
        }else{
            String automsg = autoMsg.getAuto().getAutoReplyMsg();// 自动回复内容
            this.sendMsg(message.getFromUserName(), automsg);
        }
        
    }
    /**
     * 请求远方服务器获取要回复的消息
     * @param message
     * @param url
     * @return
     */
    public String requestRemoteService(String text,String url){
        String msg = null;
        url = url + "?text=" + text;
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder().url(url).get().build();
        try {
            Response response = client.newCall(request).execute();
            if (response.isSuccessful() && null != response.body()) {
                msg = response.body().string();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
      return msg;
    }   
2、配置自定义匹配关键词、回复内容及机器人地址(定制加微tangjinjinwx)
{
  "auto": {
    "autoReplyMsg": "专注于微信机器人研发,可提供api接口,自由定制其功能,服务咨询请加微信tangjinjinwx",
    "customRobotUrl": "http://www.xxxx.com:10089/robot"
  },
  "list": [
    {
      "key": "群控",
      "value": "注于微信机器人、群控云控、微信客服系统研发,可提供sdk及api调用接口,可自由定制其功能,服务咨询请加微信tangjinjinwx"
    }
  ]
}

3、启动机器人,扫码登陆微信,微信机器人将自动托管你的消息!

该微信个人号机器人可用做微信个人号自动回复、群聊发消息、智能自动回复、淘宝客机器人、导购机器人、返利机器人等,也可以用做微信客服等!企业级定制可接入sdk http://www.yunlauncher.com/Blog/articles/119.html 即可实现!

源码下载地址:http://www.yunlauncher.com/app/weixin-robot.zip



您需要登录后才可以回帖 登录 | 立即注册

微信营销论坛,一个只关注手机微信营销的论坛! 浙ICP备13012843号-1