微信小程序开发之客服自动回复消息功能踩坑
白羽 2018-07-18 来源 :网络 阅读 1919 评论 0

摘要:本文将带你了解微信小程序开发之客服自动回复消息功能踩坑,希望本文对大家学微信有所帮助。

小程序接入客服,我们就需要调用微信客服功能。很简单,只需要在页面中使用 <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();
  });
完成啦愉快的使用自动客服回复!!    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之微信频道!

本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程