Bot Feishu
Feishu (Lark) est une plateforme de messagerie dâequipe utilisee par les entreprises pour la communication et la collaboration. Ce plugin connecte OpenClaw a un bot Feishu/Lark via lâabonnement aux evenements par WebSocket, ce qui permet de recevoir les messages sans exposer une URL de webhook publique.
Plugin integre
Feishu est fourni avec les versions actuelles dâOpenClaw, aucune installation de plugin supplementaire nâest necessaire.
Si vous utilisez un build ancien ou une installation personnalisee qui nâinclut pas Feishu en integre, installez-le manuellement :
openclaw plugins install @openclaw/feishu
Demarrage rapide
Il existe deux facons dâajouter le canal Feishu :
Methode 1 : assistant dâinstallation (recommandee)
Si vous venez dâinstaller OpenClaw, lancez lâassistant :
openclaw onboard
Lâassistant vous guide pour :
- Creer une application Feishu et collecter les identifiants
- Configurer les identifiants de lâapplication dans OpenClaw
- Demarrer la gateway
Apres la configuration, verifiez lâetat de la gateway :
openclaw gateway statusopenclaw logs --follow
Methode 2 : configuration par CLI
Si vous avez deja termine lâinstallation initiale, ajoutez le canal via la CLI :
openclaw channels add
Choisissez Feishu, puis entrez lâApp ID et lâApp Secret.
Apres la configuration, gerez la gateway :
openclaw gateway statusopenclaw gateway restartopenclaw logs --follow
Etape 1 : creer une application Feishu
1. Ouvrir Feishu Open Platform
Rendez-vous sur Feishu Open Platform et connectez-vous.
Les tenants Lark (international) doivent utiliser https://open.larksuite.com/app et definir domain: "lark" dans la configuration Feishu.
2. Creer une application
- Cliquez sur Create enterprise app
- Remplissez le nom + la description de lâapplication
- Choisissez une icone

3. Copier les identifiants
Depuis Credentials & Basic Info, copiez :
- App ID (format :
cli_xxx) - App Secret
Avertissement : Gardez lâApp Secret confidentiel.

4. Configurer les permissions
Dans Permissions, cliquez sur Batch import 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"]
}
}

5. Activer la capacite bot
Dans App Capability > Bot :
- Activez la capacite bot
- Definissez le nom du bot

6. Configurer lâabonnement aux evenements
Avertissement : Avant de configurer lâabonnement aux evenements, assurez-vous que :
- Vous avez deja execute
openclaw channels addpour Feishu - La gateway est en cours dâexecution (
openclaw gateway status)
Dans Event Subscription :
- Choisissez Use long connection to receive events (WebSocket)
- Ajoutez lâevenement :
im.message.receive_v1
Avertissement : Si la gateway nâest pas en cours dâexecution, la configuration de la connexion longue peut echouer a lâenregistrement.

7. Publier lâapplication
- Creez une version dans Version Management & Release
- Soumettez pour examen et publiez
- Attendez lâapprobation de lâadministrateur (les applications dâentreprise sont generalement approuvees automatiquement)
Etape 2 : configurer OpenClaw
Configuration avec lâassistant (recommandee)
openclaw channels add
Choisissez Feishu et collez votre App ID + App Secret.
Configuration par fichier
Editez ~/.openclaw/openclaw.json :
{
channels: {
feishu: {
enabled: true,
dmPolicy: "pairing",
accounts: {
main: {
appId: "cli_xxx",
appSecret: "xxx",
botName: "My AI assistant",
},
},
},
},
}
Si vous utilisez connectionMode: "webhook", definissez verificationToken et encryptKey. Le serveur webhook Feishu se lie a 127.0.0.1 par defaut ; ne definissez webhookHost que si vous avez intentionnellement besoin dâune autre adresse de liaison.
Verification Token et Encrypt Key (mode webhook)
En mode webhook, definissez channels.feishu.verificationToken et channels.feishu.encryptKey dans votre configuration. Pour obtenir les valeurs :
- Sur Feishu Open Platform, ouvrez votre application
- Allez dans Development â Events & Callbacks
- Ouvrez lâonglet Encryption
- Copiez le Verification Token et lâEncrypt Key
La capture dâecran ci-dessous montre ou trouver le Verification Token. LâEncrypt Key se trouve dans la meme section Encryption.

Configuration par variables dâenvironnement
export FEISHU_APP_ID="cli_xxx"
export FEISHU_APP_SECRET="xxx"
Domaine Lark (international)
Si votre tenant est sur Lark (international), definissez le domaine sur lark (ou une chaine de domaine complete). Vous pouvez le definir au niveau channels.feishu.domain ou par compte (channels.feishu.accounts.<id>.domain).
{
channels: {
feishu: {
domain: "lark",
accounts: {
main: {
appId: "cli_xxx",
appSecret: "xxx",
},
},
},
},
}
Options dâoptimisation des quotas
Vous pouvez reduire lâutilisation de lâAPI Feishu avec deux options facultatives :
typingIndicator(par defauttrue) : lorsquefalse, ignore les appels de reaction de saisie.resolveSenderNames(par defauttrue) : lorsquefalse, ignore les appels de recherche de profil dâexpediteur.
Definissez-les au niveau global ou par compte :
{
channels: {
feishu: {
typingIndicator: false,
resolveSenderNames: false,
accounts: {
main: {
appId: "cli_xxx",
appSecret: "xxx",
typingIndicator: true,
resolveSenderNames: false,
},
},
},
},
}
Etape 3 : demarrage + test
1. Demarrer la gateway
openclaw gateway
2. Envoyer un message de test
Dans Feishu, trouvez votre bot et envoyez-lui un message.
3. Approuver lâappairage
Par defaut, le bot repond avec un code dâappairage. Approuvez-le :
openclaw pairing approve feishu <CODE>
Apres approbation, vous pouvez discuter normalement.
Presentation
- Canal bot Feishu : bot Feishu gere par la gateway
- Routage deterministe : les reponses retournent toujours a Feishu
- Isolation des sessions : les DMs partagent une session principale ; les groupes sont isoles
- Connexion WebSocket : connexion longue via le SDK Feishu, aucune URL publique necessaire
Controle dâacces
Messages directs
-
Par defaut :
dmPolicy: "pairing"(les utilisateurs inconnus recoivent un code dâappairage) -
Approuver lâappairage :
openclaw pairing list feishu openclaw pairing approve feishu <CODE> -
Mode liste dâautorisation : definissez
channels.feishu.allowFromavec les Open ID autorises
Conversations de groupe
1. Politique de groupe (channels.feishu.groupPolicy) :
"open"= autoriser tout le monde dans les groupes (par defaut)"allowlist"= nâautoriser quegroupAllowFrom"disabled"= desactiver les messages de groupe
2. Exigence de mention (channels.feishu.groups.<chat_id>.requireMention) :
true= mention @ requise (par defaut)false= repondre sans mention
Exemples de configuration de groupe
Autoriser tous les groupes, mention @ requise (par defaut)
{
channels: {
feishu: {
groupPolicy: "open",
// requireMention par defaut : true
},
},
}
Autoriser tous les groupes, mention @ non requise
{
channels: {
feishu: {
groups: {
oc_xxx: { requireMention: false },
},
},
},
}
Autoriser uniquement des groupes specifiques
{
channels: {
feishu: {
groupPolicy: "allowlist",
// Les identifiants de groupe Feishu (chat_id) ressemblent a : oc_xxx
groupAllowFrom: ["oc_xxx", "oc_yyy"],
},
},
}
Restreindre les expediteurs autorises dans un groupe (liste dâautorisation par expediteur)
En plus dâautoriser le groupe lui-meme, tous les messages dans ce groupe sont filtres par lâopen_id de lâexpediteur : seuls les utilisateurs listes dans groups.<chat_id>.allowFrom voient leurs messages traites ; les messages des autres membres sont ignores (il sâagit dâun filtrage complet au niveau expediteur, pas uniquement pour les commandes de controle comme /reset ou /new).
{
channels: {
feishu: {
groupPolicy: "allowlist",
groupAllowFrom: ["oc_xxx"],
groups: {
oc_xxx: {
// Les identifiants utilisateur Feishu (open_id) ressemblent a : ou_xxx
allowFrom: ["ou_user1", "ou_user2"],
},
},
},
},
}
Obtenir les identifiants de groupe/utilisateur
Identifiants de groupe (chat_id)
Les identifiants de groupe ressemblent a oc_xxx.
Methode 1 (recommandee)
- Demarrez la gateway et mentionnez le bot avec @ dans le groupe
- Executez
openclaw logs --followet recherchezchat_id
Methode 2
Utilisez le debogueur dâAPI Feishu pour lister les conversations de groupe.
Identifiants utilisateur (open_id)
Les identifiants utilisateur ressemblent a ou_xxx.
Methode 1 (recommandee)
- Demarrez la gateway et envoyez un DM au bot
- Executez
openclaw logs --followet recherchezopen_id
Methode 2
Verifiez les requetes dâappairage pour les Open ID utilisateur :
openclaw pairing list feishu
Commandes courantes
| Commande | Description |
|---|---|
/status | Afficher le statut du bot |
/reset | Reinitialiser la session |
/model | Afficher/changer le modele |
Remarque : Feishu ne prend pas encore en charge les menus de commandes natifs, les commandes doivent donc etre envoyees sous forme de texte.
Commandes de gestion de la gateway
| Commande | Description |
|---|---|
openclaw gateway status | Afficher lâetat de la gateway |
openclaw gateway install | Installer/demarrer le service |
openclaw gateway stop | Arreter le service |
openclaw gateway restart | Redemarrer le service |
openclaw logs --follow | Suivre les logs de la gateway |
Depannage
Le bot ne repond pas dans les conversations de groupe
- Assurez-vous que le bot est ajoute au groupe
- Assurez-vous de mentionner le bot avec @ (comportement par defaut)
- Verifiez que
groupPolicynâest pas defini sur"disabled" - Consultez les logs :
openclaw logs --follow
Le bot ne recoit pas de messages
- Assurez-vous que lâapplication est publiee et approuvee
- Assurez-vous que lâabonnement aux evenements inclut
im.message.receive_v1 - Assurez-vous que la connexion longue est activee
- Assurez-vous que les permissions de lâapplication sont completes
- Assurez-vous que la gateway est en cours dâexecution :
openclaw gateway status - Consultez les logs :
openclaw logs --follow
Fuite de lâApp Secret
- Reinitialiser lâApp Secret sur Feishu Open Platform
- Mettre a jour lâApp Secret dans votre configuration
- Redemarrer la gateway
Echecs dâenvoi de messages
- Assurez-vous que lâapplication a la permission
im:message:send_as_bot - Assurez-vous que lâapplication est publiee
- Consultez les logs pour les erreurs detaillees
Configuration avancee
Comptes multiples
{
channels: {
feishu: {
defaultAccount: "main",
accounts: {
main: {
appId: "cli_xxx",
appSecret: "xxx",
botName: "Primary bot",
},
backup: {
appId: "cli_yyy",
appSecret: "yyy",
botName: "Backup bot",
enabled: false,
},
},
},
},
}
defaultAccount controle quel compte Feishu est utilise lorsque les API sortantes ne specifient pas de accountId explicitement.
Limites de messages
textChunkLimit: taille des morceaux de texte sortant (par defaut : 2000 caracteres)mediaMaxMb: limite dâupload/telechargement media (par defaut : 30 Mo)
Streaming
Feishu prend en charge les reponses en streaming via des cartes interactives. Lorsque câest active, le bot met a jour une carte au fur et a mesure quâil genere le texte.
{
channels: {
feishu: {
streaming: true, // activer la sortie en streaming par carte (par defaut true)
blockStreaming: true, // activer le streaming par blocs (par defaut true)
},
},
}
Definissez streaming: false pour attendre la reponse complete avant lâenvoi.
Routage multi-agents
Utilisez bindings pour router les DMs ou groupes Feishu vers differents 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: Open ID utilisateur (ou_xxx) ou identifiant de groupe (oc_xxx)
Voir Obtenir les identifiants de groupe/utilisateur pour les conseils de recherche.
Reference de configuration
Configuration complete : Configuration de la gateway
Options principales :
| Parametre | Description | Par defaut |
|---|---|---|
channels.feishu.enabled | Activer/desactiver le canal | true |
channels.feishu.domain | Domaine API (feishu ou lark) | feishu |
channels.feishu.connectionMode | Mode de transport des evenements | websocket |
channels.feishu.defaultAccount | ID de compte par defaut pour le routage sortant | default |
channels.feishu.verificationToken | Requis pour le mode webhook | - |
channels.feishu.encryptKey | Requis pour le mode webhook | - |
channels.feishu.webhookPath | Chemin de la route webhook | /feishu/events |
channels.feishu.webhookHost | Hote de liaison webhook | 127.0.0.1 |
channels.feishu.webhookPort | Port de liaison webhook | 3000 |
channels.feishu.accounts.<id>.appId | App ID | - |
channels.feishu.accounts.<id>.appSecret | App Secret | - |
channels.feishu.accounts.<id>.domain | Remplacement de domaine API par compte | feishu |
channels.feishu.dmPolicy | Politique DM | pairing |
channels.feishu.allowFrom | Liste dâautorisation DM (liste dâopen_id) | - |
channels.feishu.groupPolicy | Politique de groupe | open |
channels.feishu.groupAllowFrom | Liste dâautorisation de groupe | - |
channels.feishu.groups.<chat_id>.requireMention | Mention @ requise | true |
channels.feishu.groups.<chat_id>.enabled | Activer le groupe | true |
channels.feishu.textChunkLimit | Taille des morceaux de message | 2000 |
channels.feishu.mediaMaxMb | Limite de taille media | 30 |
channels.feishu.streaming | Activer la sortie en streaming par carte | true |
channels.feishu.blockStreaming | Activer le streaming par blocs | true |
Reference dmPolicy
| Valeur | Comportement |
|---|---|
"pairing" | Par defaut. Les utilisateurs inconnus recoivent un code dâappairage ; doit etre approuve |
"allowlist" | Seuls les utilisateurs dans allowFrom peuvent discuter |
"open" | Autoriser tous les utilisateurs (necessite "*" dans allowFrom) |
"disabled" | Desactiver les DMs |
Types de messages pris en charge
Reception
- Texte
- Texte enrichi (post)
- Images
- Fichiers
- Audio
- Video
- Stickers
Envoi
- Texte
- Images
- Fichiers
- Audio
- Texte enrichi (support partiel)