由于工作中需要用到钉钉,每天都要和钉钉打交道:上下班打卡、出差请假流程、各种工作讨论组,不一而足,工作已然和钉钉绑在了一起,难怪有广告词: 微信是一个生活方式,钉钉是一个工作方式。

我们是钉钉机器人内测版的首批用户,使用自定义机器人功能做了预警消息推送,效果还不错,目前钉钉机器人已经正式发布,支持与Github、Gitlab、Jira等集成:

由于我们研发过程管理重度依赖微软TFS(Team Foundation Server),研发、测试及运维同学(DevOps)希望将发布计划通知到钉钉群,由于钉钉机器人没有提供默认支持,我们可以通过“自定义”机器人完成该功能。

一、TFS中设置

1.新建服务挂钩

2.Web挂钩

3.触发器

4.设置URL及选择“全部”资源信息

这里的URL,就是我们开发的WebAPI,点击测试,TFS会发送JSON给定义的WebAPI,格式如下:

二、WebAPI

我们主要对TFS发过来的JSON中的resource进行解析:

 public class WorkItemCreatedController : ApiController
{
//钉钉通知群
private static string dingDingToken = ConfigurationManager.AppSettings["WorkItemCreatedDingDingToken"]; [HttpPost]
public void Post()
{
var wiJson = Request.Content.ReadAsStringAsync().Result;
var workItem = JsonConvert.DeserializeObject<WorkItem>(wiJson);
。。。。。。
}
}

WorkItem定义如下:

    public class WorkItem
{
public WorkItemResource resource { get; set; }
} public class WorkItemResource
{
public int id { get; set; } public Dictionary<string, string> fields { get; set; }
}

  这里关键点是把fields定义为Dictionary,通过JsonConvert序列化后,很方便获得想要的字段,比较有用的几个字段是:

"id": 发布计划创建成功后返回的id号,

"System.WorkItemType": "发布计划",
"System.CreatedBy": "创建人",
"System.Title": "发布计划名称",
"System.Description":"发布说明" 可自定义字段,标识实际发布时间

  这里需要注意的是,TFS返回的时间,是UTC时间,比本地时间晚8个小时,我们接收后,需要做相应的ToLocalTime处理。

三、组装钉钉消息

经过步骤二,我们已经解析到需要的字段,下面组装成钉钉要求的格式即可,钉钉机器人支持@多个具体人,需要传入这些人的手机号:

  private static string ConstructTextTypeMsg(string content, List<string> mobiles)
{
var textTypeMsg = new TextTypeMsg()
{
//消息类型
msgtype = "text", //消息内容
text = new TextTypeMsg.Text()
{
content = content
}, //At人列表
at = new TextTypeMsg.At()
{
isAtAll = false,
atMobiles = mobiles
}
}; return JsonConvert.SerializeObject(textTypeMsg);
}
TextTypeMsg实体类定义如下:
public class TextTypeMsg
{
public string msgtype { get; set; }
public Text text { get; set; }
public At at { get; set; } public class Text
{
public string content { get; set; }
} public class At
{
public List<string> atMobiles { get; set; } public bool isAtAll { get; set; }
}
}

四、整体流程

五、总结

经过前面三步,就将TFS中的发布计划,通过IIS中的WebAPI,调用钉钉机器人,发送到了钉钉群中,通过Coding,将微软TFS和阿里钉钉进行了联姻。

TFS发布计划发送到钉钉消息群的更多相关文章

  1. 钉钉机器人SDK 封装预警消息发送工具

    1 群机器人     (1) 引言     钉钉聊天群内支持的群机器人, 类似QQ 群机器人, 可以发天气, 讲笑话那样;     钉钉群机器人支持自定义机器人, 允许开发者管理机器人做预警消息通知; ...

  2. .Net调用钉钉接口,实现发送企业消息功能

    我在钉钉官网上看了下,关于调用钉钉接口,发送企业消息通知,他给的核心代码总共几行. 用到的一个接口引用 TopSDK.dll 下载网址https://open-doc.dingtalk.com/doc ...

  3. jenkins 构建后发送钉钉消息通知(插件)

    钉钉,越来越多的公司采用,那么我们在持续集成中,也可以直接选择钉钉插件的,在之前的博客中 ,对发送的钉钉消息进行了定制,那样的话会开启一个新的任务, 其实今天呢,我们可以直接安装一个插件就可以发送了, ...

  4. 钉钉机器人集成Jenkins推送消息模板自定义发送报告

    一.由于公司同样也使用了钉钉.那么在做Jenkins集成自动化部署的时候,也是可以集成钉钉的. 那种Jenkins下载钉钉插件集成,简单设置就可以完成了.我们今天要做的是,定制化的发送消息. 钉钉推送 ...

  5. springboot使用RestTemplate以post方式发送json字符串参数(以向钉钉机器人发送消息为例)

    使用springboot之前,我们发送http消息是这么实现的 我们用了一个过时的类,虽然感觉有些不爽,但是出于一些原因,一直也没有做处理,最近公司项目框架改为了springboot,springbo ...

  6. zabbix监控web应用日志报警并发送消息到钉钉

    首先在钉钉上开启钉钉机器人功能 说明:自定义关键词是zabbix发送过来的消息内容必须含有你定义的ERROR或者error字段,否则消息无法发送过来 ip地址段:一般都是zabbix-server的I ...

  7. python脚本实现向钉钉群组发送消息

    一.json格式 import json import requests def sendmessage(message): url = 'https://oapi.dingtalk.com/robo ...

  8. Jenkins构建项目后发送钉钉消息推送

    前言 钉钉是我们日常工作的沟通工具,在Jenkins构建持续集成项目配合钉钉机器人的功能,可以让我们在持续集成测试环节快速接收到测试结果的消息推送. 一:新建一个钉钉群,选择自定义机器人 二:添加机器 ...

  9. python发送钉钉消息

    import requests import time import hashlib import hmac import base64 import re def SendMessage(messa ...

随机推荐

  1. ECJTUACM16 Winter vacation training #4 题解&源码

    A......................................................................................... 题目链接→Code ...

  2. 今日头条- iOS客户端 启动速度优化实践

    版权声明 作者:今日头条iOS团队 原文:https://techblog.toutiao.com/2017/01/17/iosspeed/ 应用启动时间,直接影响用户对一款应用的判断和使用体验.头条 ...

  3. API内部文件读取

    直接上代码吧 尝试将项目复制后建一个新的项目,结果总是有问题,不过可以把原项目转换为新项目,方法如下: 1.项目右键在android tools 有个 rename application packa ...

  4. 动态样式语言—LESS

    博客原文地址:Claiyre的个人博客 https://claiyre.github.io/ 博客园地址:http://www.cnblogs.com/nuannuan7362/ 如需转载,请在文章开 ...

  5. HashTable源码分析

      本次分析代码为JDK1.8中HashTable代码.   HashTable不允许null作为key和value.   HashTable中的方法为同步的,所以HashTable是线程安全的. E ...

  6. 微信小程序 网络请求之re.request 和那些坑

    微信小程序有四种网络请求类型,下面只详细介绍普通HTTPS请求(wx.request) 普通HTTPS请求(wx.request) 上传文件(wx.uploadFile) 下载文件(wx.downlo ...

  7. BZOJ 1076: [SCOI2008]奖励关(概率+dp)

    首先嘛,看了这么久概率论真的不错啊。看到就知道怎么写(其实也挺容易的= =) 直接数位dp就行了 CODE: #include<cstdio> #include<cstring> ...

  8. NSRunLoop原理详解——不再有盲点

    编程最怕的就是有盲点,不确定,而runloop官网对其提及的又很少:那么看完这篇应该使你有底气很多~ RunLoop整体介绍 An event-processing loop, during whic ...

  9. java学习笔记——Java多客户端与服务器通信

    先说一下大概的思路: 应用多线程来实现服务器与多客户端之间的通信 1.服务器端创建ServerSocket,循环调用accept()等待客户端连接: 2.客户端创建一个Socket并请求与服务器端连接 ...

  10. 一个不错的windows编程网址

    http://www.zklmc.com/ 含有MFC,C#,web开发资料