SAP系统和微信集成的系列教程之七:使用Redis存储微信用户和公众号的对话记录
这是Jerry 2020年的第88篇文章,也是汪子熙公众号总共第269篇原创文章。
本系列的英文版Jerry写作于2017年,这个教程总共包含十篇文章,发表在SAP社区上。
系列目录
(1) 微信开发环境的搭建
(2) 如何通过微信公众号消费API
(3) 微信用户关注公众号之后,自动在SAP C4C系统创建客户主数据
(6) 如何通过OAuth2获取微信用户信息并显示在SAP UI5应用中
(7) 使用Redis存储微信用户和公众号的对话记录(本文)
(8) 微信公众号的地图集成
(9) 如何将微信用户发送到微信公众号的消息保存到SAP C4C系统
(10) 如何在SAP C4C系统直接回复消息给微信公众号的订阅者
最近有不少朋友在微信上向我咨询SAP系统和微信公众号集成的问题,因此我把当时写的英文版翻译成中文,重新发布在我的公众号上。
需要注意的是,时隔三年,微信公众号的开发流程可能有所变化,请大家自行鉴别。和微信公众号集成的系统,我三年前选择的是SAP Cloud for Customer.
自己运营过公众号的朋友们都知道,粉丝和公众号的对话消息,只能保持5天。因此就萌生了一个需求:将粉丝和公众号的聊天记录持久化,比如保存到某数据库里,过后可以随时读取出来,进行进一步分析。
本文会介绍,将粉丝和公众号的对话,保存到Redis(一个Key-Value存储系统)的实现步骤。
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
首先在微信app里同微信公众号对话:
上图展示的微信公众号的智能回复功能,其实现方式,在本系列之前的文章:SAP系统和微信集成的系列教程之二:如何通过微信公众号消费API 里做过介绍。
按照本系列第五篇文章:如何将SAP UI5应用嵌入到微信公众号菜单中 里介绍的方法,给公众号增添两个新的菜单:Review和Delete.
Review菜单负责把Redis里存储的聊天记录读取出来,展示在微信app里;Delete菜单负责清空Redis里的数据。
点击Review菜单之后的效果如下图所示:
四个字段的解释:
- from:消息的发送方
- to: 消息的接收方
- question:粉丝向公众号提出的问题
- answer: 公众号调用图灵API,返回的答复
点了Delete菜单之后的效果:聊天记录被清空。
下面是实现步骤。
很多云平台都提供了对Redis的支持,这个系列我选择的云平台是Heroku.
打开HeroKu的Redis控制台,从应用列表里选择要启用Redis服务的应用:wechatjerry.
Heroku默认的Redis plan:Hobby Dev仅用于开发用途,完全免费。
点击Provision按钮之后,在Heroku应用的控制台里,能看到Redis已经出现在应用wechatjerry的Addons列表里。
应用变量REDIS_URL包含了当前可用的Redis实例的url,我们之后的nodejs代码里,会使用这个url访问该Redis实例。
调用微信API给公众号创建两个新的菜单,Review和Delete,使用如下的payload:
然后在微信消息服务器实现里,在将回复通过下图第22行的replyMessage函数推送给微信用户之前,插入21行的conversationLogService模块的log函数调用,将对话记录存储到Redis中。
conversationLogService实现的完整代码,在我的Github上。
里面调用了nodejs版的一个开源Redis客户端:
https://github.com/NodeRedis/node-redis
最后,实现Review和Delete公众号菜单的点击响应函数,分别调用conversationLogService的getLog和deleteLog方法,执行对应的Redis操作。
本系列的下一篇文章,会介绍如何将地图控件集成到微信公众号中去,感谢阅读。
系列目录
(1) 微信开发环境的搭建
(2) 如何通过微信公众号消费API
(3) 微信用户关注公众号之后,自动在SAP C4C系统创建客户主数据
(6) 如何通过OAuth2获取微信用户信息并显示在SAP UI5应用中
(7) 使用Redis存储微信用户和公众号的对话记录(本文)
(8) 微信公众号的地图集成
(9) 如何将微信用户发送到微信公众号的消息保存到SAP C4C系统
(10) 如何在SAP C4C系统直接回复消息给微信公众号的订阅者
更多Jerry的原创文章,尽在:"汪子熙":