Aller au contenu

Feishu

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.


  1. Exécutez l'assistant de configuration du canal

    bash openclaw channels login --channel feishu Choisissez la configuration manuelle pour coller un App ID et un App Secret depuis la plateforme ouverte Feishu, ou choisissez la configuration QR pour créer un bot automatiquement. Si l’application mobile Feishu domestique ne réagit pas au code QR, relancez la configuration et choisissez la configuration manuelle.

  2. Une fois la configuration terminée, redémarrez la passerelle pour appliquer les modifications

    bash openclaw gateway restart


Configurez dmPolicy pour contrôler qui peut envoyer un DM au bot :

  • "pairing" - les utilisateurs inconnus reçoivent un code d’appariement ; approuvez via le CLI
  • "allowlist" - seuls les utilisateurs listés dans allowFrom peuvent chatter (par défaut : seul le propriétaire du bot)
  • "open" - autoriser les DMs 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
openclaw pairing list feishu
openclaw pairing approve feishu
### Discussions de groupe
**Stratégie de groupe** (`channels.feishu.groupPolicy`) :
| Valeur | Comportement |
| ------------- | --------------------------------------------------------------------------------------------------------- |
| `"open"` | Répondre à tous les messages dans les groupes |
| `"allowlist"` | Répondre uniquement aux groupes dans `groupAllowFrom` ou explicitement configurés sous `groups.

| |”disabled” | Désactiver tous les messages de groupe ; les entrées explicitesgroups.

` ne remplacent pas cela |

Par défaut : allowlist

Exigence de mention (channels.feishu.requireMention) :

  • true - exiger une @mention (par défaut)
  • false - répondre sans @mention
  • Remplacement par groupe : `channels.feishu.groups.

.requireMention`

  • Les @all et @_all de diffusion uniquement 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.

{
channels: {
feishu: {
groupPolicy: "open",
},
},
}

Autoriser tous les groupes, @mention toujours requise

Section intitulée « Autoriser tous les groupes, @mention toujours requise »
{
channels: {
feishu: {
groupPolicy: "open",
requireMention: true,
},
},
}
{
channels: {
feishu: {
groupPolicy: "allowlist",
// Group IDs look like: oc_xxx
groupAllowFrom: ["oc_xxx", "oc_yyy"],
},
},
}

En mode allowlist, vous pouvez également admettre un groupe en ajoutant une entrée `groups.

explicite. Les entrées explicites ne remplacent pasgroupPolicy: “disabled”. Les valeurs par défaut avec caractères génériques sous groups.*` configurent les groupes correspondants, mais ils n’admettent pas les groupes par eux-mêmes.

{
channels: {
feishu: {
groupPolicy: "allowlist",
groups: {
oc_xxx: {
requireMention: false,
},
},
},
},
}
{
channels: {
feishu: {
groupPolicy: "allowlist",
groupAllowFrom: ["oc_xxx"],
groups: {
oc_xxx: {
// User open_ids look like: ou_xxx
allowFrom: ["ou_user1", "ou_user2"],
},
},
},
},
}

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.

Obtenir l'ID de groupe

Démarrez la passerelle, envoyez un DM au bot, puis vérifiez les logs :

Fenêtre de terminal
openclaw logs --follow

Recherchez open_id dans la sortie des journaux. Vous pouvez également vérifier les demandes d’appariement en attente :

Fenêtre de terminal
openclaw pairing list feishu

CommandeDescription
/statusAfficher le statut du bot
/resetRéinitialiser la session actuelle
/modelAfficher ou changer le model d’IA

  1. Assurez-vous que le bot est ajouté au groupe
  2. Assurez-vous de @mentionner le bot (requis par défaut)
  3. Vérifiez que groupPolicy n’est pas "disabled"
  4. Vérifiez les journaux : openclaw logs --follow
  1. Assurez-vous que le bot est publié et approuvé dans Feishu Open Platform / Lark Developer
  2. Assurez-vous que l’abonnement aux événements inclut im.message.receive_v1
  3. Assurez-vous que la connexion persistante (WebSocket) est sélectionnée
  4. Assurez-vous que toutes les portées d’autorisation requises sont accordées
  5. Assurez-vous que la passerelle est en cours d’exécution : openclaw gateway status
  6. Vérifiez les journaux : openclaw logs --follow

La configuration QR ne réagit pas dans l’application mobile Feishu

Section intitulée « La configuration QR ne réagit pas dans l’application mobile Feishu »
  1. Relancez la configuration : openclaw channels login --channel feishu
  2. Choisissez la configuration manuelle
  3. Sur la plateforme ouverte Feishu, créez une application auto-construite et copiez son App ID et son App Secret
  4. Collez ces identifiants dans l’assistant de configuration
  1. Réinitialisez l’App Secret sur la plateforme ouverte Feishu / Lark Developer
  2. Mettez à jour la valeur dans votre configuration
  3. Redémarrez la passerelle : openclaw gateway restart

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

defaultAccount contrôle quel compte est 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 identifiants de fournisseur partagés globalement tout en remplaçant uniquement la voix, le model, la persona ou le mode automatique par compte.

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

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.

{
channels: {
feishu: {
streaming: true, // enable streaming card output (default: true)
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.

Réduisez le nombre d’appels API Feishu/Lark avec deux indicateurs optionnels :

  • typingIndicator (par défaut true) : définissez false pour ignorer les appels de réaction de frappe
  • resolveSenderNames (par défaut true) : définissez false pour ignorer les recherches de profil de l’expéditeur
{
channels: {
feishu: {
typingIndicator: false,
resolveSenderNames: false,
},
},
}

Feishu/Lark prend en charge l’ACP pour les DMs et les messages de fil de groupe. L’ACP Feishu/Lark est basée sur des commandes textuelles — il n’y a pas de menus de commandes slash natifs, utilisez donc les messages /acp ... directement dans la conversation.

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

Dans un DM ou un fil Feishu/Lark :

/acp spawn codex --thread here

--thread here fonctionne pour les DMs et les messages de fil Feishu/Lark. Les messages de suivi dans la conversation liée sont acheminés directement vers cette session ACP.

Utilisez bindings pour acheminer les DMs ou groupes Feishu/Lark vers différents agents.

{
agents: {
list: [{ id: "main" }, { id: "agent-a", workspace: "/home/user/agent-a" }, { id: "agent-b", workspace: "/home/user/agent-b" }],
},
bindings: [
{
agentId: "agent-a",
match: {
channel: "feishu",
peer: { kind: "direct", id: "ou_xxx" },
},
},
{
agentId: "agent-b",
match: {
channel: "feishu",
peer: { kind: "group", id: "oc_zzz" },
},
},
],
}

Champs de routage :

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

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


Configuration complète : configuration du Gateway

ParamètreDescriptionPar défaut
channels.feishu.enabledActiver/désactiver le channeltrue
channels.feishu.domainDomaine API (feishu ou lark)feishu
channels.feishu.connectionModeTransport d’événements (websocket ou webhook)websocket
channels.feishu.defaultAccountCompte 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 routage 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.

.appId | App ID | - | |channels.feishu.accounts.

.appSecret | App Secret | - | |channels.feishu.accounts.

.domain | Per-account domain override |feishu | |channels.feishu.accounts.

.tts | Per-account TTS override |messages.tts | |channels.feishu.dmPolicy | DM policy |allowlist | |channels.feishu.allowFrom | DM allowlist (open_id list) | [BotOwnerId] | |channels.feishu.groupPolicy | Group policy |allowlist | |channels.feishu.groupAllowFrom | Group allowlist | - | |channels.feishu.requireMention | Require @mention in groups |true | |channels.feishu.groups.

.requireMention| Per-group @mention override; explicit IDs also admit the group in allowlist mode | inherited | |channels.feishu.groups.

.enabled | Enable/disable a specific group |true | |channels.feishu.textChunkLimit | Message chunk size |2000 | |channels.feishu.mediaMaxMb | Media size limit |30 | |channels.feishu.streaming | Streaming card output |true | |channels.feishu.blockStreaming | Completed-block reply streaming |false | |channels.feishu.typingIndicator | Send typing reactions |true | |channels.feishu.resolveSenderNames | Resolve sender display names |true` |


  • ✅ Text
  • ✅ Rich text (post)
  • ✅ Images
  • ✅ Files
  • ✅ Audio
  • ✅ Video/media
  • ✅ Stickers

Les messages audio entrants Feishu/Lark sont normalisés sous forme de substituants média au lieu de JSON brut file_key. Lorsque tools.media.audio est configuré, OpenClaw télécharge la ressource de 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 directement le texte de la transcription dans la charge utile audio, ce texte est utilisé sans nouvel appel ASR. Sans fournisseur de transcription audio, l’agent reçoit toujours un substituant `

` ainsi que la pièce jointe sauvegardée, et non la charge utile de ressource brute Feishu.

  • ✅ Texte
  • ✅ Images
  • ✅ Fichiers
  • ✅ Audio
  • ✅ Vidéo/média
  • ✅ Cartes interactives (y compris les mises à jour en streaming)
  • ⚠️ Texte enrichi (formatage de style publication ; 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 MP3/WAV/M4A et autres formats audio probables 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 de notes vocales TTS). Les pièces jointes MP3 ordinaires restent des fichiers normaux. Si ffmpeg est manquant ou si la conversion échoue, OpenClaw revient à une pièce jointe de fichier et consigne la raison.

  • ✅ Réponses en ligne
  • ✅ Réponses dans les fils
  • ✅ 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 de démarrage de sujet natif omet thread_id, OpenClaw le complète à partir de Feishu avant d’acheminer le tour. Les réponses de groupe normales que OpenClaw transforme en fils de discussion 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.