如何使用飞书自定义机器人通知消息

news/2024/12/28 11:03:09/文章来源:https://www.cnblogs.com/panwangvie/p/18637268

 

       大家有没有这样的需求,就是正在执行某个任务的时候希望任务完成之后给个通知,或者是软件运行报错的时候每天定期收集错误日志。

平时我们工作用的飞书,所有现在用飞书机器人把消息通知出来,非常简单 好用 的消息通知。

类似这样的消息通知还有企业微信也有。

  1. 飞书拉群的时候添加自定义机器

  2. 拿到飞书机器人的webhook ,根据飞书文档自定义机器人使用指南 - 开发指南 - 开发文档 - 飞书开放平台

C#实现如下,这个webhook真实可用,大家可以拿了玩玩,消息会发到我这里

private static readonly HttpClient client = new HttpClient();private static async Task SendMassageFeishu(string content){//自定义机器人webhook地址string webhookUrl = "https://open.feishu.cn/open-apis/bot/v2/hook/475b444e-d0e4-4b69-9cba-e2382a69bea8";var message = new{msg_type = "text",content = new{text = content}};var json = JsonConvert.SerializeObject(message);var data = new StringContent(json, Encoding.UTF8, "application/json");var response = await client.PostAsync(webhookUrl, data);var result = await response.Content.ReadAsStringAsync();}

效果这样

 

   

3. 发送通过自定义机器人发送图片,需要先创建应用,并且开通图片上传权限

    1. 发送图片
需要先创建应用,开通图片文件上传的权限。
获取开通应用的appId和appSecret,获取Tokenpublic async Task<string> GetTokenAsync(){string appId = @"cli_a7a4cdbd480b";string appSecret = "qDIqT7EIr98cV8Q3ofKqRSnQqDjA";using var client = new HttpClient();var requestBody = new{app_id = appId,app_secret = appSecret};var content = new StringContent(JsonConvert.SerializeObject(requestBody), Encoding.UTF8,"application/json");var response =await client.PostAsync("https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/",content);string responseContent = await response.Content.ReadAsStringAsync();if (response.IsSuccessStatusCode){var jsonResponse = JObject.Parse(responseContent);string tenantAccessToken = jsonResponse["tenant_access_token"].ToString();return tenantAccessToken;}return "";}拿到Token之后调用上传图片的方法,拿到图片的image_keyprivate static async Task<string> UploadImage(string accessToken, string imagePath){using HttpClient client = new HttpClient();client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);using var formData = new MultipartFormDataContent();using var fileStream = File.OpenRead(imagePath);var fileContent = new StreamContent(fileStream);var mimeType = GetMimeType(imagePath);fileContent.Headers.ContentType = new MediaTypeHeaderValue(mimeType);formData.Add(fileContent, "image", Path.GetFileName(imagePath));formData.Add(new StringContent("message"), "image_type"); // 使用"message"作为默认image_typevar response = await client.PostAsync("https://open.feishu.cn/open-apis/image/v4/put/", formData);string responseBody = await response.Content.ReadAsStringAsync();if (response.IsSuccessStatusCode){var jsonResponse = JObject.Parse(responseBody);var imageKey = jsonResponse["data"]["image_key"]?.ToString();return imageKey;}else{}return null;}拿到Image_key之后就可以,通过自定义机器人的Webhook地址发送图片public async Task<bool> SendImageFeishuAsync(string imagePath){var token = await GetTokenAsync();var imageKey = await UploadImage(token, imagePath);// 替换为你自己的飞书机器人Webhook地址string webhookUrl = "https://open.feishu.cn/open-apis/bot/v2/hook/05546c09-f7e7-466c-8660-18aa";// 将图片转换为Base64编码字符串var message = new{msg_type = "image",content = new{image_key = imageKey}};var json = JsonConvert.SerializeObject(message);var data = new StringContent(json, Encoding.UTF8, "application/json");var response = await client.PostAsync(webhookUrl, data);var result = await response.Content.ReadAsStringAsync();return response.IsSuccessStatusCode;}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/860313.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

01 _ 认识容器:容器的基本操作和实现原理

01 _ 认识容器:容器的基本操作和实现原理你好,我是程远。作为一名工程师,我猜在过去的几年时间里,你肯定用过或者听人提起过容器(Container)。 说实话,容器这东西一点都不复杂,如果你只是想用的话,那跟着Docker官网的说明,应该十来分钟就能搞定。 简单来说,它就是个…

[Java SE] 核心源码精讲:java.net.URLConnection

概述: URLConnectionURLConnection是一个抽象类,表示指向URL【指定资源】的活动连接URLConnection可以检查服务器发送的首部,并相应地做出响应。 它可以设置客户端请求中使用的首部字段。 URLConnection可以用POST、PUT和其他HTTP请求方法向服务器发回数据; URLConnection类…

中考英语优秀范文-001 How to Eat in a Healthy Way 怎样健康饮食

中考英语优秀范文-001 How to Eat in a Healthy Way 怎样健康饮食 1 写作要求 假设你叫李华,你们市将要举行以 “How to Eat in a Healthy Way” 为题的演讲比赛,请你准备写一篇演讲稿,内容包括: 说明此次演讲的主题 (how to eat in a healthy way); 我们应该少吃、不吃及…

2024-12-28 AI智能体日报

大家好,我是疯狂老包。专注于智能体开发与教学,《100个扣子实战案例持续更新中》。作者:疯狂老包,转载请注明原文链接:https://www.cnblogs.com/laobao1756435/p/18637255

AI日报

大家好,我是疯狂老包。专注于智能体开发与教学,《100个扣子实战案例持续更新中》。作者:疯狂老包,转载请注明原文链接:https://www.cnblogs.com/laobao1756435/p/18637255

AD批量更改PCB丝印位置

第一步:选中要排列字符的元件第二步: “A”—>“定位器文本(P)”—>选择标识符位置进行修改:结果:

Idea、pycharm初始化设置

IDEA、pycharm配置,下文真对IDEA设置,pycharm可参考 5. 详细设置 5.1 如何打开详细配置界面 1.显示工具栏 2、选择详细配置菜单或按钮 5.2 系统设置 1、默认启动项目配置 启动IDEA时,默认自动打开上次开发的项目?还是自己选择? 如果去掉Reopen projects on startup前面的…

CF补题 981-Div.3

CF补题 981-Div.3-20241226 Dashboard - Codeforces Round 981 (Div. 3) - Codeforces A: 题目大意:\(x\) 从 \(0\) 开始,轮流将 \(x\) 前后移动 \(i*2-1\), 求最后移动出 $-n,n $ 的 $ i$ #include <iostream> #include <math.h> using namespace std;int mai…

vue项目中使用swiper轮播

安装swipernpm install swiper@4 --save -dev npm install vue-awesome-swiper@3 --save-dev使用swiper<template><div class="swiper-container"><swiper :options="swiperOption"><swiper-slide v-for="(slide, index) in sli…

蓝牙配对弹框默认允许关闭

蓝牙配对的时候,会有个以下的弹框,客户需求是不需要人为去点击,默认允许配对 实际处理弹框配对的是BluetoothPairingController.java BluetoothPairingRequest.java这个文件主要负责处理配对弹框的广播申请,直接去掉那些流程,确认配对即可--- a/src/com/android/setting…

使用html5实现图片随手机重力感应而移动

在前端开发中,实现图片随手机重力感应而移动的功能,通常需要结合HTML5、CSS以及JavaScript,并利用设备的重力感应API。然而,直接通过HTML5和JavaScript访问设备的重力感应数据是有限的,因为这通常涉及到设备的底层硬件功能。在大多数情况下,这种功能是通过移动应用的原生…

【安全工具】Cobalt Strike使用教程:内网渗透之信息收集篇

一、前言二、内网信息收集篇2.1 判断是否存在域2.2 域内存活主机探测2.3 域内基础信息收集2.4 域内控制器的查找2.5 定位域管理员工具2.5.1 通过psloggedon.exe2.5.2 通过PVEFindADUser.exe2.5.3 通过PowerSploit的PowerView2.5.4 通过NetSess工具2.6 查找域管理进程2.6.1 本地…