SAP系统和微信集成的系列教程之七:使用Redis存储微信用户和公众号的对话记录

这是Jerry 2020年的第88篇文章,也是汪子熙公众号总共第269篇原创文章。

本系列的英文版Jerry写作于2017年,这个教程总共包含十篇文章,发表在SAP社区上。

系列目录

(1) 微信开发环境的搭建

(2) 如何通过微信公众号消费API

(3) 微信用户关注公众号之后,自动在SAP C4C系统创建客户主数据

(4) 如何将SAP C4C主数据变化推送给微信公众号

(5) 如何将SAP UI5应用嵌入到微信公众号菜单中

(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系统创建客户主数据

(4) 如何将SAP C4C主数据变化推送给微信公众号

(5) 如何将SAP UI5应用嵌入到微信公众号菜单中

(6) 如何通过OAuth2获取微信用户信息并显示在SAP UI5应用中

(7) 使用Redis存储微信用户和公众号的对话记录(本文)

(8) 微信公众号的地图集成

(9) 如何将微信用户发送到微信公众号的消息保存到SAP C4C系统

(10) 如何在SAP C4C系统直接回复消息给微信公众号的订阅者

更多Jerry的原创文章,尽在:"汪子熙":

原文地址:https://www.cnblogs.com/sap-jerry/p/14240591.html