Send File
Overview
将文件发送到消息平台(飞书、Telegram、Discord 等)。
内容来源优先级(用户未指定时):
- 1. 🥇 生成的文档 - 刚刚由代码/工具生成的文件(报告、导出数据等)
- 🥈 本地文件 - 用户机器上已存在的文件
- 🥉 截图 - 屏幕截图或图片
配置(必须)
使用前需要配置飞书应用凭证:
CODEBLOCK0
获取飞书应用凭证:
- 1. 访问 飞书开放平台
- 创建或选择应用
- 在「凭证与基础信息」中获取 App ID 和 App Secret
- 确保应用有
im:message 和 im:resource 权限
Quick Start
用户请求发送文件时:
CODEBLOCK1
重要:飞书文件发送必须用 Python 脚本
⚠️ OpenClaw 的 message tool 无法直接发送本地文件(只能发链接)。
正确做法:直接执行 Python 脚本
CODEBLOCK2
执行时机:
- - 用户说"发文件"、"发送xxx"、"把xxx发给我"时
- 当前在飞书对话中,自动推断 open_id
- 直接用 exec 调用脚本,不要用 message tool 的 filePath 参数
Platform Support
| 平台 | 状态 | 说明 |
|---|
| 飞书 | ✅ 支持 | 使用 message tool,支持多种文件类型 |
| Telegram |
✅ 支持 | 使用
message tool |
| Discord | ✅ 支持 | 使用
message tool |
| Signal | ✅ 支持 | 使用
message tool |
| 微信 | ⏳ 计划中 | 暂未原生支持 |
| QQ | ⏳ 计划中 | 暂未原生支持 |
Workflow
Step 1: 确定文件来源(按优先级)
当用户说"发文件"但未明确指定时,按优先级判断:
优先 1: 生成的文档
- - 刚刚由工具生成的文件(如报告、代码、导出数据)
- workspace 目录下的新文件
- 直接使用该路径
优先 2: 本地文件
- - 用户明确指定路径: INLINECODE7
- 模糊路径:
发送桌面的那个pdf → 需要搜索或确认 - 使用
read 确认文件存在
优先 3: 截图
- - 用户明确要求截图
- 需要先截图再发送
- macOS: 使用
screencapture 命令
Step 2: 确定目标平台和接收者
当前对话自动推断
- - 如果用户在飞书对话中 → 发送到当前对话
- 无需额外指定
明确指定
- - INLINECODE11
- INLINECODE12
- 使用
message tool 的 channel 和 target 参数
Step 3: 发送文件
重要:飞书文件发送需要两步
飞书不能直接发送本地文件路径,必须先上传获取 file_key:
Step 3.1: 上传文件到飞书
CODEBLOCK3
Step 3.2: 发送文件消息
CODEBLOCK4
Python 示例代码:
CODEBLOCK5
filetype 对照表:
| 文件类型 | filetype |
|---|
| Excel (.xlsx/.xls) | INLINECODE17 |
| Word (.docx/.doc) |
doc |
| PDF |
pdf |
| 图片 |
image |
| 视频 |
video |
| 音频 |
audio |
| 其他 |
stream |
File Type Support
飞书支持的文件类型
| 类型 | 扩展名 | 大小限制 |
|---|
| 文档 | pdf, doc, docx, xls, xlsx, ppt, pptx | 30MB |
| 图片 |
jpg, jpeg, png, gif, webp | 20MB |
| 音频 | mp3, wav, m4a, aac | 30MB |
| 视频 | mp4, mov, avi | 50MB |
| 压缩包 | zip, rar, 7z | 30MB |
Examples
Example 1: 发送刚生成的文件
用户:把刚才生成的报告发到飞书
CODEBLOCK6
Example 2: 发送本地文件
用户:发送 /Users/wlong/Desktop/report.pdf 给我
CODEBLOCK7
Example 3: 截图并发送
用户:截个屏发给我
CODEBLOCK8
Scripts
scripts/sendfeishufile.py
飞书文件发送脚本,自动处理上传和发送流程。
用法:
CODEBLOCK9
示例:
CODEBLOCK10
环境变量:
- -
FEISHU_APP_ID: 飞书应用 ID(必须配置) - INLINECODE25 : 飞书应用密钥(必须配置)
scripts/send_file.sh
通用文件发送辅助脚本(用于文件检查和验证)。
Notes
- - 大文件发送可能需要时间,告知用户等待
- 飞书有文件大小限制,超大文件需要分片或压缩
- 发送失败时检查文件格式和大小
- 微信/QQ 支持待后续扩展
Send File
概述
将文件发送到消息平台(飞书、Telegram、Discord 等)。
内容来源优先级(用户未指定时):
- 1. 🥇 生成的文档 - 刚刚由代码/工具生成的文件(报告、导出数据等)
- 🥈 本地文件 - 用户机器上已存在的文件
- 🥉 截图 - 屏幕截图或图片
配置(必须)
使用前需要配置飞书应用凭证:
bash
临时配置(当前终端)
export FEISHU
APPID=cli_xxx
export FEISHU
APPSECRET=xxx
永久配置(添加到 ~/.zshrc 或 ~/.bashrc)
echo export FEISHU
APPID=cli_xxx >> ~/.zshrc
echo export FEISHU
APPSECRET=xxx >> ~/.zshrc
source ~/.zshrc
获取飞书应用凭证:
- 1. 访问 飞书开放平台
- 创建或选择应用
- 在「凭证与基础信息」中获取 App ID 和 App Secret
- 确保应用有 im:message 和 im:resource 权限
快速开始
用户请求发送文件时:
用户: 把这个文件发到飞书
用户: 发送 /path/to/file.pdf 给我
用户: 把刚才生成的报告发给我
重要:飞书文件发送必须用 Python 脚本
⚠️ OpenClaw 的 message 工具无法直接发送本地文件(只能发链接)。
正确做法:直接执行 Python 脚本
bash
python ~/.openclaw/skills/send-file/scripts/sendfeishufile.py path> id>
执行时机:
- - 用户说发文件、发送xxx、把xxx发给我时
- 当前在飞书对话中,自动推断 open_id
- 直接用 exec 调用脚本,不要用 message 工具的 filePath 参数
平台支持
| 平台 | 状态 | 说明 |
|---|
| 飞书 | ✅ 支持 | 使用 message 工具,支持多种文件类型 |
| Telegram |
✅ 支持 | 使用 message 工具 |
| Discord | ✅ 支持 | 使用 message 工具 |
| Signal | ✅ 支持 | 使用 message 工具 |
| 微信 | ⏳ 计划中 | 暂未原生支持 |
| QQ | ⏳ 计划中 | 暂未原生支持 |
工作流程
步骤 1:确定文件来源(按优先级)
当用户说发文件但未明确指定时,按优先级判断:
优先 1:生成的文档
- - 刚刚由工具生成的文件(如报告、代码、导出数据)
- workspace 目录下的新文件
- 直接使用该路径
优先 2:本地文件
- - 用户明确指定路径:发送 /path/to/file.pdf
- 模糊路径:发送桌面的那个pdf → 需要搜索或确认
- 使用 read 确认文件存在
优先 3:截图
- - 用户明确要求截图
- 需要先截图再发送
- macOS:使用 screencapture 命令
步骤 2:确定目标平台和接收者
当前对话自动推断
- - 如果用户在飞书对话中 → 发送到当前对话
- 无需额外指定
明确指定
- - 发到飞书群xxx
- 发到 Telegram
- 使用 message 工具的 channel 和 target 参数
步骤 3:发送文件
重要:飞书文件发送需要两步
飞书不能直接发送本地文件路径,必须先上传获取 file_key:
步骤 3.1:上传文件到飞书
python
1. 获取 tenantaccesstoken
2. 调用 POST /open-apis/im/v1/files 上传文件
3. 获取返回的 file_key
步骤 3.2:发送文件消息
python
调用 POST /open-apis/im/v1/messages?receiveidtype=open_id
msg_type: file
content: {filekey: key>}
Python 示例代码:
python
import requests
import json
1. 获取 token
token_resp = requests.post(
https://open.feishu.cn/open-apis/auth/v3/tenant
accesstoken/internal,
json={app
id: APPID, app
secret: APPSECRET}
)
token = token
resp.json()[tenantaccess_token]
2. 上传文件
with open(file_path, rb) as f:
upload_resp = requests.post(
https://open.feishu.cn/open-apis/im/v1/files,
headers={Authorization: fBearer {token}},
files={file: (filename, f, mime_type)},
data={file
type: filetype, file_name: filename}
)
file
key = uploadresp.json()[data][file_key]
3. 发送文件消息
requests.post(
https://open.feishu.cn/open-apis/im/v1/messages?receive
idtype=open_id,
headers={Authorization: fBearer {token}, Content-Type: application/json},
json={
receive
id: openid,
msg_type: file,
content: json.dumps({file
key: filekey})
}
)
filetype 对照表:
| 文件类型 | filetype |
|---|
| Excel (.xlsx/.xls) | xlsx |
| Word (.docx/.doc) |
doc |
| PDF | pdf |
| 图片 | image |
| 视频 | video |
| 音频 | audio |
| 其他 | stream |
文件类型支持
飞书支持的文件类型
| 类型 | 扩展名 | 大小限制 |
|---|
| 文档 | pdf, doc, docx, xls, xlsx, ppt, pptx | 30MB |
| 图片 |
jpg, jpeg, png, gif, webp | 20MB |
| 音频 | mp3, wav, m4a, aac | 30MB |
| 视频 | mp4, mov, avi | 50MB |
| 压缩包 | zip, rar, 7z | 30MB |
示例
示例 1:发送刚生成的文件
用户:把刚才生成的报告发到飞书
- 1. 确认生成的文件路径(通常是 workspace 目录)
- 使用 message 工具发送
示例 2:发送本地文件
用户:发送 /Users/wlong/Desktop/report.pdf 给我
- 1. 确认文件存在
- 使用 message 工具发送,target 留空(当前对话)
示例 3:截图并发送
用户:截个屏发给我
- 1. 使用 screencapture 截图
- 保存到临时文件
- 使用 message 工具发送
脚本
scripts/sendfeishufile.py
飞书文件发送脚本,自动处理上传和发送流程。
用法:
bash
python ~/.openclaw/skills/send-file/scripts/sendfeishufile.py path> id>
示例:
bash
发送文件给用户
python ~/.openclaw/skills/send-file/scripts/send
feishufile.py \
/Users/wlong/Downloads/report.xlsx \
ou_26b058ca29943e674a9b0c9039329897
环境变量:
- - FEISHUAPPID:飞书应用 ID(必须配置)
- FEISHUAPPSECRET:飞书应用密钥(必须配置)
scripts/send_file.sh
通用文件发送辅助脚本(用于文件检查和验证)。
注意事项
- - 大文件发送可能需要时间,告知用户等待
- 飞书有文件大小限制,超大文件需要分片或压缩
- 发送失败时检查文件格式和大小
- 微信/QQ 支持待后续扩展