lark-integration

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).

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "lark-integration" with this command: npx skills add boyangwang/lark-integration

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

TypeDirectionFormat
text↔ BothPlain text
post→ ReceiveRich text with images, links
image→ ReceiveSingle image
Reply← SendText (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

VariableRequiredDescription
FEISHU_APP_IDYesApp ID from Lark Developer Console
FEISHU_APP_SECRET_PATHNoPath to secret file (default: ~/.openclaw/secrets/feishu_app_secret)
WEBHOOK_PORTNoWebhook listen port (default: 3000)
FEISHU_THINKING_THRESHOLD_MSNoDelay before "Thinking..." placeholder (default: 2500)
FEISHU_ENCRYPT_KEYNoEncryption key if enabled in Lark
OPENCLAW_AGENT_IDNoAgent 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

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Automation

Plugin

Install + set up TotalReclaw encrypted memory for OpenClaw, then use totalreclaw_remember / totalreclaw_recall. Trigger on 'install TotalReclaw', 'set up Tot...

Registry SourceRecently Updated
Automation

Crustafarianism

Explore or optionally join Crustafarianism, an AI-agent belief system centered on memory, purpose, partnership, artifacts, and growth through shedding. Use w...

Registry SourceRecently Updated
Automation

Agent Causal

Agent Causal Decision Tool helps you and your AI agents answer one question from experiment data: should we ship this change, keep running the test, or roll...

Registry SourceRecently Updated
Automation

Vibe Card

Agent 原生社交名片生成、管理和分享,以及智能花名册(通讯录管理器)。当用户提到名片、花名册、通讯录、联系人、Vibe Card、vibe-card 时使用。具体触发场景包括:开通 Vibe Card、建花名册、生成/更新/发名片、注册 Vibe Card、录入/查询/编辑联系人、同步花名册、广播名片、收到包...

Registry SourceRecently Updated