jpskill.com
🎨 デザイン コミュニティ

feishu-doc-writer

飞书文档写入。Markdown 转 Block、创建文档块、处理并发,支持 Mermaid 绘图块。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o feishu-doc-writer.zip https://jpskill.com/download/21600.zip && unzip -o feishu-doc-writer.zip && rm feishu-doc-writer.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/21600.zip -OutFile "$d\feishu-doc-writer.zip"; Expand-Archive "$d\feishu-doc-writer.zip" -DestinationPath $d -Force; ri "$d\feishu-doc-writer.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して feishu-doc-writer.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → feishu-doc-writer フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

飛書ドキュメント書き込み

Docx API を介して飛書クラウドドキュメントにコンテンツを書き込みます。飛書ドキュメントはブロックツリーモデルを使用しており、生の Markdown は受け入れません。

ベース URL: https://open.feishu.cn/open-apis/docx/v1

認証とトークン取得

feishu_skills のルートディレクトリから共有スクリプトを実行します。

TOKEN="$(./scripts/get_feishu_token.sh)"

リクエストヘッダーはすべて Authorization: Bearer ${TOKEN} を使用します。

ビジネスインターフェースがトークン無効、期限切れ、または 401 を返した場合、強制的に更新した後、元のリクエストを一度だけ再試行します。

TOKEN="$(./scripts/get_feishu_token.sh --force-refresh)"

環境変数:

  • FEISHU_APP_ID
  • FEISHU_APP_SECRET

ローカルキャッシュ: ./.feishu_token_cache.json(期限切れでなければ直接再利用、デフォルトでは 5 分前に更新)


推奨方法:変換 API

飛書は公式の Markdown → Blocks 変換エンドポイントを提供しています。

POST /documents/{document_id}/convert
{
  "content": "# 标题\n\n正文\n\n- 列表项",
  "content_type": "markdown"
}

✅ 手動で Block JSON を構築する必要がなく、標準 Markdown をサポートしています。 ⚠️ 飛書固有のブロック(Callout など)はサポートしていません — 手動で作成する必要があります。


ブロックタイプ

block_type 名称 JSON Key 説明
1 ページ page ドキュメントのルートノード
2 テキスト text 段落
3-11 見出し1-9 heading1-heading9 -
12 箇条書き bullet 各項目は個別のブロック
13 番号付きリスト ordered -
14 コードブロック code style.language を指定する必要があります
15 引用 quote -
17 ToDo todo style.done を持ちます
19 ハイライトブロック callout 飛書固有のコンテナブロック
22 区切り線 divider -
27 画像 image 2ステップ:プレースホルダー作成 + アップロード
31 テーブル table -

ブロックの作成

POST /documents/{document_id}/blocks/{block_id}/children?document_revision_id=-1
{
  "children": [...],
  "index": 0
}
  • block_id: 親ブロックの ID(ルートノードには document_id を使用)
  • index: 挿入位置(0=先頭、-1=末尾)

ブロックの削除

親ブロックの下にある指定範囲の子ブロックを削除します。

DELETE /documents/{document_id}/blocks/{block_id}/children/batch_delete?document_revision_id=-1
{
  "start_index": 3,
  "end_index": 4
}
  • block_id: 操作対象の親ブロック ID
  • start_index: 開始子ブロックのインデックス(含む)
  • end_index: 終了子ブロックのインデックス(含まない)
  • ⚠️ このインターフェースは DELETE であり、POST ではありません。

ブロックの例

テキスト:

{"block_type": 2, "text": {"elements": [{"text_run": {"content": "段落"}}]}}

見出し:

{"block_type": 3, "heading1": {"elements": [{"text_run": {"content": "标题"}}]}}

コードブロック:

{
  "block_type": 14,
  "code": {
    "style": {"language": 1},
    "elements": [{"text_run": {"content": "console.log('hello')"}}]
  }
}

Mermaid 描画ブロック(プラグインブロック):

{
  "block_type": 40,
  "add_ons": {
    "component_type_id": "blk_631fefbbae02400430b8f9f4",
    "record": "{\"data\":\"flowchart TD\\nA-->B\",\"theme\":\"default\",\"view\":\"codeChart\"}"
  }
}
  • block_type = 40 はプラグインブロックを表します。
  • component_type_id = blk_631fefbbae02400430b8f9f4 は Mermaid 描画に使用できます。
  • record は文字列化された JSON で、現在検証済みのフィールドは次のとおりです。
    • data: Mermaid ソースコード
    • theme: 通常は default を使用します。
    • view: 通常は codeChart を使用します。
  • ドキュメントにすでに手動で「本文描画」形式の Mermaid が挿入されている場合、そのブロックを優先的に読み込み、その component_type_id/theme/view を再利用します。

ハイライトブロック(Callout):

{
  "block_type": 19,
  "callout": {
    "background_color": 1,
    "border_color": 1,
    "emoji_id": "bulb"
  },
  "children": [
    {"block_type": 2, "text": {"elements": [{"text_run": {"content": "提示内容"}}]}}
  ]
}

画像(2ステップ):

  1. プレースホルダーの作成:{"block_type": 27, "image": {}}
  2. アップロード:PUT /documents/{document_id}/blocks/{block_id}/image

テキストスタイル

{
  "text_run": {
    "content": "样式文本",
    "text_element_style": {
      "bold": true,
      "italic": true,
      "strikethrough": true,
      "underline": true,
      "inline_code": true,
      "background_color": 1,
      "text_color": 1
    }
  }
}

並行処理

飛書ドキュメントは複数人での共同作業をサポートしており、並行処理に対応する必要があります。

  1. 最新のリビジョンを取得: GET /documents/{document_id}
  2. リビジョン付きで書き込み: ?document_revision_id={revision}
  3. 競合時に再試行(HTTP 409)

Mermaid 推奨フロー

ユーザーが「本文描画形式で Mermaid を統一する」と要求した場合、通常のテキストブロックやコードブロック内の ```mermaid を直接書き込まないでください。

推奨される順序:

  1. まず、ターゲットドキュメントのすべてのブロックを読み込み、手動で調整された Mermaid 描画ブロックがすでに存在するかどうかを確認します。
  2. 存在する場合、そのブロックの以下を読み込みます。
    • block_type
    • add_ons.component_type_id
    • add_ons.record
  3. 同じ描画ブロック構造を再利用して新しい図を作成し、code ブロックを書き続けないでください。
  4. 新しい図の作成が成功した後、古い Mermaid コードブロックを削除し、ドキュメント内に2つのコンテンツセットが同時に残るのを避けます。

適用シナリオ:

  • ユーザーが特定の Mermaid 図を手動で理想的なスタイルに変更し、「他の図もこの形式に変更してほしい」と要求した場合。
  • 複数のフローチャートを同じ Docx 内で一貫した視覚効果に保つ必要がある場合。

実践的なアドバイス

  1. 通常の構造にはテキストブロック/見出しブロックを優先的に使用します。
  2. コード表示には block_type = 14 を使用します。
  3. フローチャート表示には Mermaid プラグインブロックを優先的に使用し、```mermaid を最終的な表示形式としないでください。
  4. 古い図を置き換える際は、まず新しいブロックを挿入し、次に古いブロックを削除して、コンテンツの損失を避けます。
  5. 一括置換に関わる場合、まず親ブロックの children の順序を読み込み、次に index に従って正確に削除します。

ベストプラクティス

  1. 変換 API を優先的に使用します(開発を簡素化します)。
  2. ブロックを一括作成します(API 呼び出しを減らします)。
  3. 並行処理の競合を処理します(revision パラメータを使用します)。
  4. 画像を2ステップで処理します(プレースホルダー + アップロード)。
  5. Mermaid 図は既存のプラグインブロック形式を優先的に再利用します。
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

飞书文档写入

通过 Docx API 写入内容到飞书云文档。飞书文档使用 Block 树模型,不接受原始 Markdown。

Base URL: https://open.feishu.cn/open-apis/docx/v1

认证与 Token 获取

feishu_skills 根目录执行共享脚本:

TOKEN="$(./scripts/get_feishu_token.sh)"

请求头统一使用 Authorization: Bearer ${TOKEN}

如果业务接口返回 token 无效、过期或 401,强制刷新后仅重试一次原请求:

TOKEN="$(./scripts/get_feishu_token.sh --force-refresh)"

环境变量:

  • FEISHU_APP_ID
  • FEISHU_APP_SECRET

本地缓存: ./.feishu_token_cache.json(未过期直接复用,默认提前 5 分钟刷新)


推荐方式:转换 API

飞书提供官方 Markdown → Blocks 转换端点:

POST /documents/{document_id}/convert
{
  "content": "# 标题\n\n正文\n\n- 列表项",
  "content_type": "markdown"
}

✅ 无需手动构建 Block JSON,支持标准 Markdown ⚠️ 不支持飞书特有块(Callout 等)— 需手动创建


Block 类型

block_type 名称 JSON Key 说明
1 页面 page 文档根节点
2 文本 text 段落
3-11 标题1-9 heading1-heading9 -
12 无序列表 bullet 每项单独一个 block
13 有序列表 ordered -
14 代码块 code 需指定 style.language
15 引用 quote -
17 待办 todo style.done
19 高亮块 callout 飞书特有,容器块
22 分割线 divider -
27 图片 image 两步:创建占位 + 上传
31 表格 table -

创建 Blocks

POST /documents/{document_id}/blocks/{block_id}/children?document_revision_id=-1
{
  "children": [...],
  "index": 0
}
  • block_id: 父块 ID(根节点用 document_id
  • index: 插入位置(0=开头,-1=末尾)

删除 Blocks

删除父块下指定范围的子块:

DELETE /documents/{document_id}/blocks/{block_id}/children/batch_delete?document_revision_id=-1
{
  "start_index": 3,
  "end_index": 4
}
  • block_id: 要操作的父块 ID
  • start_index: 起始子块下标(包含)
  • end_index: 结束子块下标(不包含)
  • ⚠️ 该接口是 DELETE,不是 POST

Block 示例

文本:

{"block_type": 2, "text": {"elements": [{"text_run": {"content": "段落"}}]}}

标题:

{"block_type": 3, "heading1": {"elements": [{"text_run": {"content": "标题"}}]}}

代码块:

{
  "block_type": 14,
  "code": {
    "style": {"language": 1},
    "elements": [{"text_run": {"content": "console.log('hello')"}}]
  }
}

Mermaid 绘图块(插件块):

{
  "block_type": 40,
  "add_ons": {
    "component_type_id": "blk_631fefbbae02400430b8f9f4",
    "record": "{\"data\":\"flowchart TD\\nA-->B\",\"theme\":\"default\",\"view\":\"codeChart\"}"
  }
}
  • block_type = 40 表示插件块
  • component_type_id = blk_631fefbbae02400430b8f9f4 可用于 Mermaid 绘图
  • record 是字符串化 JSON,目前验证过的字段:
    • data: Mermaid 源码
    • theme: 通常用 default
    • view: 通常用 codeChart
  • 如果文档里已经有人手动插入过“本文绘图”格式的 Mermaid,优先先读取该块,再复用它的 component_type_id/theme/view

高亮块(Callout):

{
  "block_type": 19,
  "callout": {
    "background_color": 1,
    "border_color": 1,
    "emoji_id": "bulb"
  },
  "children": [
    {"block_type": 2, "text": {"elements": [{"text_run": {"content": "提示内容"}}]}}
  ]
}

图片(两步):

  1. 创建占位:{"block_type": 27, "image": {}}
  2. 上传:PUT /documents/{document_id}/blocks/{block_id}/image

文本样式

{
  "text_run": {
    "content": "样式文本",
    "text_element_style": {
      "bold": true,
      "italic": true,
      "strikethrough": true,
      "underline": true,
      "inline_code": true,
      "background_color": 1,
      "text_color": 1
    }
  }
}

并发处理

飞书文档支持多人协作,需处理并发:

  1. 获取最新 revision: GET /documents/{document_id}
  2. 带 revision 写入: ?document_revision_id={revision}
  3. 冲突时重试(HTTP 409)

Mermaid 推荐流程

当用户要求“按本文绘图格式统一 Mermaid”时,不要直接写普通文本块或代码块里的 ```mermaid。

推荐顺序:

  1. 先读取目标文档所有块,确认是否已存在人工调整好的 Mermaid 绘图块
  2. 如果存在,读取该块的:
    • block_type
    • add_ons.component_type_id
    • add_ons.record
  3. 复用同样的绘图块结构创建新图,而不是继续写 code
  4. 新图创建成功后,再删除旧的 Mermaid 代码块,避免文档里同时保留两套内容

适用场景:

  • 用户已经把某一张 Mermaid 图手动改成了理想样式,要求“其他图也改成这种格式”
  • 需要让多张流程图在同一篇 Docx 中保持一致视觉效果

实战建议

  1. 普通结构优先用文本块/标题块
  2. 代码展示用 block_type = 14
  3. 流程图展示优先用 Mermaid 插件块,不要把 ```mermaid 当最终呈现形式
  4. 替换旧图时,先插入新块,再删除旧块,避免内容丢失
  5. 涉及批量替换时,先读取父块 children 顺序,再按 index 精确删除

最佳实践

  1. 优先用转换 API(简化开发)
  2. 批量创建 blocks(减少 API 调用)
  3. 处理并发冲突(带 revision 参数)
  4. 图片分两步(占位 + 上传)
  5. Mermaid 图优先复用现有插件块格式