《微信每日说》的进阶历程

项目回顾

去年从《微信每日说》写到《微信小秘书》,再到《哄女朋友神器》,一步一步的给微信每日说增添了许多功能,也帮助了不少朋友作出本身的微信机器人。可是我本身却不是很满意,由于个人想法是可以作一个可视化的界面来完成全部的配置工做,但同时又能让使用者有必定的参与感。带着这份想法还有本身的信念(一切须要用代码配置的工做,终将被可视化替代),我开始了《智能微秘书》平台的搭建。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来帮助你实现你想要的创意。

若是你不肯意申请的话,那么还有第三种选择,就是添加个人小助手来体验智能化的小秘书服务

相关文章
相关标签/搜索