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