Saltar para o conteúdo principal

Bot Feishu

Feishu (Lark) é uma plataforma de chat corporativo usada por empresas para mensagens e colaboração. Este plugin conecta o OpenClaw a um bot Feishu/Lark usando a assinatura de eventos WebSocket da plataforma, para que as mensagens possam ser recebidas sem expor uma URL pública de webhook.

Plugin necessário

Instale o plugin Feishu:
openclaw plugins install @openclaw/feishu
Checkout local (ao executar a partir de um repositório git):
openclaw plugins install ./extensions/feishu

Início rápido

Há duas maneiras de adicionar o canal Feishu:

Método 1: assistente de onboarding (recomendado)

Se você acabou de instalar o OpenClaw, execute o assistente:
openclaw onboard
O assistente guia você por:
  1. Criar um app Feishu e coletar credenciais
  2. Configurar as credenciais do app no OpenClaw
  3. Iniciar o gateway
Após a configuração, verifique o status do gateway:
  • openclaw gateway status
  • openclaw logs --follow

Método 2: configuração da CLI

Se você já concluiu a instalação inicial, adicione o canal via CLI:
openclaw channels add
Escolha Feishu e, em seguida, informe o App ID e o App Secret. Após a configuração, gerencie o gateway:
  • openclaw gateway status
  • openclaw gateway restart
  • openclaw logs --follow

Etapa 1: Criar um app Feishu

1. Abrir o Feishu Open Platform

Acesse o Feishu Open Platform e faça login. Tenants Lark (global) devem usar https://open.larksuite.com/app e definir domain: "lark" na configuração do Feishu.

2. Criar um app

  1. Clique em Create enterprise app
  2. Preencha o nome e a descrição do app
  3. Escolha um ícone para o app
Create enterprise app

3. Copiar credenciais

Em Credentials & Basic Info, copie:
  • App ID (formato: cli_xxx)
  • Segredo do aplicativo
Importante: mantenha o App Secret em sigilo. Get credentials

4. Configurar permissões

Em Permissions, clique em Batch import e cole:
{
  "scopes": {
    "tenant": [
      "aily:file:read",
      "aily:file:write",
      "application:application.app_message_stats.overview:readonly",
      "application:application:self_manage",
      "application:bot.menu: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

5. Ativar a capacidade de bot

Em App Capability > Bot:
  1. Ative a capacidade de bot
  2. Defina o nome do bot
Enable bot capability

6. Configurar assinatura de eventos

⚠️ Importante: antes de configurar a assinatura de eventos, certifique-se de que:
  1. Você já executou openclaw channels add para o Feishu
  2. O gateway está em execução (openclaw gateway status)
Em Event Subscription:
  1. Escolha Use long connection to receive events (WebSocket)
  2. Adicione o evento: im.message.receive_v1
⚠️ Se o gateway não estiver em execução, a configuração de conexão longa pode falhar ao salvar. Configure event subscription

7. Publicar o app

  1. Crie uma versão em Version Management & Release
  2. Envie para revisão e publique
  3. Aguarde a aprovação do administrador (apps corporativos geralmente são aprovados automaticamente)

Etapa 2: Configurar o OpenClaw

Configurar com o assistente (recomendado)

openclaw channels add
Escolha Feishu e cole seu App ID e App Secret.

Configurar via arquivo de configuração

Edite ~/.openclaw/openclaw.json:
{
  channels: {
    feishu: {
      enabled: true,
      dmPolicy: "pairing",
      accounts: {
        main: {
          appId: "cli_xxx",
          appSecret: "xxx",
          botName: "My AI assistant",
        },
      },
    },
  },
}

Configurar via variáveis de ambiente

export FEISHU_APP_ID="cli_xxx"
export FEISHU_APP_SECRET="xxx"

Domínio Lark (global)

Se o seu tenant estiver no Lark (internacional), defina o domínio como lark (ou uma string de domínio completa). Você pode definir isso em channels.feishu.domain ou por conta (channels.feishu.accounts.<id>.domain).
{
  channels: {
    feishu: {
      domain: "lark",
      accounts: {
        main: {
          appId: "cli_xxx",
          appSecret: "xxx",
        },
      },
    },
  },
}

Etapa 3: Iniciar + testar

1. Iniciar o gateway

openclaw gateway

2. Enviar uma mensagem de teste

No Feishu, encontre seu bot e envie uma mensagem.

3. Aprovar pareamento

Por padrão, o bot responde com um código de pareamento. Aprove-o:
openclaw pairing approve feishu <CODE>
Após a aprovação, você pode conversar normalmente.

Visão geral

  • Canal de bot Feishu: bot Feishu gerenciado pelo gateway
  • Roteamento determinístico: as respostas sempre retornam ao Feishu
  • Isolamento de sessão: DMs compartilham uma sessão principal; grupos são isolados
  • Conexão WebSocket: conexão longa via SDK do Feishu, sem necessidade de URL pública

Controle de acesso

Mensagens diretas

  • Padrão: dmPolicy: "pairing" (usuários desconhecidos recebem um código de pareamento)
  • Aprovar pareamento:
    openclaw pairing list feishu
    openclaw pairing approve feishu <CODE>
    
  • Modo de lista de permissões: defina channels.feishu.allowFrom com Open IDs permitidos

Chats em grupo

1. Política de grupo (channels.feishu.groupPolicy):
  • "open" = permitir todos nos grupos (padrão)
  • "allowlist" = permitir apenas groupAllowFrom
  • "disabled" = desativar mensagens em grupo
2. Requisito de menção (channels.feishu.groups.<chat_id>.requireMention):
  • true = exigir @menção (padrão)
  • false = responder sem menções

Exemplos de configuração de grupos

Permitir todos os grupos, exigir @menção (padrão)

{
  channels: {
    feishu: {
      groupPolicy: "open",
      // Default requireMention: true
    },
  },
}

Permitir todos os grupos, sem exigir @menção

{
  channels: {
    feishu: {
      groups: {
        oc_xxx: { requireMention: false },
      },
    },
  },
}

Permitir apenas usuários específicos em grupos

{
  channels: {
    feishu: {
      groupPolicy: "allowlist",
      groupAllowFrom: ["ou_xxx", "ou_yyy"],
    },
  },
}

Obter IDs de grupo/usuário

IDs de grupo (chat_id)

Os IDs de grupo têm o formato oc_xxx. Método 1 (recomendado)
  1. Inicie o gateway e @mencione o bot no grupo
  2. Execute openclaw logs --follow e procure por chat_id
Método 2 Use o depurador da API do Feishu para listar chats em grupo.

IDs de usuário (open_id)

Os IDs de usuário têm o formato ou_xxx. Método 1 (recomendado)
  1. Inicie o gateway e envie uma DM ao bot
  2. Execute openclaw logs --follow e procure por open_id
Método 2 Verifique solicitações de pareamento para Open IDs de usuários:
openclaw pairing list feishu

Comandos comuns

ComandoDescrição
/statusMostrar status do bot
/resetRedefinir a sessão
/modelMostrar/trocar modelo
Nota: o Feishu ainda não oferece suporte a menus de comandos nativos, portanto os comandos devem ser enviados como texto.

Comandos de gerenciamento do gateway

ComandoDescrição
openclaw gateway statusMostrar status do gateway
openclaw gateway installInstalar/iniciar o serviço do gateway
openclaw gateway stopParar o serviço do gateway
openclaw gateway restartReiniciar o serviço do gateway
openclaw logs --followAcompanhar logs do gateway

Solução de problemas

O bot não responde em chats de grupo

  1. Certifique-se de que o bot foi adicionado ao grupo
  2. Certifique-se de @mencionar o bot (comportamento padrão)
  3. Verifique se groupPolicy não está definido como "disabled"
  4. Verifique os logs: openclaw logs --follow

O bot não recebe mensagens

  1. Certifique-se de que o app está publicado e aprovado
  2. Certifique-se de que a assinatura de eventos inclui im.message.receive_v1
  3. Certifique-se de que a conexão longa está habilitada
  4. Certifique-se de que as permissões do app estão completas
  5. Certifique-se de que o gateway está em execução: openclaw gateway status
  6. Verifique os logs: openclaw logs --follow

Vazamento do App Secret

  1. Redefina o App Secret no Feishu Open Platform
  2. Atualize o App Secret na sua configuração
  3. Reinicie o gateway

Falhas no envio de mensagens

  1. Certifique-se de que o app possui a permissão im:message:send_as_bot
  2. Certifique-se de que o app está publicado
  3. Verifique os logs para erros detalhados

Configuração avançada

Múltiplas contas

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

Limites de mensagem

  • textChunkLimit: tamanho do bloco de texto de saída (padrão: 2000 caracteres)
  • mediaMaxMb: limite de upload/download de mídia (padrão: 30MB)

Streaming

O Feishu oferece suporte a respostas em streaming via cartões interativos. Quando habilitado, o bot atualiza um cartão conforme gera o texto.
{
  channels: {
    feishu: {
      streaming: true, // enable streaming card output (default true)
      blockStreaming: true, // enable block-level streaming (default true)
    },
  },
}
Defina streaming: false para aguardar a resposta completa antes de enviar.

Roteamento multiagente

Use bindings para rotear DMs ou grupos do Feishu para diferentes agentes.
{
  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" },
      },
    },
  ],
}
Campos de roteamento:
  • match.channel: "feishu"
  • match.peer.kind: "direct" or "group"
  • match.peer.id: Open ID do usuário (ou_xxx) ou ID do grupo (oc_xxx)
Consulte Obter IDs de grupo/usuário para dicas de consulta.

Referência de configuração

Configuração completa: Configuração do Gateway Opções principais:
ConfiguraçãoDescriçãoPadrão
channels.feishu.enabledAtivar/desativar canaltrue
channels.feishu.domainDomínio da API (feishu ou lark)feishu
channels.feishu.accounts.&lt;id&gt;.appIdApp ID-
channels.feishu.accounts.&lt;id&gt;.appSecretApp Secret-
channels.feishu.accounts.&lt;id&gt;.domainSubstituição de domínio da API por contafeishu
channels.feishu.dmPolicyPolítica de DMpairing
channels.feishu.allowFromLista de permissões de DM (lista de open_id)-
channels.feishu.groupPolicyPolítica de grupoopen
channels.feishu.groupAllowFromLista de permissões de grupo-
channels.feishu.groups.<chat_id>.requireMentionExigir @mentiontrue
channels.feishu.groups.<chat_id>.enabledAtivar grupotrue
channels.feishu.textChunkLimitTamanho do bloco de mensagem2000
channels.feishu.mediaMaxMbLimite de tamanho de mídia30
channels.feishu.streamingAtivar saída de cartão em streamingtrue
channels.feishu.blockStreamingAtivar streaming em blocostrue

Referência dmPolicy

ValorComportamento
"pairing"Padrão. Usuários desconhecidos recebem um código de pareamento; devem ser aprovados
"allowlist"Apenas usuários em allowFrom podem conversar
"open"Permitir todos os usuários (requer "*" em allowFrom)
"disabled"Desativar DMs

Tipos de mensagem suportados

Receber

  • ✅ Texto
  • ✅ Texto rico (post)
  • ✅ Imagens
  • ✅ Arquivos
  • ✅ Áudio
  • ✅ Vídeo
  • ✅ Stickers

Enviar

  • ✅ Texto
  • ✅ Imagens
  • ✅ Arquivos
  • ✅ Áudio
  • ⚠️ Texto rico (suporte parcial)