| name | feishu_file_fetch |
| description | Implements a Clawdbot extension tool that downloads Feishu files by message_id and file_key, streams to disk with sha256, size limits, and path traversal protection. Use when the user asks to build or update the feishu_file_fetch tool, Feishu file download workflow, or Clawdbot extension handling message_id/file_key inputs. |
feishu_file_fetch
Quick start
Create or update the reference implementation at scripts/feishu_file_fetch.py. It should:
- Accept JSON input:
{ message_id, file_key, type="file", outdir="/root/clawd/uploads", max_bytes=104857600 }
- Output JSON:
{ ok, path, filename, bytes, sha256, error? }
- Use
FEISHU_APP_ID / FEISHU_APP_SECRET to fetch and cache tenant_access_token (refresh 2 minutes before expiry).
- Download via
GET https://open.feishu.cn/open-apis/im/v1/messages/{message_id}/resources/{file_key}?type={type} with Authorization: Bearer <token>.
- Stream to
outdir/yyyyMMdd/, parse filename from Content-Disposition, fallback to file_key.bin.
- Compute sha256 while streaming; enforce
max_bytes strictly (terminate and delete temp file if exceeded).
- Prevent path traversal by ensuring final path stays within
outdir.
- Never log tokens or secrets.
Runtime notes
- Use only stdlib to avoid dependency installs.
- If
Content-Length exceeds max_bytes, fail early.
- Use a temp file in the target directory and
os.replace on success.
Example usage
echo '{"message_id":"om_xxx","file_key":"file_xxx"}' | python scripts/feishu_file_fetch.py
Additional resources