@openclaw/feishu-plugin: privéberichten met de bot, groepschats, streamende kaartantwoorden en tools voor Feishu-documenten, wiki’s, Drive en Bitable.
Status: productieklaar voor privéberichten met de bot en groepschats. WebSocket is het standaardeventtransport (geen openbare URL nodig); de webhookmodus is optioneel.
Snel aan de slag
Vereist OpenClaw 2026.5.29 of hoger. Voer
openclaw --version uit om dit te controleren. Upgrade met openclaw update.1
Voer de configuratiewizard voor het kanaal uit
@openclaw/feishu-plugin geïnstalleerd als die ontbreekt, waarna je door de configuratie wordt geleid:- Handmatige configuratie: plak een App ID en App Secret van Feishu Open Platform (
https://open.feishu.cn) of Lark Developer (https://open.larksuite.com). - QR-configuratie: scan een QR-code in de Feishu-app om automatisch een bot te maken. Deze procedure beperkt privéberichten tot je eigen account (
dmPolicy: "allowlist"met jeopen_id).
2
Start nadat de configuratie is voltooid de Gateway opnieuw om de wijzigingen toe te passen
Duurzaamheid van inkomende events
OpenClaw plaatst geverifieerdeim.message.receive_v1- en drive.notice.comment_add_v1-enveloppen duurzaam in de wachtrij voordat ze naar de agent worden doorgestuurd. Openstaande events of events die opnieuw kunnen worden geprobeerd, overleven een herstart van de Gateway, blijven per chat of document geserialiseerd en gebruiken de event-ID van Feishu om dubbele wachtrij-items te onderdrukken zolang de actieve of bewaarde voltooiingsregistratie bestaat.
Als een WebSocket-event na een begrensd aantal pogingen niet kan worden opgeslagen, sluit OpenClaw die socket en dwingt het een nieuwe geverifieerde verbinding af in plaats van door te gaan na een niet-vastgelegde beurt. Andere Feishu-eventtypen, waaronder reacties en uitnodigingen voor VC-vergaderingen, gebruiken hun normale eventpaden en vallen niet onder deze garantie voor duurzame wachtrijen.
Toegangsbeheer
Privéberichten
Configureerchannels.feishu.dmPolicy (standaard: pairing) om te bepalen wie privéberichten naar de bot kan sturen:
Een koppelingsverzoek goedkeuren:
Groepschats
Groepsbeleid (channels.feishu.groupPolicy, standaard: allowlist):
Vermeldingsvereiste (
channels.feishu.requireMention):
- Standaard is een @vermelding vereist, behalve wanneer het effectieve groepsbeleid
"open"is; dan is de standaardwaardefalse, zodat berichten die geen vermeldingen kunnen bevatten (bijvoorbeeld afbeeldingen) de agent toch bereiken. - Stel
trueoffalseexpliciet in om dit te overschrijven; overschrijving per groep:channels.feishu.groups.<chat_id>.requireMention. - De uitsluitend voor uitzending bestemde
@allen@_allworden niet als botvermeldingen beschouwd. Een bericht waarin zowel@allals de bot rechtstreeks wordt vermeld, telt nog steeds als een botvermelding.
Voorbeelden van groepsconfiguratie
Alle groepen toestaan, geen @vermelding vereist
Alle groepen toestaan, maar nog steeds een @vermelding vereisen
Alleen specifieke groepen toestaan
allowlist kun je een groep ook toelaten door een expliciet groups.<chat_id>-item toe te voegen. Expliciete items overschrijven groupPolicy: "disabled" niet. Standaardwaarden met jokertekens onder groups.* configureren overeenkomende groepen, maar laten zelf geen groepen toe.
Afzenders binnen een groep beperken
channels.feishu.groupSenderAllowFrom stelt voor alle groepen dezelfde toelatingslijst voor afzenders in; een allowFrom per groep heeft voorrang.
Door bots geschreven berichten
Feishu negeert standaard berichten die door andere bots zijn geschreven. Om bot-naar-botgroepsgesprekken toe te staan, verleen je de app de scopesim:message.group_at_msg.include_bot:readonly en im:message:readonly en stel je vervolgens allowBots in:
channels.defaults.botLoopProtection toe.
Groeps-/gebruikers-ID’s ophalen
Groeps-ID’s (chat_id, indeling: oc_xxx)
Open de groep in Feishu/Lark, klik rechtsboven op het menupictogram en ga naar Settings. De groeps-ID (chat_id) wordt op de instellingenpagina vermeld.

Gebruikers-ID’s (open_id, indeling: ou_xxx)
Start de Gateway, stuur een privébericht naar de bot en controleer vervolgens de logboeken:
open_id in de loguitvoer. Je kunt ook openstaande koppelingsverzoeken controleren:
Veelgebruikte opdrachten
Feishu/Lark ondersteunt geen systeemeigen menu’s voor slashopdrachten, dus stuur deze als gewone tekstberichten.
Problemen oplossen
De bot reageert niet in groepschats
- Zorg dat de bot aan de groep is toegevoegd
- Zorg dat je de bot @vermeldt (standaard vereist)
- Controleer of
groupPolicyniet"disabled"is - Controleer de logboeken:
openclaw logs --follow
De bot ontvangt geen berichten
- Zorg dat de bot in Feishu Open Platform / Lark Developer is gepubliceerd en goedgekeurd
- Zorg dat het eventabonnement
im.message.receive_v1bevat - Abonneer je voor automatisch deelnemen aan vergaderuitnodigingen ook op
vc.bot.meeting_invited_v1 - Zorg dat persistent connection (WebSocket) is geselecteerd
- Zorg dat alle vereiste machtigingsscopes zijn verleend
- Zorg dat de Gateway actief is:
openclaw gateway status - Controleer de logboeken:
openclaw logs --follow
vc.bot.meeting_invited_v1 levert alleen het event. Automatisch deelnemen is
standaard uitgeschakeld. Om dit globaal in te schakelen:
vc:meeting.bot.join:write. De officiële
lark-cli VC-agent-Skill
biedt bijvoorbeeld vc +meeting-join.
QR-configuratie reageert niet in de mobiele Feishu-app
- Voer de configuratie opnieuw uit:
openclaw channels login --channel feishu - Kies handmatige configuratie
- Maak in Feishu Open Platform een zelfgebouwde app en kopieer de App ID en App Secret
- Plak die aanmeldgegevens in de configuratiewizard
App Secret is gelekt
- Stel de App Secret opnieuw in via Feishu Open Platform / Lark Developer
- Werk de waarde in je configuratie bij
- Start de Gateway opnieuw:
openclaw gateway restart
Geavanceerde configuratie
Meerdere accounts
defaultAccount bepaalt welk account wordt gebruikt wanneer uitgaande API’s geen accountId opgeven. Accountitems nemen instellingen op het hoogste niveau over; de meeste sleutels op het hoogste niveau kunnen per account worden overschreven.
accounts.<id>.tts gebruikt dezelfde structuur als tts en wordt diep samengevoegd over de globale TTS-configuratie, zodat Feishu-configuraties met meerdere bots gedeelde providerreferenties globaal kunnen behouden en per account alleen de stem, het model, de persona of de automatische modus hoeven te overschrijven.
Berichtlimieten
textChunkLimit- segmentgrootte voor uitgaande tekst (standaard:4000tekens)streaming.chunkMode-"length"(standaard) splitst bij de limiet;"newline"geeft de voorkeur aan regeleindenmediaMaxMb- limiet voor het uploaden/downloaden van media (standaard:30MB)
Streaming
Feishu/Lark ondersteunt streamende antwoorden via interactieve kaarten (Card Kit-streaming-API). Wanneer dit is ingeschakeld, werkt de bot de kaart in realtime bij terwijl de tekst wordt gegenereerd.streaming.mode: "off" in om het volledige antwoord in één bericht te verzenden; renderMode: "raw" (platte tekst in plaats van kaarten) schakelt streamingkaarten eveneens uit. streaming.block.enabled is standaard uitgeschakeld; schakel dit alleen in als je voltooide assistentblokken vóór het definitieve antwoord wilt laten verzenden. De verouderde booleaanse waarde streaming en de platte sleutels blockStreaming / blockStreamingCoalesce / chunkMode worden via openclaw doctor --fix naar deze geneste structuur gemigreerd.
Quotaoptimalisatie
Verminder het aantal Feishu/Lark-API-aanroepen met twee optionele vlaggen:typingIndicator(standaardtrue): stelfalsein om aanroepen voor typreacties over te slaanresolveSenderNames(standaardtrue): stelfalsein om het opzoeken van afzenderprofielen over te slaan
Bereik van groepssessies en onderwerpthreads
channels.feishu.groupSessionScope (op het hoogste niveau, per account of per groep) bepaalt hoe groepsberichten aan agentsessies worden gekoppeld:
Voor de onderwerpbereiken gebruiken systeemeigen Feishu/Lark-onderwerpgroepen de gebeurtenis
thread_id (omt_*) als canonieke sleutel voor de onderwerpsessie. Als bij een systeemeigen startgebeurtenis van een onderwerp thread_id ontbreekt, haalt OpenClaw deze vóór het routeren van de beurt op uit Feishu. Normale groepsantwoorden die OpenClaw omzet in threads, blijven de bericht-ID van het hoofdantwoord (om_*) gebruiken, zodat de eerste beurt en vervolgbeurten in dezelfde sessie blijven.
Stel replyInThread: "enabled" in (op het hoogste niveau of per groep) om botantwoorden een Feishu-onderwerpthread te laten maken of voortzetten in plaats van inline te antwoorden. topicSessionMode is de verouderde voorganger van groupSessionScope; geef de voorkeur aan groupSessionScope.
Feishu-werkruimtetools
De Plugin bevat agenttools voor Feishu-documenten, chats, de kennisbank, cloudopslag, machtigingen en Bitable, plus bijbehorende Skills (feishu-doc, feishu-drive, feishu-perm, feishu-wiki). Toolfamilies worden beheerd via channels.feishu.tools:
tools.base is een alias voor tools.bitable; de expliciete waarde bitable heeft voorrang wanneer beide zijn ingesteld. Instellingen per account staan onder accounts.<id>.tools.
Verleen drive:drive.metadata:readonly voor rechtstreekse feishu_drive info-zoekopdrachten buiten de hoofdmap,
tenzij de app al het volledige bereik drive:drive heeft. Zonder een van beide bereiken houdt info
de verouderde zoekopdracht in de hoofdmap beschikbaar via drive:drive:readonly.
ACP-sessies
Feishu/Lark ondersteunt ACP voor privéberichten en berichten in groepsthreads. Feishu/Lark-ACP wordt aangestuurd met tekstopdrachten — er zijn geen systeemeigen menu’s voor slash-opdrachten, dus gebruik/acp ...-berichten rechtstreeks in het gesprek.
Permanente ACP-koppeling
ACP starten vanuit een chat
In een Feishu/Lark-privébericht of -thread:--thread here werkt voor privéberichten en Feishu/Lark-threadberichten. Vervolgberichten in het gekoppelde gesprek worden rechtstreeks naar die ACP-sessie gerouteerd.
Routering met meerdere agents
Gebruikbindings om Feishu/Lark-privéberichten of -groepen naar verschillende agents te routeren.
match.channel:"feishu"match.peer.kind:"direct"(privébericht) of"group"(groepschat)match.peer.id: Open ID van de gebruiker (ou_xxx) of groeps-ID (oc_xxx)
Agentisolatie per gebruiker (dynamische agentaanmaak)
SchakeldynamicAgentCreation in om automatisch geïsoleerde agentinstanties te maken voor elke gebruiker van privéberichten. Elke gebruiker krijgt een eigen:
- Onafhankelijke werkruimtemap
- Afzonderlijke
USER.md/SOUL.md/MEMORY.md - Privégespreksgeschiedenis
- Geïsoleerde Skills en status
Dynamische koppelingen bevatten de genormaliseerde Feishu-
accountId, zodat standaardaccounts en benoemde accounts elke afzender naar de juiste dynamische agent routeren.Als een benoemd account in een oudere versie een dynamische agent zonder bereik heeft gemaakt, telt die verouderde agent nog steeds mee voor maxAgents. Controleer of deze niet door het standaardaccount wordt gebruikt voordat je deze verwijdert, of verhoog maxAgents tijdelijk; OpenClaw kan niet veilig afleiden welk account eigenaar is van een dubbelzinnige verouderde status.Snelle installatie
Werking
Wanneer een nieuwe gebruiker het eerste privébericht verzendt:- Het kanaal genereert een unieke
agentId:feishu-{user_open_id}voor het standaardaccount, of een begrensde identiteitsdigest met accountvoorvoegsel voor een benoemd account - Maakt een nieuwe werkruimte op het pad
workspaceTemplate - Registreert de agent en maakt een koppeling voor deze gebruiker
- De werkruimtehelper zorgt bij de eerste toegang voor bootstrapbestanden (
AGENTS.md,SOUL.md,USER.md, enzovoort) - Routeert alle toekomstige berichten van deze gebruiker naar diens toegewezen agent
Configuratieopties
Sjabloonvariabelen:
{agentId}- de gegenereerde agent-ID (bijvoorbeeldfeishu-ou_xxxxxxoffeishu-support-<identity_digest>){userId}- de Feishu-open_id van de afzender (bijvoorbeeldou_xxxxxx)
Sessiebereik
session.dmScope bepaalt hoe privéberichten aan agentsessies worden gekoppeld. Dit is een globale instelling die alle kanalen beïnvloedt.
Afweging: met
"main" worden bootstrapbestanden automatisch geladen (USER.md, SOUL.md, MEMORY.md), maar gebruiken alle privéberichten in alle kanalen hetzelfde patroon voor sessiesleutels. Overweeg voor openbare bots met meerdere gebruikers, waarbij isolatie belangrijker is dan het automatisch laden van bootstrapbestanden, "per-channel-peer" en beheer de bootstrapbestanden handmatig.
Gebruik
"per-account-channel-peer" wanneer benoemde Feishu-accounts afzonderlijke sessies voor dezelfde afzender moeten behouden. Dynamische koppelingen behouden het accountbereik.Gebruikelijke implementatie voor meerdere gebruikers
Verificatie
Controleer de Gateway-logboeken om te bevestigen dat dynamische aanmaak werkt:Opmerkingen
- Werkruimte-isolatie: Elke gebruiker krijgt een eigen werkruimtemap en agentinstantie. Gebruikers kunnen binnen de normale berichtenstroom elkaars gespreksgeschiedenis of bestanden niet zien.
- Beveiligingsgrens: Dit is een isolatiemechanisme voor de berichtencontext, geen beveiligingsgrens tegen vijandige medegebruikers. Het agentproces en de hostomgeving worden gedeeld.
- Configuratieschrijfbewerkingen moeten ingeschakeld blijven: Bij het dynamisch aanmaken van agents worden agents en bindingen naar de configuratie geschreven; dit wordt overgeslagen wanneer
channels.feishu.configWritesfalseis (standaard: ingeschakeld). bindingsmoet leeg zijn: Dynamische agents registreren automatisch hun eigen bindingen- Upgradepad: Bestaande handmatige bindingen blijven naast dynamische agents werken
session.dmScopeis globaal: Dit is van invloed op alle kanalen, niet alleen Feishu
Configuratiereferentie
Volledige configuratie: Gateway-configuratieOndersteunde berichttypen
Ontvangen
- ✅ Tekst
- ✅ Rijke tekst (bericht)
- ✅ Afbeeldingen
- ✅ Bestanden
- ✅ Audio
- ✅ Video/media
- ✅ Stickers
file_key-JSON. Wanneer tools.media.audio is geconfigureerd, downloadt OpenClaw
de spraaknotitiebron en voert het vóór de agentbeurt gedeelde audiotranscriptie uit,
zodat de agent het gesproken transcript ontvangt. Als Feishu transcriptietekst
rechtstreeks in de audiopayload opneemt, wordt die tekst gebruikt zonder een extra
ASR-aanroep. Zonder provider voor audiotranscriptie ontvangt de agent nog steeds een
<media:audio>-plaatsaanduiding plus de opgeslagen bijlage, niet de onbewerkte
Feishu-bronpayload.
Verzenden
- ✅ Tekst
- ✅ Afbeeldingen
- ✅ Bestanden
- ✅ Audio
- ✅ Video/media
- ✅ Interactieve kaarten (inclusief streamingupdates)
- ⚠️ Rijke tekst (berichtopmaak; ondersteunt niet alle auteursmogelijkheden van Feishu/Lark)
audio en vereisen
Ogg/Opus-uploadmedia (file_type: "opus"). Bestaande .opus- en .ogg-media
worden rechtstreeks als native audio verzonden. MP3/WAV/M4A en andere waarschijnlijke audioformaten worden
alleen met ffmpeg getranscodeerd naar 48kHz Ogg/Opus wanneer het antwoord om
spraakbezorging vraagt (audioAsVoice / berichttool asVoice, inclusief antwoorden
met TTS-spraaknotities). Gewone MP3-bijlagen blijven reguliere bestanden. Als ffmpeg ontbreekt of
de conversie mislukt, valt OpenClaw terug op een bestandsbijlage en wordt de reden gelogd.
Threads en antwoorden
- ✅ Inline antwoorden
- ✅ Antwoorden in threads
- ✅ Media-antwoorden blijven rekening houden met de thread wanneer op een threadbericht wordt geantwoord
Gerelateerd
- Overzicht van kanalen - alle ondersteunde kanalen
- Koppeling - DM-authenticatie en koppelingsflow
- Groepen - gedrag van groepschats en toegangscontrole via vermeldingen
- Kanaalroutering - sessieroutering voor berichten
- Beveiliging - toegangsmodel en beveiligingsversterking