@openclaw/feishu: wiadomości prywatne z botem, czaty grupowe, strumieniowe odpowiedzi w kartach oraz narzędzia Feishu do dokumentów, wiki, dysku i Bitable.
Stan: gotowe do użytku produkcyjnego w przypadku wiadomości prywatnych z botem i czatów grupowych. WebSocket jest domyślnym transportem zdarzeń (publiczny adres URL nie jest wymagany); tryb webhooka jest opcjonalny.
Szybki start
Wymaga OpenClaw 2026.5.29 lub nowszej wersji. Uruchom
openclaw --version, aby sprawdzić wersję. Zaktualizuj za pomocą openclaw update.1
Uruchom kreator konfiguracji kanału
@openclaw/feishu, jeśli go brakuje, a następnie przeprowadzenie przez konfigurację:- Konfiguracja ręczna: wklej App ID i App Secret z Feishu Open Platform (
https://open.feishu.cn) lub Lark Developer (https://open.larksuite.com). - Konfiguracja za pomocą kodu QR: zeskanuj kod QR w aplikacji Feishu, aby automatycznie utworzyć bota. Ten proces ogranicza wiadomości prywatne do własnego konta (
dmPolicy: "allowlist"z własnymopen_id).
2
Po zakończeniu konfiguracji uruchom ponownie Gateway, aby zastosować zmiany
Kontrola dostępu
Wiadomości prywatne
Skonfigurujchannels.feishu.dmPolicy (domyślnie: pairing), aby określić, kto może wysyłać botowi wiadomości prywatne:
Zatwierdzanie żądania parowania:
Czaty grupowe
Zasady grup (channels.feishu.groupPolicy, domyślnie: allowlist):
Wymóg wzmianki (
channels.feishu.requireMention):
- Domyślnie: wymagana jest @wzmianka, z wyjątkiem sytuacji, gdy obowiązującą zasadą grup jest
"open"; wtedy wartością domyślną jestfalse, dzięki czemu wiadomości, które nie mogą zawierać wzmianek (na przykład obrazy), nadal docierają do agenta. - Aby zastąpić to ustawienie, jawnie ustaw
truelubfalse; ustawienie dla poszczególnych grup:channels.feishu.groups.<chat_id>.requireMention. - Wzmianki służące wyłącznie do rozgłaszania,
@alli@_all, nie są traktowane jako wzmianki o bocie. Wiadomość zawierająca zarówno wzmiankę@all, jak i bezpośrednią wzmiankę o bocie nadal jest uznawana za wzmiankę o bocie.
Przykłady konfiguracji grup
Zezwalanie na wszystkie grupy bez wymagania @wzmianki
Zezwalanie na wszystkie grupy z nadal wymaganą @wzmianką
Zezwalanie tylko na określone grupy
allowlist można również dopuścić grupę, dodając jawny wpis groups.<chat_id>. Jawne wpisy nie zastępują groupPolicy: "disabled". Domyślne ustawienia z symbolem wieloznacznym w groups.* konfigurują pasujące grupy, ale same ich nie dopuszczają.
Ograniczanie nadawców w grupie
channels.feishu.groupSenderAllowFrom ustawia tę samą listę dozwolonych nadawców dla wszystkich grup; ustawienie allowFrom dla konkretnej grupy ma pierwszeństwo.
Uzyskiwanie identyfikatorów grup i 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 Settings. Identyfikator grupy (chat_id) znajduje się na stronie ustawień.

Identyfikatory użytkowników (open_id, format: ou_xxx)
Uruchom Gateway, wyślij botowi wiadomość prywatną, a następnie sprawdź dzienniki:
open_id. Można również sprawdzić oczekujące żądania parowania:
Typowe polecenia
Feishu/Lark nie obsługuje natywnych menu poleceń rozpoczynających się ukośnikiem, dlatego należy wysyłać te polecenia jako zwykłe wiadomości tekstowe.
Rozwiązywanie problemów
Bot nie odpowiada na czatach grupowych
- Upewnij się, że bot został dodany do grupy
- Upewnij się, że użyto @wzmianki o bocie (domyślnie wymagane)
- Sprawdź, czy
groupPolicynie ma wartości"disabled" - Sprawdź dzienniki:
openclaw logs --follow
Bot nie otrzymuje 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 persistent connection (WebSocket)
- Upewnij się, że przyznano wszystkie wymagane zakresy uprawnień
- Upewnij się, że Gateway działa:
openclaw gateway status - Sprawdź dzienniki:
openclaw logs --follow
Konfiguracja za pomocą kodu QR nie wywołuje reakcji 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 dane uwierzytelniające w kreatorze konfiguracji
Wyciek App Secret
- Zresetuj App Secret w Feishu Open Platform / Lark Developer
- Zaktualizuj wartość w konfiguracji
- Uruchom ponownie Gateway:
openclaw gateway restart
Konfiguracja zaawansowana
Wiele kont
defaultAccount określa, które konto jest używane, gdy wychodzące interfejsy API nie podają accountId. Wpisy kont dziedziczą ustawienia najwyższego poziomu; większość kluczy najwyższego poziomu można zastąpić dla poszczególnych kont.
accounts.<id>.tts ma taką samą strukturę jak messages.tts i jest głęboko scalane z globalną konfiguracją TTS, dzięki czemu konfiguracje Feishu z wieloma botami mogą przechowywać wspólne dane uwierzytelniające dostawców globalnie, zastępując dla poszczególnych kont tylko głos, model, personę lub tryb automatyczny.
Limity wiadomości
textChunkLimit— rozmiar fragmentu tekstu wychodzącego (domyślnie:4000znaków)streaming.chunkMode—"length"(domyślnie) dzieli tekst po osiągnięciu limitu;"newline"preferuje granice nowych wierszymediaMaxMb— limit wysyłania i pobierania multimediów (domyślnie:30MB)
Przesyłanie strumieniowe
Feishu/Lark obsługuje odpowiedzi strumieniowe za pomocą kart interaktywnych (interfejs API przesyłania strumieniowego Card Kit). Po włączeniu bot aktualizuje kartę w czasie rzeczywistym podczas generowania tekstu.streaming.mode: "off", aby wysyłać pełną odpowiedź w jednej wiadomości; renderMode: "raw" (zwykły tekst zamiast kart) również wyłącza karty strumieniowe. streaming.block.enabled jest domyślnie wyłączone; należy je włączyć tylko wtedy, gdy ukończone bloki asystenta mają być wysyłane przed odpowiedzią końcową. Starsza wartość logiczna streaming oraz płaskie klucze blockStreaming / blockStreamingCoalesce / chunkMode są migrowane do tej zagnieżdżonej struktury za pomocą openclaw doctor --fix.
Optymalizacja limitu użycia
Liczbę wywołań interfejsu API Feishu/Lark można ograniczyć za pomocą dwóch opcjonalnych flag:typingIndicator(domyślnietrue): ustawfalse, aby pomijać wywołania reakcji sygnalizującej pisanieresolveSenderNames(domyślnietrue): ustawfalse, aby pomijać wyszukiwanie profilu nadawcy
Zakres sesji grupowej i wątki tematyczne
channels.feishu.groupSessionScope (na najwyższym poziomie, dla poszczególnych kont lub grup) określa sposób mapowania wiadomości grupowych na sesje agenta:
W przypadku zakresów tematycznych natywne grupy tematyczne Feishu/Lark używają zdarzenia
thread_id (omt_*) jako kanonicznego klucza sesji tematu. Jeśli natywne zdarzenie rozpoczynające temat nie zawiera thread_id, OpenClaw pobiera tę wartość z Feishu przed przekierowaniem tury. Zwykłe odpowiedzi grupowe przekształcane przez OpenClaw w wątki nadal używają identyfikatora wiadomości głównej odpowiedzi (om_*), dzięki czemu pierwsza i kolejne tury pozostają w tej samej sesji.
Ustaw replyInThread: "enabled" (na najwyższym poziomie lub dla poszczególnych grup), aby odpowiedzi bota tworzyły lub kontynuowały wątek tematyczny Feishu zamiast odpowiadać bezpośrednio. topicSessionMode jest przestarzałym poprzednikiem groupSessionScope; preferowane jest groupSessionScope.
Narzędzia przestrzeni roboczej Feishu
Plugin zawiera narzędzia agenta do dokumentów Feishu, czatów, bazy wiedzy, pamięci masowej w chmurze, uprawnień i Bitable, a także odpowiadające im Skills (feishu-doc, feishu-drive, feishu-perm, feishu-wiki). Rodziny narzędzi są kontrolowane przez channels.feishu.tools:
tools.base jest aliasem tools.bitable; gdy ustawiono obie wartości, pierwszeństwo ma jawna wartość bitable. Ograniczenia dla poszczególnych kont znajdują się w accounts.<id>.tools.
Należy przyznać drive:drive.metadata:readonly na potrzeby bezpośrednich wyszukiwań feishu_drive info poza katalogiem głównym,
chyba że aplikacja ma już pełny zakres drive:drive. Bez żadnego z tych zakresów info
zachowuje dotychczasowe wyszukiwanie w katalogu głównym dostępne przez drive:drive:readonly.
Sesje ACP
Feishu/Lark obsługuje ACP dla wiadomości prywatnych i wiadomości w wątkach grupowych. ACP w Feishu/Lark jest sterowane poleceniami tekstowymi — nie ma natywnych menu poleceń z ukośnikiem, dlatego wiadomości/acp ... należy wpisywać bezpośrednio w rozmowie.
Trwałe powiązanie ACP
Uruchamianie ACP z czatu
W wiadomości prywatnej lub wątku Feishu/Lark:--thread here działa w wiadomościach prywatnych i wiadomościach w wątkach Feishu/Lark. Kolejne wiadomości w powiązanej rozmowie są kierowane bezpośrednio do tej sesji ACP.
Kierowanie do wielu agentów
Należy użyćbindings, aby kierować wiadomości prywatne lub grupy Feishu/Lark do różnych agentów.
match.channel:"feishu"match.peer.kind:"direct"(wiadomość prywatna) lub"group"(czat grupowy)match.peer.id: identyfikator Open ID użytkownika (ou_xxx) lub identyfikator grupy (oc_xxx)
Izolacja agenta dla każdego użytkownika (dynamiczne tworzenie agentów)
Należy włączyćdynamicAgentCreation, aby automatycznie tworzyć izolowane instancje agentów dla każdego użytkownika wiadomości prywatnych. Każdy użytkownik otrzymuje własne:
- Niezależny katalog przestrzeni roboczej
- Oddzielne
USER.md/SOUL.md/MEMORY.md - Prywatną historię rozmów
- Izolowane umiejętności i stan
Dynamiczne powiązania zawierają znormalizowane
accountId Feishu, dzięki czemu konta domyślne i nazwane kierują każdego nadawcę do właściwego dynamicznego agenta.Jeśli nazwane konto utworzyło we wcześniejszej wersji dynamicznego agenta bez zakresu, ten dotychczasowy agent nadal wlicza się do maxAgents. Przed jego usunięciem należy potwierdzić, że konto domyślne go nie używa, lub tymczasowo zwiększyć maxAgents; OpenClaw nie może bezpiecznie ustalić, do którego konta należy niejednoznaczny dotychczasowy stan.Szybka konfiguracja
Jak to działa
Gdy nowy użytkownik wysyła pierwszą wiadomość prywatną:- Kanał generuje unikatowy
agentId:feishu-{user_open_id}dla konta domyślnego albo ograniczony skrót tożsamości z prefiksem konta dla konta nazwanego - Tworzy nową przestrzeń roboczą w ścieżce
workspaceTemplate - Rejestruje agenta i tworzy powiązanie dla tego użytkownika
- Przy pierwszym dostępie pomocnik przestrzeni roboczej zapewnia obecność plików inicjalizacyjnych (
AGENTS.md,SOUL.md,USER.mditd.) - Kieruje wszystkie przyszłe wiadomości tego użytkownika do jego dedykowanego agenta
Opcje konfiguracji
Zmienne szablonu:
{agentId}— wygenerowany identyfikator agenta (np.feishu-ou_xxxxxxlubfeishu-support-<identity_digest>){userId}— identyfikator open_id nadawcy w Feishu (np.ou_xxxxxx)
Zakres sesji
session.dmScope określa sposób mapowania wiadomości prywatnych na sesje agentów. Jest to ustawienie globalne, które wpływa na wszystkie kanały.
Kompromis: użycie
"main" umożliwia automatyczne wczytywanie plików inicjalizacyjnych (USER.md, SOUL.md, MEMORY.md), ale oznacza, że wszystkie wiadomości prywatne we wszystkich kanałach korzystają z tego samego wzorca klucza sesji. W przypadku publicznych botów dla wielu użytkowników, w których izolacja jest ważniejsza niż automatyczne wczytywanie plików inicjalizacyjnych, warto rozważyć "per-channel-peer" i zarządzać plikami inicjalizacyjnymi ręcznie.
Należy użyć
"per-account-channel-peer", gdy nazwane konta Feishu powinny utrzymywać oddzielne sesje dla tego samego nadawcy. Dynamiczne powiązania zachowują zakres konta.Typowe wdrożenie dla wielu użytkowników
Weryfikacja
Należy sprawdzić dzienniki Gateway, aby potwierdzić, że dynamiczne tworzenie działa:Uwagi
- Izolacja przestrzeni roboczej: każdy użytkownik otrzymuje własny katalog przestrzeni roboczej i instancję agenta. W normalnym przepływie wiadomości użytkownicy nie mogą przeglądać historii rozmów ani plików innych użytkowników.
- Granica bezpieczeństwa: jest to mechanizm izolacji kontekstu wiadomości, a nie granica bezpieczeństwa chroniąca przed wrogimi współdzierżawcami. Proces agenta i środowisko hosta są współdzielone.
- Zapisywanie konfiguracji musi pozostać włączone: dynamiczne tworzenie agentów zapisuje agentów i powiązania w konfiguracji; jest pomijane, gdy
channels.feishu.configWritesma wartośćfalse(domyślnie: włączone). bindingspowinno być puste: dynamiczni agenci automatycznie rejestrują własne powiązania- Ścieżka uaktualnienia: 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 GatewayObsługiwane typy wiadomości
Odbieranie
- ✅ Tekst
- ✅ Tekst sformatowany (post)
- ✅ Obrazy
- ✅ Pliki
- ✅ Dźwięk
- ✅ Wideo/multimedia
- ✅ Naklejki
file_key. Gdy skonfigurowano tools.media.audio, OpenClaw
pobiera zasób notatki głosowej i przed turą agenta uruchamia współdzieloną transkrypcję dźwięku,
dzięki czemu agent otrzymuje transkrypcję wypowiedzi. Jeśli Feishu umieszcza
tekst transkrypcji bezpośrednio w ładunku dźwiękowym, jest on używany bez kolejnego
wywołania ASR. Bez dostawcy transkrypcji dźwięku agent nadal otrzymuje
symbol zastępczy <media:audio> wraz z zapisanym załącznikiem, a nie surowy ładunek
zasobu Feishu.
Wysyłanie
- ✅ Tekst
- ✅ Obrazy
- ✅ Pliki
- ✅ Dźwięk
- ✅ Wideo/multimedia
- ✅ Karty interaktywne (w tym aktualizacje strumieniowe)
- ⚠️ Tekst sformatowany (formatowanie w stylu postu; nie obsługuje wszystkich możliwości tworzenia treści Feishu/Lark)
audio i wymagają
przesłania multimediów Ogg/Opus (file_type: "opus"). Istniejące multimedia .opus i .ogg
są wysyłane bezpośrednio jako natywny dźwięk. Pliki MP3/WAV/M4A i inne prawdopodobne formaty dźwiękowe są
transkodowane do Ogg/Opus 48 kHz za pomocą ffmpeg tylko wtedy, gdy odpowiedź wymaga dostarczenia
głosowego (audioAsVoice / narzędzie wiadomości asVoice, w tym odpowiedzi TTS jako notatki
głosowe). Zwykłe załączniki MP3 pozostają zwykłymi plikami. Jeśli brakuje ffmpeg lub
konwersja się nie powiedzie, OpenClaw używa załącznika plikowego i zapisuje przyczynę w dzienniku.
Wątki i odpowiedzi
- ✅ Odpowiedzi w tekście
- ✅ Odpowiedzi w wątkach
- ✅ Odpowiedzi multimedialne zachowują powiązanie z wątkiem podczas odpowiadania na wiadomość w wątku
Powiązane materiały
- Przegląd kanałów - wszystkie obsługiwane kanały
- Parowanie - uwierzytelnianie wiadomości prywatnych i proces parowania
- Grupy - zachowanie czatu grupowego i wymaganie wzmianek
- Routing kanałów - routing sesji dla wiadomości
- Bezpieczeństwo - model dostępu i wzmacnianie zabezpieczeń