🏔️因老是忘记排期,我开发了一个周期性提醒的小工具

因老是忘记排期,我开发了一个周期性提醒的小工具
type
status
date
slug
summary
tags
category
icon
password
大家好,我是程序员凌览。
每周都会为下一周的工作制定计划,也就是自我安排下周的任务。但由于缺乏提醒,我总是忘记执行,导致KPI受到影响。
为了解决这个提醒问题,我意识到肯定还有其他人和我一样面临这样的需求。因此,我计划开发一个网页应用,让用户能够通过简单的点击操作来设置钉钉机器人,实现周期性的提醒功能。
notion image
这个小工具的后端模块已经开发完成。然而,在与同事讨论这个工具时,我意外得知钉钉群的自定义机器人已经具备了类似的功能。
诺,就是这个:
notion image
个人产品很难与官方成熟的解决方案竞争。因此,这个产品的构想在刚刚萌芽时就夭折了。
接下来,我将分享这个小工具是如何一步步完成的。

钉钉自定义机器人加签处理

根据钉钉自定义机器人官方文档,创建自定义机器人后,我们需要在安全设置中选择“加签”选项。这意味着后端需要对发送给钉钉服务器的请求进行签名处理,以确保数据的安全性和完整性。
notion image
在Node.js中,我们可以使用内置的crypto模块来实现这一功能,无需额外下载任何第三方库。以下是使用Node.js的crypto模块进行签名处理的基本步骤:
其中access_tokensecret 由钉钉机器人提供,复制出来即可:
notion image

自定义机器人消息数据处理

钉钉自定义机器人支持多种消息类型,用于发送不同格式的消息。为了简化操作,我们将自定义机器人需要发送的消息模板数据存储在一个JSON文件中,该文件位于:
database/db.json
在这个JSON文件中,cron字段用于定义Cron表达式,这是一种用于指定定时任务执行时间的字符串表达式。Cron表达式由6个字段组成,分别对应秒、分钟、小时、天数、月份和星期几。每个字段都可以使用特定的符号来指定时间范围或间隔。如果您对Cron表达式不太熟悉,可以通过百度等搜索引擎进行了解。
为了操作这个JSON文件,使用了lowdb这个工具库。lowdb是一个轻量级的本地JSON数据库,它提供了简单的API来读写JSON文件。
当时的想法是,用户通过我的页面填写机器人的配置信息后,这些数据将直接存储在JSON文件中。在项目初期,追求简单高效,没有必要引入复杂的数据库系统来处理这些数据。

注册周期性任务

为了实现周期性任务的注册,我们使用了node-schedule库。这个库允许我们在Node.js环境中轻松地设置和执行定时任务。通过Cron表达式,我们可以指定任务的执行时间,包括秒、分钟、小时、天、月和星期几。
首先,我们定义一个函数来注册周期性任务:
接下来,我们从JSON文件中读取所有周期性任务的配置,并循环注册这些任务:
最后,在程序启动时,执行初始化操作:

增删改周期性任务

通过创建一个简单的Web服务器,并添加相应的路由接口来实现增删改JSON文件内容的功能。以下是使用Node.js和Express框架来实现这个功能代码:
这样后端部分功能完成。
前端页面和后端服务共用一个端口,并且前端页面放置在pages目录下,这样,后端和前端就可以通过同一个端口对外提供服务,实现逻辑:

部署应用

使用Docker部署一个Node应用,时区定为中国上海:
在完成打包之后,把镜像推送到了阿里云容器镜像服务平台。接下来,在Linux服务器上执行拉取(pull)、运行(run)等操作,以部署应用。
notion image

最后

钉钉官方已经提供了解决方案来满足类似的需求,这是我之前没有预料到的,真是个疏忽。不过,偶尔编写一些工具类的代码,探索技术的可能性,确实是一件有趣的事情。
 
上一篇
想找免费又强大的消息推送服务?MoePush 能满足你吗?
下一篇
技术Leader如何把团队带散
Loading...