[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-openclaw-openclaw-extensions-feishu-skills-feishu-doc":3},{"error":4,"detail":5,"metadata":32,"markdownContent":33,"rawMarkdown":29},false,{"repo_full_name":6,"owner":7,"repo_name":7,"repo_forks":8,"skill_path":9,"repo_stars":10,"name":11,"category_id":12,"description":13,"file_tree":14,"skill_md_content":29,"skill_id":30,"skill_key":31},"openclaw/openclaw","openclaw",62342,"extensions/feishu/skills/feishu-doc",323486,"feishu-doc",1,"Feishu document read/write operations. Activate when user mentions Feishu docs, cloud docs, or docx links.",[15,20],{"name":16,"path":17,"size":18,"type":19},"SKILL.md","extensions/feishu/skills/feishu-doc/SKILL.md",4535,"file",{"name":21,"path":22,"type":23,"children":24},"references","extensions/feishu/skills/feishu-doc/references","folder",[25],{"name":26,"path":27,"size":28,"type":19},"block-types.md","extensions/feishu/skills/feishu-doc/references/block-types.md",5437,"---\nname: feishu-doc\ndescription: |\n  Feishu document read/write operations. Activate when user mentions Feishu docs, cloud docs, or docx links.\n---\n\n# Feishu Document Tool\n\nSingle tool `feishu_doc` with action parameter for all document operations, including table creation for Docx.\n\n## Token Extraction\n\nFrom URL `https://xxx.feishu.cn/docx/ABC123def` → `doc_token` = `ABC123def`\n\n## Actions\n\n### Read Document\n\n```json\n{ \"action\": \"read\", \"doc_token\": \"ABC123def\" }\n```\n\nReturns: title, plain text content, block statistics. Check `hint` field - if present, structured content (tables, images) exists that requires `list_blocks`.\n\n### Write Document (Replace All)\n\n```json\n{ \"action\": \"write\", \"doc_token\": \"ABC123def\", \"content\": \"# Title\\n\\nMarkdown content...\" }\n```\n\nReplaces entire document with markdown content. Supports: headings, lists, code blocks, quotes, links, images (`![](url)` auto-uploaded), bold/italic/strikethrough.\n\n**Limitation:** Markdown tables are NOT supported.\n\n### Append Content\n\n```json\n{ \"action\": \"append\", \"doc_token\": \"ABC123def\", \"content\": \"Additional content\" }\n```\n\nAppends markdown to end of document.\n\n### Create Document\n\n```json\n{ \"action\": \"create\", \"title\": \"New Document\", \"owner_open_id\": \"ou_xxx\" }\n```\n\nWith folder:\n\n```json\n{\n  \"action\": \"create\",\n  \"title\": \"New Document\",\n  \"folder_token\": \"fldcnXXX\",\n  \"owner_open_id\": \"ou_xxx\"\n}\n```\n\n**Important:** Always pass `owner_open_id` with the requesting user's `open_id` (from inbound metadata `sender_id`) so the user automatically gets `full_access` permission on the created document. Without this, only the bot app has access.\n\n### List Blocks\n\n```json\n{ \"action\": \"list_blocks\", \"doc_token\": \"ABC123def\" }\n```\n\nReturns full block data including tables, images. Use this to read structured content.\n\n### Get Single Block\n\n```json\n{ \"action\": \"get_block\", \"doc_token\": \"ABC123def\", \"block_id\": \"doxcnXXX\" }\n```\n\n### Update Block Text\n\n```json\n{\n  \"action\": \"update_block\",\n  \"doc_token\": \"ABC123def\",\n  \"block_id\": \"doxcnXXX\",\n  \"content\": \"New text\"\n}\n```\n\n### Delete Block\n\n```json\n{ \"action\": \"delete_block\", \"doc_token\": \"ABC123def\", \"block_id\": \"doxcnXXX\" }\n```\n\n### Create Table (Docx Table Block)\n\n```json\n{\n  \"action\": \"create_table\",\n  \"doc_token\": \"ABC123def\",\n  \"row_size\": 2,\n  \"column_size\": 2,\n  \"column_width\": [200, 200]\n}\n```\n\nOptional: `parent_block_id` to insert under a specific block.\n\n### Write Table Cells\n\n```json\n{\n  \"action\": \"write_table_cells\",\n  \"doc_token\": \"ABC123def\",\n  \"table_block_id\": \"doxcnTABLE\",\n  \"values\": [\n    [\"A1\", \"B1\"],\n    [\"A2\", \"B2\"]\n  ]\n}\n```\n\n### Create Table With Values (One-step)\n\n```json\n{\n  \"action\": \"create_table_with_values\",\n  \"doc_token\": \"ABC123def\",\n  \"row_size\": 2,\n  \"column_size\": 2,\n  \"column_width\": [200, 200],\n  \"values\": [\n    [\"A1\", \"B1\"],\n    [\"A2\", \"B2\"]\n  ]\n}\n```\n\nOptional: `parent_block_id` to insert under a specific block.\n\n### Upload Image to Docx (from URL or local file)\n\n```json\n{\n  \"action\": \"upload_image\",\n  \"doc_token\": \"ABC123def\",\n  \"url\": \"https://example.com/image.png\"\n}\n```\n\nOr local path with position control:\n\n```json\n{\n  \"action\": \"upload_image\",\n  \"doc_token\": \"ABC123def\",\n  \"file_path\": \"/tmp/image.png\",\n  \"parent_block_id\": \"doxcnParent\",\n  \"index\": 5\n}\n```\n\nOptional `index` (0-based) inserts the image at a specific position among sibling blocks. Omit to append at end.\n\n**Note:** Image display size is determined by the uploaded image's pixel dimensions. For small images (e.g. 480x270 GIFs), scale to 800px+ width before uploading to ensure proper display.\n\n### Upload File Attachment to Docx (from URL or local file)\n\n```json\n{\n  \"action\": \"upload_file\",\n  \"doc_token\": \"ABC123def\",\n  \"url\": \"https://example.com/report.pdf\"\n}\n```\n\nOr local path:\n\n```json\n{\n  \"action\": \"upload_file\",\n  \"doc_token\": \"ABC123def\",\n  \"file_path\": \"/tmp/report.pdf\",\n  \"filename\": \"Q1-report.pdf\"\n}\n```\n\nRules:\n\n- exactly one of `url` / `file_path`\n- optional `filename` override\n- optional `parent_block_id`\n\n## Reading Workflow\n\n1. Start with `action: \"read\"` - get plain text + statistics\n2. Check `block_types` in response for Table, Image, Code, etc.\n3. If structured content exists, use `action: \"list_blocks\"` for full data\n\n## Configuration\n\n```yaml\nchannels:\n  feishu:\n    tools:\n      doc: true # default: true\n```\n\n**Note:** `feishu_wiki` depends on this tool - wiki page content is read/written via `feishu_doc`.\n\n## Permissions\n\nRequired: `docx:document`, `docx:document:readonly`, `docx:document.block:convert`, `drive:drive`\n","bd3c186c-98ac-50bf-b053-cdaaf621f018","openclaw-openclaw-extensions-feishu-skills-feishu-doc",{"name":11,"description":13},"\u003Ch1>Feishu Document Tool\u003C/h1>\n\u003Cp>Single tool \u003Ccode>feishu_doc\u003C/code> with action parameter for all document operations, including table creation for Docx.\u003C/p>\n\u003Ch2>Token Extraction\u003C/h2>\n\u003Cp>From URL \u003Ccode>https://xxx.feishu.cn/docx/ABC123def\u003C/code> → \u003Ccode>doc_token\u003C/code> = \u003Ccode>ABC123def\u003C/code>\u003C/p>\n\u003Ch2>Actions\u003C/h2>\n\u003Ch3>Read Document\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;read&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;doc_token&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ABC123def&quot;\u003C/span> \u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Cp>Returns: title, plain text content, block statistics. Check \u003Ccode>hint\u003C/code> field - if present, structured content (tables, images) exists that requires \u003Ccode>list_blocks\u003C/code>.\u003C/p>\n\u003Ch3>Write Document (Replace All)\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;write&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;doc_token&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ABC123def&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;content&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;# Title\\n\\nMarkdown content...&quot;\u003C/span> \u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Cp>Replaces entire document with markdown content. Supports: headings, lists, code blocks, quotes, links, images (\u003Ccode>![](url)\u003C/code> auto-uploaded), bold/italic/strikethrough.\u003C/p>\n\u003Cp>\u003Cstrong>Limitation:\u003C/strong> Markdown tables are NOT supported.\u003C/p>\n\u003Ch3>Append Content\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;append&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;doc_token&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ABC123def&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;content&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Additional content&quot;\u003C/span> \u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Cp>Appends markdown to end of document.\u003C/p>\n\u003Ch3>Create Document\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;create&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;title&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;New Document&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;owner_open_id&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ou_xxx&quot;\u003C/span> \u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Cp>With folder:\u003C/p>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;create&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;title&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;New Document&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;folder_token&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;fldcnXXX&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;owner_open_id&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ou_xxx&quot;\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Cp>\u003Cstrong>Important:\u003C/strong> Always pass \u003Ccode>owner_open_id\u003C/code> with the requesting user&#39;s \u003Ccode>open_id\u003C/code> (from inbound metadata \u003Ccode>sender_id\u003C/code>) so the user automatically gets \u003Ccode>full_access\u003C/code> permission on the created document. Without this, only the bot app has access.\u003C/p>\n\u003Ch3>List Blocks\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;list_blocks&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;doc_token&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ABC123def&quot;\u003C/span> \u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Cp>Returns full block data including tables, images. Use this to read structured content.\u003C/p>\n\u003Ch3>Get Single Block\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;get_block&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;doc_token&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ABC123def&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;block_id&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;doxcnXXX&quot;\u003C/span> \u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Ch3>Update Block Text\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;update_block&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;doc_token&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ABC123def&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;block_id&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;doxcnXXX&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;content&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;New text&quot;\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Ch3>Delete Block\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;delete_block&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;doc_token&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ABC123def&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-attr\">&quot;block_id&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;doxcnXXX&quot;\u003C/span> \u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Ch3>Create Table (Docx Table Block)\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;create_table&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;doc_token&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ABC123def&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;row_size&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-number\">2\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;column_size&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-number\">2\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;column_width&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-punctuation\">[\u003C/span>\u003Cspan class=\"hljs-number\">200\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-number\">200\u003C/span>\u003Cspan class=\"hljs-punctuation\">]\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Cp>Optional: \u003Ccode>parent_block_id\u003C/code> to insert under a specific block.\u003C/p>\n\u003Ch3>Write Table Cells\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;write_table_cells&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;doc_token&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ABC123def&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;table_block_id&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;doxcnTABLE&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;values&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-punctuation\">[\u003C/span>\n    \u003Cspan class=\"hljs-punctuation\">[\u003C/span>\u003Cspan class=\"hljs-string\">&quot;A1&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-string\">&quot;B1&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">]\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-punctuation\">[\u003C/span>\u003Cspan class=\"hljs-string\">&quot;A2&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-string\">&quot;B2&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">]\u003C/span>\n  \u003Cspan class=\"hljs-punctuation\">]\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Ch3>Create Table With Values (One-step)\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;create_table_with_values&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;doc_token&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ABC123def&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;row_size&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-number\">2\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;column_size&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-number\">2\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;column_width&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-punctuation\">[\u003C/span>\u003Cspan class=\"hljs-number\">200\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-number\">200\u003C/span>\u003Cspan class=\"hljs-punctuation\">]\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;values&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-punctuation\">[\u003C/span>\n    \u003Cspan class=\"hljs-punctuation\">[\u003C/span>\u003Cspan class=\"hljs-string\">&quot;A1&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-string\">&quot;B1&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">]\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-punctuation\">[\u003C/span>\u003Cspan class=\"hljs-string\">&quot;A2&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \u003Cspan class=\"hljs-string\">&quot;B2&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">]\u003C/span>\n  \u003Cspan class=\"hljs-punctuation\">]\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Cp>Optional: \u003Ccode>parent_block_id\u003C/code> to insert under a specific block.\u003C/p>\n\u003Ch3>Upload Image to Docx (from URL or local file)\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;upload_image&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;doc_token&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ABC123def&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;url&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;https://example.com/image.png&quot;\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Cp>Or local path with position control:\u003C/p>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;upload_image&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;doc_token&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ABC123def&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;file_path&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;/tmp/image.png&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;parent_block_id&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;doxcnParent&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;index&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-number\">5\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Cp>Optional \u003Ccode>index\u003C/code> (0-based) inserts the image at a specific position among sibling blocks. Omit to append at end.\u003C/p>\n\u003Cp>\u003Cstrong>Note:\u003C/strong> Image display size is determined by the uploaded image&#39;s pixel dimensions. For small images (e.g. 480x270 GIFs), scale to 800px+ width before uploading to ensure proper display.\u003C/p>\n\u003Ch3>Upload File Attachment to Docx (from URL or local file)\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;upload_file&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;doc_token&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ABC123def&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;url&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;https://example.com/report.pdf&quot;\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Cp>Or local path:\u003C/p>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">json\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;action&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;upload_file&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;doc_token&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ABC123def&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;file_path&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;/tmp/report.pdf&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;filename&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Q1-report.pdf&quot;\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Cp>Rules:\u003C/p>\n\u003Cul>\n\u003Cli>exactly one of \u003Ccode>url\u003C/code> / \u003Ccode>file_path\u003C/code>\u003C/li>\n\u003Cli>optional \u003Ccode>filename\u003C/code> override\u003C/li>\n\u003Cli>optional \u003Ccode>parent_block_id\u003C/code>\u003C/li>\n\u003C/ul>\n\u003Ch2>Reading Workflow\u003C/h2>\n\u003Col>\n\u003Cli>Start with \u003Ccode>action: &quot;read&quot;\u003C/code> - get plain text + statistics\u003C/li>\n\u003Cli>Check \u003Ccode>block_types\u003C/code> in response for Table, Image, Code, etc.\u003C/li>\n\u003Cli>If structured content exists, use \u003Ccode>action: &quot;list_blocks&quot;\u003C/code> for full data\u003C/li>\n\u003C/ol>\n\u003Ch2>Configuration\u003C/h2>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">yaml\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-yaml\">\u003Cspan class=\"hljs-attr\">channels:\u003C/span>\n  \u003Cspan class=\"hljs-attr\">feishu:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">tools:\u003C/span>\n      \u003Cspan class=\"hljs-attr\">doc:\u003C/span> \u003Cspan class=\"hljs-literal\">true\u003C/span> \u003Cspan class=\"hljs-comment\"># default: true\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Cp>\u003Cstrong>Note:\u003C/strong> \u003Ccode>feishu_wiki\u003C/code> depends on this tool - wiki page content is read/written via \u003Ccode>feishu_doc\u003C/code>.\u003C/p>\n\u003Ch2>Permissions\u003C/h2>\n\u003Cp>Required: \u003Ccode>docx:document\u003C/code>, \u003Ccode>docx:document:readonly\u003C/code>, \u003Ccode>docx:document.block:convert\u003C/code>, \u003Ccode>drive:drive\u003C/code>\u003C/p>\n"]