微信小程序之客服消息

magic
2021-11-09 / 0 评论 / 187 阅读 / 正在检测是否收录...
在项目上线后,可能会遇到一些人需要在线咨询,腾讯给予的解决方案是内置客服,一般可以分为2种使用方式。
  • 第一种内置在平台设置客服,在网页登陆客服处理消息
  • 第二种则是自己开发,微信会提供客服消息回调url,我们在此URl处理客服消息。

第一种微信平台使用方式

1. 微信控制台添加客服人员

image.png

2.使用方式

image.png

3.未处理消息会超时

超时的消息

  • 优点:无需任何开发,添加即可使用
  • 缺点:使用端被限制,经常要登陆查看消息,容易遗漏消息、容易出现超时。

第二种自有平台使用方式

注意事项

  • 服务端回调地址必须https
  • 2种方式只能2选1(启用并设置消息推送配置后,用户发给小程序的消息以及开发者需要的事件推送,都将被微信转发至该服务器地址中)

1. 设置回调服务器处理地址

此处使用Bmob 云逻辑功能,可以实现免服务器实现自己需要的服务端逻辑(比如支付回调,公众号回调,客服消息回调等等。。)

一、登陆 www.bmob.cn,点击应用>找到云逻辑

创建方法

创建方法.png

找到服务器调用URL地址

调用URL.png

填写到微信消息推送地址

image.png

写入微信回调验证代码

备注:微信公众号与小程序回调加密验证一直,我们可以直接复制公众号的验证代码,地址:https://docs.bmob.cn/cloudcode/WEB/d_cloudcodeweixin/doc/index.html#微信公众平台的开发,复制此页面代码

文档代码
image.png

复制到云函数

image.png

代码


function onRequest(request, response, modules) {
    var token = "weixin";         //这里的值必须与在微信公众号后台填入的token值一致
    var crypto = modules.oCrypto; //使用加解密模块
    var httptype = request.method; //获取调用云端逻辑的是post或者get方式
    var xml2js = modules.oXml2js; //实现xml和js格式之间的相互转换
    var db = modules.oData;         //数据库对象
    if ("GET" == httptype) {
         //是get方法,则是微信验证回调的url是否有效
          var oriStr = [token, request.query.timestamp, request.query.nonce].sort().join('')
          var code = crypto.createHash('sha1').update(oriStr).digest('hex');
          if (code == request.query.signature) { //验证通过,输出
              response.end(request.query.echostr);
          } else {
              response.end("Unauthorized");
          }
    } else {
           //是post,接收定阅者发送过来的消息后返回,把反馈意见存储表“message”中,或做一些其他操作都可以。
         


    }
}

这里的 else 可以做的事情可多了,例如:

  • 发送个短信或邮件给你的客服人员,告知有人来问什么问题了,客服人员觉得重要可以回复,不重要可以忽略。
  • 实现与用户交互(例如回复1.话费问题 回复2.流量问题。。。)
  • 接入第三方只能聊天助手,例如小娜这种。
  • 实现自动回复,第一次提示XXX欢迎你咨询本小程序,第二提醒你反馈的信息已经收到。
  • 写入到数据表,再小程序端查出来,实现最新微信官方小程序:公众平台助手一样的功能。直接手机回复客服消息
  • 等等。。。

文档有提供写入数据表代码

//是post,接收定阅者发送过来的消息后返回,把反馈意见存储表“message”中。
            db.insert({
              "table":"message",             //表名
              "data":{"userId":request.body.xml.FromUserName,"content":request.body.xml.Content}           
            },function(err,data){    
           //写入数据库成功处理代码                 
                         });

比如我这实现个简单例子

image.png

公开免费接口实现微信消息主动推送
image.png


image.png

云逻辑里面调用另外一个云逻辑代码

文档地址
https://docs.bmob.cn/cloudcode/WEB/b_developdoc/doc/index.html#云端逻辑对象
var functions = modules.oFunctions;
functions.run({
               "name": "reply",
               "data":{"userId":request.body.xml.FromUserName,"content":content}
            },function(err,data){
               //回调函数
               if(request.body.xml.Content!=undefined){
                   functions.run({
                       "name": "sendMaster",
                       "data":{"userId":request.body.xml.FromUserName,"content":request.body.xml.Content}
                    },function(err,data){
                       //回调函数
                       
                    });    
               }
            });    

主动发送消息代码

//云端逻辑方法名:reply

function onRequest(request, response, modules) {

        var content = request.body.content || '你好。';
        var userId = request.body.userId || 'ocBzs0I9fkcJ6kq1_xSxtN5dj7bI';
    
        //获取Http模块
        var http = modules.oHttp;
        
        var options = {
          "url": 'https://api.bmob.cn/1/wechatApp/getAccessToken',
          "headers": {
            "x-bmob-application-id": "xx",
                    "x-bmob-rest-api-key": "xx",
            'Content-Type': 'application/json'
          }
        };
        http.get(options, function(error, res, body) {
            var result = JSON.parse(body)
            // response.send(result.access_token);
            
            
             /**
            *主动发起消息给用户请求
            */
            //获取Http模块
            var http = modules.oHttp;
            
            var options = {
              "url": 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='+result.access_token,
              "body":JSON.stringify({"touser":userId,"msgtype":"text","text":{"content":content}})
            };
            // response.end(options.url);
            http.post(options, function(error, res, body) {
                console.log(body);
                response.send(body);
            });
        });
        
       
}                                                                                    

总结

前面截图指的微信回调地址选json Bug的问题是返回的头部不符合http标准。返回json格式header头应该是Content-Type:application/json,而微信的选json还是Content-Type:text/xml,如果将来微信改正过来,则支持选json格式。
无服务函数已经越来越受开发者欢迎,无需购买主机,搭建环境。不到10行代码,实现微信服务器返回回调授权。这是未来微型服务端的发展方向在线编程。腾讯云的无服务函数也已经公侧,个人测式暂时还是Bmob的功能实用很多。

无服务函数.png

12

评论 (0)

取消