老达博客 生活记录 让AI助手学会发图:飞书机器人图片发送实战记录

让AI助手学会发图:飞书机器人图片发送实战记录

一次从”收不到图”到”成功发送”的折腾经历


兄弟们,今天记录一下我让严主任(我的AI助手)学会通过飞书发送图片的全过程。说实话,一开始我以为这事儿很简单,结果踩了不少坑,最后还是搞定了。

事情的起因

我想让严主任截个图发给我,看看我的博客首页效果。结果他说”发送成功了”,但我这边啥也没收到。这就尴尬了。

问题出在哪? 飞书机器人发送消息和发送图片,完全是两码事。

飞书机器人的消息 vs 图片

先说个坑:飞书机器人发文本消息和发图片,机制完全不一样。

  • 文本消息:直接通过webhook接口post过去,简单粗暴
  • 图片消息:需要先上传图片到飞书服务器,获取一个叫image_key的东西,然后再用webhook发送

这就好比你要给朋友寄东西:

  • 发短信 = 直接打电话说
  • 发图片 = 先把东西存到快递柜,拿到取件码,再告诉朋友取件码

多了一步,但这一步卡了很多人。

解决步骤(实战记录)

第一步:确认权限

首先得确认你的飞书机器人有发送图片的权限。登录[飞书开放平台](https://open.feishu.cn/app/),找到你的应用,检查权限管理:

需要的权限:

  • im:message:send_as_bot —— 以机器人身份发送消息
  • docs:document.media:upload —— 上传媒体文件

这两个权限有了,才能继续往下走。

第二步:获取 tenant_access_token

这是最关键的一步。tenant_access_token相当于你的”通行证”,没有它你连飞书服务器的门都进不去。

获取方式:

curl -X POST \
  "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal" \
  -H "Content-Type: application/json" \
  -d '{
    "app_id": "你的app_id",
    "app_secret": "你的app_secret"
  }'

返回:

{
  "code": 0,
  "expire": 7200,
  "msg": "ok",
  "tenant_access_token": "t-xxxxx"
}

注意:这个token有效期只有2小时(7200秒),过期了要重新获取。

第三步:上传图片获取 image_key

拿到token后,把图片上传到飞书服务器:

curl -X POST \
  "https://open.feishu.cn/open-apis/im/v1/images" \
  -H "Authorization: Bearer {tenant_access_token}" \
  -F "image_type=message" \
  -F "image=@/path/to/your/image.png"

返回:

{
  "code": 0,
  "data": {
    "image_key": "img_v3_02v8_xxxxxx"
  },
  "msg": "success"
}

这个image_key就是取件码,记下来,下一步要用。

第四步:发送图片到群聊

最后一步,用webhook发送图片:

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "msg_type": "image",
    "content": {
      "image_key": "img_v3_02v8_xxxxxx"
    }
  }' \
  "https://open.feishu.cn/open-apis/bot/v2/hook/{你的webhook_key}"

收到{"code":0,"msg":"success"},搞定!

完整流程图

本地图片 
    ↓
获取 tenant_access_token(用app_id和app_secret)
    ↓
上传图片到飞书服务器 → 获得 image_key
    ↓
使用 image_key 通过 webhook 发送
    ↓
飞书群聊收到图片 ✅

几个坑和注意事项

  1. token会过期tenant_access_token只有2小时有效期,长时间运行的服务需要定时刷新
  1. 权限要开对:很多人卡在权限上,记得检查im:message:send_as_botdocs:document.media:upload
  1. 私聊 vs 群聊:飞书机器人私聊发图片可能有额外限制,建议用群聊机器人
  1. 图片大小:太大(几MB以上)的图片可能会上传失败,建议压缩到500KB以内

代码实现(Node.js)

如果你也是用Node.js,可以参考这段代码:

const puppeteer = require('puppeteer-core');

async function getTenantToken(appId, appSecret) { const response = await fetch( 'https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ app_id: appId, app_secret: appSecret }) } ); const data = await response.json(); return data.tenant_access_token; }

async function uploadImage(token, imagePath) { const formData = new FormData(); formData.append('image_type', 'message'); formData.append('image', fs.createReadStream(imagePath)); const response = await fetch('https://open.feishu.cn/open-apis/im/v1/images', { method: 'POST', headers: { 'Authorization': Bearer ${token} }, body: formData }); const data = await response.json(); return data.data.image_key; }

async function sendImageToFeishu(webhookUrl, imageKey) { const response = await fetch(webhookUrl, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ msg_type: 'image', content: { image_key: imageKey } }) }); return response.json(); }

实际应用场景

这个功能搞定后,使用场景就多了:

  • 监控截图:服务器异常时自动截图告警
  • 报表发送:定时发送数据可视化图表
  • 操作记录:关键操作后截图留痕
  • 演示辅助:远程协助时实时截图说明

总结

飞书机器人发图片比发文本复杂,主要是多了一个”上传获取image_key”的步骤。但一旦跑通,就能让AI助手具备完整的图片发送能力。

核心要点

  1. 获取 tenant_access_token
  2. 上传图片获取 image_key
  3. 使用 image_key 通过webhook发送

希望这篇记录对你有帮助。如果你也在折腾飞书机器人,欢迎留言交流。


*文章配图:OpenClaw官方网站首页*


标签: #OpenClaw #飞书机器人 #API集成 #AI助手 #技术实战 #图片发送
推荐阅读:

  • [OpenClaw官方文档](https://docs.openclaw.ai)
  • [飞书开放平台API文档](https://open.feishu.cn/document)
  • [Puppeteer截图教程]

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

返回顶部