Aller au contenu

Feishu

Feishu (Lark) est une plateforme de discussion d’équipe utilisée par les entreprises pour la messagerie et la collaboration. Ce plugin connecte OpenClaw à un bot Feishu/Lark en utilisant l’abonnement aux événements WebSocket de la plateforme, afin que les messages puissent être reçus sans exposer d’URL webhook publique.


Feishu est fourni inclus avec les versions actuelles de OpenClaw, aucune installation de plugin séparée n’est requise.

Si vous utilisez une version ancienne ou une installation personnalisée qui n’inclut pas Feishu par défaut, installez-le manuellement :

Fenêtre de terminal
openclaw plugins install @openclaw/feishu

Il existe deux méthodes pour ajouter le channel Feishu :

Si vous venez d’installer OpenClaw, exécutez l’onboarding :

Fenêtre de terminal
openclaw onboard

L’assistant vous guide à travers :

  1. La création d’une application Feishu et la collecte des informations d’identification
  2. La configuration des identifiants de l’application dans OpenClaw
  3. Le démarrage de la passerelle

Après configuration, vérifiez l’état de la passerelle :

  • openclaw gateway status
  • openclaw logs --follow

Si vous avez déjà terminé l’installation initiale, ajoutez le channel via CLI :

Fenêtre de terminal
openclaw channels add

Choisissez Feishu, puis entrez l’ID d’application (App ID) et le secret de l’application (App Secret).

Après configuration, gérez la passerelle :

  • openclaw gateway status
  • openclaw gateway restart
  • openclaw logs --follow

Visitez Feishu Open Platform et connectez-vous.

Les locataires Lark (mondial) doivent utiliser https://open.larksuite.com/app et définir domain: "lark" dans la configuration Feishu.

  1. Cliquez sur Create enterprise app
  2. Remplissez le nom de l’application + la description
  3. Choisissez une icône d’application

Create enterprise app

Depuis Credentials & Basic Info, copiez :

  • App ID (format : cli_xxx)
  • App Secret

Important : gardez l’App Secret privé.

Get credentials

Sous Permissions (Autorisations), cliquez sur Batch import (Importation par lot) et collez :

{
"scopes": {
"tenant": [
"aily:file:read",
"aily:file:write",
"application:application.app_message_stats.overview:readonly",
"application:application:self_manage",
"application:bot.menu:write",
"cardkit:card:read",
"cardkit:card:write",
"contact:user.employee_id:readonly",
"corehr:file:download",
"event:ip_list",
"im:chat.access_event.bot_p2p_chat:read",
"im:chat.members:bot_access",
"im:message",
"im:message.group_at_msg:readonly",
"im:message.p2p_msg:readonly",
"im:message:readonly",
"im:message:send_as_bot",
"im:resource"
],
"user": ["aily:file:read", "aily:file:write", "im:chat.access_event.bot_p2p_chat:read"]
}
}

Configure permissions

Dans App Capability (Capacité de l’application) > Bot :

  1. Activer la capacité du bot
  2. Définir le nom du bot

Enable bot capability

⚠️ Important : avant de configurer l’abonnement aux événements, assurez-vous que :

  1. Vous avez déjà exécuté openclaw channels add pour Feishu
  2. La passerelle est en cours d’exécution (openclaw gateway status)

Dans Event Subscription (Abonnement aux événements) :

  1. Choisissez Use long connection to receive events (Utiliser une connexion longue pour recevoir les événements) (WebSocket)
  2. Ajoutez l’événement : im.message.receive_v1
  3. (Optionnel) Pour les workflows de commentaires Drive, ajoutez également : drive.notice.comment_add_v1

⚠️ Si la passerelle n’est pas en cours d’exécution, la configuration de la connexion longue peut échouer lors de la sauvegarde.

Configure event subscription

  1. Créez une version dans Version Management & Release
  2. Soumettez pour révision et publication
  3. Attendez l’approbation de l’administrateur (les applications d’entreprise sont généralement approuvées automatiquement)

Fenêtre de terminal
openclaw channels add

Choisissez Feishu et collez votre App ID + App Secret.

Modifiez ~/.openclaw/openclaw.json :

{
channels: {
feishu: {
enabled: true,
dmPolicy: "pairing",
accounts: {
main: {
appId: "cli_xxx",
appSecret: "xxx",
name: "My AI assistant",
},
},
},
},
}

Si vous utilisez connectionMode: "webhook", définissez verificationToken et encryptKey. Le serveur webhook Feishu se lie à 127.0.0.1 par défaut ; ne définissez webhookHost que si vous avez intentionnellement besoin d’une adresse de liaison différente.

Jeton de vérification et clé de chiffrement (mode webhook)

Section intitulée « Jeton de vérification et clé de chiffrement (mode webhook) »

Lorsque vous utilisez le mode webhook, définissez channels.feishu.verificationToken et channels.feishu.encryptKey dans votre configuration. Pour obtenir les valeurs :

  1. Sur Feishu Open Platform, ouvrez votre application
  2. Allez dans DevelopmentEvents & Callbacks (开发配置 → 事件与回调)
  3. Ouvrez l’onglet Encryption (加密策略)
  4. Copiez le Verification Token et la Encrypt Key

La capture d’écran ci-dessous indique où trouver le Jeton de vérification. La Clé de chiffrement est répertoriée dans la même section Chiffrement.

Emplacement du jeton de vérification

Fenêtre de terminal
export FEISHU_APP_ID="cli_xxx"
export FEISHU_APP_SECRET="xxx"

Si votre client utilise Lark (international), définissez le domaine sur lark (ou une chaîne de domaine complète). Vous pouvez le définir au niveau channels.feishu.domain ou par compte (channels.feishu.accounts.<id>.domain).

{
channels: {
feishu: {
domain: "lark",
accounts: {
main: {
appId: "cli_xxx",
appSecret: "xxx",
},
},
},
},
}

Vous pouvez réduire l’utilisation de l’API Feishu avec deux indicateurs optionnels :

  • typingIndicator (par défaut true) : lorsque false, ignore les appels de réaction de frappe.
  • resolveSenderNames (par défaut true) : lorsque false, ignore les appels de recherche de profil de l’expéditeur.

Définissez-les au niveau supérieur ou par compte :

{
channels: {
feishu: {
typingIndicator: false,
resolveSenderNames: false,
accounts: {
main: {
appId: "cli_xxx",
appSecret: "xxx",
typingIndicator: true,
resolveSenderNames: false,
},
},
},
},
}

Fenêtre de terminal
openclaw gateway

Dans Feishu, trouvez votre bot et envoyez un message.

Par défaut, le bot répond avec un code d’appariement. Approuvez-le :

Fenêtre de terminal
openclaw pairing approve feishu <CODE>

Après approbation, vous pouvez chatter normalement.


  • Channel de bot Feishu : Bot Feishu géré par la passerelle
  • Routage déterministe : les réponses retournent toujours à Feishu
  • Isolation de session : les DMs partagent une session principale ; les groupes sont isolés
  • Connexion WebSocket : connexion longue via le SDK Feishu, aucune URL publique nécessaire

  • Par défaut : dmPolicy: "pairing" (les utilisateurs inconnus reçoivent un code d’appariement)

  • Approuver l’appariement :

    Fenêtre de terminal
    openclaw pairing list feishu
    openclaw pairing approve feishu <CODE>
  • Mode liste blanche : définissez channels.feishu.allowFrom avec les Open ID autorisés

1. Stratégie de groupe (channels.feishu.groupPolicy) :

  • "open" = autoriser tout le monde dans les groupes
  • "allowlist" = autoriser uniquement groupAllowFrom
  • "disabled" = désactiver les messages de groupe

Par défaut : allowlist

2. Exigence de mention (channels.feishu.requireMention, remplaçable via channels.feishu.groups.<chat_id>.requireMention) :

  • true explicite = nécessite une @mention
  • false explicite = répondre sans mentions
  • lorsque non défini et groupPolicy: "open" = valeur par défaut false
  • lorsque non défini et groupPolicy n’est pas "open" = valeur par défaut true

Autoriser tous les groupes, aucune @mention requise (par défaut pour les groupes ouverts)

Section intitulée « Autoriser tous les groupes, aucune @mention requise (par défaut pour les groupes ouverts) »
{
channels: {
feishu: {
groupPolicy: "open",
},
},
}

Autoriser tous les groupes, mais exiger tout de même une @mention

Section intitulée « Autoriser tous les groupes, mais exiger tout de même une @mention »
{
channels: {
feishu: {
groupPolicy: "open",
requireMention: true,
},
},
}
{
channels: {
feishu: {
groupPolicy: "allowlist",
// Feishu group IDs (chat_id) look like: oc_xxx
groupAllowFrom: ["oc_xxx", "oc_yyy"],
},
},
}

Restreindre les expéditeurs pouvant envoyer des messages dans un groupe (liste d’autorisation des expéditeurs)

Section intitulée « Restreindre les expéditeurs pouvant envoyer des messages dans un groupe (liste d’autorisation des expéditeurs) »

En plus d’autoriser le groupe lui-même, tous les messages de ce groupe sont filtrés par l’open_id de l’expéditeur : seuls les utilisateurs listés dans groups.<chat_id>.allowFrom voient leurs messages traités ; les messages des autres membres sont ignorés (il s’agit d’un filtrage complet au niveau de l’expéditeur, et pas seulement pour les commandes de contrôle comme /reset ou /new).

{
channels: {
feishu: {
groupPolicy: "allowlist",
groupAllowFrom: ["oc_xxx"],
groups: {
oc_xxx: {
// Feishu user IDs (open_id) look like: ou_xxx
allowFrom: ["ou_user1", "ou_user2"],
},
},
},
},
}

Les IDs de groupe ressemblent à oc_xxx.

Méthode 1 (recommandée)

  1. Démarrez la passerelle et @mentionnez le bot dans le groupe
  2. Exécutez openclaw logs --follow et recherchez chat_id

Méthode 2

Utilisez le débogueur d’API Feishu pour lister les discussions de groupe.

Les IDs utilisateur ressemblent à ou_xxx.

Méthode 1 (recommandée)

  1. Démarrez la passerelle et envoyez un message privé (DM) au bot
  2. Exécutez openclaw logs --follow et recherchez open_id

Méthode 2

Vérifiez les demandes d’appariement pour les Open ID des utilisateurs :

Fenêtre de terminal
openclaw pairing list feishu

CommandeDescription
/statusAfficher le statut du bot
/resetRéinitialiser la session
/modelAfficher/changer de modèle

Remarque : Feishu ne prend pas encore en charge les menus de commandes natifs, les commandes doivent donc être envoyées sous forme de texte.

CommandeDescription
openclaw gateway statusAfficher le statut de la passerelle
openclaw gateway installInstaller/démarrer le service de passerelle
openclaw gateway stopArrêter le service de passerelle
openclaw gateway restartRedémarrer le service de passerelle
openclaw logs --followSuivre les journaux de la passerelle

Le bot ne répond pas dans les discussions de groupe

Section intitulée « Le bot ne répond pas dans les discussions de groupe »
  1. Assurez-vous que le bot est ajouté au groupe
  2. Assurez-vous de @mentionner le bot (comportement par défaut)
  3. Vérifiez que groupPolicy n’est pas défini sur "disabled"
  4. Vérifiez les journaux : openclaw logs --follow
  1. Assurez-vous que l’application est publiée et approuvée
  2. Assurez-vous que l’abonnement aux événements inclut im.message.receive_v1
  3. Assurez-vous que la connexion longue est activée
  4. Assurez-vous que les permissions de l’application sont complètes
  5. Assurez-vous que la passerelle fonctionne : openclaw gateway status
  6. Vérifiez les journaux : openclaw logs --follow
  1. Réinitialisez la clé secrète de l’application dans la Feishu Open Platform
  2. Mettez à jour la clé secrète de l’application dans votre configuration
  3. Redémarrez la passerelle
  1. Assurez-vous que l’application dispose de la permission im:message:send_as_bot
  2. Assurez-vous que l’application est publiée
  3. Consultez les journaux pour obtenir des erreurs détaillées

{
channels: {
feishu: {
defaultAccount: "main",
accounts: {
main: {
appId: "cli_xxx",
appSecret: "xxx",
name: "Primary bot",
},
backup: {
appId: "cli_yyy",
appSecret: "yyy",
name: "Backup bot",
enabled: false,
},
},
},
},
}

defaultAccount contrôle le compte Feishu utilisé lorsque les API sortantes ne spécifient pas explicitement un accountId.

  • textChunkLimit : taille du bloc de texte sortant (par défaut : 2000 caractères)
  • mediaMaxMb : limite de téléchargement/téléchargement de médias (par défaut : 30 Mo)

Feishu prend en charge les réponses en streaming via des cartes interactives. Lorsque cette fonction est activée, le bot met à jour une carte au fur et à mesure qu’il génère du texte.

{
channels: {
feishu: {
streaming: true, // enable streaming card output (default true)
blockStreaming: true, // enable block-level streaming (default true)
},
},
}

Définissez streaming: false pour attendre la réponse complète avant l’envoi.

Feishu prend en charge l’ACP pour :

  • DMs
  • conversations par sujet de groupe

L’ACP Feishu est piloté par des commandes texte. Il n’y a pas de menus de commandes slash natifs, utilisez donc les messages /acp ... directement dans la conversation.

Utilisez des liaisons ACP typées de premier niveau pour épingler un DM ou une conversation par sujet Feishu à une session ACP persistante.

{
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" },
},
],
}

Génération d’ACP liée à un fil depuis le chat

Section intitulée « Génération d’ACP liée à un fil depuis le chat »

Dans un DM ou une conversation par sujet Feishu, vous pouvez générer et lier une session ACP sur place :

/acp spawn codex --thread here

Notes :

  • --thread here fonctionne pour les DMs et les sujets Feishu.
  • Les messages de suivi dans le DM/sujet lié sont routés directement vers cette session ACP.
  • La v1 ne cible pas les conversations de groupe génériques sans sujet.

Utilisez bindings pour router les DMs ou groupes Feishu vers différents agents.

{
agents: {
list: [
{ id: "main" },
{
id: "clawd-fan",
workspace: "/home/user/clawd-fan",
agentDir: "/home/user/.openclaw/agents/clawd-fan/agent",
},
{
id: "clawd-xi",
workspace: "/home/user/clawd-xi",
agentDir: "/home/user/.openclaw/agents/clawd-xi/agent",
},
],
},
bindings: [
{
agentId: "main",
match: {
channel: "feishu",
peer: { kind: "direct", id: "ou_xxx" },
},
},
{
agentId: "clawd-fan",
match: {
channel: "feishu",
peer: { kind: "direct", id: "ou_yyy" },
},
},
{
agentId: "clawd-xi",
match: {
channel: "feishu",
peer: { kind: "group", id: "oc_zzz" },
},
},
],
}

Champs de routage :

  • match.channel : "feishu"
  • match.peer.kind : "direct" ou "group"
  • match.peer.id : identifiant utilisateur Open ID (ou_xxx) ou identifiant de groupe (oc_xxx)

Voir Obtenir les identifiants de groupe/utilisateur pour des conseils de recherche.


Configuration complète : configuration du Gateway

Options clés :

ParamètreDescriptionPar défaut
channels.feishu.enabledActiver/désactiver le channeltrue
channels.feishu.domainDomaine API (feishu ou lark)feishu
channels.feishu.connectionModeMode de transport des événementswebsocket
channels.feishu.defaultAccountIdentifiant de compte par défaut pour le routage sortantdefault
channels.feishu.verificationTokenRequis pour le mode webhook-
channels.feishu.encryptKeyRequis pour le mode webhook-
channels.feishu.webhookPathChemin de la route du webhook/feishu/events
channels.feishu.webhookHostHôte de liaison du webhook127.0.0.1
channels.feishu.webhookPortPort de liaison du webhook3000
channels.feishu.accounts.<id>.appIdID de l’application-
channels.feishu.accounts.<id>.appSecretSecret de l’application-
channels.feishu.accounts.<id>.domainRemplacement du domaine API par comptefeishu
channels.feishu.dmPolicyStratégie DMpairing
channels.feishu.allowFromListe blanche DM (liste open_id)-
channels.feishu.groupPolicyStratégie de groupeallowlist
channels.feishu.groupAllowFromListe blanche de groupe-
channels.feishu.requireMentionExiger @mention par défautconditionnel
channels.feishu.groups.<chat_id>.requireMentionRemplacement de l’exigence @mention par groupehérité
channels.feishu.groups.<chat_id>.enabledActiver le groupetrue
channels.feishu.textChunkLimitTaille du bloc de message2000
channels.feishu.mediaMaxMbLimite de taille du média30
channels.feishu.streamingActiver la sortie de carte en continutrue
channels.feishu.blockStreamingActiver le block streamingtrue

ValeurComportement
"pairing"Par défaut. Les utilisateurs inconnus reçoivent un code d’appariement ; doivent être approuvés
"allowlist"Seuls les utilisateurs dans allowFrom peuvent chatter
"open"Autoriser tous les utilisateurs (nécessite "*" dans allowFrom)
"disabled"Désactiver les DMs

  • ✅ Text
  • ✅ Texte enrichi (post)
  • ✅ Images
  • ✅ Fichiers
  • ✅ Audio
  • ✅ Vidéo/médias
  • ✅ Autocollants
  • ✅ Texte
  • ✅ Images
  • ✅ Fichiers
  • ✅ Audio
  • ✅ Vidéo/médias
  • ✅ Cartes interactives
  • ⚠️ Texte enrichi (formatage de style post et cartes, pas les fonctionnalités d’édition arbitraires de Feishu)
  • ✅ Réponses en ligne
  • ✅ Réponses aux fils de discussion par sujet lorsque Feishu expose reply_in_thread
  • ✅ Les réponses média gardent le fil en tête lors d’une réponse à un message de fil/sujet

Feishu peut déclencher l’agent lorsque quelqu’un ajoute un commentaire sur un document Feishu Drive (Docs, Sheets, etc.). L’agent reçoit le texte du commentaire, le contexte du document et le fil de commentaires afin qu’il puisse répondre dans le fil ou apporter des modifications au document.

Exigences :

  • S’abonner à drive.notice.comment_add_v1 dans les paramètres d’abonnement aux événements de votre application Feishu (en plus de l’im.message.receive_v1 existant)
  • Le tool Drive est activé par défaut ; désactivez-le avec channels.feishu.tools.drive: false

Le tool feishu_drive expose ces actions de commentaire :

ActionDescription
list_commentsLister les commentaires sur un document
list_comment_repliesLister les réponses dans un fil de commentaires
add_commentAjouter un nouveau commentaire de premier niveau
reply_commentRépondre à un fil de commentaires existant

Lorsque l’agent gère un événement de commentaire Drive, il reçoit :

  • le texte du commentaire et l’expéditeur
  • les métadonnées du document (titre, type, URL)
  • le contexte du fil de commentaires pour les réponses dans le fil

Après avoir apporté des modifications au document, l’agent est guidé pour utiliser feishu_drive.reply_comment pour notifier le commentateur, puis pour afficher NO_REPLY afin d’éviter les envois en double.

Feishu expose actuellement ces actions d’exécution :

  • send
  • read
  • edit
  • thread-reply
  • pin
  • list-pins
  • unpin
  • member-info
  • channel-info
  • channel-list
  • react et reactions lorsque les réactions sont activées dans la configuration
  • feishu_drive actions de commentaire : list_comments, list_comment_replies, add_comment, reply_comment