C# 发送飞书webhook消息

VS2026中NUGET安装 FeishuNotice,

这是项目说明:https://github.com/Ye1105/FeishuNotice

目前博主解锁了2个功能,一个是发webhook文本消息,一个是发webhook图片消息。

一、发webhook文本消息

cs 复制代码
 Feishu.RobotNoticeSync(webhook url, "hello");

二、发图片消息

1、先拿到 tenant_access_token。

2、放图片给飞书,拿到 image_key。

3、发送webhook图片消息。

cs 复制代码
        private  async void  button1_ClickAsync(object sender, EventArgs e)
        {

            // 1.拿到tenant_access_token
            string message = "{\"app_id\":\"cli_XXXXXXXXXX\",\"app_secret\":\"XXXXXXXXXXXXXX\"}";
            string rt = Post1("https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal", message);

            // 飞书返回 {"code":0,"expire":6203,"msg":"ok","tenant_access_token":"t-g104XXXXXXXXXXXXXXXXXXXXCE2EWTP"}
            var obj = JsonConvert.DeserializeObject<dynamic>((string)rt);
            string tmp = "Bearer " + obj.tenant_access_token.ToString(); //"Bearer t-g1043XXXXXXXXXXXXXXXXLIXH3"


            // 2.有了token,就可以上传图片了,上传图片后会返回一个image_key,这个image_key就可以在消息中使用了

            var options = new RestClientOptions("https://open.feishu.cn/open-apis/im/v1/images");           
            var client = new RestClient(options);
            var request = new RestRequest();
            request.Method = Method.Post;
            request.AddHeader("Authorization", tmp); 
            request.AddHeader("Content-Type", "multipart/form-data");
            request.AddParameter("image_type", "message");
            request.AddFile("image", "C:\\Users\\XXXXX\\Pictures\\kpi.png");

            var response = await client.ExecuteAsync(request);
            textBox1.Text =response.Content;

            // 飞书返回 {"code":0,"data":{"image_key":"img_v3_02vp_XXXXXXXXXXXXXXXXXXXXXX"},"msg":"success"}


            // 3.有了image_key,就可以在消息中发图片了
            //  await Feishu.RobotImgNotice(webhook, "img_v3_02vp_XXXXXXXXXXXXX");
        }


        //Post请求
        public static string Post1(string url, string obj)
        {
            string param = (obj);//参数
            byte[] bs = Encoding.UTF8.GetBytes(param);

            //创建一个新的HttpWebRequest对象。
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);

            // 将方法属性设置为"POST"以将数据发布到URI。
            req.Method = "POST";

            //设置contentType属性。
            req.ContentType = "application/json";

            req.ContentLength = bs.Length;
            using (Stream reqStream = req.GetRequestStream())
            {
                reqStream.Write(bs, 0, bs.Length);
                reqStream.Close();
                HttpWebResponse response2 = (HttpWebResponse)req.GetResponse();
                StreamReader sr2 = new StreamReader(response2.GetResponseStream(), Encoding.UTF8);
                string str = sr2.ReadToEnd();
                return str;
            }

        }
相关推荐
淡海水5 小时前
01-05-运行时-JIT优化全景-内联去虚拟化边界检查消除
windows·c#·虚拟化·jit·内联·边界检查消除
波波00713 小时前
C# 15 重磅新特性: 带标签 break 与 continue:重新定义嵌套循环控制流
服务器·前端·c#
wujian831116 小时前
怎么用千问生成word文档:从「格式崩」到「一键过」,AI导出鸭打通最后半厘米
人工智能·ai·c#·word·豆包·deepseek·ai导出鸭
zlinear数据采集卡17 小时前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
唐青枫19 小时前
别把 ImmutableArray 当成只读 List:C#.NET 不可变数组深入详解
c#·.net
lisanmengmeng20 小时前
飞书 API使用
飞书·监控·日志·日志监控·监控及日志
zlinear数据采集卡21 小时前
D223 ADC数据处理流水线:从原始采样值到工程单位的完整转换链
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
花落人散处1 天前
CDiskClean 开发历程 —— 文件清理_目录树解析实现方案参考
c#
离陌在学C#1 天前
C# 泛型:从基础到高级应用
开发语言·c#