這是Jerry 2020年的第88篇文章,也是汪子熙公衆号總共第269篇原創文章。
本系列的英文版Jerry寫作于2017年,這個教程總共包含十篇文章,發表在SAP社群上。
最近有不少朋友在微信上向我咨詢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操作。
本系列的下一篇文章,會介紹如何将地圖控件內建到微信公衆号中去,感謝閱讀。
更多Jerry的原創文章,盡在:"汪子熙":