摘要:今天的主角是如何搭建一個公眾號自動回復功能。對于大網(wǎng)站或者項目來說,找一家如阿里云騰訊云等云服務平臺,但對于個人只是想簡單的搭建一個公眾號管理自動回復功能,終究有些大材小用了結(jié)合使用相得映彰,而且可以根據(jù)需要升級擴展。
程序員愛炫技,寫個公眾號文章,都想拿點技術(shù)整整【自動回復】;程序員愛偷懶,什么都想做個【自動化】,最好所有事情系統(tǒng)都給做了,點點手指頭就能達到目標。
今天的主角是如何搭建一個公眾號自動回復功能。整個流程如下:
利用 hapi 開發(fā) web 程序,對接微信公眾號后臺;
利用 LeanCloud SDK 將文章存儲于 LeanCloud 后端;
接收用戶發(fā)送的消息,獲取關(guān)鍵詞,查詢文章,并回復給用戶;
將 web 程序代碼托管于 coding.net;
使用 LeanEngine 部署 hapi 程序。
1. hapiA rich framework for building applications and services
hapi enables developers to focus on writing reusable application logic instead of spending time building infrastructure.
選擇 hapi,主要被它的 logo 和讀音(與 happy 同音)吸引,也主要因為自己愛折騰,老想著用不同的框架寫寫,重點是看看區(qū)別,你也可以看看 stackoverflow 上的帖子
https://stackoverflow.com/que...
在用 hapi 寫代碼時,有種代碼既文檔的感覺,更重點的是 hapi 提供了一套 Plugins 方案,所有代碼都可以以這種方式進行擴展和分離組織,可讀性更高,如我將對接微信公眾后臺的 API 獨立為 Plugin 形式:
server.register([{ register: require("./api/Books"), options: {} }, { register: require("./api/Articles"), options: {} },{ register: require("./api/Blogs"), options: {} }, { register: require("./api/User"), options: {} }, { register: require("./api/Comments"), options: {} }], {routes: {prefix: "/api"}}, (err) => { if (err) { throw err; } }); // wechat server.register([{ register: require("./wechat/weixin"), options: {} }], (err) => { if (err) { throw err; } });
這樣就可以將微信公眾號后臺功能相關(guān)的代碼獨立到wechat/weixin.js中:
const wechat = require("./wechatserver"); const AV = require("leanengine"); const ModelBlog = require("../model/Blogs"); const config = { token: "***", appid: "***", encodingAESKey: "***" }; exports.register = function (server, options, next) { server.route({ method: ["POST", "GET"], path: "/wechat", handler: function (request, reply) { wechat(config, request, reply, next, function (req, res, next) { // 微信輸入信息都在req.weixin上 var message = req.weixin; // 具體邏輯處理 和 自動回復 }); } }); return next(); }; exports.register.attributes = { name: "wechat-weixin" };
具體如何配置開發(fā) hapi 可以參考官網(wǎng)和 github
https://hapijs.com/
https://github.com/hapijs/hap...
具體和微信后臺路由配置就好說了,直接上圖:
為什么選擇 LeanCloudLeanCloud 領先的 BaaS 提供商,為移動開發(fā)提供強有力的后端支持
包括云存儲、數(shù)據(jù)分析、用戶關(guān)系、消息推送、即時通信等現(xiàn)代應用基礎模塊,滿足移動開發(fā)所有需求
https://leancloud.cn/
云存儲。 主要方便自動回復,不需要存儲大量數(shù)據(jù),完全沒必要購買一臺【云服務器】或者【云數(shù)據(jù)庫服務器】,而且 LeanCloud 提供 10 GB 免費空間,足夠前期使用;
數(shù)據(jù)。支持任意類型的 JSON 對象,以及對象之間的關(guān)聯(lián)映射,同時提供完整的增刪改查操作接口,方便開發(fā);
統(tǒng)計。提供開箱即用的移動統(tǒng)計,沒準哪天粉絲數(shù)量增多了,也可以做一些統(tǒng)計分析,如分析分析哪個關(guān)鍵詞是大家關(guān)注的,哪個話題是大家樂于傳播分享的,等等。
全平臺 SDK 。搭建公眾號后臺功能,主要也是折騰折騰,這回用 Javascipt SDK 寫寫接口,沒準哪天想換換口味,也可以重新試試用 PHP SDK 來重構(gòu)復寫。滿足折騰需求。
JavaScript SDK使用 SDK 主要三個作用:
存儲公眾號文章基本信息,便于查詢
根據(jù)微信公眾號文檔接口需要,主要存儲 title, description, picurl, url 四要素;如果為了結(jié)合搜索功能,還需要存儲這篇文章的關(guān)鍵詞。
結(jié)合 LeanCloud SDK,存儲代碼就很簡單了:
var blog = new Blog(); blog.set("title", request.payload.title); blog.set("url", request.payload.url); blog.set("desc", request.payload.desc); blog.set("picurl", request.payload.picurl); blog.set("tags", request.payload.tags); blog.save().then(function (blog) { // 成功保存之后,執(zhí)行其他邏輯. console.log("成功保存:New object created with objectId: " + blog.id); reply(blog); }, function (error) { // 失敗之后執(zhí)行其他邏輯 console.log("Failed to create new object, with error message: " + error.message); return reply(Boom.wrap(error, "error")); });
獲取最新的一篇文章;
當一個新粉絲首次進入公眾號,或者發(fā)了一些暫時沒處理的信息時,可以直接回復最新的一篇文章:
const query = new AV.Query(Blog); query.descending("createdAt"); query.first().then(function (data) { res.reply([ { title: data.get("title"), description: data.get("desc"), picurl: data.get("picurl"), url: data.get("url") } ]); }, function (error) { });
通過【關(guān)鍵詞】查詢相關(guān)文章。
搜索【關(guān)鍵詞】,主要搜索 title, description, tags等:
const titleQuery = new AV.Query(Blog) titleQuery.contains("title", words); const descQuery = new AV.Query(Blog) descQuery.contains("desc", words); const tagsQuery = new AV.Query(Blog) tagsQuery.contains("tags", words); const wordsQuery = AV.Query.or(titleQuery, descQuery, tagsQuery); wordsQuery.descending("createdAt"); wordsQuery.limit(5); wordsQuery.find().then(function (results) { res(results); }, function (error) { res([]); });
最后可以將查詢結(jié)果轉(zhuǎn)成【圖文信息】回復
ModelBlog.search(message.Content, results => { if (results.length === 0) { res.reply({ content: message.Content, type: "text" }); } else { let data = []; results.forEach(function(v) { let wrap = {}; wrap.title = v.get("title"); wrap.description = v.get("desc"); wrap.picurl = v.get("picurl"); wrap.url = v.get("url"); data.push(wrap); }); res.reply(data); } });
當然,根據(jù)情況需要,如果在找不到查詢結(jié)果時,我們可以內(nèi)建一些【智能聊天】、【生活信息查詢】等等。
3. LeanEngine云引擎(LeanEngine)是 LeanCloud 推出的服務端托管平臺。提供了多種運行環(huán)境(Node.js, Python 等)來運行服務端程序。你只需要提供服務端的業(yè)務邏輯(網(wǎng)站或云函數(shù)等),而服務端的多實例負載均衡,不中斷服務的平滑升級等都由云引擎提供支持。
當寫了服務端代碼后,總要有個地方托管。對于大網(wǎng)站或者項目來說,找一家如阿里云、騰訊云等云服務平臺, 但對于個人只是想簡單的搭建一個公眾號管理——自動回復功能,終究有些大材小用了;LeanEngine 結(jié)合 LeanCloud 使用相得映彰,而且 LeanEngine 可以根據(jù)需要升級擴展。
部署主要有兩種途徑:命令行部署和 Git 部署
命令行部署
只要在項目的根目錄運行:
lean deploy
使用命令行工具可以方便的部署、發(fā)布應用,查看應用狀態(tài),查看日志,甚至進行多應用部署。具體可參考網(wǎng)站文檔:
https://leancloud.cn/docs/lea...使用
Git 部署
代碼都有一個版本控制,為了配合 LeanEngine 使用,我將代碼托管到 https://coding.net/ 進行源碼的版本管理,只要在 LeanCloud 后臺一鍵部署即可,具體可參考網(wǎng)站文檔:
https://leancloud.cn/docs/lea...部署
總結(jié)寫代碼太無聊了,偶爾折騰折騰挺好,如何將不同的技術(shù)和工具,以及第三方服務結(jié)合在一起,做一些事情也挺好的。
LeanCloud 負責后臺數(shù)據(jù)存儲;
LeanEngine 負責服務端托管平臺,來運行服務端程序;
hapi 負責服務端 web 程序開發(fā);
coding.net 負責源碼的版本控制管理;
下一步要做:
搭建一個錄入微信文章的后臺;
如何解析和加解密微信的消息體;
coding01 期待您關(guān)注
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/84250.html
摘要:時間年月日星期五說明本文部分內(nèi)容均來自慕課網(wǎng)。本套課程介紹微信公眾號開發(fā),主要涉及公眾號介紹編輯模式介紹開發(fā)模式介紹等。慕課網(wǎng)是垂直的互聯(lián)網(wǎng)技能免費學習網(wǎng)站。 時間:2017年08月11日星期五說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學源碼:https://github.com/zccodere/s...學習源碼:https://github...
摘要:本篇是該系列的第一篇,本地開發(fā)環(huán)境搭建以及接入微信。若確認此次請求來自微信服務器,原樣返回參數(shù)內(nèi)容,則接入生效,成為開發(fā)者成功,否則接入失敗。 一、簡介 關(guān)于微信公眾號的介紹就省略了,自行搜索。注冊過程也不說了。我們會直接注冊測試號來實現(xiàn)代碼。這將會是個全面講解微信公眾號開發(fā)的系列教程。本篇是該系列的第一篇,本地開發(fā)環(huán)境搭建以及接入微信。在開始之前最好去看看開發(fā)者文檔微信公眾平臺技術(shù)文...
摘要:官網(wǎng)源碼推薦從開始手寫一個框架更多請在技術(shù)棧微信公眾號后臺回復關(guān)鍵字。是一個開放源代碼的對象關(guān)系映射框架,它對進行了非常輕量級的對象封裝,它將與數(shù)據(jù)庫表建立映射關(guān)系,是一個全自動的框架。 Java 程序員方向太多,且不說移動開發(fā)、大數(shù)據(jù)、區(qū)塊鏈、人工智能這些,大部分 Java 程序員都是 Java Web/后端開發(fā)。那作為一名 Java Web 開發(fā)程序員必須需要熟悉哪些框架呢? 今天...
摘要:重度強迫癥患者取消大小寫敏感,讓自動完成更齊全。如何為當前項目工程添加多個模塊啊答對著工程右鍵選擇通常選擇,如圖寫在最后歡迎關(guān)注喜歡和點贊后續(xù)將推出更多的工具集教程,敬請期待。公眾號回復面試,領取面試實戰(zhàn)學習資源。 showImg(https://segmentfault.com/img/remote/1460000018862588); 前言:IntelliJ IDEA 如果說Int...
閱讀 1600·2019-08-30 13:18
閱讀 1583·2019-08-29 12:19
閱讀 2127·2019-08-26 13:57
閱讀 4151·2019-08-26 13:22
閱讀 1192·2019-08-26 10:35
閱讀 2997·2019-08-23 18:09
閱讀 2516·2019-08-23 17:19
閱讀 689·2019-08-23 17:18