WebHook机器人(钉钉,企业微信)
钉钉:


public class OapiRobot { public static string RobotSendUrl = "https://oapi.dingtalk.com/robot/send?access_token="; public static string token = ""; /// <summary> /// 发送文本消息 /// </summary> /// <param name="content">文本内容</param> /// <param name="atMobiles">@人员电话</param> /// <param name="isAtAll">是否@群所有成员</param> public static string SendText(string content, List<string> atMobiles, bool isAtAll) { TextModel tModel = new TextModel(); tModel.at = new atText(); tModel.text = new text(); tModel.at.atMobiles = new List<string>(); tModel.text.content = content; if (atMobiles != null) { tModel.at.atMobiles.AddRange(atMobiles); } tModel.at.isAtAll = isAtAll; tModel.msgtype = "text"; string data = JsonConvert.SerializeObject(tModel); return RequestHelper.Request(RobotSendUrl, data, "POST"); } /// <summary> /// 发送Link消息 /// </summary> /// <param name="title">消息标题</param> /// <param name="text">消息内容。如果太长只会部分展示</param> /// <param name="messageUrl">点击消息跳转的URL</param> /// <param name="picUrl">图片URL</param> public static void OapiRobotLink(string title, string text, string messageUrl, string picUrl) { LinkModel lModel = new LinkModel(); lModel.link = new link(); lModel.msgtype = "link"; lModel.link.title = title; lModel.link.text = text; lModel.link.messageUrl = messageUrl; lModel.link.picUrl = picUrl; string data = JsonConvert.SerializeObject(lModel); string json = RequestHelper.Request(RobotSendUrl, data, "POST"); } /// <summary> /// 发送markdown类消息 /// </summary> /// <param name="title">标题</param> /// <param name="text">消息主体</param> /// <param name="atMobiles">@人员电话</param> /// <param name="isAtAll">是否@群所有成员</param> public static void OapiRobotMarkDown(string title, string text, List<string> atMobiles, bool isAtAll) { MarkDownModel mdModel = new MarkDownModel(); mdModel.at = new atMarkdown(); mdModel.markdown = new markdown(); mdModel.at.atMobiles = new List<string>(); mdModel.markdown.title = title; mdModel.markdown.text = text; mdModel.at.atMobiles.AddRange(atMobiles); mdModel.at.isAtAll = isAtAll; mdModel.msgtype = "markdown"; string data = JsonConvert.SerializeObject(mdModel); string json = RequestHelper.Request(RobotSendUrl, data, "POST"); } /// <summary> /// 发送整体跳转ActionCard类型 /// </summary> /// <param name="title">首屏会话透出的展示内容</param> /// <param name="text">markdown格式的消息</param> /// <param name="singleTitle">单个按钮的方案。(设置此项和singleURL后btns无效。)</param> /// <param name="singleURL">点击singleTitle按钮触发的URL</param> /// <param name="btnOrientation">0-按钮竖直排列,1-按钮横向排列</param> /// <param name="hideAvatar">0-正常发消息者头像,1-隐藏发消息者头像</param> public static void OapiRobotActionCardOverall(string title, string text, string singleTitle, string singleURL, string btnOrientation, string hideAvatar) { ActionCardOverallModel acModel = new ActionCardOverallModel(); acModel.actionCard = new actionCard(); acModel.msgtype = "actionCard"; acModel.actionCard.title = title; acModel.actionCard.text = text; acModel.actionCard.singleTitle = singleTitle; acModel.actionCard.singleURL = singleURL; if (!string.IsNullOrEmpty(btnOrientation)) acModel.actionCard.btnOrientation = btnOrientation; else acModel.actionCard.btnOrientation = "0"; if (!string.IsNullOrEmpty(hideAvatar)) acModel.actionCard.hideAvatar = hideAvatar; else acModel.actionCard.hideAvatar = "0"; string data = JsonConvert.SerializeObject(acModel); string json = RequestHelper.Request(RobotSendUrl, data, "POST"); } /// <summary> /// 发送独立跳转ActionCard类型 /// </summary> /// <param name="title"></param> /// <param name="text"></param> /// <param name="btns"></param> /// <param name="btnOrientation"></param> /// <param name="hideAvatar"></param> public static void OapiRobotActionCardSingle(string title, string text, string btns, string btnOrientation, string hideAvatar) { ActionCardSingleModel acModel = new ActionCardSingleModel(); acModel.actionCard = new actionCardSingle(); acModel.actionCard.btns = JsonConvert.DeserializeObject<List<btns>>(btns);//这里使用字符串拼接的json格式转化为List<model>,下面一个方法使用List<model>中直接添加值 acModel.msgtype = "actionCard"; acModel.actionCard.title = title; acModel.actionCard.text = text; if (!string.IsNullOrEmpty(btnOrientation)) acModel.actionCard.btnOrientation = btnOrientation; else acModel.actionCard.btnOrientation = "0"; if (!string.IsNullOrEmpty(hideAvatar)) acModel.actionCard.hideAvatar = hideAvatar; else acModel.actionCard.hideAvatar = "0"; string data = JsonConvert.SerializeObject(acModel); string json = RequestHelper.Request(RobotSendUrl, data, "POST"); } /// <summary> /// 发送FeedCard类型 /// </summary> public static void OapiRobotFeedCard() { FeedCardModel fcModel = new FeedCardModel(); fcModel.msgtype = "feedCard"; fcModel.feedCard = new feedCard(); fcModel.feedCard.links = new List<links>();//使用List<model>中直接添加值 links model1 = new links(); model1.title = "时代的火车向前开"; model1.messageURL = "https://mp.weixin.qq.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI"; model1.picURL = "https://www.dingtalk.com/"; fcModel.feedCard.links.Add(model1); links model2 = new links(); model2.title = "时代的火车向前开2"; model2.messageURL = "https://mp.weixin.qq.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI"; model2.picURL = "https://www.dingtalk.com/"; fcModel.feedCard.links.Add(model2); string data = JsonConvert.SerializeObject(fcModel); string json = RequestHelper.Request(RobotSendUrl, data, "POST"); } // <summary> /// 加签 /// </summary> /// <param name="zTime">当前时间戳</param> /// <returns></returns> public static string addSign(long zTime, string secret) { string stringToSign = zTime + "\n" + secret; var encoding = new System.Text.ASCIIEncoding(); byte[] keyByte = encoding.GetBytes(secret); byte[] messageBytes = encoding.GetBytes(stringToSign); using (var hmacsha256 = new HMACSHA256(keyByte)) { byte[] hashmessage = hmacsha256.ComputeHash(messageBytes); return HttpUtility.UrlEncode(Convert.ToBase64String(hashmessage), Encoding.UTF8); } } /// <summary> /// 当前时间戳 /// </summary> /// <returns></returns> public static long GetTimeStamp() { long currenttimemillis = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds; return currenttimemillis; } }
企业微信:


public class WxRobot { public static string RobotSendUrl = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?"; public static string key = ""; /// <summary> /// 发送文本消息 /// </summary> /// <param name="content">文本内容</param> /// <param name="atMobiles">@人员电话</param> /// <param name="isAtAll">是否@群所有成员</param> public static string SendText(string content, List<string> atMobiles, bool isAtAll) { TextModel tModel = new TextModel(); tModel.msgtype = "text"; tModel.text = new text(); tModel.text.content = content; tModel.text.mentioned_mobile_list = new List<string>(); if (isAtAll) { tModel.text.mentioned_mobile_list.Add("@all"); } string data = JsonConvert.SerializeObject(tModel); return RequestHelper.Request(RobotSendUrl, data, "POST"); } }
浙公网安备 33010602011771号