Feishu is an IM channel, not a tool. Rename the directory to better reflect its purpose. Also add links in CN and JA READMEs.
11 KiB
Feishu / Lark Bot Configuration Guide
This guide walks through setting up a Feishu (or Lark) bot to work with MimiClaw, turning your ESP32-S3 into a Feishu-connected AI assistant.
Table of Contents
- Overview
- Prerequisites
- Step 1: Create a Feishu App
- Step 2: Configure App Permissions
- Step 3: Set Up Event Subscription
- Step 4: Configure MimiClaw
- Step 5: Network Setup
- Step 6: Publish and Test
- Architecture
- CLI Commands
- Troubleshooting
- References
Overview
MimiClaw supports Feishu as a messaging channel alongside Telegram and WebSocket. The Feishu integration uses:
- Webhook receiver — the ESP32 runs an HTTP server on port 18790 to receive messages from Feishu
- Send API — MimiClaw sends replies via Feishu's REST API (
/im/v1/messages) - Tenant access token — automatic token management with background refresh
Both direct messages (P2P) and group chats are supported.
Prerequisites
- A Feishu account (sign up at feishu.cn) or a Lark account (larksuite.com)
- Admin access to create apps on Feishu Open Platform (or Lark Developer)
- MimiClaw flashed on an ESP32-S3 with network access
- The ESP32 must be reachable from the internet (see Network Setup)
Step 1: Create a Feishu App
- Go to Feishu Open Platform and sign in
- Click Create Custom App (or "Create App" on Lark)
- Fill in the app details:
- App Name: Choose a name (e.g., "MimiClaw Bot")
- App Description: Brief description of your bot
- App Icon: Upload an icon (optional)
- After creation, you will see your App ID and App Secret on the app's Credentials & Basic Info page
Important: Save the App ID (
cli_xxxxxxxxxxxxxx) and App Secret (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx). You will need these to configure MimiClaw.
Step 2: Configure App Permissions
In your app's settings, go to Permissions & Scopes and add these required permissions:
| Permission | Scope ID | Description |
|---|---|---|
| Read/Send messages | im:message |
Receive and send messages |
| Send messages as bot | im:message:send_as_bot |
Send messages as the bot identity |
To add permissions:
- Navigate to Permissions & Scopes in the left sidebar
- Search for each scope ID listed above
- Click Add next to each permission
- The permissions will take effect after you publish or update the app version
Note: On Lark (international version), the permission names may differ slightly, but the scope IDs are the same.
Step 3: Set Up Event Subscription
Event subscription allows Feishu to push new messages to your ESP32 in real-time.
Configure the Webhook URL
- In your app settings, go to Event Subscriptions (or "Events & Callbacks")
- Set the Request URL to:
http://<ESP32_IP>:18790/feishu/events
Replace <ESP32_IP> with your ESP32's public IP or domain name.
- Click Save — Feishu will send a verification challenge to the URL
- MimiClaw automatically responds to the URL verification challenge, so this should succeed if the ESP32 is reachable
Subscribe to Events
Add the following event:
| Event | Event ID | Description |
|---|---|---|
| Receive messages | im.message.receive_v1 |
Triggered when users send messages to the bot |
To add events:
- In the Event Subscriptions page, click Add Event
- Search for
im.message.receive_v1 - Select it and click Confirm
Encryption Settings (Optional)
In the event subscription settings, you can optionally configure:
- Verification Token — used to verify that events come from Feishu
- Encrypt Key — encrypts event payloads
MimiClaw currently does not verify these tokens, so you can leave them empty for simplicity. For production use, consider implementing verification.
Step 4: Configure MimiClaw
You need to provide the App ID and App Secret to MimiClaw.
Option 1: Build-time Configuration
- Copy the secrets template if you haven't already:
cp main/mimi_secrets.h.example main/mimi_secrets.h
- Edit
main/mimi_secrets.h:
#define MIMI_SECRET_FEISHU_APP_ID "cli_xxxxxxxxxxxxxx"
#define MIMI_SECRET_FEISHU_APP_SECRET "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
- Rebuild and flash:
idf.py fullclean && idf.py build
idf.py -p PORT flash monitor
Option 2: Runtime Configuration via Serial CLI
Connect to the UART (COM) port and run:
mimi> set_feishu_creds cli_xxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
This saves credentials to NVS flash immediately — no rebuild needed.
Verify Configuration
mimi> config_show
You should see feishu_app_id: cli_**** and feishu_app_secret: **** in the output.
Step 5: Network Setup
Feishu's servers need to reach your ESP32's webhook endpoint. There are several approaches:
Option A: Direct Public IP
If your ESP32 is directly accessible from the internet:
Webhook URL: http://<PUBLIC_IP>:18790/feishu/events
Option B: Port Forwarding
If the ESP32 is behind a router:
- Log into your router's admin panel
- Forward external port (e.g., 18790) to
<ESP32_LOCAL_IP>:18790 - Use your router's public IP in the webhook URL
Option C: Reverse Proxy / Tunnel
For development or when port forwarding isn't possible:
- ngrok:
ngrok http <ESP32_IP>:18790 - frp: Configure
frpc.tomlto proxy to the ESP32 - Cloudflare Tunnel: Route traffic through Cloudflare
Example with ngrok:
ngrok http 192.168.1.100:18790
# Use the generated URL: https://xxxx.ngrok.io/feishu/events
Option D: Cloud Server Relay (Production)
For reliable production setups, deploy a lightweight reverse proxy on a cloud server (e.g., Volcengine ECS, AWS EC2) that forwards requests to your ESP32 via a VPN or WireGuard tunnel. This is the approach described in the Volcengine OpenClaw deployment guide.
Note: Feishu requires the webhook URL to be accessible and respond within 3 seconds. Ensure your network path has low latency.
Step 6: Publish and Test
Enable the Bot
- In your app settings, go to Bot in the left sidebar
- Toggle Enable Bot to ON
Publish the App
- Go to App Release (or "Version Management & Release")
- Click Create Version
- Set a version number and description
- Click Submit for Review (for enterprise apps) or Publish (for personal testing apps)
Tip: For testing, you can use the app in "development mode" without publishing — just add yourself as a test user.
Test the Bot
- Open Feishu and search for your bot by name
- Send a message to the bot in a direct chat
- Check the ESP32 serial output — you should see the message being received and processed
- The bot should reply through Feishu
For group chats:
- Add the bot to a group
- Mention the bot with
@BotNamefollowed by your message - The bot will process and reply in the group
Architecture
Feishu Cloud
|
| HTTP POST /feishu/events
| (im.message.receive_v1)
v
[ESP32 Webhook Server :18790]
|
| message_bus_push_inbound()
v
[Message Bus] ──> [Agent Loop] ──> [Message Bus]
(Claude/GPT) |
| outbound dispatch
v
[feishu_send_message()]
|
| POST /im/v1/messages
v
Feishu API
Key Components
| Component | Description |
|---|---|
| Webhook Server | HTTP server on port 18790, handles event callbacks |
| Token Manager | Manages tenant access tokens, auto-refreshes before expiry |
| Message Sender | Sends text messages via Feishu REST API with auto-chunking |
| Deduplication | Prevents processing duplicate events from Feishu retries |
Configuration Constants
These can be found in main/mimi_config.h:
| Constant | Default | Description |
|---|---|---|
MIMI_FEISHU_MAX_MSG_LEN |
4096 | Max message length per chunk |
MIMI_FEISHU_WEBHOOK_PORT |
18790 | Webhook HTTP server port |
MIMI_FEISHU_WEBHOOK_PATH |
/feishu/events |
Webhook endpoint path |
MIMI_FEISHU_WEBHOOK_MAX_BODY |
16 KB | Max webhook request body size |
CLI Commands
| Command | Description |
|---|---|
set_feishu_creds <app_id> <app_secret> |
Save Feishu credentials to NVS |
config_show |
Show all configuration (including Feishu, masked) |
config_reset |
Clear all NVS config, revert to build-time defaults |
Troubleshooting
Webhook URL verification fails
- Ensure the ESP32 is running and connected to WiFi:
wifi_status - Verify the webhook URL is reachable from the internet
- Check that port 18790 is not blocked by firewalls
- Look at ESP32 serial output for incoming HTTP requests
Bot doesn't respond to messages
- Check credentials:
config_showshould show Feishu app_id and app_secret - Check event subscription: Ensure
im.message.receive_v1is subscribed in the Feishu app settings - Check permissions: Both
im:messageandim:message:send_as_botmust be granted - Check serial output: Look for message processing logs on the ESP32
"Tenant access token" errors
- Verify your App ID and App Secret are correct
- The token auto-refreshes every 2 hours — if you just set credentials, wait a moment for the first token fetch
- Ensure the ESP32 can reach
https://open.feishu.cn(check proxy settings if needed)
Messages are truncated
Feishu has a 4096-character limit per message. MimiClaw automatically chunks long messages, but if you see issues, check the serial output for chunking errors.
Bot works in DM but not in groups
- Ensure the bot is added to the group
- Users must
@mentionthe bot in group chats for it to receive messages - Check that group messaging permissions are enabled in the Feishu app settings
Event subscription shows errors in Feishu console
- Feishu retries failed events up to 5 times with exponential backoff
- MimiClaw deduplicates retried events, so duplicate processing is not a concern
- If events consistently fail, check the ESP32's network connectivity