v1.0.0

Lark Integration

boyangwang boyangwang ← All skills

Connect Lark (Feishu) messaging to OpenClaw via webhook bridge. Supports text, rich text (post), and image messages bidirectionally. Use when setting up Lark/Feishu as a messaging channel, receiving messages with images, sending replies back to Lark, reading Lark documents/wikis/bitables, or troubleshooting Lark integration issues. Covers both Lark International (larksuite.com) and China Feishu (feishu.cn).

Downloads
1.4k
Stars
1
Versions
1
Updated
2026-02-24

Install

npx clawhub@latest install lark-integration

Documentation

Lark Integration

Connect Lark (Feishu) to OpenClaw for bidirectional messaging with full rich content support.

Quick Start

1. Set credentials

echo "FEISHU_APP_ID=cli_xxx" >> ~/.openclaw/workspace/.env

mkdir -p ~/.openclaw/secrets

echo "your_app_secret" > ~/.openclaw/secrets/feishu_app_secret

2. Start bridge

cd skills/lark-integration/scripts

node bridge-webhook.mjs

3. Configure Lark webhook URL in developer console

https://open.larksuite.com → Your App → Event Subscriptions

URL: http://YOUR_SERVER_IP:3000/webhook

Architecture

Lark App ──webhook──► Bridge (port 3000) ──WebSocket──► OpenClaw Gateway

│ │

◄────────── Reply ──────────────────┘

Supported Message Types

| Type | Direction | Format |

|------|-----------|--------|

| text | ↔ Both | Plain text |

| post | → Receive | Rich text with images, links |

| image | → Receive | Single image |

| Reply | ← Send | Text (cards via feishu-card skill) |

Platform Detection

The bridge auto-detects platform from URLs:

  • -*.larksuite.comhttps://open.larksuite.com (International)
  • -*.feishu.cnhttps://open.feishu.cn (China)

Configuration

Environment Variables

| Variable | Required | Description |

|----------|----------|-------------|

| FEISHU_APP_ID | Yes | App ID from Lark Developer Console |

| FEISHU_APP_SECRET_PATH | No | Path to secret file (default: ~/.openclaw/secrets/feishu_app_secret) |

| WEBHOOK_PORT | No | Webhook listen port (default: 3000) |

| FEISHU_THINKING_THRESHOLD_MS | No | Delay before "Thinking..." placeholder (default: 2500) |

| FEISHU_ENCRYPT_KEY | No | Encryption key if enabled in Lark |

| OPENCLAW_AGENT_ID | No | Agent to route messages to (default: main) |

Lark App Permissions

Enable these scopes in Lark Developer Console → Permissions & Scopes:

Messaging:
  • -im:message - Send and receive messages
  • -im:message:send_as_bot - Send messages as bot
  • -im:resource - Download message resources (images)
Documents (optional):
  • -docx:document:readonly - Read documents
  • -wiki:wiki:readonly - Read wiki spaces
  • -sheets:spreadsheet:readonly - Read spreadsheets
  • -bitable:bitable:readonly - Read bitables
  • -drive:drive:readonly - Access drive files

Scripts

bridge-webhook.mjs

Main webhook bridge. Receives Lark events, forwards to OpenClaw, sends replies.

FEISHU_APP_ID=cli_xxx node scripts/bridge-webhook.mjs

setup-service.mjs

Install as systemd service for auto-start:

node scripts/setup-service.mjs

Creates /etc/systemd/system/lark-bridge.service

Image Handling

Images in messages are:

1. Detected from post content or image message type

2. Downloaded via Lark API using message_id and image_key

3. Converted to base64

4. Sent to OpenClaw Gateway as attachments parameter

attachments: [{ mimeType: "image/png", content: "<base64>" }]

Group Chat Behavior

In group chats, the bridge responds when:

  • -Bot is @mentioned
  • -Message ends with ? or
  • -Message contains trigger words: help, please, why, how, what, 帮, 请, 分析, etc.
  • -Message starts with bot name

Otherwise, messages are ignored to avoid noise.

Reading Documents

Use the feishu-doc skill to read Lark documents:

node skills/feishu-doc/index.js fetch "https://xxx.larksuite.com/docx/TOKEN"

Supported URL types:

  • -/docx/ - New documents
  • -/wiki/ - Wiki pages (auto-resolves to underlying doc)
  • -/sheets/ - Spreadsheets
  • -/base/ - Bitables (multi-dimensional tables)
Permission Note: Documents must be shared with the bot, or the bot must have tenant-wide read permission.

Troubleshooting

"forBidden" error when reading docs

  • -Document not shared with bot → Add bot as collaborator
  • -Missing scope → Enable docx:document:readonly in console

No messages received

  • -Check webhook URL is accessible: curl http://YOUR_IP:3000/health
  • -Verify webhook in Lark console shows "Verified"
  • -Check bridge logs: journalctl -u lark-bridge -f

"must be string" error

  • -Old bridge version → Update to use attachments for images

Images not received

  • -Missing im:resource scope → Enable in Lark console
  • -Token expired → Bridge auto-refreshes, restart if stuck

Service Management

Check status

systemctl status lark-bridge

View logs

journalctl -u lark-bridge -f

Restart

systemctl restart lark-bridge

References

  • -[Lark Developer Console](https://open.larksuite.com/) (International)
  • -[Feishu Developer Console](https://open.feishu.cn/) (China)
  • -See references/api-formats.md for message format details
  • -See references/setup-guide.md for step-by-step setup

Launch an agent with Lark Integration on Termo.