微信公众号接入自己的客服系统,自定义客服系统

微信公众号客服功能对接(微信自己的客服系统)



一、前提

消息的对话是由两部分组成一个发送消息给对方,一个接收到对方的消息

1-1、接收对方的消息

在开发之前,我们需要给微信提供接口,这个接口支持Get和Post请求,以后微信后台和我们服务就是通过这个接口去沟通的。

在填写接口的时候,微信会去调用你接口的Get方法验证: 因为可能有伪造请求,所以每次你都要在业务进行前进行验证,这个请求是否合法,具体参考这里:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html

代码如下:

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/portal")
public class WxHandler {

    @GetMapping(produces = "text/plain;charset=utf-8")
    public String authGet(
            @RequestParam(name = "signature", required = false) String signature,
            @RequestParam(name = "timestamp", required = false) String timestamp,
            @RequestParam(name = "nonce", required = false) String nonce,
            @RequestParam(name = "echostr", required = false) String echostr) {

        // 1、对数据进行进行校验

        return echostr;
    }

    @PostMapping(produces = "application/xml; charset=UTF-8")
    public String post(@RequestBody String requestBody,
                       @RequestParam("signature") String signature, @RequestParam("timestamp") String timestamp,
                       @RequestParam("nonce") String nonce, @RequestParam("openid") String openid,
                       @RequestParam(name = "encrypt_type", required = false) String encType,
                       @RequestParam(name = "msg_signature", required = false) String msgSignature) throws InterruptedException {
        // 1、对数据进行进行校验

        // 2、业务处理

        // 3、注意如果在5s内没有收到回复,会重试三次,还是失败后就会告知用户,该公众号服务中断

        return "";
    }
}

注意如果在5s内没有收到回复,会重试三次,还是失败后就会告知用户,该公众号服务中断

上面post请求里面的requestBody就包含了用户的消息内容和用户信息,我们就可以进行业务处理了。


我们提供的这个接口需要外网,我们可以借助:ngrok

不过现在正式公众号好像屏蔽了这个,测试公众号还可以用


1-2、发送消息给对方

自定义客服是基于微信提供的回复用户消息接口触发的,也就是用户触发了某个动作后,48小时内我们可以对这个消息进行回复。

目前支持的动作

  • 用户发送信息
  • 点击自定义菜单(仅有点击推事件、扫码推事件、扫码推事件且弹出“消息接收中”提示框这3种菜单类型是会触发客服接口的)
  • 关注公众号
  • 扫描二维码
  • 支付成功

然后我们就可以多次调用发消息接口进行消息发送了,目前限制一日50w次调用,每个月可以有10次清空的机会。

在这里插入图片描述

全部类型消息接口地址


这里有一个基于微信操作封装好的框架,比如上面的发消息,如果使用了这个框架就可以这样写

@GetMapping("/fun")
public boolean String() throws WxErrorException {
    WxMpKefuMessage message = new WxMpKefuMessage();
    message.setToUser("o2tmFv6nFgxPzbYt4fqlgvzyaL8s");
    message.setMsgType("text");
    message.setContent("等待客服接入");
    return weixinService.getKefuService().sendKefuMessage(message);
}

这个框架封装的很好,功能很强大,文档地址:https://github.com/Wechat-Group/WxJava


1-3、消息推送机制

下面的业务实现都是基于WebSocket技术进行数据的交互,不懂的可以先去看看。

基于WebSocket实现Web端聊天系统


二、直接后台(单个服务)

2-1、业务图

在这里插入图片描述

当用户消息来了之后,指定一个客服和这个用户建立连接,客服和客户的连接session全部都在一个服务器上面,直接业务处理就好了。


三、直接后台(多个服务)

3-1、业务图

在这里插入图片描述

四、转接后台(单个服务)

可能有的人不太理解什么是转接后台,比如我现在所做的业务,微信公众号直接后台(我们称之为微厅),我们的微厅只提供缴费、留言、办理业务等事情。

我们有一个专门的客服工单系统,有专门的客服去提供对客户的支持,所以我们的业务微信聊天功能当然也是应该做在这个地方。

但是因为微信后台地址只能绑定一个(这个也很好理解),所以我们的微厅接收到消息之后要把消息推送到我们的客服工单系统,我称之为转接后台。


4-1、业务图

在这里插入图片描述

五、转接后台(多个服务)

5-1、业务图

在这里插入图片描述

除去微信和前端,我们主要是两种服务(微厅和客服工单都是分布式的),其中的难点是消息的消费,有两种做法:

  • 微厅做,微厅可以实现每个消息精准的投放到对应的服务器(使用redis分布式缓存,数据共享,可以知道每个客服与哪个机器建立连接)
  • 工单做,已经建立连接的消息使用广播消费,这样微厅就不需要判断了。

集群消费:当使用集群消费模式时,MQ 认为任意一条消息只需要被集群内的任意一个消费者处理即可。

广播消费:当使用广播消费模式时,MQ 会将每条消息推送给集群内所有注册过的客户端,保证消息至少被每台机器消费一次。


六、其它

至于客户怎么和客服建立连接,这个就要看具体的业务逻辑了,当然了总的来说是要均摊的。

### 微信公众号集成智能客服教程 #### 准备工作 为了顺利地将智能客服集成至微信公众号,需先注册并验证一个微信公众号账户。对于初步尝试者而言,可利用微信公众平台提供的测试账号来进行开发与调试[^1]。 #### 创建大模型问答应用 借助于先进的AI技术,可以通过特定的服务提供商(如百炼)来创建一个具备强大自然语言处理能力的大模型问答应用。这一步骤的关键在于获得API访问权限以及理解其接口文档,以便后续能够有效地调用该服务进行消息处理和响应生成[^2]。 #### 构建连接流程 采用阿里云AppFlow这样的无代码解决方案简化了从微信端接收用户输入并将之传递给已构建好的RAG(Retrieval-Augmented Generation)应用程序的过程。此过程同样涵盖了安全认证机制的确立以保障数据传输的安全性。 #### 配置智能客服组件 进入微信公众号管理后台调整相应设置选项,使得当接收到用户的询问时自动触发预先设定好的AI助手介入对话环节。这一操作通常涉及填写先前所获知的第三方服务平台所提供的必要参数信息,比如API密钥等[^3]。 #### 添加个性化知识库支持 为了让智能客服表现得更加贴合实际业务需求,建议提前准备好一系列常见问题解答资料作为补充素材供机器学习算法训练使用。这些额外的知识可以帮助提高回复准确性及用户体验满意度。 ```python from flask import Flask, request, jsonify import requests app = Flask(__name__) @app.route('/wechat', methods=['POST']) def wechat(): data = request.json message = data.get('message') # 调用ERNIE Bot API 获取回复内容 response = requests.post( url='https://api.example.com/erniebot', json={'prompt': message} ).json() reply_message = response['result'] return jsonify({'reply': reply_message}) if __name__ == '__main__': app.run(port=8080) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值