Slack
Status: pronto para produção para DMs + canais por meio de integrações de aplicativo do Slack. O modo padrão é Socket Mode; o modo HTTP Events API também é compatível.Pairing
As DMs do Slack usam o modo de pairing por padrão.
Slash commands
Comportamento nativo de comandos e catálogo de comandos.
Channel troubleshooting
Diagnósticos entre canais e playbooks de correção.
Configuração rápida
- Socket Mode (default)
- HTTP Events API mode
Create Slack app and tokens
Nas configurações do aplicativo do Slack:
- habilite Socket Mode
- crie um App Token (
xapp-...) comconnections:write - instale o aplicativo e copie o Bot Token (
xoxb-...)
Subscribe app events
Assine eventos do bot para:
app_mentionmessage.channels,message.groups,message.im,message.mpimreaction_added,reaction_removedmember_joined_channel,member_left_channelchannel_renamepin_added,pin_removed
Checklist de manifesto e escopo
Slack app manifest example
Slack app manifest example
Optional user-token scopes (read operations)
Optional user-token scopes (read operations)
Se você configurar
channels.slack.userToken, os escopos de leitura típicos 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 pesquisa 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.- Os 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 somente à conta padrão. userToken(xoxp-...) é somente de configuração (sem fallback por variável de ambiente) e usa por padrão o comportamento somente leitura (userTokenReadOnly: true).- Opcional: adicione
chat:write.customizese quiser que as mensagens de saída usem a identidade do agente ativo (usernamee ícone personalizados).icon_emojiusa a sintaxe:emoji_name:.
- 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 meio de SecretRef ou outra fonte de segredo não inline, mas o caminho atual de comando/tempo de execução 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 | habilitado |
| reactions | habilitado |
| pins | habilitado |
| memberInfo | habilitado |
| emojiList | habilitado |
send, upload-file, download-file, read, edit, delete, pin, unpin, list-pins, member-info e emoji-list.
Controle de acesso e roteamento
- DM policy
- Channel policy
- Mentions and channel users
channels.slack.dmPolicy controla o acesso a DM (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 usam false por padrão)dm.groupChannels(lista de permissões MPIM opcional)
channels.slack.accounts.default.allowFromse aplica somente à 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 é iniciada (padrão20; defina0para desativar).
channels.slack.replyToMode:off|first|all(padrãooff)channels.slack.replyToModeByChatType: pordirect|group|channel- fallback legado para conversas diretas:
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, em que tags explícitas ainda são respeitadas no modo "off". A diferença reflete os modelos de thread das plataformas: no Slack, threads ocultam mensagens do canal, enquanto no Telegram as respostas continuam visíveis no fluxo principal da conversa.
Reações de confirmação
ackReaction envia um emoji de confirmação enquanto o OpenClaw está processando uma mensagem recebida.
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 visualização ao vivo:
off: desativa o streaming de visualização ao vivo.partial(padrão): substitui o texto de visualização pela saída parcial mais recente.block: acrescenta atualizações de visualização em blocos.progress: mostra texto de status de progresso durante a geração e, em seguida, envia o texto final.
channels.slack.nativeStreaming controla o streaming de texto nativo do Slack quando streaming é partial (padrão: true).
- Uma thread de resposta deve estar disponível para que o streaming de texto nativo apareça. A seleção de thread ainda segue
replyToMode. Sem isso, a visualização normal de rascunho é usada. - Mídia e cargas não textuais usam o fallback para entrega normal.
- Se o streaming falhar no meio da resposta, o OpenClaw usa o fallback para entrega normal das cargas restantes.
channels.slack.streamMode(replace | status_final | append) é migrado automaticamente parachannels.slack.streaming.- booleano
channels.slack.streamingé migrado automaticamente parachannels.slack.nativeStreaming.
Fallback de reação de digitação
typingReaction adiciona uma reação temporária à mensagem recebida do 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 padrão de status “está digitando…”.
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 após a conclusão da resposta ou do caminho de falha.
Mídia, fragmentação e entrega
Inbound attachments
Inbound attachments
Anexos de arquivo do Slack são baixados de URLs privadas hospedadas pelo Slack (fluxo de requisição autenticada 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 tempo de execução usa
20MB por padrão, a menos que seja substituído por channels.slack.mediaMaxMb.Outbound text and files
Outbound text and files
- fragmentos de texto usam
channels.slack.textChunkLimit(padrão 4000) channels.slack.chunkMode="newline"habilita divisão priorizando parágrafos- envios de arquivo usam 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 padrões por tipo MIME do pipeline de mídia
Delivery targets
Delivery targets
Destinos explícitos preferidos:
user:<id>para DMschannel:<id>para canais
Comandos e comportamento de Slash
- O modo automático de comando nativo fica desativado para Slack (
commands.native: "auto"não habilita comandos nativos do Slack). - Habilite manipuladores de comando nativos do Slack com
channels.slack.commands.native: true(ou globalcommands.native: true). - Quando os comandos nativos estiverem habilitados, registre comandos Slash 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 habilitados, você poderá executar um único comando Slash configurado por meio de
channels.slack.slashCommand. - Os menus nativos de argumentos agora adaptam sua estratégia de renderização:
- até 5 opções: blocos de botões
- 6-100 opções: menu de seleção estática
- mais de 100 opções: seleção externa com filtragem assíncrona de opções quando os handlers de opções de interatividade estiverem disponíveis
- se valores de opção codificados excederem os limites do Slack, o fluxo usa o fallback para botões
- Para cargas longas de opções, os menus de argumento de comando Slash 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 de resposta interativa criados pelo agente, mas esse recurso fica desativado por padrão. Habilite globalmente:[[slack_buttons: Approve:approve, Reject:reject]][[slack_select: Choose a target | Canary:canary, Production:production]]
- Esta é uma interface específica do Slack. Outros canais não traduzem diretivas de 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 usa o fallback para a resposta de texto original em vez de enviar uma carga inválida de blocos.
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 usar o fallback para a interface web ou terminal.- As 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á cai no Slack e o tipo de id de aprovação é
plugin:. - A autorização do aprovador continua sendo aplicada: apenas usuários identificados como aprovadores podem aprovar ou negar solicitações pelo Slack.
interactivity está habilitado nas configurações do seu aplicativo 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 só deve incluir um comando manual /approve quando o resultado da ferramenta disser que aprovações pela conversa não estão disponíveis ou quando a aprovação manual for 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 para Slack:
approvals.exec é separado. Use-o somente quando os prompts de aprovação de exec também precisarem ser roteados para outras conversas ou destinos explícitos fora de banda. O encaminhamento compartilhado 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 /approve na mesma conversa também funciona em canais e DMs do Slack que já oferecem suporte a comandos. Consulte Exec approvals 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 do sistema.
- Eventos de adicionar/remover reação são mapeados para eventos do sistema.
- Eventos de entrada/saída de membro, criação/renomeação de canal e adicionar/remover fixação são mapeados para eventos do sistema.
channel_id_changedpode migrar chaves de configuração de canal quandoconfigWritesestiver habilitado.- 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 de contexto do histórico da thread são filtrados pelas listas de permissões de remetente configuradas quando aplicável.
- Ações de bloco e interações de modal emitem eventos estruturados do sistema
Slack interaction: ...com campos de carga avançados:- 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 para a referência de configuração
Referência principal:-
Configuration reference - Slack
Campos de Slack de alto sinal:
- modo/autenticação:
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/autenticação:
Solução de problemas
No replies in channels
No replies in channels
Verifique, em ordem:
groupPolicy- lista de permissões do canal (
channels.slack.channels) requireMention- lista de permissões
userspor canal
DM messages ignored
DM messages ignored
Verifique:
channels.slack.dm.enabledchannels.slack.dmPolicy(ou legadochannels.slack.dm.policy)- aprovações de pairing / entradas de lista de permissões
Socket mode not connecting
Socket mode not connecting
Valide bot + app tokens e a habilitação de Socket Mode nas configurações do aplicativo do Slack.Se
openclaw channels status --probe --json mostrar botTokenStatus ou
appTokenStatus: "configured_unavailable", a conta do Slack está
configurada, mas o tempo de execução atual não conseguiu resolver o valor
com suporte de SecretRef.HTTP mode not receiving events
HTTP mode not receiving events
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
instantâneos da conta, a conta HTTP está configurada, mas o tempo de execução atual não conseguiu
resolver o signing secret com suporte de SecretRef.Native/slash commands not firing
Native/slash commands not firing
Verifique se você pretendia usar:
- modo de comando nativo (
channels.slack.commands.native: true) com comandos Slash correspondentes registrados no Slack - ou modo de comando Slash único (
channels.slack.slashCommand.enabled: true)
commands.useAccessGroups e listas de permissões de canal/usuário.