企业微信机器人开发--python--定时消息推送

企业微信发布已经有很长时间了,企业微信机器人是其中附属的一个功能,活用这个机器人,可以为团队提高工作效率。使用机器人已经有一段时间了,特来此给各位分享一下一些小小的心得。

机器人创建

在企业微信群上右键,即右添加机器人的选项,在弹出来的对话框里,可以选择新建一个,也可以选择目前发布的一些公开的。我们这里就选择新建一个了。然后输入机器人名称,点击添加机器人,即可以创建成功了。

机器人使用

机器人创建好后,可以做些什么呢?当然是想要它做什么就看你后台怎么开发了。大致说下原理,具体的可以查看官方文档。机器人本质就是一个前端页,你可以通过后台业务向前端页Post消息即可。
官方文档里写了直接使用curl工具进行消息推送,不过这个示例是一次性的。还需要手动触发,大多数机器人工作,至少得有一个定时自动发送的功能吧。当然,你可以直接建一个定时任务在机器上。不过本篇文章标题注明了,是使用python,所以这个地方,以python源码为例,进行示例展示

#coding=utf-8
import json
import requests

# 将此处的机器人hook地址替换为你创建的机器人地址即可
webhook_url = "robot_hook"

# 普通 text 文本类型消息
# msgtype: 消息类型,此处为 text
# content: 消息内容,长度 < 2048字节,UTF-8 编码
# mentioned_list: @某个成员,或者@all
# mentioned_mobile_list: @手机号码

text_push_content = """广州今日天气:29度,大部分多云,降雨概率:60%
"""

text_data = {
    "msgtype": "text",
    "text": {
        "content": text_push_content,
        "mentioned_list": ["@all"]
        # "mentioned_mobile_list": ["@all"]
    }
}

def post_data(url,data):  
    # 注意:data发送时,一定要是json格式,另外,字符编码需要是utf-8
    postdata = str(json.dumps(data)).encode('utf-8')
    r = requests.post(url, data=postdata)
    print (r.text)
    

if __name__ == '__main__':
    post_data(webhook_url,text_data)

示例消息使用的是官网中的,可以根据自己想要的消息内容进行生成,加一个消息生成器即可。将web_hook替换好后,运行代码,正常情况下,你的机器人就会推送上面的天气消息了。同样,这个示例这样子,仍然只是手动触发型机器人,怎么定时自动推送呢,使用python创建一个定时任务咯,我使用的是apscheduler。 示例片段

# coding=utf-8
from apscheduler.schedulers.background import BackgroundScheduler

# 将此处的机器人hook地址替换为你创建的机器人地址即可
webhook_url = "robot_hook"
def job():
    #调用消息生成器
    text_data = generation_info()
	 # 注意:data发送时,一定要是json格式,另外,字符编码需要是utf-8
    postdata = str(json.dumps(text_data)).encode('utf-8')
    r = requests.post(webhook_url, data=postdata)
    print (r.text)

def cron_job_one(func_ptr):
    # BackgroundScheduler: 适合于要求任何在程序后台运行的情况,当希望调度器在应用后台执行时使用。
    scheduler = BackgroundScheduler()
    # 采用非阻塞的方式
    scheduler.add_job(func_ptr, 'cron', day_of_week='mon-fri',
                      hour='9,14,18', minute='30', second='0', id='job_one')
    # 这是一个独立的线程
    scheduler.start()
    scheduler.print_jobs()

if __name__ == '__main__':
     cron_job_one(job)    
     while True:
        pass

企业微信机器人官方文档里还介绍了其它类型消息的推送,可以根据自己的需要进行选择。

你可能感兴趣的:(Python学习笔记)