Feishu/Lark est une plateforme de collaboration tout-en-un où les équipes discutent, partagent des documents, gèrent des calendriers et travaillent ensemble.
Statut : prêt pour la production pour les DMs de bot + discussions de groupe. WebSocket est le mode par défaut ; le mode webhook est facultatif.
bash openclaw channels login --channel feishu Choisissez la configuration manuelle pour coller un App ID et un App Secret provenant de la Feishu Open Platform, ou choisissez la configuration QR pour créer un bot automatiquement. Si l’application mobile nationale Feishu ne réagit pas au code QR, relancez la configuration et choisissez la configuration manuelle.
Une fois la configuration terminée, redémarrez la passerelle pour appliquer les modifications
Configurez dmPolicy pour contrôler qui peut envoyer un DM au bot :
"pairing" - les utilisateurs inconnus reçoivent un code d’appariement ; approuvez via CLI
"allowlist" - seuls les utilisateurs listés dans allowFrom peuvent chatter (par défaut : uniquement le propriétaire du bot)
"open" - autoriser les DM publics uniquement lorsque allowFrom inclut "*" ; avec des entrées restrictives, seuls les utilisateurs correspondants peuvent chatter
"disabled" - désactiver tous les DMs
Approuver une demande d’appariement :
Fenêtre de terminal
openclawpairinglistfeishu
openclawpairingapprovefeishu
### Discussions de groupe
**Stratégie de groupe** (`channels.feishu.groupPolicy`) :
| `"open"` | Répondre à tous les messages dans les groupes |
| `"allowlist"` | Répondre uniquement aux groupes de `groupAllowFrom` ou explicitement configurés sous `groups.
| |”disabled” | Désactiver tous les messages de groupe ; les entrées explicitesgroups.
` ne remplacent pas ce paramètre |
Par défaut : allowlist
Exigence de mention (channels.feishu.requireMention) :
true - nécessiter une @mention (par défaut)
false - répondre sans @mention
Remplacement par groupe : `channels.feishu.groups.
.requireMention`
Les @all et @_all en diffusion seule ne sont pas traités comme des mentions de bot. Un message qui mentionne à la fois @all et le bot directement compte toujours comme une mention de bot.
En mode allowlist, vous pouvez également autoriser un groupe en ajoutant une entrée explicite `groups.
. Les entrées explicites ne remplacent pas groupPolicy: “disabled”. Les valeurs par défaut avec caractères génériques sous groups.*` configurent les groupes correspondants, mais elles n’autorisent pas les groupes par elles-mêmes.
Ouvrez le groupe dans Feishu/Lark, cliquez sur l’icône de menu dans le coin supérieur droit et allez dans Paramètres. L’ID de groupe (chat_id) est répertorié sur la page des paramètres.
defaultAccount contrôle le compte utilisé lorsque les API sortantes ne spécifient pas accountId.
`accounts.
.ttsutilise la même structure quemessages.tts` et fusionne en profondeur avec
la configuration TTS globale, ce qui permet aux configurations Feishu multi-bots de conserver des informations d’identification de fournisseur partagées
globalement tout en remplaçant uniquement la voix, le model, la persona ou le mode automatique
par compte.
Feishu/Lark prend en charge les réponses en streaming via des cartes interactives. Lorsqu’il est activé, le bot met à jour la carte en temps réel pendant qu’il génère le texte.
blockStreaming: true, // opt into completed-block streaming
},
},
}
Définissez streaming: false pour envoyer la réponse complète en un seul message. blockStreaming est désactivé par défaut ; activez-le uniquement lorsque vous souhaitez que les blocs d’assistant terminés soient envoyés avant la réponse finale.
Feishu/Lark prend en charge l’ACP pour les DMs et les messages de fils de groupe. L’ACP Feishu/Lark est basée sur des commandes texte - il n’y a pas de menus de commandes slash natifs, utilisez donc des messages /acp ... directement dans la conversation.
--thread here fonctionne pour les DMs et les messages de fils Feishu/Lark. Les messages de suivi dans la conversation liée sont acheminés directement vers cette session ACP.
Activez dynamicAgentCreation pour créer automatiquement des instances d’agent isolées pour chaque utilisateur en DM. Chaque utilisateur obtient son propre :
Répertoire de l’espace de travail indépendant
Séparé USER.md / SOUL.md / MEMORY.md
Historique des conversations privé
Compétences et état isolés
Ceci est essentiel pour les bots publics où vous souhaitez que chaque utilisateur ait sa propre expérience d’assistant IA privée.
session.dmScope contrôle la manière dont les messages directs sont mappés aux sessions d’agent. Il s’agit d’un paramètre global qui affecte tous les channels.
Valeur
Comportement
Idéal pour
"main"
Le DM de chaque utilisateur correspond à la session principale de son agent
Bots à utilisateur unique où vous souhaitez que USER.md / SOUL.md se chargent automatiquement
"per-channel-peer"
Chaque combinaison (channel + utilisateur) obtient une session distincte
Bots publics multi-utilisateurs nécessitant un isolement plus fort
Compromis : L’utilisation de "main" permet le chargement automatique des fichiers d’amorçage (USER.md, SOUL.md, MEMORY.md), mais implique que tous les DMs sur tous les canaux partagent le même modèle de clé de session. Pour les bots multi-utilisateurs publics où l’isolement prime sur le chargement automatique de l’amorçage, envisagez "per-channel-peer" et gérez les fichiers d’amorçage manuellement.
{
session: {
// For single-user personal bots: enables auto bootstrap loading
Isolation de l’espace de travail : Chaque utilisateur obtient son propre répertoire d’espace de travail et son instance d’agent. Les utilisateurs ne peuvent pas voir l’historique des conversations ni les fichiers des autres dans le flux de messagerie normal.
Limite de sécurité : Il s’agit d’un mécanisme d’isolement du contexte de messagerie, et non d’une limite de sécurité contre des co-locataires hostiles. Le processus de l’agent et l’environnement hôte sont partagés.
bindings doit être vide : Les agents dynamiques enregistrent automatiquement leurs propres liaisons
Chemin de mise à niveau : Les liaisons manuelles existantes continuent de fonctionner parallèlement aux agents dynamiques
session.dmScope est global : Cela affecte tous les canaux, pas seulement Feishu
.appId | ID de l'application | - | |channels.feishu.accounts.
.appSecret | Secret de l'application | - | |channels.feishu.accounts.
.domain | Remplacement du domaine par compte |feishu | |channels.feishu.accounts.
.tts | Remplacement du TTS par compte |messages.tts | |channels.feishu.dmPolicy | Stratégie de DM |allowlist | |channels.feishu.allowFrom | Liste blanche de DM (liste open_id) | [BotOwnerId] | |channels.feishu.groupPolicy | Stratégie de groupe |allowlist | |channels.feishu.groupAllowFrom | Liste blanche de groupes | - | |channels.feishu.requireMention | Exiger @mention dans les groupes |true | |channels.feishu.groups.
.requireMention | Remplacement @mention par groupe ; les ID explicites admettent également le groupe en mode liste blanche | hérité | |channels.feishu.groups.
.enabled | Activer/désactiver un groupe spécifique |true | |channels.feishu.dynamicAgentCreation.enabled | Activer la création automatique d'agents par utilisateur |false | |channels.feishu.dynamicAgentCreation.workspaceTemplate| Modèle de chemin pour les espaces de travail d'agents dynamiques |/.openclaw/workspace-{agentId} | |channels.feishu.dynamicAgentCreation.agentDirTemplate | Modèle de nom de répertoire d'agent |/.openclaw/agents/{agentId}/agent| |channels.feishu.dynamicAgentCreation.maxAgents | Nombre maximum d'agents dynamiques à créer | illimité | |channels.feishu.textChunkLimit | Taille des blocs de messages |2000 | |channels.feishu.mediaMaxMb | Limite de taille des médias |30 | |channels.feishu.streaming | Sortie de carte en continu |true | |channels.feishu.blockStreaming | Flux continu des réponses aux blocs terminés |false | |channels.feishu.typingIndicator | Envoyer des réactions de frappe |true | |channels.feishu.resolveSenderNames | Résoudre les noms d'affichage des expéditeurs |true | |channels.feishu.tools.bitable | Activer les outils Bitable/Base |true | |channels.feishu.tools.base | Alias pourchannels.feishu.tools.bitable;bitableexplicite l'emporte si les deux sont définis |true | |channels.feishu.accounts.
.tools.bitable | Portail d'outils Bitable/Base par compte | hérité | |channels.feishu.accounts.
.tools.base | Alias par compte pourtools.bitable` | hérité |
Les messages audio entrants Feishu/Lark sont normalisés en tant qu’espaces réservés média au lieu du JSON brut file_key. Lorsque tools.media.audio est configuré, OpenClaw
télécharge la ressource de la note vocale et exécute la transcription audio partagée avant le
tour de l’agent, afin que l’agent reçoive la transcription parlée. Si Feishu inclut
le texte de transcription directement dans la charge utile audio, ce texte est utilisé sans autre
appel ASR. Sans fournisseur de transcription audio, l’agent reçoit toujours un
espace réservé `
` ainsi que la pièce jointe enregistrée, et non la charge utile de ressource brute Feishu.
✅ Cartes interactives (y compris les mises à jour en continu)
⚠️ Texte enrichi (formatage style post ; ne prend pas en charge toutes les capacités d’édition Feishu/Lark)
Les bulles audio natives Feishu/Lark utilisent le type de message Feishu audio et nécessitent
un média de téléchargement Ogg/Opus (file_type: "opus"). Les médias .opus et .ogg existants
sont envoyés directement sous forme d’audio natif. Les formats audio probables tels que MP3/WAV/M4A et autres
sont transcodés en Ogg/Opus 48kHz avec ffmpeg uniquement lorsque la réponse demande une livraison vocale
(audioAsVoice / outil de message asVoice, y compris les réponses vocales TTS).
Les pièces jointes MP3 ordinaires restent des fichiers réguliers. Si ffmpeg est manquant ou
si la conversion échoue, OpenClaw revient à une pièce jointe de fichier et consigne la raison.
✅ Les réponses média restent conscientes du fil lors d’une réponse à un message de fil
Pour groupSessionScope: "group_topic" et "group_topic_sender", les groupes de sujets natifs
Feishu/Lark utilisent l’événement thread_id (omt_*) comme clé de session de sujet canonique.
Si un événement démarreur de sujet natif omet thread_id, OpenClaw
l’hydrate depuis Feishu avant d’acheminer le tour. Les réponses de groupe normales que
OpenClaw transforme en fils continuent d’utiliser l’ID du message racine de réponse (om_*) afin que
le premier tour et les tours suivants restent dans la même session.