微信小程序客服自动回复消息功能采坑(完)

小程序接入客服,我们就需要调用微信客服功能。很简单,只需要在页面中使用 <button open-type="contact" /> 可以显示进入客服会话按钮。 然后我们就能登录网页版的微信公众平台的客服页面进去回复各种千奇百怪的问题了。 但是有个问题,我们如何做到自动回复呢? 那么就需要通过自己的服务器去通过微信端请求服务,完成这项工作。 接入指引 · 小程序附上官网接入指南,这可是相当的简洁。

First

填写服务器配置的图:

<!—more—> 在这里填写的同时我们需要在后台写 get请求验证。 官方提供了一个非常简洁的一个php代码。。那是相当的坑爹啊。 这里我是用 express写得提供一个例子

function checkSignature(params) {
    var key = [params.token, params.timestamp, params.nonce].sort().join('');
    var sha1 = crypto.createHash('sha1');
    sha1.update(key);
    return sha1.digest('hex') === params.signature;
  }
app.get('/wxlalalala', function(req, res, next) {
    let token = 'xxxxx'; // 填写服务器配置上所填的token
    let isCheck = checkSignature({
      signature: req.query.signature,
      timestamp: req.query.timestamp,
      nonce: req.query.nonce,
      token: token,
    });
    req.body = req.query.echostr;
    res.send(req.body);
    return req.body;
  });
复制代码

然后我们就完成了最关键的一步。之后就可以去写,客户发了什么我们就自动回啥的逻辑。

Second

当我们去接受客户发的消息和事件,我们都需要去通过一个post去接受。 当然第一我们需要先去拿access_token。没有这个我们啥事情都做不了。 给上一个官方网站: 接口调用凭证 · 小程序,但是毫无代码示例,算了还在自己撸吧。 以下自己的code:

let access_token = '';

  const getAccessToken = function() {
    if (access_token !== '') {
      return access_token;
    }
    let URL =
      'https://api.weixin.qq.com/cgi-bin/token?grant_type= client_credential&appid=xxxx&secret=sssss'; // grant_type一定要填client_credential.
    let options = {
      method: 'GET',
      url: URL,
    };
    return new Promise((resolve, reject) => {
      request(options, function(err, res, body) {
        if (res) {
          access_token = JSON.parse(body).access_token;
          let expires_in = parseInt(JSON.parse(body).expires_in) - 10;
          setTimeout(() => {
            access_token = '';
            //getAccessToken();
          }, expires_in * 1000);
          resolve(access_token);
        } else {
          reject(err);
        }
      });
    });
  };
复制代码

因为token有7200s的过期时间,所以就存在内存里了。 Ok这个我们就有access_token能去做客服自动回复啦!

Third

再来一个官方客服发送消息的文档: 发送客服消息 · 小程序,发现又是啥都没用。。。 还是自己动手写一个吧。。毕竟那么精瘦的文档。。T T.那就写一个回复文本消息的吧!其他的类似自己扩展。

  const postJson = function(param) {
    var options = {
      url: param.url,
      method: 'POST',
      body: param.body,
      json: true,
    };
    request(options, function callback(error, response, data) {
      if (!error && response.statusCode == 200) {
        param.success(response.errcode);
      } else {
        param.error(error);
      }
    });
  };

  async function sendTextMessage(content, data, access_token) {
    await postJson({
      url:
        'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=' +
        access_token,
      body: {
        touser: data.FromUserName,
        msgtype: 'text',
        text: {
          content: content,
        },
      },
      success: function(res) {
        console.log(res, 'send successed!1');
      },
      error: function(err) {
        console.log(err);
      },
    });
  }
复制代码

Last

回复的函数也写好了,来到最后根据客户发来的消息我们作为智能客服去回消息啦!不多说直接上code。文档。。。就算了只能看看参数啥的。。哎 客服消息 · 小程序

app.post('/wxlalallala', (req, res, next) => {
    let token = 'xxxxx';// 填写服务器配置那的token
    let reqBody = req.body;
    let isCheck = checkSignature({
      signature: req.query.signature,
      timestamp: req.query.timestamp,
      nonce: req.query.nonce,
      token: token,
    });
    if (isCheck) {
      let welcome= '欢迎';
         switch (reqBody.MsgType) {
        case 'text': {
          //文本消息
          sendTextMessage('您好,【'+reqBody.Content+'】是未知命令,已转发给人工处理。\n'+welcomeTips, reqBody, getAccessToken());
          break;
        }
        case 'image': {
          //用户在客服会话中发送图片消息
          sendImageMessage('xxxxxxx', reqBody, getAccessToken());
          break;
        }
        case 'event': {
            sendTextMessage(welcome, reqBody, getAccessToken());
          break;
        }
        default:
          break;
      }
    }
    res.send('success');
    next();
    res.end();
  });
复制代码

完成啦愉快的使用自动客服回复!!

转载于:https://juejin.im/post/5b364e576fb9a00e45114b12

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值