资讯专栏INFORMATION COLUMN

记一次自动提醒钉钉机器人的诞生

TigerChain / 2745人阅读

摘要:调吧,调了半天发现没问题,看进程,发现腾讯云远程在一段时间后会自动断开连接,再次连接上后原来的进程就被关掉了。。。。

背景

最近项目上不太忙,决定利用这难得的空闲时间把之前一直看的nodeJs充分利用下,于是打算写一个钉钉机器人项目,在每天指定的时间来提醒一些事项。

代码逻辑

说干就干,怎么申请并向群里添加机器人之类的就不赘述了,有心的可以百度或参考官方教程。整个代码的逻辑很简单:使用superagent作为代理来发起请求,在指定的时间里调用接口发送消息就可以了。

因为本身是一个node小白,所以还是踩了不少坑的。。。

最开始使用setinterval函数来处理每天的定时发送,又因为只需要工作日发送,有需要调用第三方接口来判断当前日期是否为工作日。 用setInterval接口又需要一直去轮训判断小时和分钟是否符合预定义的时间,感觉有点傻。。。
一下是原始判断时间的代码:

function isTimeNow() {
  let text = "";
  const now = moment();

  const hour = now.hour();
  const minute = now.minute();

  logger.info(`当前是当天的第${hour}个小时`);

  if (hour === 9 && minute > 10 && minute < 20) { // 9:10 -- 9:20 之间
    text = "上班了,别忘记打卡了..";
  } else if (hour === 18 && minute > 30 && minute < 40) { // 6:30-6:40 之间
    text = "下班了,别忘记打卡了..";
  }

  logger.info(`需要发送的消息内容为: ${text}`);

  if (text) {
    sendMsg(text, webhock);
  }
}
还可以优化

之前用过java来使用corn去执行定时任务,想着node也应该是支持的,搜索后发现,果不其然,发现了node-schedule库就是一个支持corn来执行定时任务。果断抛弃setInterval。 这样一来代码就省去了大量判断时间的代码,直接初始化一个任务,一行搞定:

schedule.scheduleJob("00 30 9 * * *", doSchedule);
怎么失败了

ok,到此为止,代码基本完成, 接下来就是去部署执行了,首先在本地终端使用node去执行脚本,群里果然收到消息,一切正常,完美! 顺利部署到云端(腾讯云),也正常收到消息,简直完美!!可以去溜达一圈了?

溜达一圈回来后,悲剧了,本来轮序的消息,怎么轮序了一段时间后没有了? 服务器关掉了? 被人黑掉了?

鉴于这个项目的价值,被人黑掉的可能性基本不存在,腾讯云一般应该不会死掉。。。有个著名的小学生说过:排除一切可能后,最不可能的就是真相。 真相是残酷的:出bug了。。。

调bug吧,调了半天发现没问题,看进程,发现腾讯云远程在一段时间后会自动断开连接,再次连接上后原来的进程就被关掉了。。。。

搜索后发现,原来进程还有后台和前台之分(又涨姿势了)。在终端里执行的命令,在终端关闭后也就关闭了。 要想不关闭,是不能简简单单使用node命令的。。。

问题明白了,解决起来很快的,在终端执行以下命令:

node index.js & // 启动后台基础
disown // 前置转为后台进程


ps -ax: 查看所有进程信息
ps -f -C node: 查看node信息

参考链接

不足之处

暂时这个东西是满足需求了。但因为所有提示信息都是写死的,如果有时候想调整信息内容怎么办?

下一步可以把发送的消息内容放在一个json文件里, 使用express搭建一个简单的服务,在页面上提交表单来修改发送内容,也可以提供页面来直接发送消息而不用等轮序。。。

那就是下一个文章的内容了。。。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/10645.html

相关文章

  • 一次OkHttpClient导致线程过多排查

    摘要:首先先解读下这个报警内容,原因活跃线程数过多,是监听的端口号用来获取虚拟机各项信息,代表着此时的线程数,是设置的报警阈值。 前言 前天,一位21世纪的好好青年正在工位上默念社会主义大法好的时候,钉钉上又报警了(公司项目接入了open-faclon监控,指标不正常会报警给钉钉的机器人),无奈默默流泪挥手告别社会主义大法开始定位线上问题。 报警内容 首先我们先来看下报警信息,为防止泄露公...

    tianyu 评论0 收藏0
  • 一次Redis数据库配置导致连接数泄露问题

    摘要:首先,修改了下数据库配置成功重启之后,重新运行前面的监控脚本,以便观察修复后情况,初步可以确认这下服务器端和客户端的连接数一致了再又经过几天的脚本自动采集数据后分析,系统又恢复平稳运行了,连接数一直稳定在理论最大连接数之下。 问题背景 去年圣诞节当天,突然收到一个我经手过的项目的告警邮件,错误消息显示Redis::CommandError: ERR max number of clie...

    Anleb 评论0 收藏0
  • 从零开始打造专属钉钉器人

    摘要:目前钉钉机器人支持方式,仍属于内侧阶段。方式是指被动接受通知,钉钉群中添加的群机器人默认都是该模式。截止撰写文章时,钉钉的机器人文档不可访问,所以会在下面介绍下。本文同步发表于作者博客从零开始打造专属钉钉机器人 官方定义如下: 群机器人是钉钉群的高级扩展功能。群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步。目前,大部分机器人在添加后,还需要进行Webhook配置,才可...

    fyber 评论0 收藏0
  • yii2-dingtalk 钉钉器人

    摘要:说明群机器人是钉钉群的高级扩展功能。目前,大部分机器人在添加后,还需要进行配置,才可正常使用配置说明详见操作流程中的帮助链接。安装配置在使用本扩展之前,你需要去群机器人获取相关信息。 说明 群机器人是钉钉群的高级扩展功能。群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步。目前,大部分机器人在添加后,还需要进行Webhook配置,才可正常使用(配置说明详见操作流程中的帮助...

    caikeal 评论0 收藏0
  • 一个智能运维算法测试方法

    摘要:单元测试是方法级别的测试,是保证代码质量的基础,一般由开发同学自行完成。但接口测试和测试无法覆盖所有测试需求,比如算法。 摘要: 质量是企业长远生存的根基,是企业竞争的免死金牌。作为质量控制团队的一员,保障和提高所负责系统的质量,是工作的核心。而完善的测试覆盖,是保证质量的有效手段。 写在前面质量是企业长远生存的根基,是企业竞争的免死金牌。作为质量控制团队的一员,保障和提高所负责系统的...

    Jingbin_ 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<