一个基于 Node.js 的生日提醒工具,支持公历/农历生日转换、按时间排序,并通过企业微信群机器人推送消息。
friends.json 的生日信息.ics 或 .csv 批量导入生日. ├── config.json ├── friends.json ├── index.js ├── lib │ └── common.js ├── script │ ├── import-csv.js │ ├── import-ics.js │ └── friends.template.csv ├── .env.example └── README.md
优先级:系统环境变量 WEBHOOK_KEY > .env > config.json。
.env.example 为 .env,设置 WEBHOOK_KEY。WEBHOOK_KEY。WEBHOOK_KEY 可填写 key 或完整 webhook URL。
config.json 示例:
{
"webhookKey": "",
"notifyDays": 7,
"messageType": "text"
}
字段说明:
webhookKey:Webhook key(环境变量优先)notifyDays:提前提醒天数messageType:text 或 markdownfriends.json 示例:
[
{
"name": "袁丹杰",
"birthday": "01-01",
"calendar": "solar",
"note": "元旦节"
},
{
"name": "郭春洁",
"birthday": "01-01",
"calendar": "lunar",
"note": "春节"
},
{
"name": "袁骁介",
"birthday": "01-15",
"calendar": "lunar",
"note": "元宵节"
}
]
字段说明:
name:姓名birthday:YYYY-MM-DD 或 MM-DDcalendar:solar(公历) 或 lunar(农历)isLeap:可选,农历闰月为 truenote:可选备注模板路径:script/friends.template.csv
name,birthday,calendar,isLeap,note Alice,1990-05-12,solar,, Bob,05-12,lunar,false, "Carol, Chen",1988-11-03,solar,,带逗号名字需加引号
导入命令:
node script/import-csv.js ./friends.csv node script/import-ics.js ./friends.ics
默认规则:
friends.csv/friends.icsscript/ 目录下的同名文件或第一个 .csv/.icsnpm install node index.js
创建仓库 Secret:WEBHOOK_KEY,值为机器人 key 或完整 webhook URL。
工作流已放在 .github/workflows/birthday-reminder.yml,默认每天 UTC 01:00 执行一次(北京时间 09:00)。
如果需要修改时间,请编辑 cron 表达式。
项目已提供 .cnb.yml,用于在 CNB 平台上按计划执行提醒任务。当前配置包含两种触发方式:
crontab: 0 6 * * *(Asia/Shanghai 06:00)push 时执行一次WEBHOOK_KEY(企业微信机器人key)。.cnb.yml 中的构建指令或触发规则:master:
"crontab: 0 6 * * *":
- docker:
image: node:22
# 引入您自己的秘钥仓库,以读取 $WEBHOOK_KEY 配置参数值
imports:
- https://cnb.cool/Airmole/Airmole-Secret-Repos/-/blob/main/work-wechat.yml
env:
WEBHOOK_KEY: $WEBHOOK_KEY
stages:
- npm install
- node ./index.js
crontab 表达式(GithubActions使用UTC时间,CNB使用北京时间)。docker.image(如 node:22)。stages 中的命令顺序或脚本。说明:
.cnb.yml里包含imports引用私有仓库配置读取企业微信消息通知KEY,fork 后请修改为自己的秘钥仓库配置文件链接。
WEBHOOK_KEY 值只需要填写Webhook地址中send?key=之后的部分。
solarlunar 库