微信小程序客服自動回覆消息功能採坑(完)

小程序接入客服,咱們就須要調用微信客服功能。很簡單,只須要在頁面中使用 <button open-type="contact" /> 能夠顯示進入客服會話按鈕。 而後咱們就能登陸網頁版的微信公衆平臺的客服頁面進去回覆各類千奇百怪的問題了。 可是有個問題,咱們如何作到自動回覆呢? 那麼就須要經過本身的服務器去經過微信端請求服務,完成這項工做。 接入指引 · 小程序附上官網接入指南,這但是至關的簡潔。javascript

First

填寫服務器配置的圖: php

<!—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;
  });
複製代碼

而後咱們就完成了最關鍵的一步。以後就能夠去寫,客戶發了什麼咱們就自動回啥的邏輯。html

Second

當咱們去接受客戶發的消息和事件,咱們都須要去經過一個post去接受。 固然第一咱們須要先去拿access_token。沒有這個咱們啥事情都作不了。 給上一個官方網站: 接口調用憑證 · 小程序,可是毫無代碼示例,算了還在本身擼吧。 如下本身的code:java

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能去作客服自動回覆啦!express

Third

再來一個官方客服發送消息的文檔: 發送客服消息 · 小程序,發現又是啥都沒用。。。 仍是本身動手寫一個吧。。畢竟那麼精瘦的文檔。。T T.那就寫一個回覆文本消息的吧!其餘的相似本身擴展。json

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();
  });
複製代碼

完成啦愉快的使用自動客服回覆!!api

相關文章
相關標籤/搜索