当前位置: 首页 > news >正文

C# 企业微信机器人消息推送

1. 创建消息推送机器人

首先在企业微信中创建群聊,然后添加群机器人,获取webhook地址。

2. 基础实现代码

using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;public class EnterpriseWeChatRobot
{private readonly string _webhookUrl;private readonly HttpClient _httpClient;public EnterpriseWeChatRobot(string webhookUrl){_webhookUrl = webhookUrl;_httpClient = new HttpClient();}/// <summary>/// 发送文本消息/// </summary>public async Task<bool> SendTextMessageAsync(string content, string[] mentionedList = null, string[] mentionedMobileList = null){var message = new{msgtype = "text",text = new{content = content,mentioned_list = mentionedList,mentioned_mobile_list = mentionedMobileList}};return await SendMessageAsync(message);}/// <summary>/// 发送Markdown消息/// </summary>public async Task<bool> SendMarkdownMessageAsync(string content){var message = new{msgtype = "markdown",markdown = new{content = content}};return await SendMessageAsync(message);}/// <summary>/// 发送图片消息/// </summary>public async Task<bool> SendImageMessageAsync(string base64, string md5){var message = new{msgtype = "image",image = new{base64 = base64,md5 = md5}};return await SendMessageAsync(message);}/// <summary>/// 发送图文消息/// </summary>public async Task<bool> SendNewsMessageAsync(Article[] articles){var message = new{msgtype = "news",news = new{articles = articles}};return await SendMessageAsync(message);}/// <summary>/// 发送文件消息/// </summary>public async Task<bool> SendFileMessageAsync(string mediaId){var message = new{msgtype = "file",file = new{media_id = mediaId}};return await SendMessageAsync(message);}private async Task<bool> SendMessageAsync(object message){try{var json = JsonSerializer.Serialize(message);var content = new StringContent(json, Encoding.UTF8, "application/json");var response = await _httpClient.PostAsync(_webhookUrl, content);var responseContent = await response.Content.ReadAsStringAsync();if (response.IsSuccessStatusCode){var result = JsonSerializer.Deserialize<WeChatResponse>(responseContent);return result?.errcode == 0;}Console.WriteLine($"发送失败: {responseContent}");return false;}catch (Exception ex){Console.WriteLine($"发送消息异常: {ex.Message}");return false;}}
}/// <summary>
/// 图文消息文章
/// </summary>
public class Article
{public string title { get; set; }public string description { get; set; }public string url { get; set; }public string picurl { get; set; }
}/// <summary>
/// 企业微信响应
/// </summary>
public class WeChatResponse
{public int errcode { get; set; }public string errmsg { get; set; }
}

3. 使用示例

class Program
{static async Task Main(string[] args){// 替换为你的webhook地址string webhookUrl = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY";var robot = new EnterpriseWeChatRobot(webhookUrl);// 发送文本消息bool success1 = await robot.SendTextMessageAsync("Hello, 这是一条测试消息!",mentionedList: new[] { "@all" }  // @所有人);// 发送Markdown消息bool success2 = await robot.SendMarkdownMessageAsync("### 项目通知\n" +"> **项目**: 企业微信机器人测试\n" +"> **状态**: 运行正常\n" +"> **时间**: " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\n" +"> **详情**: [点击查看详情](https://work.weixin.qq.com/)");// 发送图文消息var articles = new[]{new Article{title = "企业微信官方文档",description = "查看详细的使用文档",url = "https://work.weixin.qq.com/api/doc/90000/90136/91770",picurl = "https://res.wx.qq.com/a/wx_fed/assets/res/NTI4MWU5.ico"}};bool success3 = await robot.SendNewsMessageAsync(articles);Console.WriteLine($"文本消息发送: {success1}");Console.WriteLine($"Markdown消息发送: {success2}");Console.WriteLine($"图文消息发送: {success3}");}
}

4. 高级功能 - 文件上传

如果需要发送文件消息,需要先上传文件获取media_id:

/// <summary>
/// 上传文件到企业微信并获取media_id
/// </summary>
public async Task<string> UploadFileAsync(string filePath)
{try{// 从webhook地址中提取keyvar uri = new Uri(_webhookUrl);var key = System.Web.HttpUtility.ParseQueryString(uri.Query)["key"];string uploadUrl = $"https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key={key}&type=file";using var form = new MultipartFormDataContent();using var fileContent = new ByteArrayContent(await File.ReadAllBytesAsync(filePath));fileContent.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/octet-stream");form.Add(fileContent, "media", Path.GetFileName(filePath));var response = await _httpClient.PostAsync(uploadUrl, form);var responseContent = await response.Content.ReadAsStringAsync();if (response.IsSuccessStatusCode){using var doc = JsonDocument.Parse(responseContent);if (doc.RootElement.TryGetProperty("media_id", out var mediaIdElement)){return mediaIdElement.GetString();}}Console.WriteLine($"文件上传失败: {responseContent}");return null;}catch (Exception ex){Console.WriteLine($"文件上传异常: {ex.Message}");return null;}
}

5. 完整使用示例

class Program
{static async Task Main(string[] args){string webhookUrl = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY";var robot = new EnterpriseWeChatRobot(webhookUrl);// 1. 发送文本消息并@特定用户await robot.SendTextMessageAsync("任务执行完成,请相关同事查看结果。",mentionedList: new[] { "张三", "李四" });// 2. 发送Markdown格式的告警消息await robot.SendMarkdownMessageAsync("🚨 **系统告警**\n" +"---\n" +"**服务**: API Gateway\n" +"**级别**: CRITICAL\n" +"**时间**: " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\n" +"**描述**: 服务响应时间超过阈值\n" +"**建议**: 请立即检查服务器状态");// 3. 如果有文件需要发送// string mediaId = await robot.UploadFileAsync("report.pdf");// if (!string.IsNullOrEmpty(mediaId))// {//     await robot.SendFileMessageAsync(mediaId);// }}
}

注意事项

Webhook地址:确保使用正确的webhook地址,包含有效的key消息频率限制:企业微信机器人有发送频率限制,请勿频繁发送安全性:webhook地址包含敏感信息,请妥善保管异常处理:在实际使用中建议添加更完善的异常处理机制HTTP客户端:建议使用IHttpClientFactory来管理HttpClient实例

http://www.dtcms.com/a/523887.html

相关文章:

  • 原生日历表
  • 做网站购买服务器多少钱三亚房地产网站制作
  • 新网站的建设工作织梦软件怎么使用域名做网站
  • 暖手宝方案开发,暖手宝MCU控制方案开发设计
  • SpringCloud启动——MybatisPlus(MP)
  • 图解Java链表反转:迭代法详解
  • SOGS压缩技术
  • SQLiteStudio下载安装图解教程(附安装包)
  • 【图像超分】论文复现:轻量化超分 | RLFN的Pytorch源码复现,跑通源码,整合到EDSR-PyTorch中进行训练、测试
  • 吉利汽车携手阿里云函数计算,打造新一代 AI 座舱推理引擎
  • 基于mormot.net.async.pas实现一个纯粹的Socket Server
  • FastReport .NET 2026.1 全新发布: 统一Demo中心、全新Ribbon界面、Excel公式导出、Word图像质量设置等重磅升级!
  • 网站后台上传图片脚本错误个人博客大全
  • 郑州水晶奖杯制作wordpress加载优化
  • 【计算机网络笔记】第二章 应用层 (Application Layer)
  • 东营聊城网站建设seo门户网站建设
  • DigitalOcean Gradient™ 平台上线 fal 四款多模态 AI 模型:快速生成图像与音频
  • 5、服务器互连技术(小白入门版)
  • 我爱学算法之—— 分治-归并
  • 济南高新区 网站制作wordpress直接购买
  • 织梦网站首页幻灯片不显示新华美玉官方网站在线做
  • 蓝色星球如何打造能与企业共同进化的灵活系统
  • 【问题】在VSCode中设置conda的Python环境
  • NGINX 负载均衡应用实战:从配置到策略的深度解析
  • 关于buildroot文件系统中rootfs的内容,该怎么增删(瑞芯微rv1126b)
  • Qt 入门简洁笔记:信号与槽
  • 算法入门---专题二:滑动窗口2(最大连续1的个数,无重复字符的最长子串 )
  • 手机摄像头如何识别体检的色盲检查图的数字和图案(下)
  • 政务系统信创改造中,金仓日志如何满足等保2.0三级审计要求
  • 记录一个监控网卡某个IP发送流量