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

举报
Jerry Wang 发表于 2022/04/25 16:15:30 2022/04/25
【摘要】 最近有不少朋友在微信上向我咨询SAP系统和微信公众号集成的问题,因此我把当时写的英文版翻译成中文,发表在华为云社区上。 系列目录(1) 微信开发环境的搭建(2) 如何通过微信公众号消费API(3) 微信用户关注公众号之后,自动在SAP C4C系统创建客户主数据(4) 如何将SAP C4C主数据变化推送给微信公众号(5) 如何将SAP UI5应用嵌入到微信公众号菜单中(6) 如何通过OAuth...

最近有不少朋友在微信上向我咨询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系统直接回复消息给微信公众号的订阅者

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。