DingTalk釘釘消息推送(.net core 3 WebApi嘗鮮記)


我發了個朋友圈,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 > 0)
            {
                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 > 0)
                    {
                        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 > 0)
            {
                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 > 0)
                    {
                        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;
        }

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM