国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

搭建公眾號(hào)自動(dòng)回復(fù)功能

MobService / 473人閱讀

摘要:今天的主角是如何搭建一個(gè)公眾號(hào)自動(dòng)回復(fù)功能。對(duì)于大網(wǎng)站或者項(xiàng)目來(lái)說(shuō),找一家如阿里云騰訊云等云服務(wù)平臺(tái),但對(duì)于個(gè)人只是想簡(jiǎn)單的搭建一個(gè)公眾號(hào)管理自動(dòng)回復(fù)功能,終究有些大材小用了結(jié)合使用相得映彰,而且可以根據(jù)需要升級(jí)擴(kuò)展。

程序員愛(ài)炫技,寫(xiě)個(gè)公眾號(hào)文章,都想拿點(diǎn)技術(shù)整整【自動(dòng)回復(fù)】;程序員愛(ài)偷懶,什么都想做個(gè)【自動(dòng)化】,最好所有事情系統(tǒng)都給做了,點(diǎn)點(diǎn)手指頭就能達(dá)到目標(biāo)。

今天的主角是如何搭建一個(gè)公眾號(hào)自動(dòng)回復(fù)功能。整個(gè)流程如下:

利用 hapi 開(kāi)發(fā) web 程序,對(duì)接微信公眾號(hào)后臺(tái);

利用 LeanCloud SDK 將文章存儲(chǔ)于 LeanCloud 后端;

接收用戶(hù)發(fā)送的消息,獲取關(guān)鍵詞,查詢(xún)文章,并回復(fù)給用戶(hù);

將 web 程序代碼托管于 coding.net;

使用 LeanEngine 部署 hapi 程序。

1. hapi

A 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 同音)吸引,也主要因?yàn)樽约簮?ài)折騰,老想著用不同的框架寫(xiě)寫(xiě),重點(diǎn)是看看區(qū)別,你也可以看看 stackoverflow 上的帖子

https://stackoverflow.com/que...

在用 hapi 寫(xiě)代碼時(shí),有種代碼既文檔的感覺(jué),更重點(diǎn)的是 hapi 提供了一套 Plugins 方案,所有代碼都可以以這種方式進(jìn)行擴(kuò)展和分離組織,可讀性更高,如我將對(duì)接微信公眾后臺(tái)的 API 獨(dú)立為 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;
    }
});

這樣就可以將微信公眾號(hào)后臺(tái)功能相關(guān)的代碼獨(dú)立到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;
            // 具體邏輯處理 和 自動(dòng)回復(fù)
          });
        }
    });
    return next();
};

exports.register.attributes = {
    name: "wechat-weixin"
};

具體如何配置開(kāi)發(fā) hapi 可以參考官網(wǎng)和 github
https://hapijs.com/
https://github.com/hapijs/hap...

具體和微信后臺(tái)路由配置就好說(shuō)了,直接上圖:

2. LeanCloud

LeanCloud 領(lǐng)先的 BaaS 提供商,為移動(dòng)開(kāi)發(fā)提供強(qiáng)有力的后端支持

包括云存儲(chǔ)、數(shù)據(jù)分析、用戶(hù)關(guān)系、消息推送、即時(shí)通信等現(xiàn)代應(yīng)用基礎(chǔ)模塊,滿(mǎn)足移動(dòng)開(kāi)發(fā)所有需求

https://leancloud.cn/

為什么選擇 LeanCloud

云存儲(chǔ)。 主要方便自動(dòng)回復(fù),不需要存儲(chǔ)大量數(shù)據(jù),完全沒(méi)必要購(gòu)買(mǎi)一臺(tái)【云服務(wù)器】或者【云數(shù)據(jù)庫(kù)服務(wù)器】,而且 LeanCloud 提供 10 GB 免費(fèi)空間,足夠前期使用;

數(shù)據(jù)。支持任意類(lèi)型的 JSON 對(duì)象,以及對(duì)象之間的關(guān)聯(lián)映射,同時(shí)提供完整的增刪改查操作接口,方便開(kāi)發(fā);

統(tǒng)計(jì)。提供開(kāi)箱即用的移動(dòng)統(tǒng)計(jì),沒(méi)準(zhǔn)哪天粉絲數(shù)量增多了,也可以做一些統(tǒng)計(jì)分析,如分析分析哪個(gè)關(guān)鍵詞是大家關(guān)注的,哪個(gè)話(huà)題是大家樂(lè)于傳播分享的,等等。

全平臺(tái) SDK 。搭建公眾號(hào)后臺(tái)功能,主要也是折騰折騰,這回用 Javascipt SDK 寫(xiě)寫(xiě)接口,沒(méi)準(zhǔn)哪天想換換口味,也可以重新試試用 PHP SDK 來(lái)重構(gòu)復(fù)寫(xiě)。滿(mǎn)足折騰需求。

JavaScript SDK

使用 SDK 主要三個(gè)作用:

存儲(chǔ)公眾號(hào)文章基本信息,便于查詢(xún)

根據(jù)微信公眾號(hào)文檔接口需要,主要存儲(chǔ) title, description, picurl, url 四要素;如果為了結(jié)合搜索功能,還需要存儲(chǔ)這篇文章的關(guān)鍵詞。

結(jié)合 LeanCloud SDK,存儲(chǔ)代碼就很簡(jiǎn)單了:

    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"));
    });

獲取最新的一篇文章;
當(dāng)一個(gè)新粉絲首次進(jìn)入公眾號(hào),或者發(fā)了一些暫時(shí)沒(méi)處理的信息時(shí),可以直接回復(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ò)【關(guān)鍵詞】查詢(xú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([]);
    });

最后可以將查詢(xún)結(jié)果轉(zhuǎn)成【圖文信息】回復(fù)

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);
    }
});

當(dāng)然,根據(jù)情況需要,如果在找不到查詢(xún)結(jié)果時(shí),我們可以?xún)?nèi)建一些【智能聊天】、【生活信息查詢(xún)】等等。

3. LeanEngine

云引擎(LeanEngine)是 LeanCloud 推出的服務(wù)端托管平臺(tái)。提供了多種運(yùn)行環(huán)境(Node.js, Python 等)來(lái)運(yùn)行服務(wù)端程序。你只需要提供服務(wù)端的業(yè)務(wù)邏輯(網(wǎng)站或云函數(shù)等),而服務(wù)端的多實(shí)例負(fù)載均衡,不中斷服務(wù)的平滑升級(jí)等都由云引擎提供支持。

當(dāng)寫(xiě)了服務(wù)端代碼后,總要有個(gè)地方托管。對(duì)于大網(wǎng)站或者項(xiàng)目來(lái)說(shuō),找一家如阿里云、騰訊云等云服務(wù)平臺(tái), 但對(duì)于個(gè)人只是想簡(jiǎn)單的搭建一個(gè)公眾號(hào)管理——自動(dòng)回復(fù)功能,終究有些大材小用了;LeanEngine 結(jié)合 LeanCloud 使用相得映彰,而且 LeanEngine 可以根據(jù)需要升級(jí)擴(kuò)展。

部署

部署主要有兩種途徑:命令行部署和 Git 部署

命令行部署

只要在項(xiàng)目的根目錄運(yùn)行:

lean deploy

使用命令行工具可以方便的部署、發(fā)布應(yīng)用,查看應(yīng)用狀態(tài),查看日志,甚至進(jìn)行多應(yīng)用部署。具體可參考網(wǎng)站文檔:
https://leancloud.cn/docs/lea...使用

Git 部署

代碼都有一個(gè)版本控制,為了配合 LeanEngine 使用,我將代碼托管到 https://coding.net/ 進(jìn)行源碼的版本管理,只要在 LeanCloud 后臺(tái)一鍵部署即可,具體可參考網(wǎng)站文檔:

https://leancloud.cn/docs/lea...部署

總結(jié)

寫(xiě)代碼太無(wú)聊了,偶爾折騰折騰挺好,如何將不同的技術(shù)和工具,以及第三方服務(wù)結(jié)合在一起,做一些事情也挺好的。

LeanCloud 負(fù)責(zé)后臺(tái)數(shù)據(jù)存儲(chǔ);

LeanEngine 負(fù)責(zé)服務(wù)端托管平臺(tái),來(lái)運(yùn)行服務(wù)端程序;

hapi 負(fù)責(zé)服務(wù)端 web 程序開(kāi)發(fā);

coding.net 負(fù)責(zé)源碼的版本控制管理;

下一步要做:

搭建一個(gè)錄入微信文章的后臺(tái);

如何解析和加解密微信的消息體;

coding01 期待您關(guān)注

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/84250.html

相關(guān)文章

  • 慕課網(wǎng)_《初識(shí)Java微信公眾號(hào)開(kāi)發(fā)》學(xué)習(xí)總結(jié)

    摘要:時(shí)間年月日星期五說(shuō)明本文部分內(nèi)容均來(lái)自慕課網(wǎng)。本套課程介紹微信公眾號(hào)開(kāi)發(fā),主要涉及公眾號(hào)介紹編輯模式介紹開(kāi)發(fā)模式介紹等。慕課網(wǎng)是垂直的互聯(lián)網(wǎng)技能免費(fèi)學(xué)習(xí)網(wǎng)站。 時(shí)間:2017年08月11日星期五說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:https://github.com/zccodere/s...學(xué)習(xí)源碼:https://github...

    PrototypeZ 評(píng)論0 收藏0
  • Koa2微信公眾號(hào)開(kāi)發(fā)(一) 本地開(kāi)發(fā)調(diào)試環(huán)境搭建

    摘要:本篇是該系列的第一篇,本地開(kāi)發(fā)環(huán)境搭建以及接入微信。若確認(rèn)此次請(qǐng)求來(lái)自微信服務(wù)器,原樣返回參數(shù)內(nèi)容,則接入生效,成為開(kāi)發(fā)者成功,否則接入失敗。 一、簡(jiǎn)介 關(guān)于微信公眾號(hào)的介紹就省略了,自行搜索。注冊(cè)過(guò)程也不說(shuō)了。我們會(huì)直接注冊(cè)測(cè)試號(hào)來(lái)實(shí)現(xiàn)代碼。這將會(huì)是個(gè)全面講解微信公眾號(hào)開(kāi)發(fā)的系列教程。本篇是該系列的第一篇,本地開(kāi)發(fā)環(huán)境搭建以及接入微信。在開(kāi)始之前最好去看看開(kāi)發(fā)者文檔微信公眾平臺(tái)技術(shù)文...

    snifes 評(píng)論0 收藏0
  • Java 程序員必備的 15 個(gè)框架,前 3 個(gè)地位無(wú)可動(dòng)搖!

    摘要:官網(wǎng)源碼推薦從開(kāi)始手寫(xiě)一個(gè)框架更多請(qǐng)?jiān)诩夹g(shù)棧微信公眾號(hào)后臺(tái)回復(fù)關(guān)鍵字。是一個(gè)開(kāi)放源代碼的對(duì)象關(guān)系映射框架,它對(duì)進(jìn)行了非常輕量級(jí)的對(duì)象封裝,它將與數(shù)據(jù)庫(kù)表建立映射關(guān)系,是一個(gè)全自動(dòng)的框架。 Java 程序員方向太多,且不說(shuō)移動(dòng)開(kāi)發(fā)、大數(shù)據(jù)、區(qū)塊鏈、人工智能這些,大部分 Java 程序員都是 Java Web/后端開(kāi)發(fā)。那作為一名 Java Web 開(kāi)發(fā)程序員必須需要熟悉哪些框架呢? 今天...

    galaxy_robot 評(píng)論0 收藏0
  • 工具集核心教程 | 第二篇: IDEA入門(mén)到進(jìn)階(圖文并茂)

    摘要:重度強(qiáng)迫癥患者取消大小寫(xiě)敏感,讓自動(dòng)完成更齊全。如何為當(dāng)前項(xiàng)目工程添加多個(gè)模塊啊答對(duì)著工程右鍵選擇通常選擇,如圖寫(xiě)在最后歡迎關(guān)注喜歡和點(diǎn)贊后續(xù)將推出更多的工具集教程,敬請(qǐng)期待。公眾號(hào)回復(fù)面試,領(lǐng)取面試實(shí)戰(zhàn)學(xué)習(xí)資源。 showImg(https://segmentfault.com/img/remote/1460000018862588); 前言:IntelliJ IDEA 如果說(shuō)Int...

    skinner 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

MobService

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<