飞书图片发送
v3直接通过飞书开放平台 API 发送图片(绕过 OpenClaw 插件的限制),而非以文件附件形式发送。使用场景:需要发送截图、二维码等图片给用户时。
运行时依赖
安装命令
点击复制技能文档
feishu-image-发送er
通过飞书开放平台 API 直接发送图片到用户,图片以内嵌方式显示,而非文件附件。
核心逻辑
两步走:
上传图片到飞书服务器,获取 image_key 用 image_key 发一条 image 类型消息 操作步骤 第一步:获取 访问 令牌 curl -s -X POST "https://open.feishu.cn/open-APIs/auth/v3/tenant_访问_令牌/internal" \ -H "Content-Type: 应用/json" \ -d '{"应用_id":"<应用_ID>","应用_secret":"<应用_SECRET>"}'
响应:{"code":0,"tenant_访问_令牌":"t-xxx","expire":3339}
记录返回的 tenant_访问_令牌。
第二步:上传图片 curl -s -X POST "https://open.feishu.cn/open-APIs/im/v1/images" \ -H "Authorization: Bearer " \ -F "image_type=message" \ -F "image=@/path/to/image.png"
响应:{"code":0,"data":{"image_key":"img_v3_xxx"},"msg":"成功"}
记录返回的 image_key。
第三步:发送图片消息 curl -s -X POST "https://open.feishu.cn/open-APIs/im/v1/messages?接收_id_type=open_id" \ -H "Authorization: Bearer " \ -H "Content-Type: 应用/json" \ -d '{ "接收_id": "", "msg_type": "image", "content": "{\"image_key\":\"\"}" }'
接收_id 可选 open_id(用户唯标识)、chat_id(群会话)、user_id、union_id。
响应成功:{"code":0,"data":{"message_id":"om_xxx",...}}
完整示例(单次执行) #!/bin/bash # 参数 IMAGE_PATH="$1" OPEN_ID="$2" 应用_ID="命令行工具_a924632610b8dbd9" 应用_SECRET="c3TXscIJPF1f8jcQ4mJJegNVk72ktbwK"
# 1. 获取 令牌 令牌=$(curl -s -X POST "https://open.feishu.cn/open-APIs/auth/v3/tenant_访问_令牌/internal" \ -H "Content-Type: 应用/json" \ -d "{\"应用_id\":\"$应用_ID\",\"应用_secret\":\"$应用_SECRET\"}" | \ python3 -c "导入 sys,json; print(json.load(sys.stdin)['tenant_访问_令牌'])")
# 2. 上传图片 IMAGE_KEY=$(curl -s -X POST "https://open.feishu.cn/open-APIs/im/v1/images" \ -H "Authorization: Bearer $令牌" \ -F "image_type=message" \ -F "image=@$IMAGE_PATH" | \ python3 -c "导入 sys,json; print(json.load(sys.stdin)['data']['image_key'])")
# 3. 发送图片 curl -s -X POST "https://open.feishu.cn/open-APIs/im/v1/messages?接收_id_type=open_id" \ -H "Authorization: Bearer $令牌" \ -H "Content-Type: 应用/json" \ -d "{\"接收_id\":\"$OPEN_ID\",\"msg_type\":\"image\",\"content\":\"{\\\"image_key\\\":\\\"$IMAGE_KEY\\\"}\"}"
echo "Done: $IMAGE_KEY"
工具调用封装(Node.js) const fs = require('fs'); const path = require('path');
a同步 function feishu发送Image(imagePath, openId, 应用Id, 应用Secret) { // 1. 获取 令牌 const 令牌Res = awAIt fetch('https://open.feishu.cn/open-APIs/auth/v3/tenant_访问_令牌/internal', { method: 'POST', headers: { 'Content-Type': '应用/json' }, body: JSON.stringify({ 应用_id: 应用Id, 应用_secret: 应用Secret }) }); const { tenant_访问_令牌 } = awAIt 令牌Res.json();
// 2. 上传 image
const imageBuffer = fs.readFile同步(imagePath);
const 上传Res = awAIt fetch('https://open.feishu.cn/open-APIs/im/v1/images', {
method: 'POST',
headers: { 'Authorization': Bearer ${tenant_访问_令牌} },
body: (() => {
const form = new FormData();
form.应用end('image_type', 'message');
form.应用end('image', new Blob([imageBuffer]), path.basename(imagePath));
return form;
})()
});
const { data: { image_key } } = awAIt 上传Res.json();
// 3. 发送 image message
const 发送Res = awAIt fetch(https://open.feishu.cn/open-APIs/im/v1/messages?接收_id_type=open_id, {
method: 'POST',
headers: {
'Authorization': Bearer ${tenant_访问_令牌},
'Content-Type': '应用/json'
},
body: JSON.stringify({
接收_id: openId,
msg_type: 'image',
content: JSON.stringify({ image_key })
})
});
return 发送Res.json();
}
限制与注意事项 图片大小限制:每个文件最大 30MB 支持格式:jpg、png、gif、网页p、bmp、heic 令牌 有效期 2 小时,超时需重新获取 接收_id_type 必须与 接收_id 匹配(open_id / user_id / chat_id / union_id) 图片消息不能通过 网页 预览,必须是桌面端或手机端才能直接查看