微信小程序之客服消息
2017-09-28 本文已影响4402人
1a5ebb4ca52a
在项目上线后,可能会遇到一些人需要在线咨询,腾讯给予的解决方案是内置客服,一般可以分为2种使用方式。
- 第一种内置在平台设置客服,在网页登陆客服处理消息
-
第二种则是自己开发,微信会提供客服消息回调
url
,我们在此URl处理客服消息。
第一种微信平台使用方式
1. 微信控制台添加客服人员
image.png2.使用方式
image.png3.未处理消息会超时
超时的消息- 优点:无需任何开发,添加即可使用
- 缺点:使用端被限制,经常要登陆查看消息,容易遗漏消息、容易出现超时。
第二种自有平台使用方式
注意事项
- 服务端回调地址必须https
- 2种方式只能2选1(启用并设置消息推送配置后,用户发给小程序的消息以及开发者需要的事件推送,都将被微信转发至该服务器地址中)
1. 设置回调服务器处理地址
此处使用Bmob 云逻辑功能,可以实现免服务器实现自己需要的服务端逻辑(比如支付回调,公众号回调,客服消息回调等等。。)
一、登陆 www.bmob.cn,点击应用>找到云逻辑
创建方法
创建方法.png找到服务器调用URL地址
调用URL.png填写到微信消息推送地址
image.png写入微信回调验证代码
备注:微信公众号与小程序回调加密验证一直,我们可以直接复制公众号的验证代码,地址:https://docs.bmob.cn/cloudcode/WEB/d_cloudcodeweixin/doc/index.html#微信公众平台的开发,复制此页面代码
文档代码
image.png
复制到云函数
image.png代码
function onRequest(request, response, modules) {
var token = "weixin"; //这里的值必须与在微信公众号后台填入的token值一致
var crypto = modules.oCrypto; //使用加解密模块
var httptype = request.method; //获取调用云端逻辑的是post或者get方式
var xml2js = modules.oXml2js; //实现xml和js格式之间的相互转换
var db = modules.oData; //数据库对象
if ("GET" == httptype) {
//是get方法,则是微信验证回调的url是否有效
var oriStr = [token, request.query.timestamp, request.query.nonce].sort().join('')
var code = crypto.createHash('sha1').update(oriStr).digest('hex');
if (code == request.query.signature) { //验证通过,输出
response.end(request.query.echostr);
} else {
response.end("Unauthorized");
}
} else {
//是post,接收定阅者发送过来的消息后返回,把反馈意见存储表“message”中,或做一些其他操作都可以。
}
}
这里的 else
可以做的事情可多了,例如:
- 发送个短信或邮件给你的客服人员,告知有人来问什么问题了,客服人员觉得重要可以回复,不重要可以忽略。
- 实现与用户交互(例如回复1.话费问题 回复2.流量问题。。。)
- 接入第三方只能聊天助手,例如小娜这种。
- 实现自动回复,第一次提示XXX欢迎你咨询本小程序,第二提醒你反馈的信息已经收到。
- 写入到数据表,再小程序端查出来,实现最新微信官方小程序:公众平台助手一样的功能。直接手机回复客服消息
- 等等。。。
文档有提供写入数据表代码
//是post,接收定阅者发送过来的消息后返回,把反馈意见存储表“message”中。
db.insert({
"table":"message", //表名
"data":{"userId":request.body.xml.FromUserName,"content":request.body.xml.Content}
},function(err,data){
//写入数据库成功处理代码
});
比如我这实现个简单例子
image.png公开免费接口实现微信消息主动推送
image.png
image.png
云逻辑里面调用另外一个云逻辑代码
文档地址
https://docs.bmob.cn/cloudcode/WEB/b_developdoc/doc/index.html#云端逻辑对象
var functions = modules.oFunctions;
functions.run({
"name": "reply",
"data":{"userId":request.body.xml.FromUserName,"content":content}
},function(err,data){
//回调函数
if(request.body.xml.Content!=undefined){
functions.run({
"name": "sendMaster",
"data":{"userId":request.body.xml.FromUserName,"content":request.body.xml.Content}
},function(err,data){
//回调函数
});
}
});
主动发送消息代码
//云端逻辑方法名:reply
function onRequest(request, response, modules) {
var content = request.body.content || '你好。';
var userId = request.body.userId || 'ocBzs0I9fkcJ6kq1_xSxtN5dj7bI';
//获取Http模块
var http = modules.oHttp;
var options = {
"url": 'https://api.bmob.cn/1/wechatApp/getAccessToken',
"headers": {
"x-bmob-application-id": "xx",
"x-bmob-rest-api-key": "xx",
'Content-Type': 'application/json'
}
};
http.get(options, function(error, res, body) {
var result = JSON.parse(body)
// response.send(result.access_token);
/**
*主动发起消息给用户请求
*/
//获取Http模块
var http = modules.oHttp;
var options = {
"url": 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='+result.access_token,
"body":JSON.stringify({"touser":userId,"msgtype":"text","text":{"content":content}})
};
// response.end(options.url);
http.post(options, function(error, res, body) {
console.log(body);
response.send(body);
});
});
}
总结
无服务函数.png前面截图指的微信回调地址选
json
Bug的问题是返回的头部不符合http标准。返回json格式header头应该是Content-Type:application/json
,而微信的选json还是Content-Type:text/xml
,如果将来微信改正过来,则支持选json
格式。
无服务函数已经越来越受开发者欢迎,无需购买主机,搭建环境。不到10行代码,实现微信服务器返回回调授权。这是未来微型服务端的发展方向在线编程。腾讯云的无服务函数也已经公侧,个人测式暂时还是Bmob的功能实用很多。