小程序接入客服,小程ヽ(′▽?zhuān)?ノ序客信小消息我們就需要調用微信客服功能。服自復微很簡(jiǎn)單,程序采坑只需要在頁(yè)面中使用
<button open-type="contact" />可以顯示進(jìn)入客服會(huì )話(huà)按鈕??头?/p>
然后我們就能登錄網(wǎng)頁(yè)版的自動(dòng)微信公眾平臺的客( ???)服頁(yè)面進(jìn)去回復各種千奇百怪的問(wèn)題了。
但(╬?益?)是回復有個(gè)問(wèn)題,我們如何做到自動(dòng)回復呢?小程序客信小消息
那么就需要通過(guò)自己的服務(wù)器去通過(guò)微信端請求服務(wù),完成這項工作。服自復微
接入指引 · 小程序
developers.weixin.qq.com
附上官網(wǎng)接入指南,程序采坑這可是客服相當的簡(jiǎn)潔。
First
填寫(xiě)??服務(wù)器配置的自動(dòng)圖:
在這里填寫(xiě)的同時(shí)我們需要在后臺寫(xiě) get 請求驗證。
官方提??供了一個(gè)非常簡(jiǎn)潔的回復一個(gè) php 代碼。??。小程序客信小消息那是服自復微相當的坑爹啊。
這里我是程序采坑用 expre??ss 寫(xiě)得提??供一個(gè)例子
function checkSignature(params) { var key = [params.token, params.timestamp, params.nonce].sort().join(''); var sha1 = crypto(′▽?zhuān)?.createHash('sha1'); sha1.update(key); return sha1.digest('hex') ==??= params.signature; }app.get('/wxlalalala', function(req, res, next) { let token = 'xxxxx'; // 填寫(xiě)服務(wù)器配置上??所填的token let isCheckヽ(′ー`)ノ = chヽ(′▽?zhuān)?ノeckSignature((╥_╥){(′ω`) signature: req.query.signature, timestamp: req.query.timestamp, nonce: req.query.nonce, token: token, }); req.body = req.quer??y.echostr; res.send(req.body); re?turn req.body; });然后我們就完成了最關(guān)鍵的一步。之后就可以(yi)去寫(xiě)??,客戶(hù)發(fā)了什么我們就自動(dòng)回啥的邏輯。
Second
當我們去接受客戶(hù)發(fā)的消息和事件,我們都需要去通(tong)過(guò)一個(gè)post去接受。
給上一個(gè)官方網(wǎng)站:
接口調用憑證 · 小程序
developers.weixin.qq.com???
但(?Д?)是毫無(wú)代碼示例,算了(le)還在自(′ω`)己擼吧。
以下自己的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&??amp;appid=xxxx&secret=sssss'; // grant_type一定要(?Д?)填client_credential. let options = { method: 'GET', url: URL, }; retu(◎_◎;)rnヽ(′▽?zhuān)?/ new Promise((resolve, reject) => { request(options, function(err, res, body) { if (res) { access_token = JSON.parse(body).access_toke??n; let expires_in = parseInt(JSON.parse(body).expires_in) - 10; setTimeout((??) => { access_(°□°)token = ''; }, expires_in * 1000); resol(′;ω;`)ve(access_token); } else { reject(err); } }); });};因為token有7200s的過(guò)期時(shí)間,所以就存在內存里了。
Ok這個(gè)我們就有`access_token`能去做客服自動(dòng)回復啦!
Third
再來(lái)一個(gè)官方客服發(fā)送消息的文檔:
?
developers.weixin.qq.com
發(fā)現又是啥都沒(méi)用。。。
還是自(zi)己動(dòng)手寫(xiě)一個(gè)吧。。畢竟那么精瘦的文檔。。T T.那就寫(xiě)一個(gè)回復文本消息的吧!??其他的類(lèi)似自己擴展。(′ω`)
const post??Json = function(param) { var options = { url: param.url, method: 'POST', body: paヽ(′?`)ノram.body, json: true, }; request(options, function callback(error, response, data) { if (!error && respon(?Д?)se.statusCode == 200) { param.suc(???)cess(response.er??rcode); } 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_??t??ok??en, body: { tous???er: data.FromUserName, msgtype: 'text', te??xt: { content: content, }, }, success: function(res) { console.log(res, 'send successed!1'); }, error: function(??err) { console.log(err); }, }); }回復的函數也寫(xiě)好了,來(lái)到最后根據客戶(hù)發(fā)來(lái)的消息我們作為智能(°o°)客服去回消息啦!不多說(shuō)??直接上code。文檔。。。就算了只能看看參數啥的。。哎
developers.weixin.qq.com
app.post('/wxlalalalla', (req, res, next) => { let token = 'xxxxx';// 填寫(xiě)服務(wù)器配置那的token let reqBody?? = req.body; let isCheck = checkSignature({ signature: req.query.si??gnature, timestamp: req.query.timestamp, nonce: req.query.nonce, token: token, }); if (isCheck) { let welcome= '歡迎(′ω`)'; switch (reqBody.MsgTyp??e) { case 'text': { //文本消息 sendTextMessag(′ω`)e('您好,【'+reqBody.Content+'】是(╯°□°)╯︵ ┻━┻未知命令,已轉發(fā)給人工處理(li)。\n'+welcomeTips, reqBody, getAccessToken()); break; } case?? 'image': { //用戶(hù)在客服會(huì )話(huà)中發(fā)送圖片消息 sendImageMessag(′_`)e('xxxxxxx', reqBody, getAccessToken()); break; } case 'event': { sendTextMessage(wel??come, reqBody, getAccessToken()); break; } default??: break; } } res.send('success'); next(); res.end(); });完成啦愉快的使用自動(dòng)客服回復??!