《微信每日說》的進階歷程

項目回顧

去年從《微信每日說》寫到《微信小祕書》,再到《哄女朋友神器》,一步一步的給微信每日說增添了許多功能,也幫助了不少朋友作出本身的微信機器人。可是我本身卻不是很滿意,由於個人想法是可以作一個可視化的界面來完成全部的配置工做,但同時又能讓使用者有必定的參與感。帶着這份想法還有本身的信念(一切須要用代碼配置的工做,終將被可視化替代),我開始了《智能微祕書》平臺的搭建。html

平臺構思

  • 獨立帳號登陸管理
  • 全部配置工做都轉移到前端可視化頁面
  • 遠程重啓項目
  • 實時顯示登錄狀態
  • 擁有一個素材庫
  • 無縫對接智能對話平臺
  • 平臺端以建立應用的模式對接客戶端
  • 客戶端無需關心代碼邏輯,只需填入APIKEY和APISECRET便可
  • 客戶端不關心用戶使用的平臺(docker化部署)
  • 平臺後續能夠擴展更多功能

平臺地址:《智能微祕書》前端

功能

  • 微信每日說,定時給女友發送每日天氣提醒,以及每日一句
  • 定時提醒
  • 當天定時提醒 例:"提醒 我 18:00 下班了,記得帶好隨身物品"
  • 天天定時提醒 例:"提醒 我 天天 18:00 下班了,記得帶好隨身物品"
  • 指定日期提醒 例:"提醒 我 2019-05-10 8:00 還有7天是女友生日了,準備一下"
  • 智能機器人
  • 天行機器人
  • 圖靈機器人
  • 更多
  • 羣定時任務
  • 羣新聞定時發送
  • 羣消息定時發送
  • 更多功能等你來pr
  • 關鍵詞
  • 關鍵詞加好友
  • 關鍵詞加羣
  • 關鍵詞回覆
  • 關鍵詞事件
    • 天氣查詢 例:"上海天氣"
    • 垃圾分類 例:"?香蕉皮"
    • 名人名言 例: "名人名言"
    • 老黃曆查詢 例: "黃曆2019-6-13"
    • 姓氏起源 例: "姓陳"
    • 星座運勢 例: "*雙子座"
    • 神回覆 例: "神回覆"
    • 獲取表情包 例: "表情包你好壞"
    • 獲取美女圖 例: "美女圖"
    • 更多待你發現
  • 進羣自動歡迎
  • 加好友自動回覆

技術選擇

後端

爲了達到想要的效果,一個完整的後端平臺是必不可少的,因爲本身是前端開發,因此能想到的熟悉語言就是js了,而js能夠拿來寫後端的就是nodejs了,那是選擇本身從0搭建一套完整的解決方案仍是選擇一個現成的框架去作,我也糾結了好久,最後仍是肯定下來使用egg來實現本身的後端功能。不得不說egg是真的很強大,它的插件和中間件功能讓人眼前一亮,並且集成的不少功能可讓我專一於業務邏輯開發,而不須要考慮過多的配置。vue

前端

前端首先選的就是vue和element的搭配了,畢竟平常工做用的最多,開發起來上手也快。node

客戶端

客戶端固然仍是wechaty做爲核心,因爲此次是作一個可視化配置平臺,因此在客戶端須要不少的重構,所以就把之前《微信小祕書》的項目從新推翻重作,從新梳理了事件過濾器與消息過濾器的功能,同時增長羣諮詢定時任務和羣定時任務功能,必不可少的微信每日說功能固然也不能少。c++

項目地址:github.com/gengchen528…(若是以爲還能夠,請隨手來個star,你的star將會是我不斷迭代的動力)git

具體實現

獨立帳號實現

這個比較簡單,起初考慮註冊一個帳號能夠配置多個應用,可是考慮到儘快出一版體驗,因此暫時就只支持一個註冊帳號適配一個客戶端的配置,後續可能會支持一個帳號支持多個客戶端的配置。目前僅支持郵箱註冊,後期會增長第三方登陸功能github

配置可視化

這一塊實現起來也很容易,全部的配置信息都寫入到數據庫中,每次客戶端啓動的時候去服務器拉取一下最新的配置信息便可,對於每次改動,須要用戶使用另外一個微信發送重啓命令來拉取最新的配置文件。包含基礎信息配置,每日說定時任務配置,羣諮詢,羣消息定時任務,以及關鍵詞自動回覆,關鍵字事件等配置web

遠程重啓項目

這一塊起初是使用了node的auto-reload庫來加載最新的配置信息,可是定時任務是在每次啓動的時候設置的,因此這個庫只能知足我一部分的需求。最後使用了pm2的文件監控功能,每次發送重啓命令的時候,修改監控文件的內容來實現遠程重啓功能。docker

pm2配置數據庫

{
  "apps": [
    {
      "name": "wechaty-pro",
      "cwd": "./",
      "script": "./index.js",
      "log_date_format": "YYYY-MM-DD HH:mm Z",
      "error_file": "./logs/app-err.log",
      "out_file": "./logs/app-out.log",
      "pid_file": "./logs/node.pid",
      "autorestart": true,
      "instances": 1,
      "min_uptime": "60s",
      "max_restarts": 100,
      "watch": ["reload"], // 監控此文件來達到自動重啓目的
      "watch_delay": 1000,
      "ignore_watch": ["node_modules", "logs", "wechat.config.js"],
      "watch_options": { 
        "followSymlinks": false 
      } 
    }
  ]
}
複製代碼

登陸狀態實時更新

wechaty有一個heartbeat事件,能夠推送當前客戶端登陸的狀態,因此實現起來也是很方便的

const {sendHeartBeat} = require('../proxy/aibotk')

async function onHeartBeat(str) {
    if (!str) {
        sendHeartBeat('dead')
    }
    if (str.type === 'scan') {
        sendHeartBeat('scan')
    }
}

module.exports = onHeartBeat
複製代碼

平臺與客戶端的對接

這裏參考了開放api接口平臺的模式,使用apikeyapisecret來確保通訊的安全(把全部的請求參數排序後和apisecretkey作hash生成一個簽名sign參數,服務器後臺只須要按照規則作一次簽名計算,而後和請求的簽名作比較,若是相等驗證經過,不相等就不經過)key與secret在註冊的時候自動生成,在我的中心查看

素材庫

素材庫的做用是統一管理全部的文字與文件,方便不一樣場景下的複用。文件支持經常使用的圖片,office等。目前是直接上傳到七牛雲之中

客戶端多平臺通用(docker)

因爲前期微信每日說和微信小祕書項目中,不少開發者反應每次在不一樣平臺中下載puppet存在各類問題,並且常常出現下載不了的狀況,因此此次客戶端建議採用docker化部署。只要有docker環境,就可使用。

剛開始是準備使用官方提供的docker來進行構建,可是後來發現,官方提供的docker部署方式並不能達到我想要的效果,個人想法是用戶直接拉取我生成的docker鏡像後,直接簡單配置後就能夠直接對接《智能微祕書》平臺。所以就開始本身編寫屬於本身項目的Dockerfile,不寫不知道,一寫嚇一跳,遇到的問題仍是蠻多的,首先採用的是node:alpine版本,由於這個版本構建體積最小,可是無奈這個環境沒法正常安裝puppet所須要的字體依賴等文件,沒辦法仍是直接採用了node:10這個鏡像。可是並無結束,不能每次build鏡像都從新下載依賴,因此參考了《Node.js 基於 Docker 使用的最佳經驗》這篇文章的建議對Dockerfile文件進行了優化。最終配置文件以下:

FROM node:10
LABEL maintainer="Leo_chen <chengeng@aibotk.com>"
WORKDIR /home/app
COPY package.json ./
RUN npm config set registry https://registry.npm.taobao.org \
    && npm config set disturl https://npm.taobao.org/dist \
    && npm config set puppeteer_download_host https://npm.taobao.org/mirrors
RUN  npm install \
     && npm run puppet-install

FROM node:10
ENV APT_SOURCE_HOST="mirrors.aliyun.com"
## 清華鏡像源(備選)
# ENV APT_SOURCE_HOST=mirrors.tuna.tsinghua.edu.cn
## 中科大源(備選)
# ENV APT_SOURCE_HOST=mirrors.ustc.edu.cn
RUN echo "0. 設置 apt 使用鏡像源,而後 update" \
    && sed -i "s@\(deb\|security\).debian.org@${APT_SOURCE_HOST}@g" /etc/apt/sources.list \
    && cat /etc/apt/sources.list \
    && apt-get update --fix-missing \
    # 安裝 https 協議須要的依賴
    && apt-get install -y --no-install-recommends \
       ca-certificates apt-transport-https \
    && sed -i "s@http://@https://@g" /etc/apt/sources.list \
    && echo "1. 安裝須要的依賴" \
    && apt-get install -yq gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 \
    libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 \
    libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 \
    libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 \
    ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
WORKDIR /home/app
COPY --from=0 /home/app .
COPY . .
CMD [ "node", "index.js" ]
LABEL \
  org.label-schema.license="MIT License" \
  org.label-schema.build-date="$(date -u +'%Y-%m-%dT%H:%M:%SZ')" \
  org.label-schema.version="$DOCKER_TAG" \
  org.label-schema.name="wechatAssistant" \
  org.label-schema.description="wechatAssistant: 智能微祕書" \
  org.label-schema.url="https://www.xkboke.com/web-inn/secretary/client.html" \
  org.label-schema.vcs-url="https://github.com/gengchen528/wechat-assistant-pro"
複製代碼

若是你的wechaty項目也想運行在docker環境中,那麼這個配置文件也是適合你的。如今這個Docker鏡像已經發布在Docker hub平臺,若是想體驗,直接docker pull aibotk/wechat-assistant便可。

部署體驗

首先須要註冊一個帳號: wechat.aibotk.com/

本地部署

克隆本項目,並進入項目根目錄

第一步 env.js 文件中填入《智能微祕書》的apiKey 和 apiSecret

第二步 npm install

第三步 npm run pm2(若是報錯pm2找不到,請執行npm install pm2 -g 後從新執行此步驟)

第四部 登陸《智能微祕書》平臺掃碼登陸便可

高級功能(沒法登陸微信網頁端朋友的福音)

若是你擁有了wechaty發放的ipad token,那麼也能夠直接使用本項目 (ipad token 申請地址

提早安裝依賴

npm i -g node-gyp
複製代碼

若是是win平臺,還需進行

npm i -g windows-build-tools 
複製代碼

配置ipad token

env.js裏填入你的ipadtoken便可

docekr部署(推薦)

鏡像地址:hub.docker.com/repository/…

1、建立一個env.js,並在env.js中填入相關的配置參數以下

module.exports = {
    apiKey: '', //智能微祕書平臺APIKEY (必填)
    apiSecret: '',//智能微祕書平臺APISECRET (必填)
    ipadToken: '', // 若是有wechaty的ipad token能夠填到此處,沒有的話就不用填寫 (非必填)
}

複製代碼

2、拉取鏡像

docker pull aibotk/wechat-assistant
複製代碼

3、運行鏡像

docker run -v 絕對路徑/env.js:/home/app/env.js -d  aibotk/wechat-assistant
複製代碼

4、登陸智能微助手平臺掃碼登陸便可

登陸地址:wechat.aibotk.com/

疑問

我想不少朋友會有疑問,這樣一個平臺會有人用嗎?不少人的微信都不能登陸網頁版微信,你作這個有什麼意義嗎?它有什麼商業價值嗎?

其實作這樣一個平臺,目的並不徹底是爲了開放給大衆使用,與其說作這個平臺是爲了更好的用戶體驗,不如說作這樣一個平臺是爲了提高本身全棧開發與構思能力,更是給本身找一個不斷逼着本身學習的理由,畢竟閒下來打遊戲還不如給本身找點事情作,哈哈!!從前期技術的調研,到三端架構的設計,以及真正上手碼代碼時遇到的各類問題都是我最寶貴的經驗。同時面對不一樣的解決方案,如何權衡利弊,作出最後的選擇,這也是一種能力吧。

最後

若是很不幸你的微信不能登陸網頁版微信,那麼你還有一個選擇,wechaty爲有想法的朋友提供了ipad token免費申請的通道(申請地址),只要你夠有想法,只要你是一個愛思考的人,他們仍是很願意提供ipadtoken來幫助你實現你想要的創意。

若是你不肯意申請的話,那麼還有第三種選擇,就是添加個人小助手來體驗智能化的小祕書服務

相關文章
相關標籤/搜索