你可能不知道微信小程序客服消息还能这么用~

简介: 最近都在使用uni-app+uniCloud来完成一些个人原创技术内容的基础建设,比如完成了一个名为大帅老猿的小程序。未来还将利用这个小程序来和读者们互动,以及承载一些产品的创意玩法。目前的版本就是用来承载我原创的技术内容视频或者文章,本篇文章我来分享下如何利用uniCloud云开发实现小程序客服消息的接收和发送。

客服消息


<button open-type='contact'>联系客服<button>


image.png


我们只需要上面一行代码,即可在微信小程序里实现人工客服的服务。真的是非常的方便,但是我如果想要对接一个机器人客服怎么办呢?这就需要我们开启消息推送,将用户在客服会话中的消息转发到咱们自己的服务器地址中。


image.png


uniCloud云函数


这里我们使用uniCloud来完成,薅它的羊毛!


首先我们在支持uniCloud的uni-app里新建一个云函数,并且为其开启URL化,就是允许通过http的方式来请求。


image.png


image.png


然后我们复制这个路径,并填入下图中的URL(服务器地址)


https://e0b75de1-90c7-4c11-9d12-a8bc84c4d081.bspapp.com/http/customerservice


要在云函数里接收客服消息推送


  1. 填写服务器配置
  2. 验证服务器地址的有效性
  3. 据接口文档实现业务逻辑,接收消息和事件


填写服务器配置


image.png


  • Token(令牌)根据提示输入


  • EncodingAESKey 随机生成


  • 加密方式 明文模式


  • 数据格式 JSON


验证服务器地址的有效性


现在如果点提交,我们是通不过的,因为云函数里还没写代码。为了通过,我们先写这么一段


'use strict';
exports.main = async (event, context) => {
  return event.queryStringParameters.echostr;
};


云函数修改后记得上传部署云函数,然后再点服务器配置中的提交按钮,验证就通过了。这里我们没有真正去校验签名,虽然可以通过,但有被伪造消息的风险。校验签名的事后面再说。


接收消息和事件


接下来所有的客服消息都会被提交给这个接口,我们在云函数中相应的做出处理即可。

通过http请求URL化后的云函数,get请求取参要通过queryStringParameters获取,post请求取参要通过body获取。


const receiveMsg = event.body?JSON.parse(event.body):null;


客服消息会有以下几种消息类型(MsgType


  • event
  • text
  • image
  • miniprogrampage


比如用户在客服消息对话中发送文字信息时,会对服务器URL发起一次post请求,从请求body中我们可以获取到如下信息


{
  "ToUserName": "toUser",
  "FromUserName": "fromUser",
  "CreateTime": 1482048670,
  "MsgType": "text",
  "Content": "this is a test",
  "MsgId": 1234567890123456
}


回复消息


现在我们只需要拿到这个content,交给机器人服务获取回复,再发送一条回复信息,用户就可以收到了。在uniCloud里我们这么写


if(receiveMsg.MsgType=="text"){
    //对receiveMsg.text.content做处理
    //处理结束后
    const access_token = //调用回复用户消息的接口,需要先获取access_token
    const res = await uniCloud.httpclient.request("https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token="+access_token,{
    method:"POST",
    headers:{
      "Content-Type":"application/json"
    },
    dataType:"json",
    data:{
                    //你要回复的用户就是刚才发消息的用户,所以直接赋值为刚才收到消息体中的FromUserName即可
                    touser: receiveMsg.FromUserName,
                    msgtype: 'text',
                    text: {
                      content: '收到',
                    }
                }
  });
}


彩蛋!


在小程序里要展示掘金的文章还挺麻烦,webview肯定不行,因为业务域名操作不了的。拿到内容自己htmlParser的话,掘金里很多长文,估计自己解析也很麻烦。


那么利用这个客服消息,我们能怎么做呢?


image.png


掘金的两个接口


//获取文章列表
//https://api.juejin.cn/content_api/v1/article/query_list
//获取文章详情
//https://api.juejin.cn/content_api/v1/article/detail


我的做法是这样的,先通过文章列表接口,在前端显示文章列表,文章列表项都用客服消息组件button来装载


回复Link类型消息


<button open-type="contact" :session-from="'jj_'+item.article_id" style="opacity: 0;width: 100%;height: 100%;position: absolute;z-index: 1;">button</button>


这里的关键是SessionFrom字段,当点击这个按钮进入客服消息会话时,服务器URL会接收到一个Event消息


if(receiveMsg.Event=="user_enter_tempsession"){
    var sessionFrom = receiveMsg.SessionFrom;
    if(sessionFrom.indexOf("jj_")>=0){
            //需要显示掘金文章jj_后为文章id
            var articleId = sessionFrom.substr(3);
            //获取掘金文章详情,用于拼接回复消息
            const articleDetailRes = await uniCloud.httpclient.request("https://api.juejin.cn/content_api/v1/article/detail",{
                    data:{
                            "article_id":articleId
                    },
                    method:"POST",
                    headers:{
                            "Content-Type":"application/json"
                    },
                    dataType:"json"
            })
            const res = await sendCustomerServiceMessage({
                    touser:receiveMsg.FromUserName,
                    msgtype:"link",
                    link: {
                            "title":articleDetailRes.data.data.article_info.title,
                            "description":articleDetailRes.data.data.article_info.brief_content,
                        "url": "https://juejin.cn/post/"+articleId,
                            "thumb_url": articleDetailRes.data.data.article_info.cover_image
                    }
            });
    }
}


*Tada!*完成啦!


image.png


后记


接下来我会发布一系列基于uniCloud的原创技术分享,感兴趣的朋友可以关注这个新的专题。



相关文章
|
3月前
|
人工智能 数据可视化 API
10 分钟构建 AI 客服并应用到网站、钉钉或微信中测试评
10 分钟构建 AI 客服并应用到网站、钉钉或微信中测试评
111 2
|
4月前
|
人工智能
10 分钟构建 AI 客服并应用到网站、钉钉或微信中简说
10 分钟构建 AI 客服并应用到网站、钉钉或微信
|
3月前
|
人工智能 运维 负载均衡
10 分钟构建 AI 客服并应用到网站、钉钉或微信中
《10分钟构建AI客服并应用到网站、钉钉或微信中》的解决方案通过详尽的文档和示例代码,使具有一定编程基础的用户能够快速上手,顺利完成AI客服集成。方案涵盖高可用性、负载均衡及定制化选项,满足生产环境需求。然而,若文档不清晰或存在信息缺失,则可能导致部署障碍。实际部署中可能遇到网络、权限等问题,需逐一排查。云产品的功能、性能及操作配置便捷性直接影响解决方案效果,详尽的产品手册有助于快速解决问题。总体而言,该方案在各方面表现出色,值得推荐。
|
4月前
|
人工智能 自然语言处理 搜索推荐
评测:AI客服接入钉钉与微信的对比分析
【8月更文第22天】随着人工智能技术的发展,越来越多的企业开始尝试将AI客服集成到自己的业务流程中。本文将基于《10分钟构建AI客服并应用到网站、钉钉或微信中》的解决方案,详细评测AI客服在钉钉和微信中的接入流程及实际应用效果,并结合个人体验分享一些心得。
9974 10
|
5月前
|
自然语言处理 安全 API
AppFlow:让大模型当您的微信公众号客服
使用阿里云AppFlow和通义百炼,无需编码即可将大模型如通义千问接入微信公众号。首先确保公众号已认证,然后在通义百炼导入文档创建知识库。在AppFlow中选择“微信公众号大模型自动回复”模板,添加微信凭证和百炼API密钥。配置微信公众平台的服务器地址、Token和EncodingAESKey,并设置IP白名单。完成这些步骤后,用户在公众号的提问将由大模型自动回答。AppFlow简化了集成过程,助力高效智能客服建设。
|
5月前
|
小程序
【微信小程序-原生开发】客服
【微信小程序-原生开发】客服
115 0
|
5月前
|
小程序
【亲测有效】3步实现 微信小程序内接入小程序客服,网页端客服工具与移动端小程序客服工具使用方法,使用入口,并设置当前客服状态
【亲测有效】3步实现 微信小程序内接入小程序客服,网页端客服工具与移动端小程序客服工具使用方法,使用入口,并设置当前客服状态
488 0
|
2月前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
625 7
|
2月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
716 1
|
2月前
|
小程序 前端开发 测试技术
微信小程序的开发完整流程是什么?
微信小程序的开发完整流程是什么?
126 7