Slack
Status: pronto para produção para DMs + canais por meio de integrações de apps do Slack. O modo padrão é Socket Mode; URLs de solicitação HTTP também são compatíveis.Pareamento
As DMs do Slack usam o modo de pareamento por padrão.
Comandos de barra
Comportamento nativo de comandos e catálogo de comandos.
Solução de problemas de canal
Diagnósticos entre canais e guias de correção.
Configuração rápida
- Socket Mode (padrão)
- URLs de solicitação HTTP
Criar um novo app do Slack
Nas configurações do app do Slack, pressione o botão Create New App:
- escolha from a manifest e selecione um workspace para seu app
- cole o manifesto de exemplo abaixo e continue para criar
- gere um App-Level Token (
xapp-...) comconnections:write - instale o app e copie o Bot Token (
xoxb-...) exibido
Lista de verificação de manifesto e escopos
- Socket Mode (padrão)
- URLs de solicitação HTTP
Escopos opcionais de autoria (operações de escrita)
Escopos opcionais de autoria (operações de escrita)
Adicione o escopo de bot
chat:write.customize se quiser que as mensagens de saída usem a identidade do agente ativo (nome de usuário e ícone personalizados) em vez da identidade padrão do app do Slack.Se você usar um ícone de emoji, o Slack espera a sintaxe :emoji_name:.Escopos opcionais de token de usuário (operações de leitura)
Escopos opcionais de token de usuário (operações de leitura)
Se você configurar
channels.slack.userToken, os escopos típicos de leitura são:channels:history,groups:history,im:history,mpim:historychannels:read,groups:read,im:read,mpim:readusers:readreactions:readpins:reademoji:readsearch:read(se você depende de leituras da busca do Slack)
Modelo de token
botToken+appTokensão obrigatórios para Socket Mode.- O modo HTTP exige
botToken+signingSecret. botToken,appToken,signingSecreteuserTokenaceitam strings em texto simples ou objetos SecretRef.- Tokens na configuração substituem o fallback por variável de ambiente.
- O fallback por variável de ambiente
SLACK_BOT_TOKEN/SLACK_APP_TOKENse aplica apenas à conta padrão. userToken(xoxp-...) é somente de configuração (sem fallback por variável de ambiente) e assume por padrão comportamento somente leitura (userTokenReadOnly: true).
- A inspeção da conta do Slack rastreia campos
*Sourcee*Statuspor credencial (botToken,appToken,signingSecret,userToken). - O status é
available,configured_unavailableoumissing. configured_unavailablesignifica que a conta está configurada por SecretRef ou outra fonte secreta não inline, mas o caminho atual de comando/runtime não conseguiu resolver o valor real.- No modo HTTP,
signingSecretStatusé incluído; em Socket Mode, o par obrigatório ébotTokenStatus+appTokenStatus.
Ações e controles
As ações do Slack são controladas porchannels.slack.actions.*.
Grupos de ações disponíveis nas ferramentas atuais do Slack:
| Grupo | Padrão |
|---|---|
| messages | ativado |
| reactions | ativado |
| pins | ativado |
| memberInfo | ativado |
| emojiList | ativado |
send, upload-file, download-file, read, edit, delete, pin, unpin, list-pins, member-info e emoji-list.
Controle de acesso e roteamento
- Política de DM
- Política de canal
- Menções e usuários do canal
channels.slack.dmPolicy controla o acesso a DMs (legado: channels.slack.dm.policy):pairing(padrão)allowlistopen(exige quechannels.slack.allowFrominclua"*"; legado:channels.slack.dm.allowFrom)disabled
dm.enabled(padrão true)channels.slack.allowFrom(preferido)dm.allowFrom(legado)dm.groupEnabled(DMs em grupo têm padrão false)dm.groupChannels(lista de permissões opcional para MPIM)
channels.slack.accounts.default.allowFromaplica-se apenas à contadefault.- Contas nomeadas herdam
channels.slack.allowFromquando seu próprioallowFromnão está definido. - Contas nomeadas não herdam
channels.slack.accounts.default.allowFrom.
openclaw pairing approve slack <code>.Threads, sessões e tags de resposta
- DMs são roteadas como
direct; canais comochannel; MPIMs comogroup. - Com o padrão
session.dmScope=main, as DMs do Slack são consolidadas na sessão principal do agente. - Sessões de canal:
agent:<agentId>:slack:channel:<channelId>. - Respostas em thread podem criar sufixos de sessão de thread (
:thread:<threadTs>) quando aplicável. - O padrão de
channels.slack.thread.historyScopeéthread; o padrão dethread.inheritParentéfalse. channels.slack.thread.initialHistoryLimitcontrola quantas mensagens existentes da thread são buscadas quando uma nova sessão de thread começa (padrão20; defina0para desativar).channels.slack.thread.requireExplicitMention(padrãofalse): quandotrue, suprime menções implícitas em thread para que o bot responda apenas a menções explícitas@botdentro de threads, mesmo quando o bot já participou da thread. Sem isso, respostas em uma thread com participação do bot ignoram o controle derequireMention.
channels.slack.replyToMode:off|first|all|batched(padrãooff)channels.slack.replyToModeByChatType: pordirect|group|channel- fallback legado para chats diretos:
channels.slack.dm.replyToMode
[[reply_to_current]][[reply_to:<id>]]
replyToMode="off" desativa todo o encadeamento de respostas no Slack, incluindo tags explícitas [[reply_to_*]]. Isso difere do Telegram, onde tags explícitas ainda são respeitadas no modo "off". A diferença reflete os modelos de thread da plataforma: as threads do Slack ocultam mensagens do canal, enquanto as respostas do Telegram permanecem visíveis no fluxo principal do chat.
Reações de confirmação
ackReaction envia um emoji de confirmação enquanto o OpenClaw está processando uma mensagem de entrada.
Ordem de resolução:
channels.slack.accounts.<accountId>.ackReactionchannels.slack.ackReactionmessages.ackReaction- fallback para emoji da identidade do agente (
agents.list[].identity.emoji, senão ”👀”)
- O Slack espera shortcodes (por exemplo,
"eyes"). - Use
""para desativar a reação para a conta do Slack ou globalmente.
Streaming de texto
channels.slack.streaming controla o comportamento de prévia ao vivo:
off: desativa o streaming de prévia ao vivo.partial(padrão): substitui o texto de prévia pela saída parcial mais recente.block: acrescenta atualizações de prévia em blocos.progress: mostra texto de status de progresso durante a geração e depois envia o texto final.
channels.slack.nativeStreaming controla o streaming nativo de texto do Slack quando streaming é partial (padrão: true).
- Uma thread de resposta precisa estar disponível para que o streaming nativo de texto apareça. A seleção da thread ainda segue
replyToMode. Sem isso, a prévia normal em rascunho é usada. - Mídia e payloads não textuais voltam para a entrega normal.
- Se o streaming falhar no meio da resposta, o OpenClaw volta para a entrega normal para os payloads restantes.
channels.slack.streamMode(replace | status_final | append) é migrado automaticamente parachannels.slack.streaming.- boolean
channels.slack.streamingé migrado automaticamente parachannels.slack.nativeStreaming.
Fallback de reação de digitação
typingReaction adiciona uma reação temporária à mensagem recebida no Slack enquanto o OpenClaw está processando uma resposta e a remove quando a execução termina. Isso é mais útil fora de respostas em thread, que usam um indicador de status padrão “is typing…”.
Ordem de resolução:
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
- O Slack espera shortcodes (por exemplo,
"hourglass_flowing_sand"). - A reação é best-effort e a limpeza é tentada automaticamente depois que a resposta ou o caminho de falha termina.
Mídia, fragmentação e entrega
Anexos de entrada
Anexos de entrada
Anexos de arquivo do Slack são baixados de URLs privadas hospedadas pelo Slack (fluxo de solicitação autenticado por token) e gravados no armazenamento de mídia quando a busca é bem-sucedida e os limites de tamanho permitem.O limite de tamanho de entrada em runtime tem padrão de
20MB, a menos que seja substituído por channels.slack.mediaMaxMb.Texto e arquivos de saída
Texto e arquivos de saída
- fragmentos de texto usam
channels.slack.textChunkLimit(padrão 4000) channels.slack.chunkMode="newline"ativa a divisão priorizando parágrafos- envios de arquivos usam as APIs de upload do Slack e podem incluir respostas em thread (
thread_ts) - o limite de mídia de saída segue
channels.slack.mediaMaxMbquando configurado; caso contrário, envios de canal usam os padrões por tipo MIME do pipeline de mídia
Destinos de entrega
Destinos de entrega
Destinos explícitos preferidos:
user:<id>para DMschannel:<id>para canais
Comandos e comportamento de slash
- O modo automático de comando nativo está desativado para Slack (
commands.native: "auto"não ativa comandos nativos do Slack). - Ative os manipuladores nativos de comando do Slack com
channels.slack.commands.native: true(ou globalcommands.native: true). - Quando os comandos nativos estão ativados, registre os comandos de barra correspondentes no Slack (nomes
/<command>), com uma exceção:- registre
/agentstatuspara o comando de status (o Slack reserva/status)
- registre
- Se os comandos nativos não estiverem ativados, você pode executar um único comando de barra configurado por meio de
channels.slack.slashCommand. - Menus nativos de argumentos agora adaptam sua estratégia de renderização:
- até 5 opções: blocos de botão
- de 6 a 100 opções: menu de seleção estático
- mais de 100 opções: seleção externa com filtragem assíncrona de opções quando manipuladores de opções de interatividade estão disponíveis
- se valores de opção codificados excederem os limites do Slack, o fluxo volta para botões
- Para payloads longos de opção, menus de argumento de comando de barra usam um diálogo de confirmação antes de despachar um valor selecionado.
enabled: falsename: "openclaw"sessionPrefix: "slack:slash"ephemeral: true
agent:<agentId>:slack:slash:<userId>
CommandTargetSessionKey).
Respostas interativas
O Slack pode renderizar controles interativos de resposta criados pelo agente, mas esse recurso está desativado por padrão. Ative globalmente:[[slack_buttons: Approve:approve, Reject:reject]][[slack_select: Choose a target | Canary:canary, Production:production]]
- Esta é uma UI específica do Slack. Outros canais não traduzem diretivas do Slack Block Kit para seus próprios sistemas de botões.
- Os valores de callback interativo são tokens opacos gerados pelo OpenClaw, não valores brutos criados pelo agente.
- Se os blocos interativos gerados excederem os limites do Slack Block Kit, o OpenClaw volta para a resposta de texto original em vez de enviar um payload de blocos inválido.
Aprovações de exec no Slack
O Slack pode atuar como um cliente nativo de aprovação com botões interativos e interações, em vez de recorrer à Web UI ou ao terminal.- Aprovações de exec usam
channels.slack.execApprovals.*para roteamento nativo em DM/canal. - Aprovações de plugin ainda podem ser resolvidas pela mesma superfície nativa de botões do Slack quando a solicitação já chega ao Slack e o tipo de id de aprovação é
plugin:. - A autorização do aprovador ainda é aplicada: somente usuários identificados como aprovadores podem aprovar ou negar solicitações pelo Slack.
interactivity está ativado nas configurações do seu app do Slack, os prompts de aprovação são renderizados como botões do Block Kit diretamente na conversa.
Quando esses botões estão presentes, eles são a UX principal de aprovação; o OpenClaw
deve incluir um comando manual /approve somente quando o resultado da ferramenta disser que
aprovações no chat não estão disponíveis ou que a aprovação manual é o único caminho.
Caminho de configuração:
channels.slack.execApprovals.enabledchannels.slack.execApprovals.approvers(opcional; usa fallback paracommands.ownerAllowFromquando possível)channels.slack.execApprovals.target(dm|channel|both, padrão:dm)agentFilter,sessionFilter
enabled não está definido ou é "auto" e pelo menos um
aprovador é resolvido. Defina enabled: false para desativar explicitamente o Slack como cliente nativo de aprovação.
Defina enabled: true para forçar aprovações nativas quando aprovadores forem resolvidos.
Comportamento padrão sem configuração explícita de aprovação de exec no Slack:
approvals.exec é separado. Use-o somente quando prompts de aprovação de exec também precisarem
ser encaminhados para outros chats ou destinos explícitos fora de banda. O encaminhamento compartilhado de approvals.plugin também é
separado; botões nativos do Slack ainda podem resolver aprovações de plugin quando essas solicitações já chegam
ao Slack.
O mesmo chat /approve também funciona em canais e DMs do Slack que já oferecem suporte a comandos. Consulte Aprovações de exec para o modelo completo de encaminhamento de aprovações.
Eventos e comportamento operacional
- Edições/exclusões de mensagem/transmissões de thread são mapeadas para eventos de sistema.
- Eventos de adicionar/remover reação são mapeados para eventos de sistema.
- Eventos de entrada/saída de membro, canal criado/renomeado e adicionar/remover pin são mapeados para eventos de sistema.
channel_id_changedpode migrar chaves de configuração de canal quandoconfigWritesestá ativado.- Metadados de tópico/finalidade do canal são tratados como contexto não confiável e podem ser injetados no contexto de roteamento.
- O iniciador da thread e a semeadura inicial do contexto do histórico da thread são filtrados pelas listas configuradas de permissões de remetente quando aplicável.
- Ações de bloco e interações de modal emitem eventos de sistema estruturados
Slack interaction: ...com campos ricos de payload:- ações de bloco: valores selecionados, rótulos, valores de seletor e metadados
workflow_* - eventos de modal
view_submissioneview_closedcom metadados de canal roteados e entradas de formulário
- ações de bloco: valores selecionados, rótulos, valores de seletor e metadados
Ponteiros de referência de configuração
Referência principal:-
Referência de configuração - Slack
Campos de Slack de alto sinal:
- modo/auth:
mode,botToken,appToken,signingSecret,webhookPath,accounts.* - acesso a DM:
dm.enabled,dmPolicy,allowFrom(legado:dm.policy,dm.allowFrom),dm.groupEnabled,dm.groupChannels - alternância de compatibilidade:
dangerouslyAllowNameMatching(último recurso; mantenha desativado a menos que seja necessário) - acesso a canal:
groupPolicy,channels.*,channels.*.users,channels.*.requireMention - threading/histórico:
replyToMode,replyToModeByChatType,thread.*,historyLimit,dmHistoryLimit,dms.*.historyLimit - entrega:
textChunkLimit,chunkMode,mediaMaxMb,streaming,nativeStreaming - operações/recursos:
configWrites,commands.native,slashCommand.*,actions.*,userToken,userTokenReadOnly
- modo/auth:
Solução de problemas
Sem respostas em canais
Sem respostas em canais
Verifique, nesta ordem:
groupPolicy- lista de permissões de canal (
channels.slack.channels) requireMention- lista de permissões
userspor canal
Mensagens de DM ignoradas
Mensagens de DM ignoradas
Verifique:
channels.slack.dm.enabledchannels.slack.dmPolicy(ou legadochannels.slack.dm.policy)- aprovações de pareamento / entradas de lista de permissões
O modo socket não está conectando
O modo socket não está conectando
Valide os tokens de bot + app e a ativação do Socket Mode nas configurações do app do Slack.Se
openclaw channels status --probe --json mostrar botTokenStatus ou
appTokenStatus: "configured_unavailable", a conta do Slack está
configurada, mas o runtime atual não conseguiu resolver o valor
respaldado por SecretRef.O modo HTTP não está recebendo eventos
O modo HTTP não está recebendo eventos
Valide:
- signing secret
- caminho do webhook
- URLs de solicitação do Slack (Events + Interactivity + Slash Commands)
webhookPathexclusivo por conta HTTP
signingSecretStatus: "configured_unavailable" aparecer nos snapshots
da conta, a conta HTTP está configurada, mas o runtime atual não conseguiu
resolver o signing secret respaldado por SecretRef.Comandos nativos/slash não estão disparando
Comandos nativos/slash não estão disparando
Verifique se a sua intenção era:
- modo de comando nativo (
channels.slack.commands.native: true) com comandos de barra correspondentes registrados no Slack - ou modo de comando de barra único (
channels.slack.slashCommand.enabled: true)
commands.useAccessGroups e as listas de permissões de canal/usuário.