Skip to content

JS-banana/notify-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

a30a11b · May 1, 2025
Mar 3, 2025
Dec 7, 2022
Dec 11, 2022
Aug 30, 2022
Aug 15, 2023
Feb 9, 2022
Aug 15, 2023
Dec 9, 2022
Dec 4, 2022
Aug 30, 2022
Dec 28, 2021
Feb 18, 2025
Dec 28, 2021
Oct 24, 2022
Jan 24, 2022
Aug 25, 2022
Dec 11, 2022
Dec 28, 2021
Aug 15, 2023
Mar 3, 2025
May 1, 2025
Sep 1, 2022
Feb 18, 2025
Feb 18, 2025
Dec 28, 2021

Repository files navigation

微信消息通知

weixin

notify-server stars 掘金 goodMorning

微信通知,每天给女朋友发早安、情话、诗句、天气信息等

微信通知能力的核心链路已完成,就消息内容而言不限,基于此,可以根据个人需求完成各种私人定制

Support this project by starring and sharing it. Follow me to see what other cool projects I'm working on.

已添加功能

建议直接查看 config.yml 配置文件,里面有详细的配置功能说明~

  • 每天给女友发早安和土味情话

    点击查看详细内容
    • 个人定制化信息
    • 天气信息
    • 农历信息
    • 黄历信息
    • 节日信息
    • 生日提醒
    • 纪念日提醒
    • 彩蛋消息
    • 每日一言
    • 最美宋词
    • 雷人笑话
    • 土味情话
    • 每日英语
    • 睡前故事
    • 60s看世界

效果

weixin

preview-1

星河耿耿,不如你眼眸璀璨,晚风习习,不如你温柔绮丽。

你闻到空气中有烧焦的味道吗?那是我的心在为你燃烧。

『苏轼《水调歌头》』有悲欢离合,月有阴晴圆缺,此事古难全。

『ONE杂志』爱情无非是年轻人一起喝酒做梦。

『网易云音乐热评』你相信吗 也许在另一个平行时空 有一个跟你长得很像很像的人 正在热烈得爱着那个你爱不到的人——想见你想见你想见你

『一言』你的眼中,明暗交杂,一笑生花。

『每日英语(Jan 9, 2022』In case I don't see you… Good afternoon, good evening, and good night.

数据赋能API

这里我们可以自己选择第三方开放API,或者自己定制

目前接口数据能力主要由天行数据提供,随便注册一个账户会员即可,无门槛

天行数据:https://www.tianapi.com/

  • 会员免费接口数量:15个
  • 每日赠送次数:100次

注:如果采取该接口,需要在 添加环境变量这一步中,再添加Key的变量值TIAN_API_KEY,作为天行数据接口使用时的必填参数

免费开源接口需要考虑服务稳定性!

本项目目前已使用到的天行数据接口见 src/api/loveMsg

提醒

天气数据API接口:https://www.tianqiapi.com/ 不再免费提供使用了,为了测试,新用户注册可免费使用2000次

非收费接口也有,不过目前看来功能有限(免费接口很容易这样用着用着就不行了😿)

为了求稳,决定暂时先不用免费的接口了,该功能使用天行数据提供的接口API,

简要说明:

其他非天气接口,注册会员用户每天可免费调用100次,个人使用足够了,对于天气这种特殊接口采用独立计费模式,不过价格也足够便宜,1元10000次,且申请接口后立即赠送500次。

如何使用

准备工作

  1. 安装NodeJS(14.x版本以上,安装最新的稳定版即可)
  2. 注册企业微信,并按照步骤提供要求的变量(企业微信注册步骤
  3. 注册天行数据,获取到用户Key

如果你需要使用到 Git的功能,你还需要安装Git

配置文件

项目依赖于2个核心配置文件:

  • .env:用于配置环境变量值,如:企业ID、应用ID、天行key、发送消息类型为早中晚等

    • 复制 .env.example文件重命名为 .env,并按照要求填写对应变量值
    • 如果你使用的是服务器或者云函数,也可以通过直接设置环境变量进行配置
    # 鱼崽小铃铛:应用ID
    WX_APP_ID=1000003
    
    # 发送消息类型(不填默认为早晨)
    MESSAGE_TYPE=goodMorning
  • config.yml:用于配置女朋友的各种信息,以及纪念日提醒等,功能都在该文件进行配置

    # 卡片标题信息(加粗显示):今天是我们相恋的第 {day} 天,这里的 {day} 为固定替换相恋多久
    start_stamp_message: 今天是我们相恋的第 {day} 天
    # 女朋友所在城市(不要带‘市’),天气接口需要使用
    city_name: 蚌埠
    # 女朋友的爱称
    girl_name: 鱼崽

yml语法比json更简洁易读,比较简单,阮一峰 YAML 语言教程

4种方式

  1. 使用本地电脑手动发送消息(点我,看这里
  2. 使用GitHub Action免费实现自动发送消息(点我,看这里
  3. 部署本地服务实现自动化运行发送消息(点我,看这里
  4. 使用云函数部署,免服务器、操作简单、支持固定IP(推荐)(点我,看这里

使用问题

需要指出的是,企业微信2022.6.20号的安全更新影响如下

  1. 如果你是在该日期之后注册的应用,那么在调用接口发送消息通知时,接口会提示IP错误,这里需要你在微信后台的应用管理中配置可信IP
  2. 目前根据一些同学的最新反馈,在设置可信IP之前,又发现了需要设置可信域名的问题
  1. 对于2022.6.20之前注册过应用的同学暂时不受影响

  2. 对于使用GitHub Action的用户来说,因为 Action的运行服务器IP是不固定的,会经常变动,目前没发现合适的解决方案

  3. 对于本地调试发送消息的用户,你可以把报错的本地IP复制后填写到应用后台的可信IP内,便可以暂时解决这个问题,这个方式主要用于调试使用(电脑重启后IP可能会变),可信域名的问题会依然存在

对于上面的问题,对应的解决方案如下

  1. 可信IP问题,可采用云函数部署的解决方案,支持固定IP,见使用方式四
  2. 可信域名的问题,见seph1rex同学提供的解决方案(可信域名.docx)(文件位置:docs/可信域名.docx

总的来说,成本最低,效率最高的使用方式就是采用云函数部署方案。

需要的变量

WX_COMPANY_ID= 企业ID
WX_APP_ID= 应用ID
WX_APP_SECRET= 应用 Secret

TIAN_API_KEY= 天行数据 key
点击查看企业微信的注册步骤的详细示例

第一步,注册企业

用电脑打开企业微信官网,注册一个企业。有手机号就可以注册,不用营业执照!不用营业执照!不用营业执照!

第二步,创建应用

注册成功后,点「管理企业」进入管理界面,选择「应用管理」 → 「自建」 → 「创建应用」

创建应用-1

应用名称随意填,可见范围选择公司名(或指定组织、个人,建议选择全部,然后在代码里指定用户)。

创建应用-2

指定成员或组织

指定范围

创建完成后进入应用详情页,可以得到应用 ID( agentid )①,应用 Secret( secret )②。

创建应用-3

第三步,获取企业 ID

进入「我的企业」页面,拉到最下边,可以得到企业 ID③。

企业ID

第四步,推送消息到微信

进入「我的企业」 → 「微信插件」,拉到下边扫描二维码,关注以后即可收到推送的消息。

第四步

无法接收到消息的异常情况处理

PS:如果出现接口请求正常,企业微信接受消息正常,个人微信无法收到消息的情况:

  1. 进入「我的企业」 → 「微信插件」,拉到最下方,勾选 “允许成员在微信插件中接收和回复聊天消息”

    异常情况-1

  2. 在企业微信客户端 「我」 → 「设置」 → 「新消息通知」中关闭 “仅在企业微信中接受消息” 限制条件

    异常情况-2

本地开发

  1. 可以先star本项目给个支持,然后直接fork本项目 => 克隆至本地

  2. 复制 .env.example文件重命名为 .env,并按照要求填写对应变量值

  3. 安装依赖

    # 推荐使用pnpm(如果未安装,可先全局安装`npm install -g pnpm`)
    pnpm install
    # or
    npm install
  4. 执行脚本

    # 推荐使用这种方式
    pnpm start
    # or
    npm start

    或者

    # 先build构建再执行脚本
    # 1. build构建生成js文件
    pnpm build
    # 2. node执行js文件
    node dist/index.js

注:本项目不作为包发布,因此暂不考虑build构建,直接通过脚本运行即可,github服务已配置有缓存,无需担心安装性能问题

GitHub Action 部署

如果要通过 GitHub Action使用,需要在 Secrets 中一一添加变量,脚本会自动运行,当然,你也可以根据自身需求调整,见 .github/workflows/goodMorning.yml

secrets

GitHub Action每天7:30自动执行,脚本配置如下:ci.yml

schedule:
  # `分 时 天 月 周` 时按照标准时间 北京时间=标准时间+8 18表示北京时间早上2点
  # 早上 7:30
  - cron: '30 23 * * *'

部署本地服务

使用 pm2 实现对自动化脚本的本地化部署。当使用该方式后,你只需配置好发送消息的时间,然后启动服务即可😎

如果你是以下设备,请注意:

  1. 本地电脑:不关机无影响,关机后,需要开机后开启本服务
  2. 服务器:无影响,启动服务后会一直保持运行(服务器默认不关机、重启)

服务器部署服务的使用方式逻辑和本地开发一样,需要先clone本项目 => 安装依赖 => 执行脚本

如何启动服务:

npm run depoly:start

如何停止服务:

npm run depoly:stop

如何查看服务:

# 查看服务状态
npm run depoly:status
# 查看服务日志
npm run depoly:log

云函数部署

直接使用按量付费的Serverless云函数,方便快捷,腾讯云函数、阿里云函数、华为云函数等等都可以~

支持指定固定IP,可以有效解决可信IP的问题,目前提供了基于腾讯云和华为云的教程,如下:

  1. deploy分支(作者基于腾讯云函数开发的):该分支可以帮助用户快速完成基于腾讯云函数的部署,README.md有操作步骤
  2. docs/腾讯云函数deploy分支部署方法详解.docxMAO12366同学提供的零基础图文操作教程,针对腾讯云的小白用户可以参考这个
  3. docs/master分支华为云函数部署方法.docxMAO12366同学提供的零基础图文操作教程,针对华为云的小白用户可以参考这个

更新记录

  • 2022-01-25:README文档更新、添加图示,免费天气接口稳定性及功能标注
  • 2022-01-26:天气接口调整、功能调整,见分支feat/weather
  • 2022-02-09:增加容错处理,增加独立配置文件方便用户定制
  • 2022-08-24:fix 美丽短句config配置问题adf87fc,完善文档
  • 2022-08-30: 增加本地化部署自动化脚本服务的功能PR
  • 2022-09-05: 美化模板,添加表情
  • 2022-10-23:新增纪念日、生日提醒、自定义love message、彩蛋🎃
  • 2022-10-24:新增高温提醒、低温提醒、自定义内容
  • 2022-10-25:新增第二卡片:可以根据当前内容是否大于512字节自动启用,也支持手动启用,启用后纪念日、生日、彩蛋将只会在第二卡片中展示
  • 2022-10-26:新增黄历、第二卡片根据重要消息智能启用
  • 2022-12-07:整理了云函数部署的文档,以及专门针对腾讯云函数开发的deploy分支

交流

你可以关注我公众号(前端小帅),然后加我微信交流,或者直接添加交流群,一起沟通学习~

公众号:前端小帅 交流群

版权声明

GPLv3 协议:凡使用本项目,其代码必须公开;如由此项目衍生的收费服务,必须提前告知终端用户此项目是可以免费获得及收费的理由;在本项目基础上 Fork、修改后的代码,必须采用 GPLv3 协议(转载引用请注明作者和项目地址

鸣谢

感谢一直以来支持本项目的同学,并且为本项目的发展提供了很多思路和建议~❤

  • MAO12366:图标模板贡献、云函数部署贡献
  • seph1rex:可信域名解决方案提供

请作者喝咖啡☕

如果觉得这个项目还不错,或者这个项目对你有所帮助,可以选择请作者喝咖啡☕~

打赏时您可以备注名称,我会将您添加至打赏列表中(如有遗漏请联系我添加)

未备注的我会以咖啡命名😄,再次感谢各位的支持🧡~

支付宝 微信
捐赠者 捐赠金额 捐赠日期
生椰拿铁 6.66 元 2022-11-15
卡布奇诺 20 元 2022-10-31
A 🌸 5 元 2022-01-07

感谢star

你的 star 就是对我的最大支持🙏

Stargazers over time