哨兵系统 ---钉钉群消息推送

举报
ksh1998 发表于 2021/12/25 23:59:54 2021/12/25
【摘要】 前言:      之前哨兵系统提醒只是在前台使用声音提醒,现在把消息推送到值班人员群里。避免值班人员在前台,专注写代码。忽略了铃声,还有一点铃声确实有点打扰其他同事工作。所以下一个版本哨兵系统,的确闹铃可以完全取消,替换成群消息提醒。 下面是钉钉群消息推送的代码 目录 页面调用代码 业务实现代码 ...

前言:

     之前哨兵系统提醒只是在前台使用声音提醒,现在把消息推送到值班人员群里。避免值班人员在前台,专注写代码。忽略了铃声,还有一点铃声确实有点打扰其他同事工作。所以下一个版本哨兵系统,的确闹铃可以完全取消,替换成群消息提醒。

下面是钉钉群消息推送的代码

目录

页面调用代码

业务实现代码

发送群消息

http接口访问类


页面调用代码


  
  1. //声音提醒 这段代码放在lable框的内容改变事件里
  2. try
  3. {
  4. System.Media.SoundPlayer sndPlayer = new System.Media.SoundPlayer(Application.StartupPath + @"/pm3.wav");
  5. if (label_similarity.Text == "Stranger(陌生人)")
  6. {
  7. sndPlayer.PlayLooping();
  8. //创建群发送消息
  9. AccessToken.SendMsg(textBox1.Text,textBox2.Text);
  10. }
  11. else
  12. {
  13. sndPlayer.Stop();
  14. }

业务实现代码

发送群消息类


  
  1. /**
  2. * Namespace: 钉钉消息Demo
  3. *
  4. * Function: 获取接口全局ID
  5. * Name: AccessToken
  6. *
  7. * Ver Time Author
  8. * 0.10 2020/12/2 11:23:43 康世行
  9. *
  10. */
  11. using Newtonsoft.Json;
  12. using Newtonsoft.Json.Linq;
  13. using System;
  14. using System.Collections.Generic;
  15. using System.IO;
  16. using System.Linq;
  17. using System.Text;
  18. using System.Threading.Tasks;
  19. using System.Windows.Forms;
  20. using System.Collections;
  21. using System.Net;
  22. namespace WinForm_IPC_FaceRecognition_Demo
  23. {
  24. public class AccessToken
  25. {
  26. string getchatid = "";//群会话id(系统停止之后消失)
  27. /// <summary>
  28. /// 获取接口全局ID
  29. /// </summary>
  30. /// <returns></returns>
  31. public string accessToken() {
  32. string corpid = "钉钉企业id";
  33. string CorpSecret = "钉钉企业秘钥";
  34. string AccessToke = "";
  35. string url = string.Format("https://oapi.dingtalk.com/gettoken?appkey={0}&appsecret={1}", corpid, CorpSecret);
  36. JToken json = JToken.Parse(HttpUtiy.HttpGet(url));
  37. AccessToke = json["access_token"].ToString();
  38. return AccessToke;
  39. }
  40. //获取部门列表(白名单问题)
  41. public string det_id() {
  42. string url = string.Format("https://oapi.dingtalk.com/department/list?access_token={0}", accessToken());
  43. string id = HttpUtiy.HttpGet(url);
  44. return id;
  45. }
  46. //根据手机号获取用户UserID (没有获取接口的权限,无法获取到UserID)
  47. private string UserID(string phone) {
  48. // 通过手机号获取 userId
  49. string url = string.Format("https://oapi.dingtalk.com/user/get_by_mobile?access_token={0}&mobile={1}",accessToken(), phone);
  50. JToken json = JToken.Parse(HttpUtiy.HttpGet(url));
  51. string userid = json["userid"].ToString();
  52. return userid;
  53. }
  54. /// <summary>
  55. /// 创建群回话
  56. /// </summary>
  57. /// <param name="access_token">调用接口凭证</param>
  58. /// <param name="name">群名称</param>
  59. /// <param name="owner">群主userid</param>
  60. /// <param name="useridlist">群成员</param>
  61. /// <returns></returns>
  62. private string Creatchatid(string Chatidname,string Chatidowner,string[] Chatiduseridlist
  63. ) {
  64. string chat_id = "";//群回话id
  65. string MessageUrl =string.Format( "https://oapi.dingtalk.com/chat/create?access_token={0}",accessToken());
  66. var json_req = new
  67. {
  68. name =Chatidname, // 群名称
  69. owner = Chatidowner, // 群主id
  70. useridlist=Chatiduseridlist
  71. };
  72. string jsonRequest = JsonConvert.SerializeObject(json_req);//将对象转换为json
  73. JToken json = JToken.Parse(HttpUtiy.HttpPost(MessageUrl, jsonRequest));//返回值转换为JToken格式
  74. chat_id = json["chatid"].ToString();
  75. return chat_id;
  76. }
  77. /// <summary>
  78. /// 发送群消息
  79. /// </summary>
  80. /// <param name="phone1">第一个值班员手机号</param>
  81. /// <param name="phone2">第二个值班员手机号</param>
  82. public void SendMsg(string phone1,string phone2) {
  83. string userid =UserID(phone1);//获取用户userId(第一个人作为群主)
  84. string userid2 = UserID(phone2);
  85. //判断系统当前是否已经创建群回话
  86. if (getchatid.Trim() == "") {
  87. getchatid= Creatchatid("哨兵系统" + DateTime.Now.ToString("ddd") + "值班组", userid, new string[] { userid,userid2 });//创建群回话,获取群回话id
  88. }
  89. string MessageUrl =string.Format("https://oapi.dingtalk.com/chat/send?access_token={0}",accessToken());
  90. var json_req = new
  91. {
  92. chatid = getchatid,//回去群会话id
  93. msg=new {
  94. msgtype="text",
  95. text = new {
  96. content = "有陌生人闯入,请及时查看!"
  97. }
  98. }
  99. };
  100. string jsonRequest = JsonConvert.SerializeObject(json_req);//将对象转换为json
  101. HttpUtiy.HttpPost(MessageUrl, jsonRequest);
  102. }
  103. }
  104. }

http接口访问类


  
  1. /**
  2. * Namespace: 钉钉消息Demo
  3. *
  4. * Function: http接口请求
  5. * Name: HttpUtiy
  6. *
  7. * Ver Time Author
  8. * 0.10 2020/12/2 11:35:51 康世行
  9. *
  10. */
  11. using System;
  12. using System.Collections.Generic;
  13. using System.IO;
  14. using System.Net;
  15. using System.Text;
  16. using System.Threading.Tasks;
  17. namespace WinForm_IPC_FaceRecognition_Demo
  18. {
  19. public class HttpUtiy
  20. {
  21. /// <summary>
  22. /// 发送GET请求
  23. /// </summary>
  24. /// <param name="url">请求URL,如果需要传参,在URL末尾加上“?+参数名=参数值”即可</param>
  25. /// <returns></returns>
  26. public static string HttpGet(string url)
  27. {
  28. //创建
  29. HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
  30. //设置请求方法
  31. httpWebRequest.Method = "GET";
  32. //请求超时时间
  33. httpWebRequest.Timeout = 20000;
  34. //发送请求
  35. HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
  36. //利用Stream流读取返回数据
  37. StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.UTF8);
  38. //获得最终数据,一般是json
  39. string responseContent = streamReader.ReadToEnd();
  40. streamReader.Close();
  41. httpWebResponse.Close();
  42. return responseContent;
  43. }
  44. /// <summary>
  45. /// 发送POST请求
  46. /// </summary>
  47. /// <param name="url">请求URL</param>
  48. /// <param name="data">请求参数</param>
  49. /// <returns></returns>
  50. public static string HttpPost(string url, string data)
  51. {
  52. //创建http请求
  53. HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
  54. //字符串转换为字节码
  55. byte[] bs = Encoding.UTF8.GetBytes(data);
  56. //参数类型,这里是json类型
  57. //还有别的类型如"application/x-www-form-urlencoded",不过我没用过(逃
  58. httpWebRequest.ContentType = "application/json";
  59. //参数数据长度
  60. httpWebRequest.ContentLength = bs.Length;
  61. //设置请求类型
  62. httpWebRequest.Method = "POST";
  63. //设置超时时间
  64. httpWebRequest.Timeout = 20000;
  65. //将参数写入请求地址中
  66. httpWebRequest.GetRequestStream().Write(bs, 0, bs.Length);
  67. //发送请求
  68. HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
  69. //读取返回数据
  70. StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.UTF8);
  71. string responseContent = streamReader.ReadToEnd();
  72. streamReader.Close();
  73. httpWebResponse.Close();
  74. httpWebRequest.Abort();
  75. return responseContent;
  76. }
  77. }
  78. }

 

文章来源: kangshihang.blog.csdn.net,作者:康世行,版权归原作者所有,如需转载,请联系作者。

原文链接:kangshihang.blog.csdn.net/article/details/111224789

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。