目录

企微群机器人使用

APScheduler概要使用说明

cron方式设置

场景设置案例

表结构

代码


场景:对于周期性重复需要做的事情,每次都需要人工去提醒,容易忘记,而企业微信群可以添加群机器人,群机器人提供接口能力,按照接口格式说明把消息内容发到群里以及@相关人,达到提醒的目的。群机器人只是能让我们发送消息,而定时发送的实现这里采用python的APScheduler库实现。

正好,企业微信群有一个机器人,正可以实现这一功能。

刚开始只是在测试团队内部使用,也是写着玩玩,后来项目内使用的人多了就做成了数据库配置化,目前这套代码实际使用一年了,过程也遇到不同的场景也不断的优化。

简要设计思路:根据使用场景、机器人的接口文档,设置适合的数据库表结构,使用Python编写逻辑代码,利用APScheduler模块实现定时提醒的功能。

企微群机器人使用

机器人如何添加以及机器人的接口说明请看官方的信息文档,这里就不复制了~

使用说明:如何设置群机器人 -帮助中心-企业微信

接口使用:

注意:Markdown模式无法@所有人,微信开放社区官方也做了说明。

机器人发送MarkDown消息无法@所有人 | 微信开放社区

APScheduler概要使用说明

APScheduler 官网文档

这里不做详细说明,主要概要的记录,大家具体学习可以另行百度哈~

APScheduler 四个组件分别为:触发器(trigger),作业存储(job store),执行器(executor),调度器(scheduler)。

  • 触发器(trigger)
    包含调度逻辑,每一个作业有它自己的触发器,用于决定接下来哪一个作业会运行。除了他们自己初始配置意外,触发器完全是无状态的,APScheduler 有三种内建的 trigger:

    date: 特定的时间点触发
    interval: 固定时间间隔触发
    cron: 在特定时间周期性地触发

  • 作业存储(job store)
    存储被调度的作业,默认的作业存储是简单地把作业保存在内存中,其他的作业存储是将作业保存在数据库中。一个作业的数据讲在保存在持久化作业存储时被序列化,并在加载时被反序列化。调度器不能分享同一个作业存储。
    APScheduler 默认使用 MemoryJobStore,可以修改使用 DB 存储方案

  • 执行器(executor)
    处理作业的运行,他们通常通过在作业中提交制定的可调用对象到一个线程或者进城池来进行。当作业完成时,执行器将会通知调度器。最常用的 executor 有两种:

    ProcessPoolExecutor
    ThreadPoolExecutor

  • 调度器(scheduler)
    通常在应用中只有一个调度器,应用的开发者通常不会直接处理作业存储、调度器和触发器,相反,调度器提供了处理这些的合适的接口。配置作业存储和执行器可以在调度器中完成,例如添加、修改和移除作业。

cron方式设置

以下只对cron方式设置定时任务进行简单使用说明。

(int|str) 表示参数既可以是int类型,也可以是str类型
(datetime | str) 表示参数既可以是datetime类型,也可以是str类型year (int|str) – 4-digit year -(表示四位数的年份,如2008年)
month (int|str) – month (1-12) -(表示取值范围为1-12月)
day (int|str) – day of the (1-31) -(表示取值范围为1-31日)
week (int|str) – ISO week (1-53) -(格里历2006年12月31日可以写成2006年-W52-7(扩展形式)或2006W527(紧凑形式))
day_of_week (int|str) – number or name of weekday (0-6 or mon,tue,wed,thu,fri,sat,sun) - (表示一周中的第几天,既可以用0-6表示也可以用其英语缩写表示)
hour (int|str) – hour (0-23) - (表示取值范围为0-23时)
minute (int|str) – minute (0-59) - (表示取值范围为0-59分)
second (int|str) – second (0-59) - (表示取值范围为0-59秒)
start_date (datetime|str) – earliest possible date/time to trigger on (inclusive) - (表示开始时间)
end_date (datetime|str) – latest possible date/time to trigger on (inclusive) - (表示结束时间)
timezone (datetime.tzinfo|str) – time zone to use for the date/time calculations (defaults to scheduler timezone) -(表示时区取值)

表达式

场景设置案例

#表示2017年3月22日17时19分07秒执行该程序
sched.add_job(my_job, 'cron', year=2017,month = 03,day = 22,hour = 17,minute = 19,second = 07)#表示任务在6,7,8,11,12月份的第三个星期五的00:00,01:00,02:00,03:00 执行该程序
sched.add_job(my_job, 'cron', month='6-8,11-12', day='3rd fri', hour='0-3')#表示从星期一到星期五5:30(AM)直到2014-05-30 00:00:00
sched.add_job(my_job(), 'cron', day_of_week='mon-fri', hour=5, minute=30,end_date='2014-05-30')#表示每5秒执行该程序一次,相当于interval 间隔调度中seconds = 5
sched.add_job(my_job, 'cron',second = '*/5')# 装饰器
# 每分钟执行一次
@scheduler.scheduled_job('cron',minute = '*/1')# 每两秒执行一次
@scheduler.scheduled_job('cron',second  = '*/2')

最小使用示例

每两秒执行一次

from apscheduler.schedulers.blocking import BlockingSchedulerscheduler = BlockingScheduler(timezone='Asia/Shanghai')@scheduler.scheduled_job('cron',second  = '*/2')
def mytest():print("每两秒执行一次")scheduler.start()

机器人配置化表结构

robot表,配置机器人的主要内容

CREATE TABLE `robot` (`id` int(11) NOT NULL AUTO_INCREMENT,`group_chat` varchar(40) DEFAULT NULL COMMENT '群',`robot_key` varchar(64) NOT NULL COMMENT '机器人key',`robot_content` varchar(1000) NOT NULL COMMENT '消息内容',`data_type` varchar(64) NOT NULL COMMENT '消息类型,text/markdown',`mentioned_list` varchar(200) DEFAULT NULL COMMENT '企业微信id,提醒群中的指定成员(@某个成员),all表示提醒所有人;如果不知道微信id,可以使用mentioned_mobile_list',`mentioned_mobile_list` varchar(200) DEFAULT NULL COMMENT '手机号列表,提醒手机号对应的群成员(@某个成员),markdown类型不支持',`dict_scope` varchar(50) DEFAULT NULL COMMENT '不是固定@的人则通过,dict表查询',`day_of_week` varchar(30) DEFAULT NULL COMMENT '周几提醒,星期一至周日:1,2,3,4,5,6,7',`hour_minute` varchar(64) DEFAULT NULL COMMENT '提示的时、分,24小时制,精确到分钟',`chinese_calendar` varchar(20) NOT NULL COMMENT '执行时间,workday:工作日才执行;natural_day:自然日执行;not_legal_holiday:法定节日不执行',`person_in_charge` varchar(64) NOT NULL COMMENT '机器人需求者',`delete` varchar(50) DEFAULT NULL COMMENT '1:不执行,0:执行',`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='群机器人配置表';

这里给些robot表列子(有手动删除了一些关键信息,插入应该没有误删错些啥吧。。哈哈)

INSERT INTO robot (id, group_chat, robot_key, robot_content, data_type, mentioned_list, mentioned_mobile_list, dict_scope, day_of_week, `hour_minute`, chinese_calendar, person_in_charge, `delete`, created_at, updated_at) VALUES (9, '测试一组', '74744e03-fc46-4d59-bc2d-xxxxx', '### <@${wxID}>是本周迭代负责人哟												

企业微信群:机器人定时提醒功能数据库配置化相关推荐

  1. 如何使用企业微信群机器人定时发送消息

    场景描述: 每天早上8点钟通过企业微信群机器人发消息提醒大家打卡.在Aboter中该如何实现呢? 步骤: 首先创建一个IPaaS流程,触发条件组件编辑区选择[定时触发]类型.编辑区进行如下设置: 拖动 ...

  2. 钉钉群机器人关键词自动回复_企业微信群机器人怎么用?企业微信群机器人有什么功能?...

    使用企业微信办公时,我们可以在群聊中添加群机器人,自动推送消息,回答客户提问,那么企业微信群机器人怎么添加呢? 因为企业微信内部群机器人和外部群机器人的添加方式有一点区别,下面我们分开来讲述. 内部群 ...

  3. 工作随记-Java利用企业微信群机器人定时发送消息

    hi,大家好,我是恰恰 阅读本文需要2分钟~ 最近利用企业微信群机器人做的需求主要有 1.返奖率通知与告警:抽奖箱能抽出垃圾也能抽出大货,每隔5分钟查询一下这个返奖率,如果用户频繁抽出大货,这个抽奖箱 ...

  4. 企业微信机器人脚本python_Python 操控企业微信群机器人

    目标 企业微信群机器人常用来作为通知工具,群发消息给群内成员,充当小助手的角色.但若按照官方 API 文档来构建请求,也确实不太方便.本文通过 Python 第三方库来控制企业微信群机器人发送消息. ...

  5. PowerShell实现“机器人定时在企业微信群中发送消息”功能(上)

    本章实现 由于篇幅较多,会拆分为上.下两部分来写. 本章实现: 01.如何在企业微信中添加群机器人 02.简单用机器人发送一条消息(postman实现) 03.powershell打开 04.简单用机 ...

  6. MeterSphere实现“机器人定时在企业微信群中发送消息”功能

    背景 之前有过用PowerShell实现"机器人定时在企业微信群中发送消息"功能,并有输出相关教程. 但发现有一些问题:比如电脑关机了导致任务不能如期启动,于是在摸索中找到可替代P ...

  7. PowerShell实现“机器人定时在企业微信群中发送消息”功能(下)

    本章实现 由于篇幅较多,会拆分为上.下两部分来写. 本章实现: 06.机器人定时在企业微信群中发送消息功能 上章实现 01.如何在企业微信中添加群机器人 02.简单用机器人发送一条消息(postman ...

  8. delphi 企业微信消息机器人_GitHub - guoxianlong/insight: Insight是一个可以管理企业微信群机器人的小工具,可以非常方便的往群里发布即时消息和定时消息。...

    最科幻的企业微信群机器人管理工具 非常方便的发布群即时消息和定时消息,解放双手,提升沟通效率 部署教程 更新日志(2020.05.31) 修复设置为智能跳过工作日时,周日依然提醒问题. 前端修复定时成 ...

  9. python 企业微信群机器人_企业微信群机器人应用:使用python从网站抓取行业资讯并定时推送...

    在企业经营过程中,及时了解行业相关信息(市场动态.竞品策略.行业数据等等)是非常必要的.通常情况下,商品部门.营销部门.市场部门可能都会安排专门的人员定期进行这些信息的搜集.整理,再进行内部的分享. ...

  10. div区域内容抓取_企业微信群机器人应用:使用python从网站抓取行业资讯并定时推送...

    在企业经营过程中,及时了解行业相关信息(市场动态.竞品策略.行业数据等等)是非常必要的.通常情况下,商品部门.营销部门.市场部门可能都会安排专门的人员定期进行这些信息的搜集.整理,再进行内部的分享. ...

最新文章

  1. SQL Server 2005下的分页SQL
  2. PAT_B_1027 打印沙漏
  3. Java中throw re_详解Java编程中throw和throws子句的使用方法
  4. 定义EditPlus 语法文件详解
  5. 简单的加密/解密算法_/c++
  6. HTTP 302报文
  7. JAVA入门[22]—thymeleaf
  8. (转)完美画质 3D游戏反锯齿技术浅析 .
  9. icoding复习5 树 感觉难度巨大....
  10. 《大数据》2020年第3期目次摘要
  11. Android4.4 及以下TextView,Button等控件使用矢量图报错
  12. 服务器对操作系统有什么要求,服务器对操作系统有什么要求
  13. Python 持续点火,跟进还是观望?
  14. iOS CocoaPods自动管理第三方开源库
  15. Gateway之过滤器
  16. 常见排序算法时间复杂度和空间复杂度
  17. pfamscan 的使用_InterProScan的使用教程
  18. “双减”政策下的少儿编程市场:前8月融资12起,资本加持下何时跑出“独角兽”?...
  19. 如何通过供应链管理来居家做菜?
  20. 谐振电路的品质因数(Q值)

热门文章

  1. 开源 java CMS - FreeCMS2.8 移动app站点配置
  2. 如何写好一个2Take1 Lua - 初步认识Lua
  3. 人工智能原理(学习笔记)
  4. 学Python运维,这知识点你肯定会遇到,【必收藏之】nginx 域名跳转相关配置
  5. 计算机相关英语生词积累
  6. 马尔可夫链的常返态和非常返态-零常返态
  7. 你知道PDF怎么合并吗?这些技巧快来码住
  8. 阿里云OSS跨域设置
  9. 老男孩教育python全栈第九期视频
  10. JAVA Exception Handing