收藏
回答

小程序客服消息,使用开发者服务器接收消息推送,将消息转发到客服系统

功能描述

小程序客服消息,使用开发者服务器接收消息推送,应用可以正常接收到客服消息;然后如果客户输入“转人工”后,需要将消息转发到客服系统,然后通过官方提供的客服界面,进行人工回复

功能实现

public Object sendCustomerServiceMsg(HttpServletRequest request) throws IOException, WxErrorException {
        BufferedReader streamReader = new BufferedReader( new InputStreamReader(request.getInputStream(), "UTF-8"));
        StringBuilder responseStrBuilder = new StringBuilder();
        String inputStr;
        while ((inputStr = streamReader.readLine()) != null){
            responseStrBuilder.append(inputStr);
        }
        WxMaMessage message = WxMaMessage.fromJson(responseStrBuilder.toString());
        log.info("接收到微信客服的消息内容,通过WxMessage转json后内容为:{}", JSON.toJSONString(message));

        if (message.getMsgType().equals("event")) {
            log.info("收到微信客服消息为event类型");
            return "success";
        }
        //todo 此处判断有问题
        if (WxMaConstants.KefuMsgType.TEXT.equals(message.getMsgType()) && message.getContent().contains("转人工")) {
            // 设置转到客服消息 进行人工回复
            WxMaXmlOutMessage wxMaXmlOutMessage = new WxMaXmlOutMessage();
            wxMaXmlOutMessage.setCreateTime(message.getCreateTime().longValue());
            wxMaXmlOutMessage.setFromUserName(message.getToUser());
            wxMaXmlOutMessage.setToUserName(message.getFromUser());
            wxMaXmlOutMessage.setMsgType("transfer_customer_service");
            // 这里注意 如果你在配置消息推送是是xml 返回xml 如果是json返回json
            log.info("收到需要转人工的消息,具体信息为:{}", JSON.toJSONString(wxMaXmlOutMessage));
            //使用fastjson,将对象转换为JSON
            return JSON.toJSON(wxMaXmlOutMessage);
        } else {
            //根据message中的msgId,判断消息是否重复
            ...
           
            WxMaKefuMessage kefuMessage = new WxMaKefuMessage();
            kefuMessage.setToUser(message.getFromUser());

            String recoverMsg = "您好,收到了您的反馈,请稍等!";
            WxMaKefuMessage.KfText text = new WxMaKefuMessage.KfText(recoverMsg);
            kefuMessage.setText(text);
            kefuMessage.setMsgType(WxMaConstants.KefuMsgType.TEXT);
            wxMaMsgService.sendKefuMsg(kefuMessage);
            return "success";
        }
    }

问题描述

微信平台中,功能-客服-小程序中,配置如下:

1.应用可以正常收到客户发送的客服消息(与预期一致

2.如果客户发送“转人工”,此时在官方客服界面,未收到相关的消息,相关的请求如下:

{"createTime":1723687264,"fromUserName":"gh_2df7****f064","msgType":"transfer_customer_service","toUserName":"oVGMq5CW*****MZVOQyx2VM"}


如果在功能-客服-小程序中,将“在官方客服工作平台收发消息”开启后

官方客服界面可以正常收到消息提醒,但是应用中收不到客户发送的消息

有遇到过类似情况的大佬吗?请帮忙指点

回答关注问题邀请回答
收藏

1 个回答

  • 枫林树鸟
    枫林树鸟
    08-15

    上述问题,已解决,具体解决方案为:

    需要将客服消息转发到客服系统时,需要严格按照微信的要求返回给微信,如:createTime、fromUserName、msgType、toUserName这四个字段,必须要首字母大写,即使使用的是JSON格式接收和返回,所以返回的字段必须是:CreateTime、FromUserName、MsgType、ToUserName

    然后需要将微信客服消息转发给客服系统,需要注意的点有:

    1. 如果你在配置消息推送是是xml 返回xml,如果是json返回json
    2. fromUserName字段,需要用message.getToUser()的值;ToUserName字段,需要用message.getFromUser()的值;msgType的值,需要用transfer_customer_service
    3. json中key的值,必须严格按照微信官方文档中提供的key,所以返回的字段必须是:CreateTime、FromUserName、MsgType、ToUserName(***这个很重要***)
    4. 返回给客服消息的json(如果接收是用json),最好将json中key按照首字母进行排序(此处需要验证,我是排序了)
    {"CreateTime":1723707466,"FromUserName":"gh_2d***24f064","MsgType":"transfer_customer_service","ToUserName":"oVGMq5C***GBKjMZVOQyx2VM"}
    


    08-15
    有用
    回复
登录 后发表内容