Regional platforms
Feishu
Feishu/Lark to wszechstronna platforma do współpracy, w której zespoły czatują, udostępniają dokumenty, zarządzają kalendarzami i wspólnie wykonują pracę.
Status: gotowe do produkcji dla DM-ów bota i czatów grupowych. WebSocket jest trybem domyślnym; tryb webhook jest opcjonalny.
Szybki start
Uruchom kreator konfiguracji kanału
openclaw channels login --channel feishuWybierz konfigurację ręczną, aby wkleić App ID i App Secret z Feishu Open Platform, albo wybierz konfigurację QR, aby automatycznie utworzyć bota. Jeśli krajowa aplikacja mobilna Feishu nie reaguje na kod QR, uruchom konfigurację ponownie i wybierz konfigurację ręczną.
Po zakończeniu konfiguracji uruchom ponownie Gateway, aby zastosować zmiany
openclaw gateway restartKontrola dostępu
Wiadomości prywatne
Skonfiguruj dmPolicy, aby kontrolować, kto może wysyłać DM-y do bota:
"pairing"- nieznani użytkownicy otrzymują kod parowania; zatwierdź przez CLI"allowlist"- czatować mogą tylko użytkownicy wymienieni wallowFrom"open"- zezwól na publiczne DM-y tylko wtedy, gdyallowFromzawiera"*"; przy wpisach restrykcyjnych czatować mogą tylko pasujący użytkownicy
Zatwierdź prośbę o sparowanie:
openclaw pairing list feishuopenclaw pairing approve feishu <CODE>Czaty grupowe
Zasady grup (channels.feishu.groupPolicy):
| Wartość | Zachowanie |
|---|---|
"open" |
Odpowiadaj na wszystkie wiadomości w grupach |
"allowlist" |
Odpowiadaj tylko w grupach z groupAllowFrom lub jawnie skonfigurowanych w groups.<chat_id> |
"disabled" |
Wyłącz wszystkie wiadomości grupowe; jawne wpisy groups.<chat_id> tego nie nadpisują |
Domyślnie: allowlist
Wymaganie wzmianki (channels.feishu.requireMention):
true- wymagaj @wzmianki (domyślnie)false- odpowiadaj bez @wzmianki- Nadpisanie dla grupy:
channels.feishu.groups.<chat_id>.requireMention - Wzmianki rozgłoszeniowe
@alli@_allnie są traktowane jako wzmianki o bocie. Wiadomość, która zawiera zarówno@all, jak i bezpośrednią wzmiankę o bocie, nadal liczy się jako wzmianka o bocie.
Przykłady konfiguracji grup
Zezwól na wszystkie grupy, bez wymaganej @wzmianki
{ channels: { feishu: { groupPolicy: "open", }, },}Zezwól na wszystkie grupy, nadal wymagaj @wzmianki
{ channels: { feishu: { groupPolicy: "open", requireMention: true, }, },}Zezwól tylko na konkretne grupy
{ channels: { feishu: { groupPolicy: "allowlist", // Group IDs look like: oc_xxx groupAllowFrom: ["oc_xxx", "oc_yyy"], }, },}W trybie allowlist możesz także dopuścić grupę, dodając jawny wpis groups.<chat_id>. Jawne wpisy nie nadpisują groupPolicy: "disabled". Domyślne wartości z symbolem wieloznacznym w groups.* konfigurują pasujące grupy, ale same ich nie dopuszczają.
{ channels: { feishu: { groupPolicy: "allowlist", groups: { oc_xxx: { requireMention: false, }, }, }, },}Ogranicz nadawców w grupie
{ channels: { feishu: { groupPolicy: "allowlist", groupAllowFrom: ["oc_xxx"], groups: { oc_xxx: { // User open_ids look like: ou_xxx allowFrom: ["ou_user1", "ou_user2"], }, }, }, },}Uzyskaj identyfikatory grup/użytkowników
Identyfikatory grup (chat_id, format: oc_xxx)
Otwórz grupę w Feishu/Lark, kliknij ikonę menu w prawym górnym rogu i przejdź do Ustawienia. Identyfikator grupy (chat_id) jest podany na stronie ustawień.

Identyfikatory użytkowników (open_id, format: ou_xxx)
Uruchom Gateway, wyślij DM do bota, a następnie sprawdź logi:
openclaw logs --followPoszukaj open_id w danych wyjściowych logu. Możesz też sprawdzić oczekujące prośby o sparowanie:
openclaw pairing list feishuTypowe polecenia
| Polecenie | Opis |
|---|---|
/status |
Pokaż status bota |
/reset |
Zresetuj bieżącą sesję |
/model |
Pokaż lub przełącz model AI |
Rozwiązywanie problemów
Bot nie odpowiada w czatach grupowych
- Upewnij się, że bot został dodany do grupy
- Upewnij się, że używasz @wzmianki o bocie (domyślnie wymagane)
- Sprawdź, czy
groupPolicynie ma wartości"disabled" - Sprawdź logi:
openclaw logs --follow
Bot nie odbiera wiadomości
- Upewnij się, że bot został opublikowany i zatwierdzony w Feishu Open Platform / Lark Developer
- Upewnij się, że subskrypcja zdarzeń obejmuje
im.message.receive_v1 - Upewnij się, że wybrano połączenie trwałe (WebSocket)
- Upewnij się, że przyznano wszystkie wymagane zakresy uprawnień
- Upewnij się, że Gateway działa:
openclaw gateway status - Sprawdź logi:
openclaw logs --follow
Konfiguracja QR nie reaguje w aplikacji mobilnej Feishu
- Uruchom konfigurację ponownie:
openclaw channels login --channel feishu - Wybierz konfigurację ręczną
- W Feishu Open Platform utwórz aplikację własną i skopiuj jej App ID oraz App Secret
- Wklej te poświadczenia do kreatora konfiguracji
Wyciekł App Secret
- Zresetuj App Secret w Feishu Open Platform / Lark Developer
- Zaktualizuj wartość w swojej konfiguracji
- Uruchom ponownie Gateway:
openclaw gateway restart
Konfiguracja zaawansowana
Wiele kont
{ channels: { feishu: { defaultAccount: "main", accounts: { main: { appId: "cli_xxx", appSecret: "xxx", name: "Primary bot", tts: { providers: { openai: { voice: "shimmer" }, }, }, }, backup: { appId: "cli_yyy", appSecret: "yyy", name: "Backup bot", enabled: false, }, }, }, },}defaultAccount kontroluje, które konto jest używane, gdy wychodzące API nie określają accountId.
accounts.<id>.tts używa tego samego kształtu co messages.tts i jest głęboko scalane z
globalną konfiguracją TTS, dzięki czemu konfiguracje Feishu z wieloma botami mogą zachować współdzielone
poświadczenia dostawcy globalnie, nadpisując tylko głos, model, personę lub tryb automatyczny
dla danego konta.
Limity wiadomości
textChunkLimit- rozmiar wychodzącego fragmentu tekstu (domyślnie:2000znaków)mediaMaxMb- limit przesyłania/pobierania multimediów (domyślnie:30MB)
Strumieniowanie
Feishu/Lark obsługuje odpowiedzi strumieniowe przez interaktywne karty. Po włączeniu bot aktualizuje kartę w czasie rzeczywistym podczas generowania tekstu.
{ channels: { feishu: { streaming: true, // enable streaming card output (default: true) blockStreaming: true, // opt into completed-block streaming }, },}Ustaw streaming: false, aby wysłać pełną odpowiedź w jednej wiadomości. blockStreaming jest domyślnie wyłączone; włącz je tylko wtedy, gdy chcesz wysyłać ukończone bloki asystenta przed końcową odpowiedzią.
Optymalizacja limitów
Zmniejsz liczbę wywołań API Feishu/Lark za pomocą dwóch opcjonalnych flag:
typingIndicator(domyślnietrue): ustawfalse, aby pominąć wywołania reakcji pisaniaresolveSenderNames(domyślnietrue): ustawfalse, aby pominąć wyszukiwanie profili nadawców
{ channels: { feishu: { typingIndicator: false, resolveSenderNames: false, }, },}Sesje ACP
Feishu/Lark obsługuje ACP dla DM-ów i wiadomości w wątkach grupowych. ACP w Feishu/Lark działa przez polecenia tekstowe - nie ma natywnych menu poleceń ukośnikowych, więc używaj wiadomości /acp ... bezpośrednio w rozmowie.
Trwałe powiązanie ACP
{ agents: { list: [ { id: "codex", runtime: { type: "acp", acp: { agent: "codex", backend: "acpx", mode: "persistent", cwd: "/workspace/openclaw", }, }, }, ], }, bindings: [ { type: "acp", agentId: "codex", match: { channel: "feishu", accountId: "default", peer: { kind: "direct", id: "ou_1234567890" }, }, }, { type: "acp", agentId: "codex", match: { channel: "feishu", accountId: "default", peer: { kind: "group", id: "oc_group_chat:topic:om_topic_root" }, }, acp: { label: "codex-feishu-topic" }, }, ],}Uruchom ACP z czatu
W DM-ie lub wątku Feishu/Lark:
/acp spawn codex --thread here--thread here działa dla DM-ów i wiadomości wątków Feishu/Lark. Kolejne wiadomości w powiązanej rozmowie są kierowane bezpośrednio do tej sesji ACP.
Routing wielu agentów
Użyj bindings, aby kierować DM-y lub grupy Feishu/Lark do różnych agentów.
{ agents: { list: [ { id: "main" }, { id: "agent-a", workspace: "/home/user/agent-a" }, { id: "agent-b", workspace: "/home/user/agent-b" }, ], }, bindings: [ { agentId: "agent-a", match: { channel: "feishu", peer: { kind: "direct", id: "ou_xxx" }, }, }, { agentId: "agent-b", match: { channel: "feishu", peer: { kind: "group", id: "oc_zzz" }, }, }, ],}Pola routingu:
match.channel:"feishu"match.peer.kind:"direct"(DM) lub"group"(czat grupowy)match.peer.id: Open ID użytkownika (ou_xxx) lub identyfikator grupy (oc_xxx)
Zobacz Uzyskaj identyfikatory grup/użytkowników, aby poznać wskazówki dotyczące wyszukiwania.
Izolacja agentów dla poszczególnych użytkowników (dynamiczne tworzenie agentów)
Włącz dynamicAgentCreation, aby automatycznie tworzyć izolowane instancje agentów dla każdego użytkownika DM. Każdy użytkownik otrzymuje własne:
- Niezależny katalog workspace
- Osobne
USER.md/SOUL.md/MEMORY.md - Prywatną historię rozmów
- Izolowane Skills i stan
Jest to niezbędne dla publicznych botów, gdy chcesz zapewnić każdemu użytkownikowi własne, prywatne doświadczenie asystenta AI.
Szybka konfiguracja
{ channels: { feishu: { dmPolicy: "open", allowFrom: ["*"], dynamicAgentCreation: { enabled: true, workspaceTemplate: "~/.openclaw/workspace-{agentId}", agentDirTemplate: "~/.openclaw/agents/{agentId}/agent", }, }, }, session: { // Critical: makes each user's DM their "main session" // Automatically loads USER.md / SOUL.md / MEMORY.md // For stronger isolation, use "per-channel-peer" instead dmScope: "main", },}Jak to działa
Gdy nowy użytkownik wysyła pierwszy DM:
- Kanał generuje unikalne
agentId:feishu-{user_open_id}dla konta domyślnego albo ograniczony skrót tożsamości z prefiksem konta dla konta nazwanego - Tworzy nowy workspace w ścieżce
workspaceTemplate - Rejestruje agenta i tworzy powiązanie dla tego użytkownika
- Pomocnik workspace zapewnia pliki inicjalizacyjne (
AGENTS.md,SOUL.md,USER.mditd.) przy pierwszym dostępie - Kieruje wszystkie przyszłe wiadomości od tego użytkownika do jego dedykowanego agenta
Opcje konfiguracji
| Ustawienie | Opis | Domyślnie |
|---|---|---|
channels.feishu.dynamicAgentCreation.enabled |
Włącz automatyczne tworzenie agentów na użytkownika | false |
channels.feishu.dynamicAgentCreation.workspaceTemplate |
Szablon ścieżki dla dynamicznych obszarów roboczych agentów | ~/.openclaw/workspace-{agentId} |
channels.feishu.dynamicAgentCreation.agentDirTemplate |
Szablon nazwy katalogu agenta | ~/.openclaw/agents/{agentId}/agent |
channels.feishu.dynamicAgentCreation.maxAgents |
Maksymalna liczba dynamicznych agentów do utworzenia | bez ograniczeń |
Zmienne szablonu:
{agentId}- wygenerowany identyfikator agenta (np.feishu-ou_xxxxxxlubfeishu-support-<identity_digest>){userId}- Feishuopen_idnadawcy (np.ou_xxxxxx)
Zakres sesji
session.dmScope kontroluje sposób mapowania wiadomości bezpośrednich na sesje agentów. To jest ustawienie globalne, które wpływa na wszystkie kanały.
| Wartość | Zachowanie | Najlepsze dla |
|---|---|---|
"main" |
DM każdego użytkownika mapuje się na główną sesję jego agenta | Boty jednego użytkownika, gdy chcesz automatycznie ładować USER.md / SOUL.md |
"per-channel-peer" |
Każda kombinacja (kanał + użytkownik) otrzymuje osobną sesję | Publiczne boty wieloużytkownikowe wymagające silniejszej izolacji |
"per-account-channel-peer" |
Każda kombinacja (konto + kanał + użytkownik) otrzymuje osobną sesję | Boty wielokontowe wymagające izolacji sesji na poziomie konta |
Kompromis: użycie "main" włącza automatyczne ładowanie plików startowych (USER.md, SOUL.md, MEMORY.md), ale oznacza, że wszystkie DM we wszystkich kanałach współdzielą ten sam wzorzec klucza sesji. W przypadku publicznych botów wieloużytkownikowych, gdzie izolacja jest ważniejsza niż automatyczne ładowanie plików startowych, rozważ "per-channel-peer" i zarządzaj plikami startowymi ręcznie.
{ session: { // For single-user personal bots: enables auto bootstrap loading dmScope: "main", // For public multi-user bots: stronger isolation // dmScope: "per-channel-peer", },}Typowe wdrożenie wieloużytkownikowe
{ channels: { feishu: { appId: "cli_xxx", appSecret: "xxx", dmPolicy: "open", allowFrom: ["*"], groupPolicy: "open", requireMention: true, dynamicAgentCreation: { enabled: true, workspaceTemplate: "~/.openclaw/workspace-{agentId}", agentDirTemplate: "~/.openclaw/agents/{agentId}/agent", }, }, }, session: { // Choose dmScope based on your isolation needs: // "main" for bootstrap auto-loading, "per-channel-peer" for stronger isolation dmScope: "main", }, bindings: [], // Empty - dynamic agents auto-bind}Weryfikacja
Sprawdź logi Gateway, aby potwierdzić, że dynamiczne tworzenie działa:
feishu: creating dynamic agent "feishu-ou_xxxxxx" for user ou_xxxxxxworkspace: /Users/you/.openclaw/workspace-feishu-ou_xxxxxxfeishu: dynamic agent created, new route: agent:feishu-ou_xxxxxx:mainWyświetl listę wszystkich utworzonych obszarów roboczych:
ls -la ~/.openclaw/workspace-*Uwagi
- Izolacja obszaru roboczego: każdy użytkownik otrzymuje własny katalog obszaru roboczego i instancję agenta. Użytkownicy nie widzą historii rozmów ani plików innych użytkowników w normalnym przepływie wiadomości.
- Granica bezpieczeństwa: to mechanizm izolacji kontekstu wiadomości, a nie granica bezpieczeństwa między wrogimi współdzierżawcami. Proces agenta i środowisko hosta są współdzielone.
bindingspowinno być puste: dynamiczni agenci automatycznie rejestrują własne powiązania- Ścieżka aktualizacji: istniejące ręczne powiązania nadal działają równolegle z dynamicznymi agentami
session.dmScopejest globalne: wpływa to na wszystkie kanały, nie tylko Feishu
Dokumentacja konfiguracji
Pełna konfiguracja: Konfiguracja Gateway
| Ustawienie | Opis | Domyślnie |
|---|---|---|
channels.feishu.enabled |
Włącz/wyłącz kanał | true |
channels.feishu.domain |
Domena API (feishu lub lark) |
feishu |
channels.feishu.connectionMode |
Transport zdarzeń (websocket lub webhook) |
websocket |
channels.feishu.defaultAccount |
Domyślne konto dla routingu wychodzącego | default |
channels.feishu.verificationToken |
Wymagane w trybie Webhook | - |
channels.feishu.encryptKey |
Wymagane w trybie Webhook | - |
channels.feishu.webhookPath |
Ścieżka trasy Webhook | /feishu/events |
channels.feishu.webhookHost |
Host powiązania Webhook | 127.0.0.1 |
channels.feishu.webhookPort |
Port powiązania Webhook | 3000 |
channels.feishu.accounts.<id>.appId |
ID aplikacji | - |
channels.feishu.accounts.<id>.appSecret |
Sekret aplikacji | - |
channels.feishu.accounts.<id>.domain |
Nadpisanie domeny dla konta | feishu |
channels.feishu.accounts.<id>.tts |
Nadpisanie TTS dla konta | messages.tts |
channels.feishu.dmPolicy |
Zasady DM | pairing |
channels.feishu.allowFrom |
Lista dozwolonych DM (lista open_id) |
- |
channels.feishu.groupPolicy |
Zasady grup | allowlist |
channels.feishu.groupAllowFrom |
Lista dozwolonych grup | - |
channels.feishu.requireMention |
Wymagaj @wzmianki w grupach | true |
channels.feishu.groups.<chat_id>.requireMention |
Nadpisanie @wzmianki dla grupy; jawne identyfikatory dopuszczają też grupę w trybie listy dozwolonych | dziedziczone |
channels.feishu.groups.<chat_id>.enabled |
Włącz/wyłącz konkretną grupę | true |
channels.feishu.dynamicAgentCreation.enabled |
Włącz automatyczne tworzenie agentów na użytkownika | false |
channels.feishu.dynamicAgentCreation.workspaceTemplate |
Szablon ścieżki dla dynamicznych obszarów roboczych agentów | ~/.openclaw/workspace-{agentId} |
channels.feishu.dynamicAgentCreation.agentDirTemplate |
Szablon nazwy katalogu agenta | ~/.openclaw/agents/{agentId}/agent |
channels.feishu.dynamicAgentCreation.maxAgents |
Maksymalna liczba dynamicznych agentów do utworzenia | bez ograniczeń |
channels.feishu.textChunkLimit |
Rozmiar fragmentu wiadomości | 2000 |
channels.feishu.mediaMaxMb |
Limit rozmiaru mediów | 30 |
channels.feishu.streaming |
Wyjście kart strumieniowych | true |
channels.feishu.blockStreaming |
Strumieniowanie odpowiedzi w ukończonych blokach | false |
channels.feishu.typingIndicator |
Wysyłaj reakcje pisania | true |
channels.feishu.resolveSenderNames |
Rozwiązuj wyświetlane nazwy nadawców | true |
channels.feishu.tools.bitable |
Włącz narzędzia Bitable/Base | true |
channels.feishu.tools.base |
Alias dla channels.feishu.tools.bitable; jawne bitable wygrywa, gdy ustawione są oba |
true |
channels.feishu.accounts.<id>.tools.bitable |
Bramka narzędzi Bitable/Base dla konta | dziedziczone |
channels.feishu.accounts.<id>.tools.base |
Alias dla tools.bitable dla konta |
dziedziczone |
Obsługiwane typy wiadomości
Odbieranie
- ✅ Tekst
- ✅ Tekst sformatowany (post)
- ✅ Obrazy
- ✅ Pliki
- ✅ Audio
- ✅ Wideo/media
- ✅ Naklejki
Przychodzące wiadomości audio Feishu/Lark są normalizowane jako symbole zastępcze mediów zamiast surowego JSON file_key. Gdy skonfigurowane jest tools.media.audio, OpenClaw pobiera zasób notatki głosowej i uruchamia współdzieloną transkrypcję audio przed turą agenta, dzięki czemu agent otrzymuje transkrypcję wypowiedzi. Jeśli Feishu zawiera tekst transkrypcji bezpośrednio w ładunku audio, ten tekst jest używany bez kolejnego wywołania ASR. Bez dostawcy transkrypcji audio agent nadal otrzymuje symbol zastępczy <media:audio> oraz zapisany załącznik, a nie surowy ładunek zasobu Feishu.
Wysyłanie
- ✅ Tekst
- ✅ Obrazy
- ✅ Pliki
- ✅ Audio
- ✅ Wideo/media
- ✅ Karty interaktywne (w tym aktualizacje strumieniowe)
- ⚠️ Tekst sformatowany (formatowanie w stylu posta; nie obsługuje pełnych możliwości autorskich Feishu/Lark)
Natywne dymki audio Feishu/Lark używają typu wiadomości Feishu audio i wymagają
przesłania multimediów Ogg/Opus (file_type: "opus"). Istniejące multimedia .opus i .ogg
są wysyłane bezpośrednio jako natywne audio. MP3/WAV/M4A i inne prawdopodobne formaty audio są
transkodowane do Ogg/Opus 48 kHz za pomocą ffmpeg tylko wtedy, gdy odpowiedź żąda dostarczenia głosowego
(audioAsVoice / narzędzie wiadomości asVoice, w tym odpowiedzi TTS w formie notatki głosowej).
Zwykłe załączniki MP3 pozostają zwykłymi plikami. Jeśli brakuje ffmpeg lub
konwersja się nie powiedzie, OpenClaw wraca do załącznika plikowego i rejestruje powód.
Wątki i odpowiedzi
- ✅ Odpowiedzi w linii
- ✅ Odpowiedzi w wątku
- ✅ Odpowiedzi z mediami zachowują świadomość wątku podczas odpowiadania na wiadomość w wątku
Dla groupSessionScope: "group_topic" i "group_topic_sender" natywne
grupy tematów Feishu/Lark używają zdarzenia thread_id (omt_*) jako kanonicznego
klucza sesji tematu. Jeśli natywne zdarzenie rozpoczynające temat pomija thread_id, OpenClaw
uzupełnia je z Feishu przed skierowaniem tury. Zwykłe odpowiedzi grupowe, które
OpenClaw przekształca w wątki, nadal używają identyfikatora wiadomości głównej odpowiedzi (om_*), aby
pierwsza tura i tura uzupełniająca pozostały w tej samej sesji.
Powiązane
- Przegląd kanałów - wszystkie obsługiwane kanały
- Parowanie - przepływ uwierzytelniania i parowania w DM
- Grupy - zachowanie czatu grupowego i bramkowanie wzmianek
- Routing kanałów - routing sesji dla wiadomości
- Bezpieczeństwo - model dostępu i utwardzanie