目录
前言
大家都知道禅道是一个强大的项目管理工具,可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来。但是所有的信息都要登录到禅道平台上看,这样导致有些小伙伴在没有登录的时候没有第一时间得到消息。所以公司想让我做一个在创建完BUG任务的时候通过飞书提醒到小伙伴。
提示:以下是本篇文章正文内容,下面案例可供参考
一、环境
我这里公司服务器的环境是这样的 Centos :7.9 Python 3
注意:禅道上一定要有手机号而且与飞书注册的手机号一致否则这个脚本无法实现!!
设置飞书机器人(如有需要可以看我上一篇文章)
创建一个飞书应用(这个很重要:用到App_ID和App Secret)
飞书开放平台https://open.feishu.cn/document/home/mass-messaging-to-designated-departments/create-app-request-permission创建一个飞书机器人(这个只用到了启用就好了,其他的我没有用到)
飞书开放平台https://open.feishu.cn/document/home/develop-a-bot-in-5-minutes/create-an-app应用权限截图:
应用可用成员也一定要选择。
用管理员权限找到----工作台----应用管理---可用成员选择
二、python脚本
1.编写脚本
本来我打算写个监听数据库端口的脚本,把推送上来的数据进行分析然后发送。后来发现各种问题,其实最大的问题是这个我不会!我骄傲了吗?并没有!额。。言归正传。
首先我们理一下需求公司让创建BUG任务时发送给个人,重要的BUG发送至飞书群组,那么禅道的数据库是固定的,我们要做的就是拿到数据获取手机号,然后通过飞书的API接口发送给用户,群组的通过飞书机器人发送。一分钟执行一次这个脚本获取一分钟内的数据(一分钟内我们可以接受),那么理论成功,实践开始。
#!/usr/bin/python3
# encoding: utf-8
import json
import pymysql
import requests
# 打开数据库连接 根据自己的实际情况修改
db = pymysql.connect(host="数据库地址", user="root", password="123123123",
port=3306, db='zentao', charset='utf8')
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# sql语句 查询一分钟内发生的事
sql = "SELECT b.id , b.title, b.severity, b.pri, u.realname, u.mobile, u1.realname as openName FROM zt_bug b \
LEFT JOIN zt_user u ON b.assignedTo = u.account LEFT JOIN zt_user u1 ON b.openedBy = u1.account WHERE b.openedDate between date_add(now(), interval - 1 minute) and now()"
# 使用 execute() 方法执行 SQL 查询
cursor.execute(sql)
result = cursor.fetchall()
messages_list = []
moblie_list = [] # 给到飞书的手机号
messages_list_1 = [] # 给到飞书的手机号
for row in result:
id = row[0]
title = row[1]
severity = row[2]
pri = row[3]
realname = row[4]
moblie = row[5] # 数据库中的手机号
openname = row[6]
content = "- - - - - - BUG 创建提醒 - - - - - -\n\n Bug_ID:{0}\n 内容:{1}\n 接收人:{2}\n 发起人:{3}\n \
地址:http://禅道的地址/index.php?m=bug&f=view&bugID={4}\n ".format(str(id), str(title), str(realname),
str(openname), str(id))
# 判断是否发送群组 BUG级别优先级别为1时发送群组
if severity == pri and severity == 1:
messages_list.append(content)
messages_list_1.append(content)
moblie_list.append(moblie)
# 关闭数据库连接
db.close()
def gettenant_access_token():
tokenurl = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/"
headers = {"Content-Type": "application/json"}
data = {
"app_id": "cli_dsdefdfde***", # 这个就是刚刚创建应用的App ID
"app_secret": "u58nzakI***" # 这个是应用的App Secret
}
request = requests.post(url=tokenurl, headers=headers, json=data)
response = json.loads(request.content)['tenant_access_token']
print(json.loads(request.content))
return response
def getuserid(tenant_access_token):
# 获取userID
for mobiles in moblie_list:
userurl = "https://open.feishu.cn/open-apis/user/v1/batch_get_id?mobiles=%s" % mobiles
headers = {"Authorization": "Bearer %s" % tenant_access_token}
request = requests.get(url=userurl, headers=headers)
response = json.loads(request.content)['data']['mobile_users'][mobiles][0]['user_id']
print(json.loads(request.content))
return response
def getchatid(tenant_access_token):
# 获取chatid
chaturl = "https://open.feishu.cn/open-apis/chat/v4/list?page_size=20"
headers = {"Authorization": "Bearer %s" % tenant_access_token, "Content-Type": "application/json"}
request = requests.get(url=chaturl, headers=headers)
response = json.loads(request.content)
return response
def sendmes(user_id, tenant_access_token):
sendurl = "https://open.feishu.cn/open-apis/message/v4/send/"
headers = {"Authorization": "Bearer %s" % tenant_access_token, "Content-Type": "application/json"}
# 给个人发送消息
for messages in messages_list_1:
data = {"user_id": user_id,
"msg_type": "text",
"content": {
"text": "%s<at user_id=\"%s\">test</at>" % (messages, user_id)
}
}
requests.post(url=sendurl, headers=headers, json=data)
# 发送群消息
devurl = "https://open.feishu.cn/open-apis/bot/v2/hook/****" # 这是飞书群组机器人的URL并非应用机器人!
for messages in messages_list:
data = {
"content": dict(text="<at user_id='all'></at> \n" + messages),
"msg_type": "text"
}
requests.post(devurl, json.dumps(data))
tenant_access_token = gettenant_access_token()
user_id = getuserid(tenant_access_token)
sendmes(user_id, tenant_access_token)
2.创建定时任务
上传python脚本。
在centos上创建一个定时任务(一分钟执行一次)
3.测试
在禅道上创建bug任务后看是否收到推送消息。
个人消息示图:
群消息推送示图:
总结
至此整个过程就结束了,当然我拼接的内容比较简单如有需要可以自己修改一下。
飞书API接口链接
飞书开放平台https://open.feishu.cn/document/ukTMukTMukTM/uITNz4iM1MjLyUzM