小红书如何实现私信自动回复

小红书如何实现私信自动回复


前言

声明:本文章只做技术探讨

我们是使用真机做矩阵,之前也尝试过使用云手机和指纹浏览器做矩阵,但是会被限流,很难做起来,真机相对而言,会好很多。

一、实现方案

1:每个账号每个月都消费1000聚光,也就是1000RMB,可以使用私信通
优势:简单、省事、有马内即可为
劣势:壕无人性,一两个号还好,对于我们做矩阵的来说,根本就不现实

2:通过自动化脚本,实现自动回复
优势:需要技术支撑
劣势:省钱😄

二、方案选择

因为我们矩阵的账号比较多,不可能为每个号每个月都投入1000,当然也有可能是我们做的赛道不怎么赚钱,还没有让我们壕到这种地步,所以作为技术的我,毅然决然的选择了第二种方案

三、怎么实现

1:通过接口,获取私信的数据
2:通过自动化脚本, 实现消息的回复

四、代码展示

    public Boolean uploadChatRecord(Long accountId, String body) {
        JSONObject entries = JSONUtil.parseObj(body);
        Boolean isInit = entries.getBool("init");
        MsgChatUserVo chatUser = entries.get("chatUser", MsgChatUserVo.class);
        JSONArray historyChatList = entries.getJSONArray("historyChatList");
        for (Object o : historyChatList) {
            JSONObject historyChatJson = JSONUtil.parseObj(o);
            Long storeId = historyChatJson.getLong("store_id");
            //判断这条消息是否存在,如果已经存在,证明消息上传完毕
            if (this.existsByChatUserIdAndStoreId(chatUser.getChatUserId(), storeId)) {
                return true;
            }
            MsgChatRecord chatRecord = this.buildMsgChatRecordByJson(chatUser, historyChatJson);
            this.baseMapper.insert(chatRecord);

            // 如果此消息不是自己发的,并且不是初始化消息记录,进行消息提示
            if (!isInit && !ObjUtil.equals(chatRecord.getUid(), chatRecord.getReceiverId())) {
                //自动回复
                triggerHandle.messageTriggerHandle(chatRecord);
                SseMessageUtils.sendMessage(chatRecord.getUserId(),
                    new SseMessageModel(SseMessageType.NEW_MESSAGE, "您收到了一条新的私信,请及时查看!"));
            }
        }
        return false;
    

上面的方法,接收到手机推送过来的消息后,调用triggerHandle.messageTriggerHandle()进行异步的处理

 @Async
    public void messageTriggerHandle(MsgChatRecord record) {
        try {
            Long accountId = record.getAccountId();
            //根据账号ID查询对于的触发配置ID
            Long triggerId = triggerService.queryTriggerIdByAccountId(accountId);
            if (ObjUtil.isNull(triggerId)) {
                return;
            }
            //根据触发配置ID,查询触发ID
            TriggerVo trigger = triggerService.queryById(triggerId);
            if (ObjUtil.isNull(trigger)) {
                return;
            }

            boolean flag = false;

            //此消息的storeId是1,并且开启了开口回复
            if (ObjUtil.equals(1L, record.getStoreId()) && GlobalSwitch.isEnable(trigger.getFirstMsgReplyEnable())) {
                //下发私信回复
                List<LexiconDetailsVo> lexiconDetailsList = lexiconDetailsService.queryListByLexicoId(trigger.getFirstMsgReplyLexiconId());
                if (CollectionUtil.isNotEmpty(lexiconDetailsList)) {
                    String content = record.getContent();
                    //获取关键词匹配度最高的词组
                    LexiconDetailsVo lexicon = lexiconDetailsService.matchLexicon(content, lexiconDetailsList);
                    if (ObjUtil.isNotNull(lexicon)) {
                        flag = true;
                        String recipientId = record.getUid();
                        SendMsgTask task = SendMsgTask.buildByLexiconDetails(accountId, recipientId, lexicon);
                        task.setBusinessId(record.getChatRecordId());
                        task.setTriggerId(trigger.getTriggerId());
                        task.setTriggerType("first_msg");
                        sendMsgTaskStrategy.executeTask(task);
                    }
                }
            }

            //不是开会回复,且开启了自动回复
            if (!flag && GlobalSwitch.isEnable(trigger.getAutoReplyMsgEnable())) {
                //下发私信回复
                List<LexiconDetailsVo> lexiconDetailsList = lexiconDetailsService.queryListByLexicoId(trigger.getReplyMsgLexiconId());
                if (CollectionUtil.isNotEmpty(lexiconDetailsList)) {
                    String content = record.getContent();
                    //获取关键词匹配度最高的词组
                    LexiconDetailsVo lexicon = lexiconDetailsService.matchLexicon(content, lexiconDetailsList);
                    if (ObjUtil.isNotNull(lexicon)) {
                        String recipientId = record.getUid();
                        SendMsgTask task = SendMsgTask.buildByLexiconDetails(accountId, recipientId, lexicon);
                        task.setBusinessId(record.getChatRecordId());
                        task.setTriggerId(trigger.getTriggerId());
                        task.setTriggerType("msg");
                        sendMsgTaskStrategy.executeTask(task);
                    }
                }
            }
        } catch (Exception e) {
            log.error("消息触发处理异常:", e);
        }
    }

在messageTriggerHandle()方法中,我们会对消息的内容以及是不是第一条消息进行判断,如果是第一条消息,就会执行开口回复,如果不是第一条消息,需要对消息内容进行匹配,做出最正确的回复。

同理,也可以实现评论的自动回复

总结

以上就是我实现消息自动回复的方案,如果大家有更好的方案,欢迎一起来探讨探讨!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值