我发了个朋友圈,Swagger真他妈的牛B,解放了开发API的码农,麻麻再也不用担心我们写API文档耽误回家吃饭了。

/// <summary>
/// 发送钉钉消息
/// </summary>
/// <param name="toUser">Employee的userid,多个使用|分隔</param>
/// <param name="title">标题</param>
/// <param name="content">发送内容</param>
/// <param name="sourceUrl">消息向导地址</param>
/// <returns></returns>
private ApiResult SendCardMessageToEmployee(string toUser, string title, string content, string sourceUrl)
{
var result = new ApiResult
{
Success = false,
ResponseDatetime = DateTime.Now.ToString(),
ResultMessage = "操作失败!",
ResultObject = null
};
try
{
toUser = toUser.Trim('|');
string JSONData = "{\"touser\":\"" + toUser +
"\",\"toparty\":\"\",\"agentid\":\"" + _settings.Value.sendmessage_agentid + "\",\"msgtype\":\"action_card\",\"action_card\":{\"title\":\"" + title + "\",\"markdown\":\"<font size=7 face=\'黑体\'>DingTalk中间件提醒: </font> \n \n " +
content + "\r \n " + "\r \n " + "\r \n " + DateTime.Now.ToString() +
"\",\"single_title\": \"查看详情\",\"single_url\": \"" + sourceUrl + "\"}}";
var access_token = GetAccessToke();
var tokenObj = access_token.ResultObject as AccessToken;
string url = "https://oapi.dingtalk.com/message/send?access_token=" + tokenObj.access_token;
string response = GetResponseData(JSONData, url);
result.ResultObject = response;
result.Success = string.IsNullOrEmpty(response);
result.ResultMessage = "API调用成功!Requst Url:[" + url + "],Content:[" + JSONData + "]";
}
catch (Exception ex)
{
result.ResultObject = ex;
_logger.LogError(ex, ex.Message, new object[] { });
}
return result;
} /// <summary>
/// 发送钉钉消息
/// </summary>
/// <param name="toUser">Employee的userid,多个使用|分隔</param>
/// <param name="content">发送内容</param>
/// <param name="sourceUrl">发送内容</param>
/// <returns></returns>
private ApiResult SendMediaMessageToEmployee(string toUser, string content, string sourceUrl)
{
var result = new ApiResult
{
Success = false,
ResponseDatetime = DateTime.Now.ToString(),
ResultMessage = "操作失败!",
ResultObject = null
};
try
{
toUser = toUser.Trim('|');
string JSONData = "{\"touser\":\"" + toUser + "\",\"toparty\":\"\",\"agentid\":\"" + _settings.Value.sendmessage_agentid + "\",\"" + content + ",\"single_title\": \"查看详情\",\"single_url\": \"" + sourceUrl + "\"}}";
var access_token = GetAccessToke();
var tokenObj = access_token.ResultObject as AccessToken;
string url = "https://oapi.dingtalk.com/message/send?access_token=" + tokenObj.access_token;
string response = GetResponseData(JSONData, url);
result.ResultObject = response;
result.Success = string.IsNullOrEmpty(response);
result.ResultMessage = "API调用成功!Requst Url:[" + url + "],Content:[" + JSONData + "]";
}
catch (Exception ex)
{
result.ResultObject = ex;
_logger.LogError(ex, ex.Message, new object[] { });
}
return result;
}
/// <summary>
/// 给指定员工发送钉钉消息1
/// </summary>
/// <param name="userid">指定员工的职员ID</param>
/// <param name="title">标题</param>
/// <param name="content">发送内容</param>
/// <param name="sourceUrl">消息向导地址</param>
/// <returns></returns>
[HttpGet]
[HttpPost]
public ApiResult SendDingTalkMessage(string userid, string title, string content, string sourceUrl = "http://www.cquni.com")
{
if (string.IsNullOrEmpty(title))
title = "通知";
var result = new ApiResult
{
Success = false,
ResponseDatetime = DateTime.Now.ToString(),
ResultMessage = "操作失败!",
ResultObject = null
};
try
{
var rs = SendCardMessageToEmployee(userid, title, content, sourceUrl);
result.Success = rs.Success;
result.ResultMessage = rs.ResultMessage;
result.ResultObject = rs.ResultObject;
}
catch (Exception ex)
{
result.ResultObject = ex;
}
return result;
}
 /// <summary>
/// 给指定员工发送钉钉消息2
/// </summary>
/// <param name="departmentName">部门名称</param>
/// <param name="employeeName">人员姓名</param>
/// <param name="title">消息标题</param>
/// <param name="content">消息内容</param>
/// <param name="sourceUrl">url</param>
/// <returns></returns>
[HttpGet]
[HttpPost]
public ApiResult SendDingTalkMessageExt(string departmentName, string employeeName, string title, string content, string sourceUrl = "http://www.cquni.com")
{
var result = new ApiResult
{
Success = false,
ResponseDatetime = DateTime.Now.ToString(),
ResultMessage = "操作失败!",
ResultObject = null
};
if (string.IsNullOrEmpty(title))
title = "通知";
var deptment = GetDepartmentInfo().department;
if (deptment != null && deptment.Count > )
{
var currDept = deptment.Where(d => d.name.Contains(departmentName)).FirstOrDefault();
if (currDept == null)
{
result.ResultMessage = "获取人员的部门信息出错,输入部门名称:" + departmentName;
}
else
{
var employeeList = GetDepartmentEmployeeList(currDept).userlist;
if (employeeList != null && employeeList.Count > )
{
var currentEmp = employeeList.Where(e => e.name.Contains(employeeName)).FirstOrDefault();
try
{
var rs = SendCardMessageToEmployee(currentEmp.userid, title, content, sourceUrl);
return rs;
}
catch (Exception ex)
{
_logger.LogError(ex.Message, new object[]
{
ex,
ex.InnerException
});
}
}
else
{
result.ResultMessage = string.Format("很奇怪,这个部门'{0}'一个人也没有!", departmentName);
}
}
}
else
{
result.ResultMessage = "获取公司部门信息出错!";
}
return result;
} /// <summary>
/// 给指定员工发送钉钉消息(支持图文,文件,图片等格式)
/// </summary>
/// <param name="departmentName">部门名称</param>
/// <param name="employeeName">人员姓名</param>
/// <param name="mediaContent">消息内容 eg: "msgtype": "voice","voice": {"media_id": "MEDIA_ID","duration": "10" }
/// 格式说明请看钉钉官网文档 https://ding-doc.dingtalk.com/doc#/serverapi2/ye8tup </param>
/// <param name="sourceUrl"></param>
/// <returns></returns>
[HttpGet]
[HttpPost]
public ApiResult SendDingTalkMediaMessage(string departmentName, string employeeName, string mediaContent, string sourceUrl = "http://www.cquni.com")
{
var result = new ApiResult
{
Success = false,
ResponseDatetime = DateTime.Now.ToString(),
ResultMessage = "操作失败!",
ResultObject = null
};
var deptment = GetDepartmentInfo().department;
if (deptment != null && deptment.Count > )
{
var currDept = deptment.Where(d => d.name.Contains(departmentName)).FirstOrDefault();
if (currDept == null)
{
result.ResultMessage = "获取人员的部门信息出错,输入部门名称:" + departmentName;
}
else
{
var employeeList = GetDepartmentEmployeeList(currDept).userlist;
if (employeeList != null && employeeList.Count > )
{
var currentEmp = employeeList.Where(e => e.name.Contains(employeeName)).FirstOrDefault();
try
{
var rs = SendMediaMessageToEmployee(currentEmp.userid, mediaContent, sourceUrl);
return rs;
}
catch (Exception ex)
{
_logger.LogError(ex.Message, new object[]
{
ex,
ex.InnerException
});
}
}
else
{
result.ResultMessage = string.Format("很奇怪,这个部门'{0}'一个人也没有!", departmentName);
}
}
}
else
{
result.ResultMessage = "获取公司部门信息出错!";
}
return result;
}

DingTalk钉钉消息推送(.net core 3 WebApi尝鲜记)的更多相关文章

  1. 微信小程序【消息推送服务器认证C# WebAPI】

    参考微信开发文档: https://developers.weixin.qq.com/miniprogram/dev/api/custommsg/callback_help.html 代码可用 /// ...

  2. nodejs通过钉钉群机器人推送消息

    nodejs 通过钉钉群机器人推送消息 Intro 最近在用 nodejs 写爬虫,之前的 nodejs 爬虫代码用 js 写的,感觉可维护性太差,也没有智能提示,于是把js改用ts(typescri ...

  3. Jenkins 实现Gitlab事件自动触发Jenkins构建及钉钉消息推送

    实现Gitlab事件自动触发Jenkins构建及钉钉消息推送 实践环境 GitLab Community Edition 12.6.4 Jenkins 2.284 Post build task 1. ...

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

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

  5. HMS Core地理围栏能力助你实现指定范围人群的精准消息推送

    精准推送是移动端产品留存阶段的主要运营手段,精准推送常常会与用户画像紧密结合,针对用户的喜好.画像,采用不同策略,但基于用户所属区域推送消息却很难实现.目前市面上大多数第三方消息推送服务商,在系统未深 ...

  6. dotnet core使用IO合并技巧轻松实现千万级消息推送

    之前讲述过多路复用实现单服百万级别RPS吞吐,但在文中有一点是没有说的就是消息IO合并,如果缺少了消息IO合并即使怎样多路复用也很难达到百万级别的请求响毕竟所有应用层面的网络IO读写都是非常损耗性能的 ...

  7. RabbitMQ消息队列(七)-通过fanout模式将消息推送到多个Queue中(.Net Core版)

    前面第六章我们使用的是direct直连模式来进行消息投递和分发.本章将介绍如何使用fanout模式将消息推送到多个队列. 有时我们会遇到这样的情况,多个功能模块都希望得到完整的消息数据.例如一个log ...

  8. Android P正式版即将到来:后台应用保活、消息推送的真正噩梦

    1.前言 对于广大Android开发者来说,Android O(即Android 8.0)还没玩热,Andriod P(即Andriod 9.0)又要来了.   下图上谷歌官方公布的Android P ...

  9. 基于APNs最新HTTP/2接口实现iOS的高性能消息推送(服务端篇)

    1.前言 本文要分享的消息推送指的是当iOS端APP被关闭或者处于后台时,还能收到消息/信息/指令的能力. 这种在APP处于后台或关闭情况下的消息推送能力,通常在以下场景下非常有用: 1)IM即时通讯 ...

随机推荐

  1. css隐藏页面元素的方法

    用css隐藏页面元素有许多种方法. 第一种方法[opacity: 0;] opacity属性通常用于设置一个元素的透明度,从另一个角度来看,如果透明度为0,也就从视觉上隐藏了该元素. 这个属性不是为改 ...

  2. (译)Kubernetes中的多容器Pod和Pod内容器间通信

    原文:https://www.mirantis.com/blog/multi-container-pods-and-container-communication-in-kubernetes/Pave ...

  3. DVWA-CSRF学习笔记

    DVWA-CSRF学习笔记 一.CSRF(跨站请求伪造) CSRF(跨站请求伪造),是指利用受害者尚未失效的身份认证信息(cookie.session会话等),诱骗其点击恶意链接或者访问包含攻击代码的 ...

  4. 简单的python GUI例子

    写一个简单的界面很容易,即使是什么都不了解的情况下,这个文本转载了最简单的界面编写,下个文本介绍了TK的简单但具体的应用 在python中创建一个窗口,然后显示出来. from Tkinter imp ...

  5. css sprite responsive实现探究

    在做web app前端设计时,为了减少http的请求,提高系统响应时间,有一个非常常见的优化措施是:将所有用到的静态的图片通过合并形成一个sprite.png,并且配合background-posit ...

  6. 原生js与jquery加载页面元素比较

    原生js:将获取元素的语句写到页面头部,会因为元素还没有加载而出错,js提供了window.onload 这个方法事先加载元素 <script type="text/javascrip ...

  7. wpf DATAgrid模板中button 命令绑定以及命令参数绑定

    场景:视频上传功能,上传列表使用DataGrid控件,视频有不同的状态对应不同的操作,DataGrid中最后一列为操作列,里面是Button控件.希望点击Button后执行对应的操作,但是设置Butt ...

  8. 读oc52个有效方法的总结

    这本书主要是对于oc语言的代码优化和一些我们不知道的精华.全书分为7章节 1.熟悉oc语言 第一条:了解oc的语言起源 主要是对于oc语言的起源介绍和oc语言的特点进行概括,oc语言主要是使用消息结构 ...

  9. Facebook发布全新JavaScript引擎:Hermes

    摘要: JS引擎开始升级了... 原文:技术栈中的爱马仕?Facebook发布全新JavaScript引擎:Hermes 作者:Carson_Ho Fundebug经授权转载,版权归原作者所有. 前言 ...

  10. Scrum 之 product Backlog

    转载:http://www.zhoujingen.cn/blog/2767.html Scrum的基本概念其实并不复杂,但是想做好并不容易,大家都知道product backlog的重要性,但是我们如 ...