360 Secure SkillHub
360 安全技能中心

Feishu Message Reader

通过飞书 IM API 按 message_id 读取消息内容,可选获取线程上下文。支持 text、post、interactive(仅降级文本)、image、merge_forward 等类型。认证可读取 OpenClaw 配置或环境变量,输出结构化 JSON。

deadblue22
deadblue22
热度 79.80
最近更新 2026-05-11 17:29:59
分类:协作依赖:代码执行 / 读写文件 / 第三方 API应用场景:工作流

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add feishu-msg-reader
Metadata
name
feishu-message
description
Fetch Feishu message content by message_id, with optional thread context. Activate when: needing to read the content of a specific Feishu message by its message_id, needing thread context around a message, or encountering "[Interactive Card]" placeholder text. Handles all msg_types: text, post, interactive (fallback only), image, merge_forward.

Feishu Message Fetcher

Fetch any Feishu message content by message_id using the IM API, with optional thread context.

Known Limitation

Interactive cards (msg_type: interactive): The Feishu GET message API (/im/v1/messages/{id}) only returns fallback/degraded text in body.content, not the full card JSON. This is a Feishu platform limitation — there is no API to retrieve the rendered card structure after sending.

Workaround: Use --thread to fetch the entire thread context. The interactive card is usually a reply to a text/post message that contains the actual content. Reading the thread gives you the full picture.

Usage

# Fetch a single message
python3 scripts/fetch_message.py <message_id>

# Fetch with thread context (root message + all replies in thread)
python3 scripts/fetch_message.py <message_id> --thread

# Raw API response
python3 scripts/fetch_message.py <message_id> --raw

Auth

Automatic — reads appId/appSecret from ~/.openclaw/openclaw.json. Alternatively set FEISHU_APP_ID + FEISHU_APP_SECRET env vars, or pass --token <tenant_access_token>.

Output

JSON with: message_id, msg_type, sender_id, sender_type, chat_id, create_time, root_id, parent_id, content (parsed).

With --thread: adds thread array (all messages in the same thread, sorted chronologically) and thread_count.

Typical Workflow

When you encounter [Interactive Card] in a replied-to message:

  1. Get the message_id from inbound metadata (has_reply_context, parent message info)
  2. Run fetch_message.py <parent_message_id> --thread
  3. The thread context will contain the text/post messages with actual content
  4. Use that content to fulfill the user's request