微信小程序客服自動回復消息功能采坑

小程序接入客服,我們就需要調用微信客服功能。很簡單,只需要在頁面中使用

可以顯示進入客服會話按鈕。

然後我們就能登錄網頁版的微信公眾平臺的客服頁面進去回覆各種千奇百怪的問題了。

但是有個問題,我們如何做到自動回覆呢?

那麼就需要通過自己的服務器去通過微信端請求服務,完成這項工作。

接入指引 · 小程序

developers.weixin.qq.com

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

附上官網接入指南,這可是相當的簡潔。

First

填寫服務器配置的圖:

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

在這裡填寫的同時我們需要在後臺寫 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`。沒有這個我們啥事情都做不了。

給上一個官方網站:

接口調用憑證 · 小程序

developers.weixin.qq.com

但是毫無代碼示例,算了還在自己擼吧。

以下自己的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 = '';
}, expires_in * 1000);
resolve(access_token);
} else {
reject(err);
}
});
});
};

因為token有7200s的過期時間,所以就存在內存裡了。

Ok這個我們就有`access_token`能去做客服自動回覆啦!

Third

再來一個官方客服發送消息的文檔:

發送客服消息 · 小程序

developers.weixin.qq.com

發現又是啥都沒用。。。

還是自己動手寫一個吧。。畢竟那麼精瘦的文檔。。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。文檔。。。就算了只能看看參數啥的。。哎

客服消息 · 小程序

developers.weixin.qq.com

app.post('/wxlalalalla', (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://zhuanlan.zhihu.com/p/38689971


分享到:


相關文章: