theme: smartblue
概述
为什么要接入企业微信机器人?
比如我们在每次 Merge Request
的时候我们都需要手动去@代码评审人
,提醒对方去做代码评审,利用机器人帮助我们去完成这件事情它不香么,我们甚至可以去定制化它的消息,让我们的组间协调变得更加有趣
gitlab 为什么无法直接接入企业微信机器人?
企业微信机器人接口接收的数据格式和 gitlab
触发事件时发送的数据格式不匹配,因此无法直接接入,需要我们搭建一个后台作为中转
接入流程
创建一个机器人
打开要接入的企业微信群
你会打开下面这个窗口,点击创建机器人
创建成功后就可以拿到机器人的 webhook url 了,后面我们就是利用它来发送群聊
接入gitlab
打开你的代码仓库点击设置里的 Webhooks
选项
在这个页面里设置你的后台地址和触发通知的事件,我只设置了 Merge request events
,根据你们团队需要也可以设置 Push events
等
搭建后台
怎么搭建一个后台我就不展开详说的,本人是用 eggjs
搭建的后台,你也可以用 java、go、python、c++
等去搭建,怎么方便怎么来
上菜
// 处理路由 /webhooks 的逻辑
public async index() {
// 获取 gitlab 发送的消息体
const body = this.ctx.request.body;
console.log("body---", body);
// 如果请求和评审人是同一个人不做提示
const { username: assignName } = body.assignees[0];
const userName = body.user.username;
if (assignName === userName) return false;
// 只有 merge request 才处理
if (body.event_type === EVEVT_TYPE.merge) {
// 发送提示消息(下面贴了详细代码)
await this.service.merge.hook(body, config);
// 提示对应的评审人(下面贴了详细代码)
await this.service.tip.hook(config.members[assignName], config.robot);
} else {
return;
}
}
// this.service.merge.hook
public async hook(params: any, config: any) {
const userName = params.user.name;
const {
target_branch: targetBranch,
title,
url,
} = params.object_attributes;
const { username: assignName } = params.assignees[0];
// 组织消息要发送的信息,支持 markdown
const data = {
msgtype: "markdown",
markdown: {
content: `${config.nickname[assignName]},您有个待处理的 Merge Request\n>提交作者: ${userName}\n>目标分支: ${targetBranch}\n\n>请求标题: [**${title}**](${url})\n温馨提示: 点击标题可跳转至处理页面`,
},
};
// 通知企业微信机器人
await this.ctx.curl(config.robot /* 机器人的 webhook url */, {
method: "POST",
contentType: "json",
data,
dataType: "json",
});
return true;
}
// this.service.tip.hook
public async hook(phone: string, robot: string) {
await this.ctx.curl(robot, {
method: "POST",
contentType: "json",
data: {
msgtype: "text",
text: {
// @评审人需要拿到他的企业微信 userid,如果拿不到 userid 可以通过配置他的手机号
mentioned_mobile_list: [phone],
},
},
dataType: "json",
});
// console.log(result);
}
总结
很简单的工具,一方面是可以提升大家整体的工作效率,另一方面也可以适当活跃一下团队的气氛,或许你也可以多安排几张骚图在这些消息体里哈哈,我是给我们的组员都安排了一个昵称。
那对于我自己而言就是熟悉了一下egg
,还有自己公司的构建平台,借这个机会你也可以往里面加一些你想学习的东西。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容