chore(i18n): refresh pt-BR translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-21 17:47:59 +00:00
parent 09ea5ae117
commit 083da599d5
5 changed files with 783 additions and 752 deletions

File diff suppressed because it is too large Load Diff

View File

@ -4,26 +4,26 @@ read_when:
summary: Configuração do Slack e comportamento em tempo de execução (Socket Mode + URLs de solicitação HTTP)
title: Slack
x-i18n:
generated_at: "2026-04-21T13:35:14Z"
generated_at: "2026-04-21T17:45:34Z"
model: gpt-5.4
provider: openai
source_hash: 2fe3c3c344e1c20c09b29773f4f68d2790751e76d8bbaa3c6157e3ff75978acf
source_hash: f30b372a3ae10b7b649532181306e42792aca76b41422516e9633eb79f73f009
source_path: channels/slack.md
workflow: 15
---
# Slack
Status: pronto para produção para mensagens diretas + canais via integrações de app do Slack. O modo padrão é Socket Mode; URLs de solicitação HTTP também são compatíveis.
Status: pronto para produção para DMs + canais via integrações de app do Slack. O modo padrão é Socket Mode; URLs de solicitação HTTP também são compatíveis.
<CardGroup cols={3}>
<Card title="Pareamento" icon="link" href="/pt-BR/channels/pairing">
As mensagens diretas do Slack usam o modo de pareamento por padrão.
As DMs do Slack usam o modo de pareamento por padrão.
</Card>
<Card title="Comandos de barra" icon="terminal" href="/pt-BR/tools/slash-commands">
Comportamento nativo de comandos e catálogo de comandos.
</Card>
<Card title="Solução de problemas de canal" icon="wrench" href="/pt-BR/channels/troubleshooting">
<Card title="Solução de problemas de canais" icon="wrench" href="/pt-BR/channels/troubleshooting">
Diagnósticos entre canais e guias de correção.
</Card>
</CardGroup>
@ -33,16 +33,16 @@ Status: pronto para produção para mensagens diretas + canais via integrações
<Tabs>
<Tab title="Socket Mode (padrão)">
<Steps>
<Step title="Crie um novo app do Slack">
<Step title="Criar um novo app do Slack">
Nas configurações do app do Slack, pressione o botão **[Create New App](https://api.slack.com/apps/new)**:
- escolha **from a manifest** e selecione um workspace para o seu app
- escolha **from a manifest** e selecione um workspace para seu app
- cole o [manifesto de exemplo](#manifest-and-scope-checklist) abaixo e continue para criar
- gere um **App-Level Token** (`xapp-...`) com `connections:write`
- instale o app e copie o **Bot Token** (`xoxb-...`) exibido
</Step>
<Step title="Configure o OpenClaw">
<Step title="Configurar o OpenClaw">
```json5
{
@ -66,7 +66,7 @@ SLACK_BOT_TOKEN=xoxb-...
</Step>
<Step title="Inicie o Gateway">
<Step title="Iniciar o Gateway">
```bash
openclaw gateway
@ -79,17 +79,17 @@ openclaw gateway
<Tab title="URLs de solicitação HTTP">
<Steps>
<Step title="Crie um novo app do Slack">
<Step title="Criar um novo app do Slack">
Nas configurações do app do Slack, pressione o botão **[Create New App](https://api.slack.com/apps/new)**:
- escolha **from a manifest** e selecione um workspace para o seu app
- escolha **from a manifest** e selecione um workspace para seu app
- cole o [manifesto de exemplo](#manifest-and-scope-checklist) e atualize as URLs antes de criar
- salve o **Signing Secret** para verificação de solicitações
- instale o app e copie o **Bot Token** (`xoxb-...`) exibido
</Step>
<Step title="Configure o OpenClaw">
<Step title="Configurar o OpenClaw">
```json5
{
@ -106,14 +106,14 @@ openclaw gateway
```
<Note>
Use caminhos de webhook exclusivos para HTTP com várias contas
Use caminhos de Webhook exclusivos para HTTP com múltiplas contas
Dê a cada conta um `webhookPath` distinto (o padrão é `/slack/events`) para que os registros não entrem em conflito.
Dê a cada conta um `webhookPath` distinto (padrão `/slack/events`) para que os registros não entrem em conflito.
</Note>
</Step>
<Step title="Inicie o Gateway">
<Step title="Iniciar o Gateway">
```bash
openclaw gateway
@ -291,12 +291,12 @@ openclaw gateway
### Configurações adicionais do manifesto
Exponha diferentes recursos que estendem os padrões acima.
Exiba diferentes recursos que ampliam os padrões acima.
<AccordionGroup>
<Accordion title="Comandos de barra nativos opcionais">
Vários [comandos de barra nativos](#commands-and-slash-behavior) podem ser usados em vez de um único comando configurado, com algumas nuances:
Vários [comandos de barra nativos](#commands-and-slash-behavior) podem ser usados no lugar de um único comando configurado, com algumas nuances:
- Use `/agentstatus` em vez de `/status`, porque o comando `/status` é reservado.
- Não é possível disponibilizar mais de 25 comandos de barra ao mesmo tempo.
@ -328,12 +328,12 @@ Exponha diferentes recursos que estendem os padrões acima.
},
{
"command": "/session",
"description": "Gerenciar a expiração da vinculação à thread",
"usage_hint": "idle <duration|off> or max-age <duration|off>"
"description": "Gerenciar a expiração da vinculação da thread",
"usage_hint": "idle <duration|off> ou max-age <duration|off>"
},
{
"command": "/think",
"description": "Definir o nível de pensamento",
"description": "Definir o nível de raciocínio",
"usage_hint": "<level>"
},
{
@ -358,7 +358,7 @@ Exponha diferentes recursos que estendem os padrões acima.
},
{
"command": "/exec",
"description": "Mostrar ou definir padrões de exec",
"description": "Mostrar ou definir os padrões de execução",
"usage_hint": "host=<auto|sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id>"
},
{
@ -386,7 +386,7 @@ Exponha diferentes recursos que estendem os padrões acima.
},
{
"command": "/agentstatus",
"description": "Mostrar o status em tempo de execução, incluindo uso/cota do provedor quando disponível"
"description": "Mostrar o status de tempo de execução, incluindo uso/cota do provedor quando disponível"
},
{
"command": "/tasks",
@ -448,13 +448,13 @@ Exponha diferentes recursos que estendem os padrões acima.
},
{
"command": "/session",
"description": "Gerenciar a expiração da vinculação à thread",
"usage_hint": "idle <duration|off> or max-age <duration|off>",
"description": "Gerenciar a expiração da vinculação da thread",
"usage_hint": "idle <duration|off> ou max-age <duration|off>",
"url": "https://gateway-host.example.com/slack/events"
},
{
"command": "/think",
"description": "Definir o nível de pensamento",
"description": "Definir o nível de raciocínio",
"usage_hint": "<level>",
"url": "https://gateway-host.example.com/slack/events"
},
@ -484,7 +484,7 @@ Exponha diferentes recursos que estendem os padrões acima.
},
{
"command": "/exec",
"description": "Mostrar ou definir padrões de exec",
"description": "Mostrar ou definir os padrões de execução",
"usage_hint": "host=<auto|sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id>",
"url": "https://gateway-host.example.com/slack/events"
},
@ -518,7 +518,7 @@ Exponha diferentes recursos que estendem os padrões acima.
},
{
"command": "/agentstatus",
"description": "Mostrar o status em tempo de execução, incluindo uso/cota do provedor quando disponível",
"description": "Mostrar o status de tempo de execução, incluindo uso/cota do provedor quando disponível",
"url": "https://gateway-host.example.com/slack/events"
},
{
@ -562,10 +562,10 @@ Exponha diferentes recursos que estendem os padrões acima.
</Tabs>
</Accordion>
<Accordion title="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.
<Accordion title="Escopos opcionais de autoria (operações de gravação)">
Adicione o escopo 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:`.
Se você usar um ícone de emoji, o Slack espera a sintaxe `:nome_do_emoji:`.
</Accordion>
<Accordion title="Escopos opcionais de token de usuário (operações de leitura)">
@ -586,47 +586,47 @@ Exponha diferentes recursos que estendem os padrões acima.
- `botToken` + `appToken` são obrigatórios para Socket Mode.
- O modo HTTP exige `botToken` + `signingSecret`.
- `botToken`, `appToken`, `signingSecret` e `userToken` aceitam strings em texto simples
ou objetos SecretRef.
- Tokens de configuração substituem o fallback por variável de ambiente.
- `botToken`, `appToken`, `signingSecret` e `userToken` aceitam strings
em texto simples ou objetos SecretRef.
- Os tokens de configuração substituem o fallback por variável de ambiente.
- O fallback por variável de ambiente `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` se aplica apenas à conta padrão.
- `userToken` (`xoxp-...`) é apenas de configuração (sem fallback por variável de ambiente) e usa comportamento somente leitura por padrão (`userTokenReadOnly: true`).
- `userToken` (`xoxp-...`) é somente de configuração (sem fallback por variável de ambiente) e usa comportamento somente leitura por padrão (`userTokenReadOnly: true`).
Comportamento do snapshot de status:
- A inspeção da conta do Slack rastreia campos `*Source` e `*Status` por credencial
(`botToken`, `appToken`, `signingSecret`, `userToken`).
- A inspeção de conta do Slack rastreia campos `*Source` e `*Status`
por credencial (`botToken`, `appToken`, `signingSecret`, `userToken`).
- O status é `available`, `configured_unavailable` ou `missing`.
- `configured_unavailable` significa que a conta está configurada por 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`.
- No modo HTTP, `signingSecretStatus` é incluído; em Socket Mode, o par
obrigatório é `botTokenStatus` + `appTokenStatus`.
<Tip>
Para ações/leituras de diretório, o token de usuário pode ser preferido quando configurado. Para escritas, o token de bot continua sendo preferido; escritas com token de usuário só são permitidas quando `userTokenReadOnly: false` e o token de bot não está disponível.
Para ações/leituras de diretório, o token de usuário pode ser preferido quando configurado. Para gravações, o token de bot continua sendo preferido; gravações com token de usuário só são permitidas quando `userTokenReadOnly: false` e o token de bot não está disponível.
</Tip>
## Ações e gates
## Ações e controles
As ações do Slack são controladas por `channels.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 |
| Group | Default |
| ---------- | ------- |
| messages | enabled |
| reactions | enabled |
| pins | enabled |
| memberInfo | enabled |
| emojiList | enabled |
As ações atuais de mensagem do Slack incluem `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info` e `emoji-list`.
## Controle de acesso e roteamento
<Tabs>
<Tab title="Política de DM">
<Tab title="Política de DMs">
`channels.slack.dmPolicy` controla o acesso por DM (legado: `channels.slack.dm.policy`):
- `pairing` (padrão)
@ -634,15 +634,15 @@ As ações atuais de mensagem do Slack incluem `send`, `upload-file`, `download-
- `open` (exige que `channels.slack.allowFrom` inclua `"*"`; legado: `channels.slack.dm.allowFrom`)
- `disabled`
Sinalizadores de DM:
Flags de DM:
- `dm.enabled` (padrão true)
- `channels.slack.allowFrom` (preferido)
- `dm.allowFrom` (legado)
- `dm.groupEnabled` (DMs em grupo com padrão false)
- `dm.groupChannels` (allowlist MPIM opcional)
- `dm.groupChannels` (allowlist opcional de MPIM)
Precedência de várias contas:
Precedência em múltiplas contas:
- `channels.slack.accounts.default.allowFrom` se aplica apenas à conta `default`.
- Contas nomeadas herdam `channels.slack.allowFrom` quando seu próprio `allowFrom` não está definido.
@ -652,7 +652,7 @@ As ações atuais de mensagem do Slack incluem `send`, `upload-file`, `download-
</Tab>
<Tab title="Política de canal">
<Tab title="Política de canais">
`channels.slack.groupPolicy` controla o tratamento de canais:
- `open`
@ -661,18 +661,18 @@ As ações atuais de mensagem do Slack incluem `send`, `upload-file`, `download-
A allowlist de canais fica em `channels.slack.channels` e deve usar IDs de canal estáveis.
Observação de tempo de execução: se `channels.slack` estiver completamente ausente (configuração somente por env), o tempo de execução volta para `groupPolicy="allowlist"` e registra um aviso (mesmo que `channels.defaults.groupPolicy` esteja definido).
Observação de tempo de execução: se `channels.slack` estiver completamente ausente (configuração somente por env), o tempo de execução usa `groupPolicy="allowlist"` como fallback e registra um aviso (mesmo que `channels.defaults.groupPolicy` esteja definido).
Resolução de nome/ID:
- entradas da allowlist de canais e da allowlist de DM são resolvidas na inicialização quando o acesso do token permite
- entradas não resolvidas por nome de canal são mantidas conforme configuradas, mas ignoradas para roteamento por padrão
- a autorização de entrada e o roteamento de canal usam ID primeiro por padrão; correspondência direta por nome de usuário/slug exige `channels.slack.dangerouslyAllowNameMatching: true`
- entradas da allowlist de canais e da allowlist de DMs são resolvidas na inicialização quando o acesso ao token permite
- entradas não resolvidas de nome de canal são mantidas como configuradas, mas ignoradas para roteamento por padrão
- a autorização de entrada e o roteamento de canais usam IDs primeiro por padrão; correspondência direta por nome de usuário/slug exige `channels.slack.dangerouslyAllowNameMatching: true`
</Tab>
<Tab title="Menções e usuários do canal">
Mensagens de canal são bloqueadas por menção por padrão.
As mensagens de canal são bloqueadas por menção por padrão.
Fontes de menção:
@ -688,8 +688,8 @@ As ações atuais de mensagem do Slack incluem `send`, `upload-file`, `download-
- `skills`
- `systemPrompt`
- `tools`, `toolsBySender`
- formato de chave de `toolsBySender`: `id:`, `e164:`, `username:`, `name:` ou curinga `"*"`
(chaves legadas sem prefixo ainda mapeiam apenas para `id:`)
- formato da chave `toolsBySender`: `id:`, `e164:`, `username:`, `name:` ou curinga `"*"`
(chaves legadas sem prefixo ainda são mapeadas apenas para `id:`)
</Tab>
</Tabs>
@ -697,14 +697,14 @@ As ações atuais de mensagem do Slack incluem `send`, `upload-file`, `download-
## Threads, sessões e tags de resposta
- DMs são roteadas como `direct`; canais como `channel`; MPIMs como `group`.
- Com o padrão `session.dmScope=main`, DMs do Slack são agrupadas na sessão principal do agente.
- Com o padrão `session.dmScope=main`, as DMs do Slack colapsam para a 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 de `thread.inheritParent` é `false`.
- `channels.slack.thread.initialHistoryLimit` controla quantas mensagens existentes da thread são buscadas quando uma nova sessão de thread começa (padrão `20`; defina `0` para desabilitar).
- `channels.slack.thread.requireExplicitMention` (padrão `false`): quando `true`, suprime menções implícitas em thread para que o bot responda apenas a menções explícitas `@bot` dentro de threads, mesmo quando o bot já participou da thread. Sem isso, respostas em uma thread com participação do bot ignoram o bloqueio de `requireMention`.
- `channels.slack.thread.initialHistoryLimit` controla quantas mensagens existentes da thread são buscadas quando uma nova sessão de thread é iniciada (padrão `20`; defina `0` para desabilitar).
- `channels.slack.thread.requireExplicitMention` (padrão `false`): quando `true`, suprime menções implícitas em thread para que o bot responda apenas a menções explícitas `@bot` dentro de threads, mesmo quando o bot já participou da thread. Sem isso, respostas em uma thread com participação do bot ignoram o controle `requireMention`.
Controles de encadeamento de resposta:
Controles de encadeamento de respostas:
- `channels.slack.replyToMode`: `off|first|all|batched` (padrão `off`)
- `channels.slack.replyToModeByChatType`: por `direct|group|channel`
@ -715,22 +715,22 @@ Tags manuais de resposta são compatíveis:
- `[[reply_to_current]]`
- `[[reply_to:<id>]]`
Observação: `replyToMode="off"` desabilita **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: threads do Slack ocultam mensagens do canal, enquanto respostas do Telegram permanecem visíveis no fluxo principal do chat.
Observação: `replyToMode="off"` desabilita **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 threading das plataformas: threads do Slack ocultam mensagens do canal, enquanto 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 processa uma mensagem recebida.
`ackReaction` envia um emoji de confirmação enquanto o OpenClaw está processando uma mensagem recebida.
Ordem de resolução:
- `channels.slack.accounts.<accountId>.ackReaction`
- `channels.slack.ackReaction`
- `messages.ackReaction`
- fallback para emoji de identidade do agente (`agents.list[].identity.emoji`, caso contrário `"👀"`)
- fallback para o emoji da identidade do agente (`agents.list[].identity.emoji`, caso contrário "👀")
Observações:
- O Slack espera shortcodes (por exemplo `"eyes"`).
- O Slack espera shortcodes (por exemplo, `"eyes"`).
- Use `""` para desabilitar a reação para a conta do Slack ou globalmente.
## Streaming de texto
@ -740,17 +740,18 @@ Observações:
- `off`: desabilita 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 o texto de status do progresso enquanto gera e, em seguida, envia o texto final.
- `progress`: mostra texto de status de progresso durante a geração e, em seguida, envia o texto final.
- `streaming.preview.toolProgress`: quando a visualização de rascunho está ativa, encaminha atualizações de ferramenta/progresso para a mesma mensagem de visualização editada (padrão: `true`). Defina como `false` para manter mensagens separadas de ferramenta/progresso.
`channels.slack.streaming.nativeTransport` controla o streaming de texto nativo do Slack quando `channels.slack.streaming.mode` é `partial` (padrão: `true`).
`channels.slack.streaming.nativeTransport` controla o streaming nativo de texto do Slack quando `channels.slack.streaming.mode` é `partial` (padrão: `true`).
- Uma thread de resposta precisa estar disponível para que o streaming de texto nativo e o status de thread do assistente do Slack apareçam. A seleção de thread ainda segue `replyToMode`.
- Uma thread de resposta deve estar disponível para que o streaming nativo de texto e o status de thread do assistente do Slack apareçam. A seleção da thread ainda segue `replyToMode`.
- Raízes de canais e chats em grupo ainda podem usar a visualização normal de rascunho quando o streaming nativo não estiver disponível.
- DMs de nível superior no Slack permanecem fora de thread por padrão, então não mostram a visualização no estilo de thread; use respostas em thread ou `typingReaction` se quiser progresso visível ali.
- Mídia e cargas não textuais voltam para a entrega normal.
- Se o streaming falhar no meio da resposta, o OpenClaw volta para a entrega normal para as cargas restantes.
- DMs de nível superior no Slack permanecem fora de thread por padrão, então não mostram a visualização no estilo de thread; use respostas em thread ou `typingReaction` se quiser progresso visível nelas.
- Mídia e cargas não textuais usam a entrega normal como fallback.
- Se o streaming falhar no meio da resposta, o OpenClaw usa a entrega normal como fallback para as cargas restantes.
Use a visualização de rascunho em vez do streaming de texto nativo do Slack:
Use a visualização de rascunho em vez do streaming nativo de texto do Slack:
```json5
{
@ -773,7 +774,7 @@ Chaves legadas:
## Fallback de reação de digitação
`typingReaction` adiciona uma reação temporária à mensagem recebida no Slack enquanto o OpenClaw processa 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 "is typing...".
`typingReaction` adiciona uma reação temporária à mensagem recebida no Slack enquanto o OpenClaw processa 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:
@ -782,24 +783,24 @@ Ordem de resolução:
Observações:
- 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 é concluído.
- 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
<AccordionGroup>
<Accordion title="Anexos recebidos">
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.
Os anexos de arquivo do Slack são baixados de URLs privadas hospedadas pelo Slack (fluxo de solicitação autenticada por token) e gravados no armazenamento de mídia quando a busca é bem-sucedida e os limites de tamanho permitem.
O limite padrão de tamanho de entrada em tempo de execução é `20MB`, a menos que seja substituído por `channels.slack.mediaMaxMb`.
O limite de tamanho de entrada em tempo de execução é `20MB` por padrão, a menos que seja substituído por `channels.slack.mediaMaxMb`.
</Accordion>
<Accordion title="Texto e arquivos enviados">
<Accordion title="Texto e arquivos de saída">
- blocos 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.mediaMaxMb` quando configurado; caso contrário, envios do canal usam os padrões de tipo MIME do pipeline de mídia
- o limite de mídia de saída segue `channels.slack.mediaMaxMb` quando configurado; caso contrário, os envios do canal usam padrões por tipo MIME do pipeline de mídia
</Accordion>
<Accordion title="Destinos de entrega">
@ -808,14 +809,14 @@ Observações:
- `user:<id>` para DMs
- `channel:<id>` para canais
DMs do Slack são abertas por meio das APIs de conversa do Slack ao enviar para destinos de usuário.
As DMs do Slack são abertas via APIs de conversa do Slack ao enviar para destinos de usuário.
</Accordion>
</AccordionGroup>
## Comandos e comportamento de slash
Os comandos de barra aparecem no Slack como um único comando configurado ou vários comandos nativos. Configure `channels.slack.slashCommand` para alterar os padrões do comando:
Os comandos de barra aparecem no Slack como um único comando configurado ou como vários comandos nativos. Configure `channels.slack.slashCommand` para alterar os padrões de comando:
- `enabled: false`
- `name: "openclaw"`
@ -828,28 +829,28 @@ Os comandos de barra aparecem no Slack como um único comando configurado ou vá
Os comandos nativos exigem [configurações adicionais do manifesto](#additional-manifest-settings) no seu app do Slack e são habilitados com `channels.slack.commands.native: true` ou `commands.native: true` nas configurações globais.
- O modo automático de comandos nativos fica **desligado** para Slack, então `commands.native: "auto"` não habilita comandos nativos do Slack.
- O modo automático de comandos nativos é **off** para Slack, então `commands.native: "auto"` não habilita comandos nativos do Slack.
```txt
/help
```
Os menus nativos de argumentos usam uma estratégia de renderização adaptativa que mostra um modal de confirmação antes de despachar um valor de opção selecionado:
Os menus nativos de argumentos usam uma estratégia de renderização adaptativa que mostra um modal de confirmação antes de despachar o valor de uma opção selecionada:
- 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 manipuladores de opções de interatividade estão disponíveis
- limites do Slack excedidos: valores de opção codificados voltam para botões
- até 5 opções: blocos de botão
- 6-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 os manipuladores de opções de interatividade estão disponíveis
- limites do Slack excedidos: valores de opção codificados usam botões como fallback
```txt
/think
```
As sessões de slash usam chaves isoladas como `agent:<agentId>:slack:slash:<userId>` e ainda roteiam execuções de comando para a sessão de conversa de destino usando `CommandTargetSessionKey`.
As sessões de slash usam chaves isoladas como `agent:<agentId>:slack:slash:<userId>` e ainda roteiam execuções de comandos para a sessão de conversa de destino usando `CommandTargetSessionKey`.
## Respostas interativas
O Slack pode renderizar controles de resposta interativa criados pelo agente, mas esse recurso fica desabilitado por padrão.
O Slack pode renderizar controles interativos de resposta criados pelo agente, mas esse recurso está desabilitado por padrão.
Habilite globalmente:
@ -865,7 +866,7 @@ Habilite globalmente:
}
```
Ou habilite apenas para uma conta do Slack:
Ou habilite para apenas uma conta do Slack:
```json5
{
@ -883,42 +884,42 @@ Ou habilite apenas para uma conta do Slack:
}
```
Quando habilitado, agentes podem emitir diretivas de resposta exclusivas do Slack:
Quando habilitado, os agentes podem emitir diretivas de resposta exclusivas do Slack:
- `[[slack_buttons: Approve:approve, Reject:reject]]`
- `[[slack_select: Choose a target | Canary:canary, Production:production]]`
Essas diretivas são compiladas em Slack Block Kit e roteiam cliques ou seleções de volta pelo caminho existente de eventos de interação do Slack.
Essas diretivas são compiladas em Slack Block Kit e encaminham cliques ou seleções de volta pelo caminho existente de eventos de interação do Slack.
Observações:
- Esta é uma UI específica do Slack. Outros canais não traduzem diretivas de Slack Block Kit para seus próprios sistemas de botões.
- 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 uma carga de blocos inválida.
- Se os blocos interativos gerados excederem os limites do Slack Block Kit, o OpenClaw usa a resposta de texto original como fallback em vez de enviar uma carga de blocos inválida.
## Aprovações de exec no Slack
O Slack pode atuar como um cliente nativo de aprovação com botões e interações interativas, em vez de voltar para a Web UI ou o terminal.
O Slack pode atuar como um cliente nativo de aprovação com botões interativos e interações, em vez de usar a Web UI ou o terminal como fallback.
- 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:`.
- As aprovações de exec usam `channels.slack.execApprovals.*` para roteamento nativo de DM/canal.
- As 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 do 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.
Isso usa a mesma superfície compartilhada de botões de aprovação que outros canais. Quando `interactivity` está habilitado nas configurações do seu app do Slack, os prompts de aprovação são renderizados como botões Block Kit diretamente na conversa.
Isso usa a mesma superfície compartilhada de botões de aprovação que outros canais. Quando `interactivity` está habilitado 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` apenas quando o resultado da ferramenta disser que aprovações por chat
não estão disponíveis ou que a aprovação manual é o único caminho.
deve incluir um comando manual `/approve` apenas quando o resultado da ferramenta disser que as
aprovações por chat não estão disponíveis ou que a aprovação manual é o único caminho.
Caminho de configuração:
- `channels.slack.execApprovals.enabled`
- `channels.slack.execApprovals.approvers` (opcional; usa fallback para `commands.ownerAllowFrom` quando possível)
- `channels.slack.execApprovals.approvers` (opcional; usa `commands.ownerAllowFrom` como fallback quando possível)
- `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, padrão: `dm`)
- `agentFilter`, `sessionFilter`
O Slack habilita automaticamente aprovações nativas de exec quando `enabled` não está definido ou é `"auto"` e pelo menos um
aprovador é resolvido. Defina `enabled: false` para desabilitar explicitamente o Slack como cliente nativo de aprovação.
Defina `enabled: true` para forçar aprovações nativas quando aprovadores forem resolvidos.
Defina `enabled: true` para forçar aprovações nativas quando os aprovadores forem resolvidos.
Comportamento padrão sem configuração explícita de aprovação de exec no Slack:
@ -930,7 +931,7 @@ Comportamento padrão sem configuração explícita de aprovação de exec no Sl
}
```
A configuração nativa explícita do Slack só é necessária quando você quer substituir aprovadores, adicionar filtros ou
A configuração nativa explícita do Slack só é necessária quando você quiser substituir aprovadores, adicionar filtros ou
optar pela entrega no chat de origem:
```json5
@ -947,45 +948,45 @@ optar pela entrega no chat de origem:
}
```
O encaminhamento compartilhado `approvals.exec` é separado. Use-o apenas quando prompts de aprovação de exec também precisarem
ser roteados para outros chats 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
O encaminhamento compartilhado `approvals.exec` é separado. Use-o apenas quando os prompts de aprovação de exec também precisarem
ser encaminhados para outros chats ou destinos explícitos fora de banda. O encaminhamento compartilhado `approvals.plugin` também é
separado; os botões nativos do Slack ainda podem resolver aprovações de Plugin quando essas solicitações já chegarem
ao Slack.
`/approve` no mesmo chat também funciona em canais e DMs do Slack que já oferecem suporte a comandos. Consulte [Aprovações de exec](/pt-BR/tools/exec-approvals) para o modelo completo de encaminhamento de aprovações.
O `/approve` no mesmo chat também funciona em canais e DMs do Slack que já oferecem suporte a comandos. Consulte [Aprovações de exec](/pt-BR/tools/exec-approvals) para o modelo completo de encaminhamento de aprovação.
## Eventos e comportamento operacional
- Edições/exclusões de mensagens e transmissões de thread são mapeadas para eventos de sistema.
- Edições/exclusões de mensagens e transmissões em 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_changed` pode migrar chaves de configuração do canal quando `configWrites` está 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 o seed inicial de contexto do histórico da thread são filtrados pelas allowlists de remetente configuradas, quando aplicável.
- Ações de bloco e interações de modal emitem eventos de sistema estruturados `Slack interaction: ...` com campos de payload ricos:
- O iniciador da thread e a semeadura inicial do contexto do histórico da thread são filtrados pelas allowlists configuradas 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 carga:
- ações de bloco: valores selecionados, rótulos, valores de seletor e metadados `workflow_*`
- eventos de modal `view_submission` e `view_closed` com metadados de canal roteados e entradas de formulário
## Ponteiros para a referência de configuração
## Ponteiros de referência de configuração
Referência principal:
- [Referência de configuração - Slack](/pt-BR/gateway/configuration-reference#slack)
Campos de Slack de alto sinal:
Campos do Slack de alto sinal:
- modo/auth: `mode`, `botToken`, `appToken`, `signingSecret`, `webhookPath`, `accounts.*`
- acesso por DM: `dm.enabled`, `dmPolicy`, `allowFrom` (legado: `dm.policy`, `dm.allowFrom`), `dm.groupEnabled`, `dm.groupChannels`
- alternância de compatibilidade: `dangerouslyAllowNameMatching` (break-glass; mantenha desativado, a menos que seja necessário)
- acesso de canal: `groupPolicy`, `channels.*`, `channels.*.users`, `channels.*.requireMention`
- acesso a canais: `groupPolicy`, `channels.*`, `channels.*.users`, `channels.*.requireMention`
- threading/histórico: `replyToMode`, `replyToModeByChatType`, `thread.*`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit`
- entrega: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `streaming.nativeTransport`
- ops/recursos: `configWrites`, `commands.native`, `slashCommand.*`, `actions.*`, `userToken`, `userTokenReadOnly`
- entrega: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `streaming.nativeTransport`, `streaming.preview.toolProgress`
- operações/recursos: `configWrites`, `commands.native`, `slashCommand.*`, `actions.*`, `userToken`, `userTokenReadOnly`
## Solução de problemas
<AccordionGroup>
<Accordion title="Sem respostas nos canais">
Verifique, nesta ordem:
<Accordion title="Sem respostas em canais">
Verifique, em ordem:
- `groupPolicy`
- allowlist de canais (`channels.slack.channels`)
@ -1021,7 +1022,7 @@ openclaw pairing list 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
respaldado por SecretRef.
apoiado por SecretRef.
</Accordion>
@ -1029,20 +1030,20 @@ openclaw pairing list slack
Valide:
- signing secret
- caminho do webhook
- caminho do Webhook
- URLs de solicitação do Slack (Eventos + Interatividade + Comandos de barra)
- `webhookPath` exclusivo por conta HTTP
Se `signingSecretStatus: "configured_unavailable"` aparecer nos snapshots
da conta, a conta HTTP está configurada, mas o tempo de execução atual não conseguiu
resolver o signing secret respaldado por SecretRef.
Se `signingSecretStatus: "configured_unavailable"` aparecer nos snapshots da
conta, a conta HTTP está configurada, mas o tempo de execução atual não conseguiu
resolver o signing secret apoiado por SecretRef.
</Accordion>
<Accordion title="Comandos nativos/slash não disparam">
Verifique se a intenção era:
<Accordion title="Comandos nativos/slash não são acionados">
Verifique se sua intenção era:
- modo de comando nativo (`channels.slack.commands.native: true`) com comandos de barra correspondentes registrados no Slack
- modo de comando nativo (`channels.slack.commands.native: true`) com os comandos de barra correspondentes registrados no Slack
- ou modo de comando de barra único (`channels.slack.slashCommand.enabled: true`)
Verifique também `commands.useAccessGroups` e as allowlists de canal/usuário.
@ -1055,7 +1056,7 @@ openclaw pairing list slack
- [Pareamento](/pt-BR/channels/pairing)
- [Grupos](/pt-BR/channels/groups)
- [Segurança](/pt-BR/gateway/security)
- [Roteamento de canal](/pt-BR/channels/channel-routing)
- [Roteamento de canais](/pt-BR/channels/channel-routing)
- [Solução de problemas](/pt-BR/channels/troubleshooting)
- [Configuração](/pt-BR/gateway/configuration)
- [Comandos de barra](/pt-BR/tools/slash-commands)

View File

@ -1,20 +1,20 @@
---
read_when:
- Trabalhando em recursos do Telegram ou Webhooks
summary: Status do suporte ao bot do Telegram, capacidades e configuração
summary: Status do suporte do bot do Telegram, capacidades e configuração
title: Telegram
x-i18n:
generated_at: "2026-04-21T05:35:29Z"
generated_at: "2026-04-21T17:45:32Z"
model: gpt-5.4
provider: openai
source_hash: b5c70775b55d4923a31ad8bae7f4c6e7cbae754c05c3a578180d63db2b59e39a
source_hash: 816238b53942b319a300843db62ec1d4bf8d84bc11094010926ac9ad457c6d3d
source_path: channels/telegram.md
workflow: 15
---
# Telegram (Bot API)
Status: pronto para produção para DMs + grupos de bots via grammY. Long polling é o modo padrão; o modo Webhook é opcional.
Status: pronto para produção para DMs de bot + grupos via grammY. O long polling é o modo padrão; o modo Webhook é opcional.
<CardGroup cols={3}>
<Card title="Pareamento" icon="link" href="/pt-BR/channels/pairing">
@ -53,8 +53,8 @@ Status: pronto para produção para DMs + grupos de bots via grammY. Long pollin
}
```
Fallback de ambiente: `TELEGRAM_BOT_TOKEN=...` (apenas conta padrão).
O Telegram **não** usa `openclaw channels login telegram`; configure o token em config/env e, em seguida, inicie o Gateway.
Fallback de variável de ambiente: `TELEGRAM_BOT_TOKEN=...` (apenas conta padrão).
O Telegram **não** usa `openclaw channels login telegram`; configure o token em config/env e então inicie o Gateway.
</Step>
@ -71,39 +71,39 @@ openclaw pairing approve telegram <CODE>
</Step>
<Step title="Adicionar o bot a um grupo">
Adicione o bot ao seu grupo e, em seguida, defina `channels.telegram.groups` e `groupPolicy` para corresponder ao seu modelo de acesso.
Adicione o bot ao seu grupo e então defina `channels.telegram.groups` e `groupPolicy` para corresponder ao seu modelo de acesso.
</Step>
</Steps>
<Note>
A ordem de resolução do token considera a conta. Na prática, os valores da configuração têm prioridade sobre o fallback de ambiente, e `TELEGRAM_BOT_TOKEN` se aplica apenas à conta padrão.
A ordem de resolução do token considera a conta. Na prática, os valores de config vencem o fallback de env, e `TELEGRAM_BOT_TOKEN` se aplica apenas à conta padrão.
</Note>
## Configurações no lado do Telegram
<AccordionGroup>
<Accordion title="Modo de privacidade e visibilidade em grupos">
Os bots do Telegram usam **Modo de Privacidade** por padrão, o que limita quais mensagens de grupo eles recebem.
Bots do Telegram usam **Modo de Privacidade** por padrão, o que limita quais mensagens de grupo eles recebem.
Se o bot precisar ver todas as mensagens do grupo, faça um destes procedimentos:
- desative o modo de privacidade via `/setprivacy`, ou
- torne o bot um administrador do grupo.
- torne o bot administrador do grupo.
Ao alternar o modo de privacidade, remova e adicione novamente o bot em cada grupo para que o Telegram aplique a alteração.
Ao alternar o modo de privacidade, remova + adicione novamente o bot em cada grupo para que o Telegram aplique a mudança.
</Accordion>
<Accordion title="Permissões do grupo">
O status de administrador é controlado nas configurações do grupo do Telegram.
<Accordion title="Permissões de grupo">
O status de administrador é controlado nas configurações do grupo no Telegram.
Bots administradores recebem todas as mensagens do grupo, o que é útil para comportamento contínuo em grupos.
Bots administradores recebem todas as mensagens do grupo, o que é útil para comportamento sempre ativo em grupos.
</Accordion>
<Accordion title="Alternâncias úteis do BotFather">
- `/setjoingroups` para permitir/negar adições em grupos
- `/setjoingroups` para permitir/negar adições a grupos
- `/setprivacy` para o comportamento de visibilidade em grupos
</Accordion>
@ -116,27 +116,27 @@ A ordem de resolução do token considera a conta. Na prática, os valores da co
`channels.telegram.dmPolicy` controla o acesso a mensagens diretas:
- `pairing` (padrão)
- `allowlist` (requer pelo menos um ID de remetente em `allowFrom`)
- `open` (requer que `allowFrom` inclua `"*"`)
- `allowlist` (exige pelo menos um ID de remetente em `allowFrom`)
- `open` (exige que `allowFrom` inclua `"*"`)
- `disabled`
`channels.telegram.allowFrom` aceita IDs numéricos de usuários do Telegram. Prefixos `telegram:` / `tg:` são aceitos e normalizados.
`dmPolicy: "allowlist"` com `allowFrom` vazio bloqueia todas as DMs e é rejeitado pela validação de configuração.
A configuração solicita apenas IDs numéricos de usuário.
A configuração solicita apenas IDs numéricos de usuários.
Se você atualizou e sua configuração contém entradas `@username` na allowlist, execute `openclaw doctor --fix` para resolvê-las (melhor esforço; requer um token de bot do Telegram).
Se você dependia anteriormente de arquivos de allowlist do armazenamento de pareamento, `openclaw doctor --fix` pode recuperar entradas para `channels.telegram.allowFrom` em fluxos de allowlist (por exemplo, quando `dmPolicy: "allowlist"` ainda não tem IDs explícitos).
Se você antes dependia de arquivos de allowlist do pairing-store, `openclaw doctor --fix` pode recuperar entradas em `channels.telegram.allowFrom` em fluxos de allowlist (por exemplo, quando `dmPolicy: "allowlist"` ainda não tem IDs explícitos).
Para bots com um único proprietário, prefira `dmPolicy: "allowlist"` com IDs numéricos explícitos em `allowFrom` para manter a política de acesso durável na configuração (em vez de depender de aprovações de pareamento anteriores).
Para bots de um único dono, prefira `dmPolicy: "allowlist"` com IDs numéricos explícitos em `allowFrom` para manter a política de acesso persistente na configuração (em vez de depender de aprovações de pareamento anteriores).
Confusão comum: a aprovação de pareamento de DM não significa "este remetente está autorizado em todos os lugares".
O pareamento concede acesso apenas a DM. A autorização de remetentes em grupos ainda vem de allowlists explícitas na configuração.
Se você quiser "estou autorizado uma vez e tanto DMs quanto comandos em grupo funcionam", coloque seu ID numérico de usuário do Telegram em `channels.telegram.allowFrom`.
Confusão comum: aprovar o pareamento de DM não significa "este remetente está autorizado em todos os lugares".
O pareamento concede acesso apenas à DM. A autorização do remetente em grupos ainda vem de allowlists explícitas na configuração.
Se você quiser "eu sou autorizado uma vez e tanto DMs quanto comandos em grupo funcionam", coloque seu ID numérico de usuário do Telegram em `channels.telegram.allowFrom`.
### Encontrando seu ID de usuário do Telegram
Mais seguro (sem bot de terceiros):
1. Envie uma DM ao seu bot.
1. Envie uma DM para seu bot.
2. Execute `openclaw logs --follow`.
3. Leia `from.id`.
@ -151,12 +151,12 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
</Tab>
<Tab title="Política de grupo e allowlists">
Dois controles se aplicam em conjunto:
Dois controles se aplicam juntos:
1. **Quais grupos são permitidos** (`channels.telegram.groups`)
- sem configuração `groups`:
- com `groupPolicy: "open"`: qualquer grupo pode passar nas verificações de ID do grupo
- com `groupPolicy: "allowlist"` (padrão): os grupos são bloqueados até que você adicione entradas em `groups` (ou `"*"`)
- com `groupPolicy: "open"`: qualquer grupo pode passar nas verificações de ID de grupo
- com `groupPolicy: "allowlist"` (padrão): os grupos são bloqueados até você adicionar entradas em `groups` (ou `"*"`)
- `groups` configurado: atua como allowlist (IDs explícitos ou `"*"`)
2. **Quais remetentes são permitidos em grupos** (`channels.telegram.groupPolicy`)
@ -164,15 +164,15 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- `allowlist` (padrão)
- `disabled`
`groupAllowFrom` é usado para filtrar remetentes em grupos. Se não estiver definido, o Telegram usa `allowFrom` como fallback.
`groupAllowFrom` é usado para filtragem de remetentes em grupos. Se não estiver definido, o Telegram usa `allowFrom` como fallback.
As entradas de `groupAllowFrom` devem ser IDs numéricos de usuários do Telegram (prefixos `telegram:` / `tg:` são normalizados).
Não coloque IDs de chat de grupo ou supergrupo do Telegram em `groupAllowFrom`. IDs de chat negativos pertencem a `channels.telegram.groups`.
Entradas não numéricas são ignoradas para autorização de remetentes.
Limite de segurança (`2026.2.25+`): a autenticação de remetente em grupo **não** herda aprovações do armazenamento de pareamento de DM.
Entradas não numéricas são ignoradas para autorização do remetente.
Limite de segurança (`2026.2.25+`): a autorização de remetente em grupos **não** herda aprovações de pareamento de DM do pairing-store.
O pareamento continua sendo apenas para DM. Para grupos, defina `groupAllowFrom` ou `allowFrom` por grupo/por tópico.
Se `groupAllowFrom` não estiver definido, o Telegram usa `allowFrom` da configuração como fallback, não o armazenamento de pareamento.
Padrão prático para bots de um único proprietário: defina seu ID de usuário em `channels.telegram.allowFrom`, deixe `groupAllowFrom` sem definir e permita os grupos de destino em `channels.telegram.groups`.
Observação de runtime: se `channels.telegram` estiver completamente ausente, os padrões de runtime usam `groupPolicy="allowlist"` em fail-closed, a menos que `channels.defaults.groupPolicy` esteja explicitamente definido.
Se `groupAllowFrom` não estiver definido, o Telegram usa `allowFrom` da configuração como fallback, não o pairing store.
Padrão prático para bots de um único dono: defina seu ID de usuário em `channels.telegram.allowFrom`, deixe `groupAllowFrom` sem definir e permita os grupos-alvo em `channels.telegram.groups`.
Observação de runtime: se `channels.telegram` estiver completamente ausente, os padrões de runtime usam fail-closed `groupPolicy="allowlist"` a menos que `channels.defaults.groupPolicy` seja explicitamente definido.
Exemplo: permitir qualquer membro em um grupo específico:
@ -211,8 +211,8 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
<Warning>
Erro comum: `groupAllowFrom` não é uma allowlist de grupos do Telegram.
- Coloque IDs negativos de grupos ou supergrupos do Telegram como `-1001234567890` em `channels.telegram.groups`.
- Coloque IDs de usuários do Telegram como `8734062810` em `groupAllowFrom` quando quiser limitar quais pessoas dentro de um grupo permitido podem acionar o bot.
- Coloque IDs negativos de grupo ou supergrupo do Telegram como `-1001234567890` em `channels.telegram.groups`.
- Coloque IDs de usuário do Telegram como `8734062810` em `groupAllowFrom` quando quiser limitar quais pessoas dentro de um grupo permitido podem acionar o bot.
- Use `groupAllowFrom: ["*"]` apenas quando quiser que qualquer membro de um grupo permitido possa falar com o bot.
</Warning>
@ -228,7 +228,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- `agents.list[].groupChat.mentionPatterns`
- `messages.groupChat.mentionPatterns`
Alternâncias de comando no nível da sessão:
Alternâncias de comando em nível de sessão:
- `/activation always`
- `/activation mention`
@ -249,7 +249,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
}
```
Obtendo o ID do chat em grupo:
Obtendo o ID do chat de grupo:
- encaminhe uma mensagem do grupo para `@userinfobot` / `@getidsbot`
- ou leia `chat.id` em `openclaw logs --follow`
@ -260,56 +260,57 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
## Comportamento em runtime
- O Telegram é controlado pelo processo Gateway.
- O Telegram é controlado pelo processo do Gateway.
- O roteamento é determinístico: respostas recebidas do Telegram voltam para o Telegram (o modelo não escolhe canais).
- Mensagens recebidas são normalizadas no envelope compartilhado de canal com metadados de resposta e placeholders de mídia.
- As mensagens recebidas são normalizadas no envelope compartilhado de canais com metadados de resposta e placeholders de mídia.
- Sessões de grupo são isoladas por ID do grupo. Tópicos de fórum acrescentam `:topic:<threadId>` para manter os tópicos isolados.
- Mensagens de DM podem carregar `message_thread_id`; o OpenClaw as roteia com chaves de sessão conscientes de thread e preserva o ID da thread nas respostas.
- O long polling usa grammY runner com sequenciamento por chat/por thread. A concorrência geral do sink do runner usa `agents.defaults.maxConcurrent`.
- Reinicializações do watchdog de long polling são acionadas após 120 segundos sem atividade concluída de `getUpdates` por padrão. Aumente `channels.telegram.pollingStallThresholdMs` apenas se sua implantação ainda apresentar reinicializações falsas por travamento de polling durante trabalhos de longa duração. O valor está em milissegundos e é permitido de `30000` a `600000`; substituições por conta são suportadas.
- A Bot API do Telegram não oferece suporte a confirmação de leitura (`sendReadReceipts` não se aplica).
- Mensagens de DM podem transportar `message_thread_id`; o OpenClaw as roteia com chaves de sessão com reconhecimento de thread e preserva o ID da thread para respostas.
- O long polling usa o runner do grammY com sequenciamento por chat/por thread. A concorrência geral do sink do runner usa `agents.defaults.maxConcurrent`.
- Reinicializações do watchdog de long polling são disparadas após 120 segundos sem atividade concluída de `getUpdates` por padrão. Aumente `channels.telegram.pollingStallThresholdMs` apenas se sua implantação ainda vir reinicializações falsas de polling travado durante trabalhos de longa duração. O valor está em milissegundos e é permitido de `30000` a `600000`; substituições por conta são suportadas.
- A Telegram Bot API não oferece suporte a confirmação de leitura (`sendReadReceipts` não se aplica).
## Referência de recursos
<AccordionGroup>
<Accordion title="Pré-visualização de stream ao vivo (edições de mensagem)">
<Accordion title="Prévia de streaming ao vivo (edições de mensagem)">
O OpenClaw pode transmitir respostas parciais em tempo real:
- chats diretos: mensagem de pré-visualização + `editMessageText`
- grupos/tópicos: mensagem de pré-visualização + `editMessageText`
- chats diretos: mensagem de prévia + `editMessageText`
- grupos/tópicos: mensagem de prévia + `editMessageText`
Requisito:
- `channels.telegram.streaming` é `off | partial | block | progress` (padrão: `partial`)
- `progress` é mapeado para `partial` no Telegram (compatibilidade com nomenclatura entre canais)
- `progress` corresponde a `partial` no Telegram (compatibilidade com nomenclatura entre canais)
- `streaming.preview.toolProgress` controla se atualizações de ferramenta/progresso reutilizam a mesma mensagem de prévia editada (padrão: `true`). Defina `false` para manter mensagens separadas de ferramenta/progresso.
- `channels.telegram.streamMode` legado e valores booleanos de `streaming` são mapeados automaticamente
Para respostas somente com texto:
Para respostas somente de texto:
- DM: o OpenClaw mantém a mesma mensagem de pré-visualização e faz uma edição final no mesmo lugar (sem segunda mensagem)
- grupo/tópico: o OpenClaw mantém a mesma mensagem de pré-visualização e faz uma edição final no mesmo lugar (sem segunda mensagem)
- DM: o OpenClaw mantém a mesma mensagem de prévia e faz uma edição final no mesmo lugar (sem segunda mensagem)
- grupo/tópico: o OpenClaw mantém a mesma mensagem de prévia e faz uma edição final no mesmo lugar (sem segunda mensagem)
Para respostas complexas (por exemplo, payloads de mídia), o OpenClaw usa a entrega final normal como fallback e depois limpa a mensagem de pré-visualização.
Para respostas complexas (por exemplo, payloads de mídia), o OpenClaw faz fallback para a entrega final normal e então limpa a mensagem de prévia.
O streaming de pré-visualização é separado do streaming em bloco. Quando o streaming em bloco está explicitamente habilitado para o Telegram, o OpenClaw ignora o stream de pré-visualização para evitar streaming duplo.
O streaming de prévia é separado do streaming em bloco. Quando o streaming em bloco é explicitamente habilitado para Telegram, o OpenClaw ignora o streaming de prévia para evitar streaming duplo.
Se o transporte nativo de rascunho não estiver disponível/for rejeitado, o OpenClaw automaticamente usa `sendMessage` + `editMessageText` como fallback.
Se o transporte nativo de rascunho estiver indisponível/for rejeitado, o OpenClaw faz fallback automaticamente para `sendMessage` + `editMessageText`.
Stream de raciocínio apenas do Telegram:
Stream de raciocínio somente do Telegram:
- `/reasoning stream` envia o raciocínio para a pré-visualização ao vivo enquanto gera
- `/reasoning stream` envia o raciocínio para a prévia ao vivo enquanto gera
- a resposta final é enviada sem o texto de raciocínio
</Accordion>
<Accordion title="Formatação e fallback para HTML">
O texto de saída usa `parse_mode: "HTML"` do Telegram.
O texto de saída usa Telegram `parse_mode: "HTML"`.
- Texto no estilo Markdown é renderizado como HTML seguro para Telegram.
- HTML bruto do modelo é escapado para reduzir falhas de parsing do Telegram.
- Se o Telegram rejeitar o HTML processado, o OpenClaw tenta novamente como texto simples.
- Texto em estilo Markdown é renderizado em HTML seguro para Telegram.
- HTML bruto do modelo é escapado para reduzir falhas de parsing no Telegram.
- Se o Telegram rejeitar o HTML analisado, o OpenClaw tenta novamente como texto simples.
As pré-visualizações de links são ativadas por padrão e podem ser desativadas com `channels.telegram.linkPreview: false`.
As prévias de link são habilitadas por padrão e podem ser desabilitadas com `channels.telegram.linkPreview: false`.
</Accordion>
@ -318,7 +319,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Padrões de comandos nativos:
- `commands.native: "auto"` habilita comandos nativos para o Telegram
- `commands.native: "auto"` habilita comandos nativos para Telegram
Adicione entradas personalizadas ao menu de comandos:
@ -337,7 +338,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Regras:
- os nomes são normalizados (remove `/` inicial, minúsculas)
- os nomes são normalizados (remover `/` inicial, minúsculas)
- padrão válido: `a-z`, `0-9`, `_`, comprimento `1..32`
- comandos personalizados não podem sobrescrever comandos nativos
- conflitos/duplicatas são ignorados e registrados em log
@ -345,30 +346,30 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Observações:
- comandos personalizados são apenas entradas de menu; eles não implementam comportamento automaticamente
- comandos de plugin/Skills ainda podem funcionar quando digitados, mesmo que não sejam mostrados no menu do Telegram
- comandos de Plugin/Skills ainda podem funcionar quando digitados, mesmo que não sejam mostrados no menu do Telegram
Se os comandos nativos forem desativados, os integrados serão removidos. Comandos personalizados/de plugin ainda podem ser registrados se configurados.
Se os comandos nativos estiverem desabilitados, os embutidos serão removidos. Comandos personalizados/de Plugin ainda podem ser registrados se estiverem configurados.
Falhas comuns de configuração:
- `setMyCommands failed` com `BOT_COMMANDS_TOO_MUCH` significa que o menu do Telegram ainda excedeu o limite após a redução; reduza comandos de plugin/Skills/personalizados ou desative `channels.telegram.commands.native`.
- `setMyCommands failed` com erros de rede/fetch normalmente significa que o DNS/HTTPS de saída para `api.telegram.org` está bloqueado.
- `setMyCommands failed` com `BOT_COMMANDS_TOO_MUCH` significa que o menu do Telegram ainda excedeu o limite após o ajuste; reduza comandos de Plugin/Skills/personalizados ou desabilite `channels.telegram.commands.native`.
- `setMyCommands failed` com erros de rede/fetch geralmente significa que DNS/HTTPS de saída para `api.telegram.org` está bloqueado.
### Comandos de pareamento de dispositivo (plugin `device-pair`)
### Comandos de pareamento de dispositivo (Plugin `device-pair`)
Quando o plugin `device-pair` está instalado:
Quando o Plugin `device-pair` está instalado:
1. `/pair` gera um código de configuração
2. cole o código no app iOS
3. `/pair pending` lista solicitações pendentes (incluindo função/escopos)
3. `/pair pending` lista solicitações pendentes (incluindo role/scopes)
4. aprove a solicitação:
- `/pair approve <requestId>` para aprovação explícita
- `/pair approve` quando há apenas uma solicitação pendente
- `/pair approve` quando houver apenas uma solicitação pendente
- `/pair approve latest` para a mais recente
O código de configuração carrega um token de bootstrap de curta duração. O handoff de bootstrap integrado mantém o token do node principal em `scopes: []`; qualquer token de operador transferido permanece limitado a `operator.approvals`, `operator.read`, `operator.talk.secrets` e `operator.write`. As verificações de escopo de bootstrap são prefixadas por função, então essa allowlist de operador satisfaz apenas solicitações de operador; funções não operadoras ainda precisam de escopos sob o prefixo da própria função.
O código de configuração carrega um token bootstrap de curta duração. A transferência bootstrap embutida mantém o token do node primário em `scopes: []`; qualquer token de operador transferido permanece limitado a `operator.approvals`, `operator.read`, `operator.talk.secrets` e `operator.write`. As verificações de escopo bootstrap usam prefixo de role, então essa allowlist de operador satisfaz apenas solicitações de operador; roles que não são de operador ainda precisam de scopes sob o prefixo da própria role.
Se um dispositivo tentar novamente com detalhes de autenticação alterados (por exemplo, função/escopos/chave pública), a solicitação pendente anterior será substituída e a nova solicitação usará um `requestId` diferente. Execute novamente `/pair pending` antes de aprovar.
Se um dispositivo tentar novamente com detalhes de autenticação alterados (por exemplo role/scopes/chave pública), a solicitação pendente anterior será substituída e a nova solicitação usará um `requestId` diferente. Execute `/pair pending` novamente antes de aprovar.
Mais detalhes: [Pareamento](/pt-BR/channels/pairing#pair-via-telegram-recommended-for-ios).
@ -415,7 +416,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- `all`
- `allowlist` (padrão)
O legado `capabilities: ["inlineButtons"]` é mapeado para `inlineButtons: "all"`.
O legado `capabilities: ["inlineButtons"]` corresponde a `inlineButtons: "all"`.
Exemplo de ação de mensagem:
@ -435,7 +436,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
}
```
Cliques de callback são passados ao agente como texto:
Cliques em callback são passados ao agente como texto:
`callback_data: <value>`
</Accordion>
@ -451,15 +452,15 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
As ações de mensagem do canal expõem aliases ergonômicos (`send`, `react`, `delete`, `edit`, `sticker`, `sticker-search`, `topic-create`).
Controles de gating:
Controles de bloqueio:
- `channels.telegram.actions.sendMessage`
- `channels.telegram.actions.deleteMessage`
- `channels.telegram.actions.reactions`
- `channels.telegram.actions.sticker` (padrão: desativado)
- `channels.telegram.actions.sticker` (padrão: desabilitado)
Observação: `edit` e `topic-create` estão atualmente habilitados por padrão e não têm alternâncias `channels.telegram.actions.*` separadas.
Os envios em runtime usam o snapshot ativo de config/secrets (inicialização/reload), então os caminhos de ação não executam re-resolução ad hoc de SecretRef por envio.
Observação: `edit` e `topic-create` estão atualmente habilitados por padrão e não têm toggles `channels.telegram.actions.*` separados.
Envios em runtime usam o snapshot ativo de config/secrets (inicialização/reload), portanto os caminhos de ação não executam nova resolução ad hoc de SecretRef a cada envio.
Semântica de remoção de reação: [/tools/reactions](/pt-BR/tools/reactions)
@ -468,7 +469,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
<Accordion title="Tags de encadeamento de resposta">
O Telegram oferece suporte a tags explícitas de encadeamento de resposta na saída gerada:
- `[[reply_to_current]]` responde à mensagem que acionou a ação
- `[[reply_to_current]]` responde à mensagem que acionou
- `[[reply_to:<id>]]` responde a um ID específico de mensagem do Telegram
`channels.telegram.replyToMode` controla o tratamento:
@ -477,7 +478,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- `first`
- `all`
Observação: `off` desativa o encadeamento implícito de resposta. Tags explícitas `[[reply_to_*]]` ainda são respeitadas.
Observação: `off` desabilita o encadeamento implícito de resposta. Tags explícitas `[[reply_to_*]]` ainda são respeitadas.
</Accordion>
@ -489,15 +490,15 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- caminho de configuração do tópico:
`channels.telegram.groups.<chatId>.topics.<threadId>`
Caso especial do tópico Geral (`threadId=1`):
Caso especial do tópico geral (`threadId=1`):
- envios de mensagem omitem `message_thread_id` (o Telegram rejeita `sendMessage(...thread_id=1)`)
- ações de digitação ainda incluem `message_thread_id`
Herança de tópico: entradas de tópico herdam as configurações do grupo, salvo substituição (`requireMention`, `allowFrom`, `skills`, `systemPrompt`, `enabled`, `groupPolicy`).
Herança de tópico: entradas de tópico herdam configurações do grupo, a menos que sejam sobrescritas (`requireMention`, `allowFrom`, `skills`, `systemPrompt`, `enabled`, `groupPolicy`).
`agentId` é exclusivo de tópico e não herda dos padrões do grupo.
**Roteamento de agente por tópico**: Cada tópico pode rotear para um agente diferente definindo `agentId` na configuração do tópico. Isso dá a cada tópico seu próprio workspace, memória e sessão isolados. Exemplo:
**Roteamento de agente por tópico**: cada tópico pode rotear para um agente diferente definindo `agentId` na configuração do tópico. Isso dá a cada tópico seu próprio workspace, memória e sessão isolados. Exemplo:
```json5
{
@ -506,8 +507,8 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
groups: {
"-1001234567890": {
topics: {
"1": { agentId: "main" }, // Tópico Geral → agente main
"3": { agentId: "zu" }, // Tópico de desenvolvimento → agente zu
"1": { agentId: "main" }, // Tópico geral → agente main
"3": { agentId: "zu" }, // Tópico de dev → agente zu
"5": { agentId: "coder" } // Revisão de código → agente coder
}
}
@ -519,7 +520,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Cada tópico então tem sua própria chave de sessão: `agent:zu:telegram:group:-1001234567890:topic:3`
**Vínculo persistente de tópico ACP**: Tópicos de fórum podem fixar sessões do harness ACP por meio de vínculos ACP tipados de nível superior:
**Vinculação persistente de tópico ACP**: tópicos de fórum podem fixar sessões do harness ACP por meio de vinculações ACP tipadas de nível superior:
- `bindings[]` com `type: "acp"` e `match.channel: "telegram"`
@ -570,13 +571,13 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
}
```
Isso atualmente se limita a tópicos de fórum em grupos e supergrupos.
Atualmente isso está limitado a tópicos de fórum em grupos e supergrupos.
**Criação de ACP vinculado à thread a partir do chat**:
- `/acp spawn <agent> --thread here|auto` pode vincular o tópico atual do Telegram a uma nova sessão ACP.
- Mensagens subsequentes no tópico são roteadas diretamente para a sessão ACP vinculada (sem necessidade de `/acp steer`).
- O OpenClaw fixa a mensagem de confirmação de criação no tópico após uma vinculação bem-sucedida.
- Mensagens posteriores do tópico são roteadas diretamente para a sessão ACP vinculada (sem necessidade de `/acp steer`).
- O OpenClaw fixa a mensagem de confirmação de criação dentro do tópico após uma vinculação bem-sucedida.
- Requer `channels.telegram.threadBindings.spawnAcpSessions=true`.
O contexto do template inclui:
@ -586,7 +587,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Comportamento de thread em DM:
- chats privados com `message_thread_id` mantêm o roteamento de DM, mas usam chaves de sessão e destinos de resposta conscientes de thread.
- chats privados com `message_thread_id` mantêm o roteamento de DM, mas usam chaves de sessão/alvos de resposta com reconhecimento de thread.
</Accordion>
@ -596,7 +597,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
O Telegram diferencia notas de voz de arquivos de áudio.
- padrão: comportamento de arquivo de áudio
- tag `[[audio_as_voice]]` na resposta do agente para forçar o envio como nota de voz
- tag `[[audio_as_voice]]` na resposta do agente para forçar envio como nota de voz
Exemplo de ação de mensagem:
@ -634,7 +635,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- WEBP estático: baixado e processado (placeholder `<media:sticker>`)
- TGS animado: ignorado
- WEBM em vídeo: ignorado
- WEBM de vídeo: ignorado
Campos de contexto do sticker:
@ -648,7 +649,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- `~/.openclaw/telegram/sticker-cache.json`
Os stickers são descritos uma vez (quando possível) e armazenados em cache para reduzir chamadas repetidas de vision.
Os stickers são descritos uma vez (quando possível) e armazenados em cache para reduzir chamadas repetidas de visão.
Habilite ações de sticker:
@ -681,7 +682,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
{
action: "sticker-search",
channel: "telegram",
query: "gato acenando",
query: "cat waving",
limit: 5,
}
```
@ -702,18 +703,18 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Observações:
- `own` significa reações de usuário apenas em mensagens enviadas pelo bot (melhor esforço via cache de mensagens enviadas).
- `own` significa reações de usuários apenas em mensagens enviadas pelo bot (melhor esforço via cache de mensagens enviadas).
- Eventos de reação ainda respeitam os controles de acesso do Telegram (`dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`); remetentes não autorizados são descartados.
- O Telegram não fornece IDs de thread em atualizações de reação.
- grupos sem fórum são roteados para a sessão de chat do grupo
- grupos com fórum são roteados para a sessão do tópico geral do grupo (`:topic:1`), não para o tópico de origem exato
- O Telegram não fornece IDs de thread nas atualizações de reação.
- grupos que não são fórum são roteados para a sessão do chat em grupo
- grupos de fórum são roteados para a sessão do tópico geral do grupo (`:topic:1`), não para o tópico exato de origem
`allowed_updates` para polling/Webhook inclui `message_reaction` automaticamente.
</Accordion>
<Accordion title="Reações de confirmação">
`ackReaction` envia um emoji de confirmação enquanto o OpenClaw processa uma mensagem recebida.
<Accordion title="Reações de ack">
`ackReaction` envia um emoji de confirmação enquanto o OpenClaw está processando uma mensagem recebida.
Ordem de resolução:
@ -724,20 +725,20 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Observações:
- O Telegram espera emoji unicode (por exemplo, "👀").
- Use `""` para desativar a reação para um canal ou conta.
- O Telegram espera emoji unicode (por exemplo "👀").
- Use `""` para desabilitar a reação para um canal ou conta.
</Accordion>
<Accordion title="Gravações de configuração a partir de eventos e comandos do Telegram">
Gravações de configuração do canal são habilitadas por padrão (`configWrites !== false`).
As gravações de configuração do canal são habilitadas por padrão (`configWrites !== false`).
Gravações acionadas pelo Telegram incluem:
As gravações acionadas pelo Telegram incluem:
- eventos de migração de grupo (`migrate_to_chat_id`) para atualizar `channels.telegram.groups`
- `/config set` e `/config unset` (requer habilitação do comando)
- `/config set` e `/config unset` (requer habilitação de comando)
Desative:
Desabilitar:
```json5
{
@ -757,33 +758,33 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Modo Webhook:
- defina `channels.telegram.webhookUrl`
- defina `channels.telegram.webhookSecret` (obrigatório quando `webhookUrl` estiver definido)
- opcional `channels.telegram.webhookPath` (padrão `/telegram-webhook`)
- opcional `channels.telegram.webhookHost` (padrão `127.0.0.1`)
- opcional `channels.telegram.webhookPort` (padrão `8787`)
- defina `channels.telegram.webhookSecret` (obrigatório quando a URL do Webhook está definida)
- `channels.telegram.webhookPath` opcional (padrão `/telegram-webhook`)
- `channels.telegram.webhookHost` opcional (padrão `127.0.0.1`)
- `channels.telegram.webhookPort` opcional (padrão `8787`)
O listener local padrão para o modo Webhook se associa a `127.0.0.1:8787`.
O listener local padrão para o modo Webhook se vincula a `127.0.0.1:8787`.
Se seu endpoint público for diferente, coloque um proxy reverso na frente e aponte `webhookUrl` para a URL pública.
Defina `webhookHost` (por exemplo `0.0.0.0`) quando você intencionalmente precisar de entrada externa.
</Accordion>
<Accordion title="Limites, repetição e destinos da CLI">
<Accordion title="Limites, retry e alvos da CLI">
- o padrão de `channels.telegram.textChunkLimit` é 4000.
- `channels.telegram.chunkMode="newline"` prefere limites de parágrafo (linhas em branco) antes de dividir por comprimento.
- `channels.telegram.mediaMaxMb` (padrão 100) limita o tamanho de mídia do Telegram recebida e enviada.
- `channels.telegram.timeoutSeconds` substitui o timeout do cliente da API do Telegram (se não estiver definido, aplica-se o padrão do grammY).
- `channels.telegram.pollingStallThresholdMs` tem padrão `120000`; ajuste entre `30000` e `600000` apenas para reinicializações falso-positivas por travamento de polling.
- o histórico de contexto de grupo usa `channels.telegram.historyLimit` ou `messages.groupChat.historyLimit` (padrão 50); `0` desativa.
- o contexto suplementar de resposta/citação/encaminhamento atualmente é repassado como recebido.
- as allowlists do Telegram controlam principalmente quem pode acionar o agente, não um limite completo de redação de contexto suplementar.
- `channels.telegram.chunkMode="newline"` prefere limites de parágrafo (linhas em branco) antes da divisão por tamanho.
- `channels.telegram.mediaMaxMb` (padrão 100) limita o tamanho de mídia recebida e enviada no Telegram.
- `channels.telegram.timeoutSeconds` sobrescreve o timeout do cliente da API do Telegram (se não definido, aplica-se o padrão do grammY).
- `channels.telegram.pollingStallThresholdMs` tem padrão `120000`; ajuste entre `30000` e `600000` apenas para reinicializações falsas de polling travado.
- o histórico de contexto de grupo usa `channels.telegram.historyLimit` ou `messages.groupChat.historyLimit` (padrão 50); `0` desabilita.
- o contexto suplementar de resposta/citação/encaminhamento é atualmente passado como recebido.
- allowlists do Telegram controlam principalmente quem pode acionar o agente, não um limite completo de redação de contexto suplementar.
- controles de histórico de DM:
- `channels.telegram.dmHistoryLimit`
- `channels.telegram.dms["<user_id>"].historyLimit`
- a configuração `channels.telegram.retry` se aplica aos auxiliares de envio do Telegram (CLI/ferramentas/ações) para erros recuperáveis da API de saída.
- a configuração `channels.telegram.retry` se aplica aos helpers de envio do Telegram (CLI/ferramentas/ações) para erros recuperáveis de API de saída.
O destino de envio da CLI pode ser ID numérico do chat ou nome de usuário:
O alvo de envio da CLI pode ser um ID numérico de chat ou username:
```bash
openclaw message send --channel telegram --target 123456789 --message "hi"
@ -800,22 +801,22 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \
--poll-duration-seconds 300 --poll-public
```
Flags de poll exclusivas do Telegram:
Flags de poll somente do Telegram:
- `--poll-duration-seconds` (5-600)
- `--poll-anonymous`
- `--poll-public`
- `--thread-id` para tópicos de fórum (ou use um destino `:topic:`)
- `--thread-id` para tópicos de fórum (ou use um alvo `:topic:`)
O envio do Telegram também oferece suporte a:
O envio no Telegram também oferece suporte a:
- `--buttons` para teclados inline quando `channels.telegram.capabilities.inlineButtons` permite essa superfície
- `--force-document` para enviar imagens e GIFs de saída como documentos em vez de uploads comprimidos de foto ou mídia animada
- `--buttons` para teclados inline quando `channels.telegram.capabilities.inlineButtons` permite isso
- `--force-document` para enviar imagens e GIFs de saída como documentos em vez de uploads compactados de foto ou mídia animada
Controle de ações:
- `channels.telegram.actions.sendMessage=false` desativa mensagens de saída do Telegram, incluindo polls
- `channels.telegram.actions.poll=false` desativa a criação de polls no Telegram, mantendo envios regulares habilitados
- `channels.telegram.actions.sendMessage=false` desabilita mensagens de saída no Telegram, incluindo polls
- `channels.telegram.actions.poll=false` desabilita a criação de polls no Telegram, mantendo envios normais habilitados
</Accordion>
@ -825,38 +826,38 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \
Caminho de configuração:
- `channels.telegram.execApprovals.enabled`
- `channels.telegram.execApprovals.approvers` (opcional; usa como fallback IDs numéricos de proprietário inferidos de `allowFrom` e `defaultTo` direto quando possível)
- `channels.telegram.execApprovals.approvers` (opcional; usa como fallback IDs numéricos de owners inferidos de `allowFrom` e `defaultTo` de mensagem direta quando possível)
- `channels.telegram.execApprovals.target` (`dm` | `channel` | `both`, padrão: `dm`)
- `agentFilter`, `sessionFilter`
Os aprovadores devem ser IDs numéricos de usuários do Telegram. O Telegram habilita automaticamente aprovações de exec nativas quando `enabled` não está definido ou é `"auto"` e pelo menos um aprovador pode ser resolvido, seja de `execApprovals.approvers` ou da configuração numérica de proprietário da conta (`allowFrom` e `defaultTo` de mensagem direta). Defina `enabled: false` para desativar explicitamente o Telegram como cliente nativo de aprovação. Caso contrário, solicitações de aprovação usam outras rotas de aprovação configuradas ou a política de fallback de aprovação de exec.
Os aprovadores devem ser IDs numéricos de usuários do Telegram. O Telegram habilita automaticamente aprovações nativas de exec quando `enabled` não está definido ou é `"auto"` e pelo menos um aprovador pode ser resolvido, seja de `execApprovals.approvers` ou da configuração numérica de owner da conta (`allowFrom` e `defaultTo` de mensagem direta). Defina `enabled: false` para desabilitar explicitamente o Telegram como cliente nativo de aprovação. Caso contrário, solicitações de aprovação usam fallback para outras rotas de aprovação configuradas ou para a política de fallback de aprovação de exec.
O Telegram também renderiza os botões de aprovação compartilhados usados por outros canais de chat. O adaptador nativo do Telegram adiciona principalmente roteamento de DMs para aprovadores, fanout para canal/tópico e dicas de digitação antes da entrega.
O Telegram também renderiza os botões compartilhados de aprovação usados por outros canais de chat. O adaptador nativo do Telegram adiciona principalmente roteamento para DMs de aprovadores, fanout para canal/tópico e dicas de digitação antes da entrega.
Quando esses botões estão presentes, eles são a UX principal de aprovação; o OpenClaw
deve incluir um comando manual `/approve` apenas 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.
deve incluir um comando manual `/approve` quando o resultado da ferramenta disser
que aprovações por chat estão indisponíveis ou quando a aprovação manual for o único caminho.
Regras de entrega:
- `target: "dm"` envia prompts de aprovação apenas para DMs dos aprovadores resolvidos
- `target: "channel"` envia o prompt de volta para o chat/tópico de origem no Telegram
- `target: "both"` envia para as DMs dos aprovadores e para o chat/tópico de origem
- `target: "both"` envia para DMs dos aprovadores e para o chat/tópico de origem
Apenas aprovadores resolvidos podem aprovar ou negar. Não aprovadores não podem usar `/approve` nem os botões de aprovação do Telegram.
Apenas aprovadores resolvidos podem aprovar ou negar. Não aprovadores não podem usar `/approve` e não podem usar botões de aprovação do Telegram.
Comportamento de resolução de aprovação:
- IDs prefixados com `plugin:` sempre são resolvidos por aprovações de plugin.
- Outros IDs tentam `exec.approval.resolve` primeiro.
- Se o Telegram também estiver autorizado para aprovações de plugin e o Gateway disser
que a aprovação de exec é desconhecida/expirada, o Telegram tenta novamente uma vez via
- IDs com prefixo `plugin:` sempre são resolvidos via aprovações de Plugin.
- Outros IDs de aprovação tentam primeiro `exec.approval.resolve`.
- Se o Telegram também estiver autorizado para aprovações de Plugin e o gateway disser
que a aprovação de exec é desconhecida/expirada, o Telegram tenta novamente uma vez por
`plugin.approval.resolve`.
- Negativas/erros reais de aprovação de exec não fazem fallback silencioso para
resolução de aprovação de plugin.
- Negações/erros reais de aprovação de exec não fazem fallback silencioso para
resolução de aprovação de Plugin.
A entrega no canal mostra o texto do comando no chat, portanto habilite `channel` ou `both` apenas em grupos/tópicos confiáveis. Quando o prompt chega a um tópico de fórum, o OpenClaw preserva o tópico tanto para o prompt de aprovação quanto para o acompanhamento pós-aprovação. As aprovações de exec expiram após 30 minutos por padrão.
A entrega no canal mostra o texto do comando no chat, então habilite `channel` ou `both` apenas em grupos/tópicos confiáveis. Quando o prompt chega em um tópico de fórum, o OpenClaw preserva o tópico tanto para o prompt de aprovação quanto para o acompanhamento após a aprovação. As aprovações de exec expiram após 30 minutos por padrão.
Botões de aprovação inline também dependem de `channels.telegram.capabilities.inlineButtons` permitir a superfície de destino (`dm`, `group` ou `all`).
Botões inline de aprovação também dependem de `channels.telegram.capabilities.inlineButtons` permitir a superfície de destino (`dm`, `group` ou `all`).
Documentação relacionada: [Aprovações de exec](/pt-BR/tools/exec-approvals)
@ -865,7 +866,7 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \
## Controles de resposta de erro
Quando o agente encontra um erro de entrega ou do provedor, o Telegram pode responder com o texto do erro ou suprimi-lo. Duas chaves de configuração controlam esse comportamento:
Quando o agente encontra um erro de entrega ou de provider, o Telegram pode responder com o texto do erro ou suprimi-lo. Duas chaves de configuração controlam esse comportamento:
| Key | Values | Default | Description |
| ----------------------------------- | ----------------- | ------- | ----------------------------------------------------------------------------------------------- |
@ -895,40 +896,40 @@ Substituições por conta, por grupo e por tópico são suportadas (mesma heran
<AccordionGroup>
<Accordion title="O bot não responde a mensagens de grupo sem menção">
- Se `requireMention=false`, o modo de privacidade do Telegram deve permitir visibilidade total.
- Se `requireMention=false`, o modo de privacidade do Telegram deve permitir visibilidade completa.
- BotFather: `/setprivacy` -> Disable
- depois remova + adicione novamente o bot ao grupo
- então remova + adicione novamente o bot ao grupo
- `openclaw channels status` avisa quando a configuração espera mensagens de grupo sem menção.
- `openclaw channels status --probe` pode verificar IDs numéricos explícitos de grupo; o curinga `"*"` não pode ser verificado por associação.
- `openclaw channels status --probe` pode verificar IDs numéricos explícitos de grupo; o curinga `"*"` não pode ser verificado por membership probe.
- teste rápido de sessão: `/activation always`.
</Accordion>
<Accordion title="O bot não mensagens de grupo de forma alguma">
<Accordion title="O bot não está vendo mensagens de grupo de forma alguma">
- quando `channels.telegram.groups` existe, o grupo deve estar listado (ou incluir `"*"`)
- verifique a associação do bot ao grupo
- verifique a participação do bot no grupo
- revise os logs: `openclaw logs --follow` para motivos de ignorar
</Accordion>
<Accordion title="Os comandos funcionam parcialmente ou não funcionam">
- autorize a identidade do remetente (pareamento e/ou `allowFrom` numérico)
- a autorização de comandos ainda se aplica mesmo quando a política de grupo é `open`
- `setMyCommands failed` com `BOT_COMMANDS_TOO_MUCH` significa que o menu nativo tem entradas demais; reduza comandos de plugin/Skills/personalizados ou desative menus nativos
- autorize a identidade do seu remetente (pareamento e/ou `allowFrom` numérico)
- a autorização de comando ainda se aplica mesmo quando a política de grupo é `open`
- `setMyCommands failed` com `BOT_COMMANDS_TOO_MUCH` significa que o menu nativo tem entradas demais; reduza comandos de Plugin/Skills/personalizados ou desabilite menus nativos
- `setMyCommands failed` com erros de rede/fetch normalmente indica problemas de alcance DNS/HTTPS para `api.telegram.org`
</Accordion>
<Accordion title="Instabilidade de polling ou rede">
<Accordion title="Instabilidade de polling ou de rede">
- Node 22+ + fetch/proxy personalizado podem acionar comportamento de abort imediato se os tipos de AbortSignal não corresponderem.
- Alguns hosts resolvem `api.telegram.org` primeiro para IPv6; saída IPv6 com falha pode causar falhas intermitentes da API do Telegram.
- Node 22+ + fetch/proxy personalizado pode disparar comportamento de aborto imediato se os tipos de AbortSignal não coincidirem.
- Alguns hosts resolvem `api.telegram.org` primeiro para IPv6; saída IPv6 com problema pode causar falhas intermitentes na API do Telegram.
- Se os logs incluírem `TypeError: fetch failed` ou `Network request for 'getUpdates' failed!`, o OpenClaw agora tenta novamente esses casos como erros de rede recuperáveis.
- Se os logs incluírem `Polling stall detected`, o OpenClaw reinicia o polling e recria o transporte do Telegram após 120 segundos sem atividade concluída de long-poll por padrão.
- Aumente `channels.telegram.pollingStallThresholdMs` apenas quando chamadas longas de `getUpdates` estiverem saudáveis, mas seu host ainda relatar reinicializações falso-positivas por travamento de polling. Travamentos persistentes geralmente apontam para problemas de proxy, DNS, IPv6 ou saída TLS entre o host e `api.telegram.org`.
- Em hosts VPS com saída/TLS direta instável, roteie chamadas da API do Telegram por `channels.telegram.proxy`:
- Se os logs incluírem `Polling stall detected`, o OpenClaw reinicia o polling e reconstrói o transporte do Telegram após 120 segundos sem atividade concluída de long-poll por padrão.
- Aumente `channels.telegram.pollingStallThresholdMs` apenas quando chamadas longas de `getUpdates` estiverem saudáveis, mas seu host ainda relatar reinicializações falsas de polling travado. Travamentos persistentes normalmente apontam para problemas de proxy, DNS, IPv6 ou saída TLS entre o host e `api.telegram.org`.
- Em hosts VPS com saída direta/TLS instável, roteie chamadas da API do Telegram por `channels.telegram.proxy`:
```yaml
channels:
@ -936,7 +937,7 @@ channels:
proxy: socks5://<user>:<password>@proxy-host:1080
```
- O Node 22+ usa por padrão `autoSelectFamily=true` (exceto WSL2) e `dnsResultOrder=ipv4first`.
- Node 22+ usa por padrão `autoSelectFamily=true` (exceto WSL2) e `dnsResultOrder=ipv4first`.
- Se seu host for WSL2 ou explicitamente funcionar melhor com comportamento somente IPv4, force a seleção de família:
```yaml
@ -946,11 +947,11 @@ channels:
autoSelectFamily: false
```
- Respostas na faixa de benchmark RFC 2544 (`198.18.0.0/15`) já são permitidas
- Respostas no intervalo de benchmark RFC 2544 (`198.18.0.0/15`) já são permitidas
por padrão para downloads de mídia do Telegram. Se um fake-IP confiável ou
proxy transparente reescrever `api.telegram.org` para algum outro
endereço privado/interno/de uso especial durante downloads de mídia, você pode
optar pelo bypass exclusivo do Telegram:
habilitar o bypass somente para Telegram:
```yaml
channels:
@ -959,21 +960,18 @@ channels:
dangerouslyAllowPrivateNetwork: true
```
- O mesmo opt-in está disponível por conta em
- A mesma habilitação opcional também está disponível por conta em
`channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetwork`.
- Se seu proxy resolver hosts de mídia do Telegram para `198.18.x.x`, deixe a
flag perigosa desativada primeiro. A mídia do Telegram já permite a faixa de benchmark RFC 2544
por padrão.
flag perigosa desabilitada primeiro. A mídia do Telegram já permite o intervalo de benchmark RFC 2544 por padrão.
<Warning>
`channels.telegram.network.dangerouslyAllowPrivateNetwork` enfraquece as
proteções de SSRF de mídia do Telegram. Use isso apenas em ambientes de proxy
confiáveis e controlados pelo operador, como roteamento fake-IP do Clash, Mihomo ou Surge quando eles
sintetizarem respostas privadas ou de uso especial fora da faixa de benchmark RFC 2544.
Deixe desativado para acesso normal do Telegram pela internet pública.
proteções SSRF de mídia do Telegram. Use isso apenas em ambientes de proxy
confiáveis e controlados pelo operador, como roteamento fake-IP do Clash, Mihomo ou Surge, quando eles sintetizam respostas privadas ou de uso especial fora do intervalo de benchmark RFC 2544. Deixe isso desabilitado para acesso normal ao Telegram pela internet pública.
</Warning>
- Substituições por ambiente (temporárias):
- Substituições por variável de ambiente (temporárias):
- `OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1`
- `OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1`
- `OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first`
@ -989,7 +987,7 @@ dig +short api.telegram.org AAAA
Mais ajuda: [Solução de problemas do canal](/pt-BR/channels/troubleshooting).
## Ponteiros de referência de configuração do Telegram
## Ponteiros da referência de configuração do Telegram
Referência principal:
@ -997,74 +995,75 @@ Referência principal:
- `channels.telegram.botToken`: token do bot (BotFather).
- `channels.telegram.tokenFile`: lê o token de um caminho de arquivo regular. Symlinks são rejeitados.
- `channels.telegram.dmPolicy`: `pairing | allowlist | open | disabled` (padrão: pairing).
- `channels.telegram.allowFrom`: allowlist de DM (IDs numéricos de usuários do Telegram). `allowlist` exige pelo menos um ID de remetente. `open` exige `"*"`. `openclaw doctor --fix` pode resolver entradas legadas `@username` para IDs e pode recuperar entradas de allowlist de arquivos do armazenamento de pareamento em fluxos de migração de allowlist.
- `channels.telegram.actions.poll`: habilita ou desabilita a criação de polls no Telegram (padrão: habilitado; ainda requer `sendMessage`).
- `channels.telegram.defaultTo`: destino padrão do Telegram usado por `--deliver` da CLI quando nenhum `--reply-to` explícito é fornecido.
- `channels.telegram.allowFrom`: allowlist de DM (IDs numéricos de usuários do Telegram). `allowlist` exige pelo menos um ID de remetente. `open` exige `"*"`. `openclaw doctor --fix` pode resolver entradas legadas `@username` para IDs e pode recuperar entradas de allowlist de arquivos do pairing-store em fluxos de migração de allowlist.
- `channels.telegram.actions.poll`: habilita ou desabilita a criação de polls no Telegram (padrão: habilitado; ainda exige `sendMessage`).
- `channels.telegram.defaultTo`: alvo padrão do Telegram usado por `--deliver` da CLI quando nenhum `--reply-to` explícito é fornecido.
- `channels.telegram.groupPolicy`: `open | allowlist | disabled` (padrão: allowlist).
- `channels.telegram.groupAllowFrom`: allowlist de remetentes em grupo (IDs numéricos de usuários do Telegram). `openclaw doctor --fix` pode resolver entradas legadas `@username` para IDs. Entradas não numéricas são ignoradas no momento da autenticação. A autenticação de grupo não usa fallback do armazenamento de pareamento de DM (`2026.2.25+`).
- `channels.telegram.groupAllowFrom`: allowlist de remetentes em grupo (IDs numéricos de usuários do Telegram). `openclaw doctor --fix` pode resolver entradas legadas `@username` para IDs. Entradas não numéricas são ignoradas no momento da autenticação. A autenticação de grupo não usa fallback do pairing-store de DM (`2026.2.25+`).
- Precedência de múltiplas contas:
- Quando dois ou mais IDs de conta estão configurados, defina `channels.telegram.defaultAccount` (ou inclua `channels.telegram.accounts.default`) para tornar o roteamento padrão explícito.
- Se nenhum dos dois for definido, o OpenClaw usa como fallback o primeiro ID de conta normalizado e `openclaw doctor` emite um aviso.
- Quando dois ou mais IDs de conta estão configurados, defina `channels.telegram.defaultAccount` (ou inclua `channels.telegram.accounts.default`) para tornar explícito o roteamento padrão.
- Se nenhum dos dois estiver definido, o OpenClaw usa como fallback o primeiro ID de conta normalizado e `openclaw doctor` emite um aviso.
- `channels.telegram.accounts.default.allowFrom` e `channels.telegram.accounts.default.groupAllowFrom` se aplicam apenas à conta `default`.
- Contas nomeadas herdam `channels.telegram.allowFrom` e `channels.telegram.groupAllowFrom` quando os valores no nível da conta não estão definidos.
- Contas nomeadas não herdam `channels.telegram.accounts.default.allowFrom` / `groupAllowFrom`.
- `channels.telegram.groups`: padrões por grupo + allowlist (use `"*"` para padrões globais).
- `channels.telegram.groups.<id>.groupPolicy`: substituição por grupo para `groupPolicy` (`open | allowlist | disabled`).
- `channels.telegram.groups.<id>.requireMention`: padrão de exigência de menção.
- `channels.telegram.groups.<id>.groupPolicy`: sobrescrita por grupo para `groupPolicy` (`open | allowlist | disabled`).
- `channels.telegram.groups.<id>.requireMention`: padrão de bloqueio por menção.
- `channels.telegram.groups.<id>.skills`: filtro de Skills (omitir = todas as Skills, vazio = nenhuma).
- `channels.telegram.groups.<id>.allowFrom`: substituição por grupo para allowlist de remetentes.
- `channels.telegram.groups.<id>.allowFrom`: sobrescrita da allowlist de remetentes por grupo.
- `channels.telegram.groups.<id>.systemPrompt`: prompt de sistema extra para o grupo.
- `channels.telegram.groups.<id>.enabled`: desabilita o grupo quando `false`.
- `channels.telegram.groups.<id>.topics.<threadId>.*`: substituições por tópico (campos de grupo + `agentId` exclusivo de tópico).
- `channels.telegram.groups.<id>.topics.<threadId>.agentId`: roteia este tópico para um agente específico (substitui roteamento no nível de grupo e por binding).
- `channels.telegram.groups.<id>.topics.<threadId>.groupPolicy`: substituição por tópico para `groupPolicy` (`open | allowlist | disabled`).
- `channels.telegram.groups.<id>.topics.<threadId>.requireMention`: substituição por tópico para exigência de menção.
- `bindings[]` no nível superior com `type: "acp"` e ID canônico de tópico `chatId:topic:topicId` em `match.peer.id`: campos de vínculo persistente de tópico ACP (veja [ACP Agents](/pt-BR/tools/acp-agents#channel-specific-settings)).
- `channels.telegram.groups.<id>.topics.<threadId>.*`: sobrescritas por tópico (campos de grupo + `agentId` exclusivo de tópico).
- `channels.telegram.groups.<id>.topics.<threadId>.agentId`: roteia este tópico para um agente específico (sobrescreve o roteamento no nível do grupo e de bindings).
- `channels.telegram.groups.<id>.topics.<threadId>.groupPolicy`: sobrescrita por tópico para `groupPolicy` (`open | allowlist | disabled`).
- `channels.telegram.groups.<id>.topics.<threadId>.requireMention`: sobrescrita por tópico para bloqueio por menção.
- `bindings[]` de nível superior com `type: "acp"` e ID canônico de tópico `chatId:topic:topicId` em `match.peer.id`: campos de vinculação persistente de tópico ACP (veja [Agentes ACP](/pt-BR/tools/acp-agents#channel-specific-settings)).
- `channels.telegram.direct.<id>.topics.<threadId>.agentId`: roteia tópicos de DM para um agente específico (mesmo comportamento de tópicos de fórum).
- `channels.telegram.execApprovals.enabled`: habilita o Telegram como cliente de aprovação de exec baseado em chat para esta conta.
- `channels.telegram.execApprovals.approvers`: IDs de usuários do Telegram autorizados a aprovar ou negar solicitações de exec. Opcional quando `channels.telegram.allowFrom` ou um `channels.telegram.defaultTo` direto já identifica o proprietário.
- `channels.telegram.execApprovals.approvers`: IDs de usuários do Telegram autorizados a aprovar ou negar solicitações de exec. Opcional quando `channels.telegram.allowFrom` ou um `channels.telegram.defaultTo` direto já identifica o owner.
- `channels.telegram.execApprovals.target`: `dm | channel | both` (padrão: `dm`). `channel` e `both` preservam o tópico de origem do Telegram quando presente.
- `channels.telegram.execApprovals.agentFilter`: filtro opcional de ID de agente para prompts de aprovação encaminhados.
- `channels.telegram.execApprovals.sessionFilter`: filtro opcional de chave de sessão (substring ou regex) para prompts de aprovação encaminhados.
- `channels.telegram.accounts.<account>.execApprovals`: substituição por conta para roteamento de aprovação de exec no Telegram e autorização de aprovador.
- `channels.telegram.execApprovals.agentFilter`: filtro opcional por ID de agente para prompts de aprovação encaminhados.
- `channels.telegram.execApprovals.sessionFilter`: filtro opcional por chave de sessão (substring ou regex) para prompts de aprovação encaminhados.
- `channels.telegram.accounts.<account>.execApprovals`: sobrescrita por conta para roteamento de aprovação de exec no Telegram e autorização de aprovadores.
- `channels.telegram.capabilities.inlineButtons`: `off | dm | group | all | allowlist` (padrão: allowlist).
- `channels.telegram.accounts.<account>.capabilities.inlineButtons`: substituição por conta.
- `channels.telegram.accounts.<account>.capabilities.inlineButtons`: sobrescrita por conta.
- `channels.telegram.commands.nativeSkills`: habilita/desabilita comandos nativos de Skills no Telegram.
- `channels.telegram.replyToMode`: `off | first | all` (padrão: `off`).
- `channels.telegram.textChunkLimit`: tamanho do chunk de saída (caracteres).
- `channels.telegram.chunkMode`: `length` (padrão) ou `newline` para dividir em linhas em branco (limites de parágrafo) antes da divisão por comprimento.
- `channels.telegram.linkPreview`: alterna pré-visualizações de links para mensagens de saída (padrão: true).
- `channels.telegram.streaming`: `off | partial | block | progress` (pré-visualização de stream ao vivo; padrão: `partial`; `progress` é mapeado para `partial`; `block` é compatibilidade legada de modo de pré-visualização). O streaming de pré-visualização do Telegram usa uma única mensagem de pré-visualização que é editada no mesmo lugar.
- `channels.telegram.mediaMaxMb`: limite de mídia do Telegram de entrada/saída (MB, padrão: 100).
- `channels.telegram.retry`: política de repetição para auxiliares de envio do Telegram (CLI/ferramentas/ações) em erros recuperáveis da API de saída (attempts, minDelayMs, maxDelayMs, jitter).
- `channels.telegram.network.autoSelectFamily`: substitui `autoSelectFamily` do Node (true=habilita, false=desabilita). O padrão é habilitado no Node 22+, com WSL2 tendo padrão desabilitado.
- `channels.telegram.network.dnsResultOrder`: substitui a ordem de resultados DNS (`ipv4first` ou `verbatim`). O padrão é `ipv4first` no Node 22+.
- `channels.telegram.network.dangerouslyAllowPrivateNetwork`: opt-in perigoso para ambientes confiáveis com fake-IP ou proxy transparente onde downloads de mídia do Telegram resolvem `api.telegram.org` para endereços privados/internos/de uso especial fora da permissão padrão da faixa de benchmark RFC 2544.
- `channels.telegram.textChunkLimit`: tamanho dos blocos de saída (caracteres).
- `channels.telegram.chunkMode`: `length` (padrão) ou `newline` para dividir em linhas em branco (limites de parágrafo) antes da divisão por tamanho.
- `channels.telegram.linkPreview`: alterna prévias de link para mensagens de saída (padrão: true).
- `channels.telegram.streaming`: `off | partial | block | progress` (prévia de streaming ao vivo; padrão: `partial`; `progress` corresponde a `partial`; `block` é compatibilidade legada com modo de prévia). O streaming de prévia no Telegram usa uma única mensagem de prévia que é editada no mesmo lugar.
- `channels.telegram.streaming.preview.toolProgress`: reutiliza a mensagem de prévia ao vivo para atualizações de ferramenta/progresso quando o streaming de prévia está ativo (padrão: `true`). Defina `false` para manter mensagens separadas de ferramenta/progresso.
- `channels.telegram.mediaMaxMb`: limite de mídia recebida/enviada no Telegram (MB, padrão: 100).
- `channels.telegram.retry`: política de retry para helpers de envio do Telegram (CLI/ferramentas/ações) em erros recuperáveis de API de saída (tentativas, `minDelayMs`, `maxDelayMs`, jitter).
- `channels.telegram.network.autoSelectFamily`: sobrescreve `autoSelectFamily` do Node (true=habilita, false=desabilita). O padrão é habilitado no Node 22+, com WSL2 tendo padrão desabilitado.
- `channels.telegram.network.dnsResultOrder`: sobrescreve a ordem de resultado DNS (`ipv4first` ou `verbatim`). O padrão é `ipv4first` no Node 22+.
- `channels.telegram.network.dangerouslyAllowPrivateNetwork`: habilitação perigosa opcional para ambientes confiáveis com fake-IP ou proxy transparente nos quais downloads de mídia do Telegram resolvem `api.telegram.org` para endereços privados/internos/de uso especial fora da permissão padrão do intervalo de benchmark RFC 2544.
- `channels.telegram.proxy`: URL de proxy para chamadas da Bot API (SOCKS/HTTP).
- `channels.telegram.webhookUrl`: habilita o modo Webhook (requer `channels.telegram.webhookSecret`).
- `channels.telegram.webhookUrl`: habilita o modo Webhook (exige `channels.telegram.webhookSecret`).
- `channels.telegram.webhookSecret`: segredo do Webhook (obrigatório quando `webhookUrl` está definido).
- `channels.telegram.webhookPath`: caminho local do Webhook (padrão `/telegram-webhook`).
- `channels.telegram.webhookHost`: host local de bind do Webhook (padrão `127.0.0.1`).
- `channels.telegram.webhookPort`: porta local de bind do Webhook (padrão `8787`).
- `channels.telegram.actions.reactions`: controla reações de ferramenta do Telegram.
- `channels.telegram.actions.sendMessage`: controla envios de mensagens de ferramenta do Telegram.
- `channels.telegram.actions.deleteMessage`: controla exclusões de mensagens de ferramenta do Telegram.
- `channels.telegram.actions.sticker`: controla ações de sticker do Telegram — envio e busca (padrão: false).
- `channels.telegram.actions.sendMessage`: controla envios de mensagem de ferramenta do Telegram.
- `channels.telegram.actions.deleteMessage`: controla exclusões de mensagem de ferramenta do Telegram.
- `channels.telegram.actions.sticker`: controla ações de sticker do Telegram — enviar e pesquisar (padrão: false).
- `channels.telegram.reactionNotifications`: `off | own | all` — controla quais reações acionam eventos de sistema (padrão: `own` quando não definido).
- `channels.telegram.reactionLevel`: `off | ack | minimal | extensive` — controla a capacidade de reação do agente (padrão: `minimal` quando não definido).
- `channels.telegram.errorPolicy`: `reply | silent` — controla o comportamento de resposta de erro (padrão: `reply`). Há suporte a substituições por conta/grupo/tópico.
- `channels.telegram.errorPolicy`: `reply | silent` — controla o comportamento de resposta de erro (padrão: `reply`). Sobrescritas por conta/grupo/tópico são suportadas.
- `channels.telegram.errorCooldownMs`: ms mínimos entre respostas de erro para o mesmo chat (padrão: `60000`). Evita spam de erros durante indisponibilidades.
- [Referência de configuração - Telegram](/pt-BR/gateway/configuration-reference#telegram)
Campos específicos do Telegram com alto sinal:
Campos específicos do Telegram com maior sinal:
- inicialização/autenticação: `enabled`, `botToken`, `tokenFile`, `accounts.*` (`tokenFile` deve apontar para um arquivo regular; symlinks são rejeitados)
- controle de acesso: `dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`, `groups`, `groups.*.topics.*`, `bindings[]` no nível superior (`type: "acp"`)
- controle de acesso: `dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`, `groups`, `groups.*.topics.*`, `bindings[]` de nível superior (`type: "acp"`)
- aprovações de exec: `execApprovals`, `accounts.*.execApprovals`
- comando/menu: `commands.native`, `commands.nativeSkills`, `customCommands`
- threading/respostas: `replyToMode`
- streaming: `streaming` (pré-visualização), `blockStreaming`
- threads/respostas: `replyToMode`
- streaming: `streaming` (prévia), `streaming.preview.toolProgress`, `blockStreaming`
- formatação/entrega: `textChunkLimit`, `chunkMode`, `linkPreview`, `responsePrefix`
- mídia/rede: `mediaMaxMb`, `timeoutSeconds`, `pollingStallThresholdMs`, `retry`, `network.autoSelectFamily`, `network.dangerouslyAllowPrivateNetwork`, `proxy`
- Webhook: `webhookUrl`, `webhookSecret`, `webhookPath`, `webhookHost`

View File

@ -1,100 +1,129 @@
---
read_when:
- Executando mais de um Gateway na mesma máquina
- Você precisa de configuração/estado/portas isolados por Gateway
summary: Executar vários Gateways do OpenClaw no mesmo host (isolamento, portas e perfis)
- Você precisa de configuração/estado/portas isolados para cada Gateway
summary: Executar vários Gateways do OpenClaw em um único host (isolamento, portas e perfis)
title: Vários Gateways
x-i18n:
generated_at: "2026-04-05T12:41:51Z"
generated_at: "2026-04-21T17:45:33Z"
model: gpt-5.4
provider: openai
source_hash: 061f204bf56b28c6bd0e2c9aee6c561a8a162ca219060117fea4d3a007f01899
source_hash: 8c3fcb921bc6596040e9249467964bd9dcd40ea7c16e958bb378247b0f994a7b
source_path: gateway/multiple-gateways.md
workflow: 15
---
# Vários Gateways (mesmo host)
A maioria das configurações deve usar um único Gateway, porque um único Gateway pode lidar com várias conexões de mensagens e agentes. Se você precisar de isolamento mais forte ou redundância (por exemplo, um bot de resgate), execute Gateways separados com perfis/portas isolados.
A maioria das configurações deve usar um Gateway, porque um único Gateway pode lidar com várias conexões de mensageria e agents. Se você precisar de isolamento mais forte ou redundância (por exemplo, um bot de resgate), execute Gateways separados com perfis/portas isolados.
## Checklist de isolamento (obrigatório)
## Lista de verificação de isolamento (obrigatória)
- `OPENCLAW_CONFIG_PATH` — arquivo de configuração por instância
- `OPENCLAW_STATE_DIR` — sessões, credenciais, caches por instância
- `OPENCLAW_STATE_DIR` — sessões, credenciais e caches por instância
- `agents.defaults.workspace` — raiz de workspace por instância
- `gateway.port` (ou `--port`) — única por instância
- Portas derivadas (browser/canvas) não podem se sobrepor
- `gateway.port` (ou `--port`) — exclusivo por instância
- As portas derivadas (browser/canvas) não devem se sobrepor
Se esses itens forem compartilhados, você terá corridas de configuração e conflitos de porta.
Se eles forem compartilhados, você terá condições de corrida de configuração e conflitos de porta.
## Recomendado: perfis (`--profile`)
## Recomendado: use o perfil padrão para o principal e um perfil nomeado para o resgate
Perfis definem automaticamente o escopo de `OPENCLAW_STATE_DIR` + `OPENCLAW_CONFIG_PATH` e adicionam sufixos aos nomes dos serviços.
Os perfis aplicam escopo automaticamente a `OPENCLAW_STATE_DIR` + `OPENCLAW_CONFIG_PATH` e adicionam sufixos aos nomes de serviço. Para a maioria das configurações com bot de resgate, mantenha o bot principal no perfil padrão e dê apenas ao bot de resgate um perfil nomeado, como `rescue`.
```bash
# principal
openclaw --profile main setup
openclaw --profile main gateway --port 18789
# principal (perfil padrão)
openclaw setup
openclaw gateway --port 18789
# resgate
openclaw --profile rescue setup
openclaw --profile rescue gateway --port 19001
```
Serviços por perfil:
Serviços:
```bash
openclaw --profile main gateway install
openclaw gateway install
openclaw --profile rescue gateway install
```
Se você quiser que ambos os Gateways usem perfis nomeados, isso também funciona, mas não é obrigatório.
## Guia do bot de resgate
Execute um segundo Gateway no mesmo host com seu próprio:
Configuração recomendada:
- perfil/configuração
- diretório de estado
- workspace
- porta base (mais as portas derivadas)
- mantenha o bot principal no perfil padrão
- execute o bot de resgate em `--profile rescue`
- use um bot do Telegram completamente separado para a conta de resgate
- mantenha o bot de resgate em uma porta base diferente, como `19001`
Isso mantém o bot de resgate isolado do bot principal, para que ele possa depurar ou aplicar alterações de configuração se o bot principal estiver fora do ar.
Isso mantém o bot de resgate isolado do bot principal, para que ele possa depurar ou aplicar alterações de configuração se o bot principal estiver fora do ar. Deixe pelo menos 20 portas entre as portas base para que as portas derivadas de browser/canvas/CDP nunca colidam.
Espaçamento de portas: deixe pelo menos 20 portas entre as portas base para que as portas derivadas de browser/canvas/CDP nunca colidam.
### Canal/conta de resgate recomendado
### Como instalar (bot de resgate)
Para a maioria das configurações, use um bot do Telegram completamente separado para o perfil de resgate.
Por que Telegram:
- fácil de manter apenas para operadores
- token e identidade de bot separados
- independente do canal/da instalação do app do bot principal
- caminho de recuperação simples baseado em DM quando o bot principal estiver com problema
A parte importante é a independência total: conta de bot separada, credenciais separadas, perfil do OpenClaw separado, workspace separado e porta separada.
### Fluxo de instalação recomendado
Use isto como configuração padrão, a menos que você tenha um motivo forte para fazer algo diferente:
```bash
# Bot principal (existente ou novo, sem parâmetro --profile)
# Executa na porta 18789 + portas do Chrome CDC/Canvas/...
# Bot principal (perfil padrão, porta 18789)
openclaw onboard
openclaw gateway install
# Bot de resgate (perfil + portas isolados)
# Bot de resgate (bot do Telegram separado, perfil separado, porta 19001)
openclaw --profile rescue onboard
# Observações:
# - o nome do workspace receberá o sufixo -rescue por padrão
# - A porta deve ser pelo menos 18789 + 20 portas,
# é melhor escolher uma porta base completamente diferente, como 19789,
# - o restante da configuração inicial é igual ao normal
# Para instalar o serviço (se isso não aconteceu automaticamente durante a configuração)
openclaw --profile rescue gateway install
```
## Mapeamento de portas (derivadas)
Durante `openclaw --profile rescue onboard`:
- use o token do bot do Telegram separado
- mantenha o perfil `rescue`
- use uma porta base pelo menos 20 acima da do bot principal
- aceite o workspace de resgate padrão, a menos que você já gerencie um por conta própria
Se o onboarding já tiver instalado o serviço de resgate para você, o `gateway install` final não será necessário.
### O que o onboarding altera
`openclaw --profile rescue onboard` usa o fluxo normal de onboarding, mas grava tudo em um perfil separado.
Na prática, isso significa que o bot de resgate recebe seu próprio:
- arquivo de configuração
- diretório de estado
- workspace (por padrão `~/.openclaw/workspace-rescue`)
- nome de serviço gerenciado
Fora isso, os prompts são os mesmos do onboarding normal.
## Mapeamento de portas (derivado)
Porta base = `gateway.port` (ou `OPENCLAW_GATEWAY_PORT` / `--port`).
- porta do serviço de controle do navegador = base + 2 (somente loopback)
- o host de canvas é servido no servidor HTTP do Gateway (mesma porta de `gateway.port`)
- portas CDP do perfil do navegador são alocadas automaticamente a partir de `browser.controlPort + 9 .. + 108`
- porta do serviço de controle do browser = base + 2 (apenas loopback local)
- o host do canvas é servido no servidor HTTP do Gateway (mesma porta que `gateway.port`)
- as portas CDP do perfil do browser são alocadas automaticamente a partir de `browser.controlPort + 9 .. + 108`
Se você substituir qualquer uma delas na configuração ou no ambiente, deverá mantê-las exclusivas por instância.
Se você substituir qualquer um deles em config ou env, deve mantê-los exclusivos por instância.
## Observações sobre Browser/CDP (armadilha comum)
## Observações sobre browser/CDP (armadilha comum)
- **Não** fixe `browser.cdpUrl` nos mesmos valores em várias instâncias.
- Cada instância precisa de sua própria porta de controle do navegador e intervalo de CDP (derivados da porta do gateway).
- Cada instância precisa de sua própria porta de controle do browser e de sua própria faixa de CDP (derivadas da porta do Gateway).
- Se você precisar de portas CDP explícitas, defina `browser.profiles.<name>.cdpPort` por instância.
- Chrome remoto: use `browser.profiles.<name>.cdpUrl` (por perfil, por instância).
@ -102,7 +131,7 @@ Se você substituir qualquer uma delas na configuração ou no ambiente, deverá
```bash
OPENCLAW_CONFIG_PATH=~/.openclaw/main.json \
OPENCLAW_STATE_DIR=~/.openclaw-main \
OPENCLAW_STATE_DIR=~/.openclaw \
openclaw gateway --port 18789
OPENCLAW_CONFIG_PATH=~/.openclaw/rescue.json \
@ -113,15 +142,15 @@ openclaw gateway --port 19001
## Verificações rápidas
```bash
openclaw --profile main gateway status --deep
openclaw gateway status --deep
openclaw --profile rescue gateway status --deep
openclaw --profile rescue gateway probe
openclaw --profile main status
openclaw status
openclaw --profile rescue status
openclaw --profile rescue browser status
```
Interpretação:
- `gateway status --deep` ajuda a detectar serviços launchd/systemd/schtasks desatualizados de instalações mais antigas.
- `gateway status --deep` ajuda a detectar serviços launchd/systemd/schtasks antigos de instalações anteriores.
- O texto de aviso de `gateway probe`, como `multiple reachable gateways detected`, é esperado apenas quando você executa intencionalmente mais de um gateway isolado.

View File

@ -2,35 +2,35 @@
read_when:
- Usando ou configurando comandos de chat
- Depurando o roteamento de comandos ou permissões
summary: 'Comandos slash: texto vs nativo, configuração e comandos compatíveis'
title: Comandos slash
summary: 'Comandos de barra: texto vs nativos, configuração e comandos compatíveis'
title: Comandos de barra
x-i18n:
generated_at: "2026-04-21T13:39:21Z"
generated_at: "2026-04-21T17:45:33Z"
model: gpt-5.4
provider: openai
source_hash: d90ddee54af7c05b7fdf486590561084581d750e42cd14674d43bbdc0984df5d
source_hash: 26923608329ba2aeece2d4bc8edfa40ae86e03719a9f590f26ff79f57d97521d
source_path: tools/slash-commands.md
workflow: 15
---
# Comandos slash
# Comandos de barra
Os comandos são tratados pelo Gateway. A maioria dos comandos deve ser enviada como uma mensagem **autônoma** que começa com `/`.
O comando de chat bash somente-host usa `! <cmd>` (com `/bash <cmd>` como alias).
O comando de chat bash somente do host usa `! <cmd>` (com `/bash <cmd>` como alias).
Existem dois sistemas relacionados:
dois sistemas relacionados:
- **Comandos**: mensagens autônomas `/...`.
- **Diretivas**: `/think`, `/fast`, `/verbose`, `/trace`, `/reasoning`, `/elevated`, `/exec`, `/model`, `/queue`.
- As diretivas são removidas da mensagem antes que o modelo a veja.
- Em mensagens normais de chat (não somente-diretiva), elas são tratadas como “dicas inline” e **não** persistem configurações da sessão.
- Em mensagens somente-diretiva (a mensagem contém apenas diretivas), elas persistem na sessão e respondem com uma confirmação.
- As diretivas são aplicadas apenas para **remetentes autorizados**. Se `commands.allowFrom` estiver definido, ele será a única
lista de permissões usada; caso contrário, a autorização virá das listas de permissões/pareamento do canal mais `commands.useAccessGroups`.
Remetentes não autorizados verão as diretivas tratadas como texto simples.
- Em mensagens normais de chat (não apenas com diretivas), elas são tratadas como “dicas inline” e **não** persistem as configurações da sessão.
- Em mensagens somente com diretivas (a mensagem contém apenas diretivas), elas persistem na sessão e respondem com uma confirmação.
- As diretivas só são aplicadas para **remetentes autorizados**. Se `commands.allowFrom` estiver definido, ele será a única
allowlist usada; caso contrário, a autorização vem das allowlists/emparelhamento do canal mais `commands.useAccessGroups`.
Remetentes não autorizados veem as diretivas tratadas como texto simples.
Também há alguns **atalhos inline** (somente remetentes em lista de permissões/autorizados): `/help`, `/commands`, `/status`, `/whoami` (`/id`).
Eles são executados imediatamente, são removidos antes que o modelo veja a mensagem, e o texto restante continua pelo fluxo normal.
Também há alguns **atalhos inline** (somente remetentes autorizados/na allowlist): `/help`, `/commands`, `/status`, `/whoami` (`/id`).
Eles são executados imediatamente, removidos antes que o modelo veja a mensagem, e o texto restante continua pelo fluxo normal.
## Configuração
@ -59,109 +59,110 @@ Eles são executados imediatamente, são removidos antes que o modelo veja a men
}
```
- `commands.text` (padrão `true`) habilita o parsing de `/...` em mensagens de chat.
- Em superfícies sem comandos nativos (WhatsApp/WebChat/Signal/iMessage/Google Chat/Microsoft Teams), os comandos de texto continuam funcionando mesmo que você defina isso como `false`.
- `commands.text` (padrão `true`) ativa a análise de `/...` em mensagens de chat.
- Em superfícies sem comandos nativos (WhatsApp/WebChat/Signal/iMessage/Google Chat/Microsoft Teams), os comandos de texto ainda funcionam mesmo se você definir isso como `false`.
- `commands.native` (padrão `"auto"`) registra comandos nativos.
- Auto: ligado para Discord/Telegram; desligado para Slack (até você adicionar comandos slash); ignorado para provedores sem suporte nativo.
- Auto: ligado para Discord/Telegram; desligado para Slack (até você adicionar slash commands); ignorado para provedores sem suporte nativo.
- Defina `channels.discord.commands.native`, `channels.telegram.commands.native` ou `channels.slack.commands.native` para substituir por provedor (bool ou `"auto"`).
- `false` limpa comandos registrados anteriormente no Discord/Telegram na inicialização. Os comandos do Slack são gerenciados no app Slack e não são removidos automaticamente.
- `commands.nativeSkills` (padrão `"auto"`) registra comandos de **skill** nativamente quando compatível.
- Auto: ligado para Discord/Telegram; desligado para Slack (o Slack exige criar um comando slash por skill).
- `false` limpa comandos registrados anteriormente no Discord/Telegram na inicialização. Os comandos do Slack são gerenciados no app do Slack e não são removidos automaticamente.
- `commands.nativeSkills` (padrão `"auto"`) registra comandos de **skill** de forma nativa quando houver suporte.
- Auto: ligado para Discord/Telegram; desligado para Slack (o Slack exige a criação de um slash command por skill).
- Defina `channels.discord.commands.nativeSkills`, `channels.telegram.commands.nativeSkills` ou `channels.slack.commands.nativeSkills` para substituir por provedor (bool ou `"auto"`).
- `commands.bash` (padrão `false`) habilita `! <cmd>` para executar comandos de shell no host (`/bash <cmd>` é um alias; exige listas de permissões de `tools.elevated`).
- `commands.bashForegroundMs` (padrão `2000`) controla por quanto tempo o bash espera antes de mudar para o modo em segundo plano (`0` envia para segundo plano imediatamente).
- `commands.config` (padrão `false`) habilita `/config` (lê/grava `openclaw.json`).
- `commands.mcp` (padrão `false`) habilita `/mcp` (lê/grava a configuração de MCP gerenciada pelo OpenClaw em `mcp.servers`).
- `commands.plugins` (padrão `false`) habilita `/plugins` (descoberta/status de Plugin mais controles de instalar + habilitar/desabilitar).
- `commands.debug` (padrão `false`) habilita `/debug` (substituições somente de runtime).
- `commands.restart` (padrão `true`) habilita `/restart` mais ações de ferramenta de reinicialização do Gateway.
- `commands.ownerAllowFrom` (opcional) define a lista de permissões explícita de owner para superfícies de comando/ferramenta exclusivas do owner. Isso é separado de `commands.allowFrom`.
- `commands.ownerDisplay` controla como ids de owner aparecem no prompt de sistema: `raw` ou `hash`.
- `commands.bash` (padrão `false`) ativa `! <cmd>` para executar comandos do shell do host (`/bash <cmd>` é um alias; requer allowlists de `tools.elevated`).
- `commands.bashForegroundMs` (padrão `2000`) controla quanto tempo o bash espera antes de mudar para o modo em segundo plano (`0` envia para segundo plano imediatamente).
- `commands.config` (padrão `false`) ativa `/config` (lê/grava `openclaw.json`).
- `commands.mcp` (padrão `false`) ativa `/mcp` (lê/grava a configuração de MCP gerenciada pelo OpenClaw em `mcp.servers`).
- `commands.plugins` (padrão `false`) ativa `/plugins` (descoberta/status de plugins mais controles de instalar + ativar/desativar).
- `commands.debug` (padrão `false`) ativa `/debug` (substituições somente de runtime).
- `commands.restart` (padrão `true`) ativa `/restart` mais ações de ferramenta para reiniciar o gateway.
- `commands.ownerAllowFrom` (opcional) define a allowlist explícita do proprietário para superfícies de comandos/ferramentas exclusivas do proprietário. Isso é separado de `commands.allowFrom`.
- `commands.ownerDisplay` controla como os ids do proprietário aparecem no prompt do sistema: `raw` ou `hash`.
- `commands.ownerDisplaySecret` opcionalmente define o segredo HMAC usado quando `commands.ownerDisplay="hash"`.
- `commands.allowFrom` (opcional) define uma lista de permissões por provedor para autorização de comandos. Quando configurado, ela é a
única fonte de autorização para comandos e diretivas (listas de permissões/pareamento do canal e `commands.useAccessGroups`
são ignorados). Use `"*"` para um padrão global; chaves específicas de provedor o substituem.
- `commands.useAccessGroups` (padrão `true`) aplica listas de permissões/políticas para comandos quando `commands.allowFrom` não está definido.
- `commands.allowFrom` (opcional) define uma allowlist por provedor para autorização de comandos. Quando configurado, ela é a
única fonte de autorização para comandos e diretivas (allowlists/emparelhamento do canal e `commands.useAccessGroups`
são ignorados). Use `"*"` para um padrão global; chaves específicas do provedor têm precedência.
- `commands.useAccessGroups` (padrão `true`) aplica allowlists/políticas para comandos quando `commands.allowFrom` não está definido.
## Lista de comandos
Fonte de verdade atual:
Fonte da verdade atual:
- comandos embutidos do núcleo vêm de `src/auto-reply/commands-registry.shared.ts`
- comandos dock gerados vêm de `src/auto-reply/commands-registry.data.ts`
- comandos de Plugin vêm de chamadas `registerCommand()` do Plugin
- a disponibilidade real no seu Gateway ainda depende de flags de configuração, superfície do canal e Plugins instalados/habilitados
- os comandos embutidos do núcleo vêm de `src/auto-reply/commands-registry.shared.ts`
- os comandos dock gerados vêm de `src/auto-reply/commands-registry.data.ts`
- os comandos de plugins vêm de chamadas `registerCommand()` do plugin
- a disponibilidade real no seu gateway ainda depende de flags de configuração, superfície do canal e plugins instalados/ativados
### Comandos embutidos do núcleo
Comandos embutidos disponíveis hoje:
- `/new [model]` inicia uma nova sessão; `/reset` é o alias de redefinição.
- `/compact [instructions]` faz Compaction do contexto da sessão. Consulte [/concepts/compaction](/pt-BR/concepts/compaction).
- `/stop` aborta a execução atual.
- `/session idle <duration|off>` e `/session max-age <duration|off>` gerenciam a expiração do vínculo de thread.
- `/think <level>` define o nível de thinking. As opções vêm do perfil do provedor do modelo ativo; níveis comuns são `off`, `minimal`, `low`, `medium` e `high`, com níveis personalizados como `xhigh`, `adaptive`, `max` ou `on` binário apenas onde houver suporte. Aliases: `/thinking`, `/t`.
- `/reset soft [message]` mantém a transcrição atual, descarta ids de sessão reutilizados do backend CLI e executa novamente, no lugar, o carregamento inicial/de prompt do sistema.
- `/compact [instructions]` compacta o contexto da sessão. Veja [/concepts/compaction](/pt-BR/concepts/compaction).
- `/stop` interrompe a execução atual.
- `/session idle <duration|off>` e `/session max-age <duration|off>` gerenciam a expiração do vínculo da thread.
- `/think <level>` define o nível de raciocínio. As opções vêm do perfil do provedor do modelo ativo; níveis comuns são `off`, `minimal`, `low`, `medium` e `high`, com níveis personalizados como `xhigh`, `adaptive`, `max` ou apenas binário `on` quando houver suporte. Aliases: `/thinking`, `/t`.
- `/verbose on|off|full` alterna a saída detalhada. Alias: `/v`.
- `/trace on|off` alterna a saída de rastreamento de Plugin para a sessão atual.
- `/trace on|off` alterna a saída de rastreamento de plugin para a sessão atual.
- `/fast [status|on|off]` mostra ou define o modo rápido.
- `/reasoning [on|off|stream]` alterna a visibilidade de reasoning. Alias: `/reason`.
- `/reasoning [on|off|stream]` alterna a visibilidade do raciocínio. Alias: `/reason`.
- `/elevated [on|off|ask|full]` alterna o modo elevado. Alias: `/elev`.
- `/exec host=<auto|sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id>` mostra ou define padrões de exec.
- `/exec host=<auto|sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id>` mostra ou define os padrões de execução.
- `/model [name|#|status]` mostra ou define o modelo.
- `/models [provider] [page] [limit=<n>|size=<n>|all]` lista provedores ou modelos de um provedor.
- `/queue <mode>` gerencia o comportamento da fila (`steer`, `interrupt`, `followup`, `collect`, `steer-backlog`) mais opções como `debounce:2s cap:25 drop:summarize`.
- `/help` mostra o resumo curto de ajuda.
- `/commands` mostra o catálogo de comandos gerado.
- `/tools [compact|verbose]` mostra o que o agente atual pode usar agora.
- `/status` mostra o status do runtime, incluindo uso/quota do provedor quando disponível.
- `/tasks` lista tarefas ativas/recentes em segundo plano da sessão atual.
- `/tools [compact|verbose]` mostra o que o agente atual pode usar neste momento.
- `/status` mostra o status do runtime, incluindo uso/cota do provedor quando disponível.
- `/tasks` lista tarefas em segundo plano ativas/recentes para a sessão atual.
- `/context [list|detail|json]` explica como o contexto é montado.
- `/export-session [path]` exporta a sessão atual para HTML. Alias: `/export`.
- `/whoami` mostra seu id de remetente. Alias: `/id`.
- `/skill <name> [input]` executa uma skill pelo nome.
- `/allowlist [list|add|remove] ...` gerencia entradas da lista de permissões. Somente texto.
- `/approve <id> <decision>` resolve prompts de aprovação do exec.
- `/btw <question>` faz uma pergunta lateral sem alterar o contexto futuro da sessão. Consulte [/tools/btw](/pt-BR/tools/btw).
- `/subagents list|kill|log|info|send|steer|spawn` gerencia execuções de subagentes da sessão atual.
- `/allowlist [list|add|remove] ...` gerencia entradas da allowlist. Somente texto.
- `/approve <id> <decision>` resolve prompts de aprovação de execução.
- `/btw <question>` faz uma pergunta paralela sem alterar o contexto futuro da sessão. Veja [/tools/btw](/pt-BR/tools/btw).
- `/subagents list|kill|log|info|send|steer|spawn` gerencia execuções de subagentes para a sessão atual.
- `/acp spawn|cancel|steer|close|sessions|status|set-mode|set|cwd|permissions|timeout|model|reset-options|doctor|install|help` gerencia sessões ACP e opções de runtime.
- `/focus <target>` vincula a thread atual do Discord ou tópico/conversa do Telegram a um destino de sessão.
- `/focus <target>` vincula a thread atual do Discord ou o tópico/conversa do Telegram a um alvo de sessão.
- `/unfocus` remove o vínculo atual.
- `/agents` lista agentes vinculados à thread da sessão atual.
- `/kill <id|#|all>` aborta um ou todos os subagentes em execução.
- `/agents` lista agentes vinculados à thread para a sessão atual.
- `/kill <id|#|all>` interrompe um ou todos os subagentes em execução.
- `/steer <id|#> <message>` envia direcionamento para um subagente em execução. Alias: `/tell`.
- `/config show|get|set|unset` lê ou grava `openclaw.json`. Somente owner. Exige `commands.config: true`.
- `/mcp show|get|set|unset` lê ou grava a configuração de servidor MCP gerenciada pelo OpenClaw em `mcp.servers`. Somente owner. Exige `commands.mcp: true`.
- `/plugins list|inspect|show|get|install|enable|disable` inspeciona ou altera o estado do Plugin. `/plugin` é um alias. Somente owner para gravações. Exige `commands.plugins: true`.
- `/debug show|set|unset|reset` gerencia substituições de configuração somente de runtime. Somente owner. Exige `commands.debug: true`.
- `/config show|get|set|unset` lê ou grava `openclaw.json`. Somente proprietário. Requer `commands.config: true`.
- `/mcp show|get|set|unset` lê ou grava a configuração do servidor MCP gerenciada pelo OpenClaw em `mcp.servers`. Somente proprietário. Requer `commands.mcp: true`.
- `/plugins list|inspect|show|get|install|enable|disable` inspeciona ou altera o estado do plugin. `/plugin` é um alias. Somente proprietário para gravações. Requer `commands.plugins: true`.
- `/debug show|set|unset|reset` gerencia substituições de configuração somente de runtime. Somente proprietário. Requer `commands.debug: true`.
- `/usage off|tokens|full|cost` controla o rodapé de uso por resposta ou imprime um resumo local de custo.
- `/tts on|off|status|provider|limit|summary|audio|help` controla TTS. Consulte [/tools/tts](/pt-BR/tools/tts).
- `/restart` reinicia o OpenClaw quando habilitado. Padrão: habilitado; defina `commands.restart: false` para desabilitá-lo.
- `/activation mention|always` define o modo de ativação de grupo.
- `/send on|off|inherit` define a política de envio. Somente owner.
- `/bash <command>` executa um comando de shell no host. Somente texto. Alias: `! <command>`. Exige `commands.bash: true` mais listas de permissões de `tools.elevated`.
- `/tts on|off|status|provider|limit|summary|audio|help` controla TTS. Veja [/tools/tts](/pt-BR/tools/tts).
- `/restart` reinicia o OpenClaw quando ativado. Padrão: ativado; defina `commands.restart: false` para desativá-lo.
- `/activation mention|always` define o modo de ativação em grupo.
- `/send on|off|inherit` define a política de envio. Somente proprietário.
- `/bash <command>` executa um comando do shell do host. Somente texto. Alias: `! <command>`. Requer `commands.bash: true` mais allowlists de `tools.elevated`.
- `!poll [sessionId]` verifica um trabalho bash em segundo plano.
- `!stop [sessionId]` interrompe um trabalho bash em segundo plano.
### Comandos dock gerados
Comandos dock são gerados a partir de Plugins de canal com suporte a comando nativo. Conjunto incluído atual:
Os comandos dock são gerados a partir de plugins de canal com suporte a comandos nativos. Conjunto empacotado atual:
- `/dock-discord` (alias: `/dock_discord`)
- `/dock-mattermost` (alias: `/dock_mattermost`)
- `/dock-slack` (alias: `/dock_slack`)
- `/dock-telegram` (alias: `/dock_telegram`)
### Comandos de Plugin incluídos
### Comandos de plugins empacotados
Plugins incluídos podem adicionar mais comandos slash. Comandos incluídos atuais neste repositório:
Os plugins empacotados podem adicionar mais slash commands. Comandos empacotados atuais neste repositório:
- `/dreaming [on|off|status|help]` alterna Dreaming de memória. Consulte [Dreaming](/pt-BR/concepts/dreaming).
- `/pair [qr|status|pending|approve|cleanup|notify]` gerencia o fluxo de pareamento/configuração de dispositivo. Consulte [Pairing](/pt-BR/channels/pairing).
- `/phone status|arm <camera|screen|writes|all> [duration]|disarm` arma temporariamente comandos de alto risco do node de telefone.
- `/dreaming [on|off|status|help]` alterna o dreaming de memória. Veja [Dreaming](/pt-BR/concepts/dreaming).
- `/pair [qr|status|pending|approve|cleanup|notify]` gerencia o fluxo de emparelhamento/configuração do dispositivo. Veja [Pairing](/pt-BR/channels/pairing).
- `/phone status|arm <camera|screen|writes|all> [duration]|disarm` arma temporariamente comandos de Node do telefone de alto risco.
- `/voice status|list [limit]|set <voiceId|name>` gerencia a configuração de voz do Talk. No Discord, o nome do comando nativo é `/talkvoice`.
- `/card ...` envia presets de rich card do LINE. Consulte [LINE](/pt-BR/channels/line).
- `/codex status|models|threads|resume|compact|review|account|mcp|skills` inspeciona e controla o harness do app-server Codex incluído. Consulte [Codex Harness](/pt-BR/plugins/codex-harness).
- Comandos somente de QQBot:
- `/card ...` envia predefinições de rich card do LINE. Veja [LINE](/pt-BR/channels/line).
- `/codex status|models|threads|resume|compact|review|account|mcp|skills` inspeciona e controla o harness app-server Codex empacotado. Veja [Codex Harness](/pt-BR/plugins/codex-harness).
- Comandos somente do QQBot:
- `/bot-ping`
- `/bot-version`
- `/bot-help`
@ -170,71 +171,71 @@ Plugins incluídos podem adicionar mais comandos slash. Comandos incluídos atua
### Comandos dinâmicos de skill
Skills invocáveis por usuário também são expostas como comandos slash:
As skills invocáveis pelo usuário também são expostas como slash commands:
- `/skill <name> [input]` sempre funciona como ponto de entrada genérico.
- skills também podem aparecer como comandos diretos como `/prose` quando a skill/Plugin os registra.
- `/skill <name> [input]` sempre funciona como o ponto de entrada genérico.
- as skills também podem aparecer como comandos diretos como `/prose` quando a skill/o plugin os registra.
- o registro nativo de comandos de skill é controlado por `commands.nativeSkills` e `channels.<provider>.commands.nativeSkills`.
Observações:
Notas:
- Os comandos aceitam um `:` opcional entre o comando e os argumentos (ex.: `/think: high`, `/send: on`, `/help:`).
- `/new <model>` aceita um alias de modelo, `provider/model` ou um nome de provedor (correspondência aproximada); se não houver correspondência, o texto será tratado como corpo da mensagem.
- Para a divisão completa de uso por provedor, use `openclaw status --usage`.
- `/allowlist add|remove` exige `commands.config=true` e respeita `configWrites` do canal.
- Em canais com múltiplas contas, `/allowlist --account <id>` direcionado à configuração e `/config set channels.<provider>.accounts.<id>...` também respeitam `configWrites` da conta de destino.
- Os comandos aceitam um `:` opcional entre o comando e os args (por exemplo, `/think: high`, `/send: on`, `/help:`).
- `/new <model>` aceita um alias de modelo, `provider/model` ou um nome de provedor (correspondência difusa); se não houver correspondência, o texto é tratado como o corpo da mensagem.
- Para o detalhamento completo de uso por provedor, use `openclaw status --usage`.
- `/allowlist add|remove` requer `commands.config=true` e respeita `configWrites` do canal.
- Em canais com várias contas, `/allowlist --account <id>` direcionado à configuração e `/config set channels.<provider>.accounts.<id>...` também respeitam `configWrites` da conta de destino.
- `/usage` controla o rodapé de uso por resposta; `/usage cost` imprime um resumo local de custo a partir dos logs de sessão do OpenClaw.
- `/restart` vem habilitado por padrão; defina `commands.restart: false` para desabilitá-lo.
- `/plugins install <spec>` aceita as mesmas especificações de Plugin que `openclaw plugins install`: caminho/arquivo local, pacote npm ou `clawhub:<pkg>`.
- `/plugins enable|disable` atualiza a configuração do Plugin e pode solicitar uma reinicialização.
- Comando nativo somente do Discord: `/vc join|leave|status` controla canais de voz (exige `channels.discord.voice` e comandos nativos; não disponível como texto).
- Comandos de vínculo de thread do Discord (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`) exigem que vínculos de thread efetivos estejam habilitados (`session.threadBindings.enabled` e/ou `channels.discord.threadBindings.enabled`).
- Referência de comando ACP e comportamento de runtime: [Agentes ACP](/pt-BR/tools/acp-agents).
- `/verbose` é voltado para depuração e visibilidade extra; mantenha-o **desligado** no uso normal.
- `/trace` é mais restrito que `/verbose`: ele revela apenas linhas de trace/debug do Plugin e mantém desativado o chatter normal e detalhado de ferramentas.
- `/fast on|off` persiste uma substituição de sessão. Use a opção `inherit` da UI de Sessions para limpá-la e voltar aos padrões da configuração.
- `/fast` é específico do provedor: OpenAI/OpenAI Codex o mapeiam para `service_tier=priority` em endpoints nativos de Responses, enquanto solicitações Anthropic públicas diretas, incluindo tráfego autenticado por OAuth enviado a `api.anthropic.com`, o mapeiam para `service_tier=auto` ou `standard_only`. Consulte [OpenAI](/pt-BR/providers/openai) e [Anthropic](/pt-BR/providers/anthropic).
- Resumos de falha de ferramenta continuam sendo mostrados quando relevantes, mas o texto detalhado da falha só é incluído quando `/verbose` está `on` ou `full`.
- `/reasoning`, `/verbose` e `/trace` são arriscados em configurações de grupo: podem revelar reasoning interno, saída de ferramenta ou diagnósticos de Plugin que você não pretendia expor. Prefira mantê-los desligados, especialmente em chats em grupo.
- `/restart` é ativado por padrão; defina `commands.restart: false` para desativá-lo.
- `/plugins install <spec>` aceita as mesmas especificações de plugin que `openclaw plugins install`: caminho/arquivo local, pacote npm ou `clawhub:<pkg>`.
- `/plugins enable|disable` atualiza a configuração do plugin e pode solicitar um reinício.
- Comando nativo somente do Discord: `/vc join|leave|status` controla canais de voz (requer `channels.discord.voice` e comandos nativos; não disponível como texto).
- Os comandos de vínculo de thread do Discord (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`) exigem que os vínculos de thread efetivos estejam ativados (`session.threadBindings.enabled` e/ou `channels.discord.threadBindings.enabled`).
- Referência do comando ACP e comportamento de runtime: [ACP Agents](/pt-BR/tools/acp-agents).
- `/verbose` é destinado a depuração e visibilidade extra; mantenha-o **desativado** no uso normal.
- `/trace` é mais restrito que `/verbose`: ele apenas revela linhas de rastreamento/depuração pertencentes ao plugin e mantém desativado o chatter normal detalhado de ferramentas.
- `/fast on|off` persiste uma substituição da sessão. Use a opção `inherit` da UI de Sessões para limpá-la e voltar aos padrões da configuração.
- `/fast` é específico por provedor: OpenAI/OpenAI Codex o mapeiam para `service_tier=priority` em endpoints nativos Responses, enquanto solicitações públicas diretas para Anthropic, incluindo tráfego autenticado por OAuth enviado para `api.anthropic.com`, o mapeiam para `service_tier=auto` ou `standard_only`. Veja [OpenAI](/pt-BR/providers/openai) e [Anthropic](/pt-BR/providers/anthropic).
- Resumos de falha de ferramenta ainda são mostrados quando relevantes, mas o texto detalhado da falha só é incluído quando `/verbose` está `on` ou `full`.
- `/reasoning`, `/verbose` e `/trace` são arriscados em ambientes de grupo: podem revelar raciocínio interno, saída de ferramenta ou diagnósticos de plugin que você não pretendia expor. Prefira deixá-los desativados, especialmente em chats de grupo.
- `/model` persiste imediatamente o novo modelo da sessão.
- Se o agente estiver ocioso, a próxima execução o usará imediatamente.
- Se uma execução já estiver ativa, o OpenClaw marca uma troca ao vivo como pendente e só reinicia com o novo modelo em um ponto limpo de nova tentativa.
- Se a atividade de ferramenta ou a saída de resposta já tiver começado, a troca pendente pode permanecer em fila até uma oportunidade posterior de nova tentativa ou até o próximo turno do usuário.
- **Caminho rápido:** mensagens somente-comando de remetentes em lista de permissões são tratadas imediatamente (ignorando fila + modelo).
- **Bloqueio por menção em grupo:** mensagens somente-comando de remetentes em lista de permissões ignoram exigências de menção.
- **Atalhos inline (somente remetentes em lista de permissões):** certos comandos também funcionam quando embutidos em uma mensagem normal e são removidos antes que o modelo veja o texto restante.
- Se a atividade de ferramenta ou a saída da resposta já tiver começado, a troca pendente pode permanecer na fila até uma oportunidade posterior de nova tentativa ou o próximo turno do usuário.
- **Caminho rápido:** mensagens somente com comandos de remetentes na allowlist são tratadas imediatamente (ignorando fila + modelo).
- **Bloqueio por menção em grupo:** mensagens somente com comandos de remetentes na allowlist ignoram requisitos de menção.
- **Atalhos inline (somente remetentes na allowlist):** certos comandos também funcionam quando incorporados em uma mensagem normal e são removidos antes que o modelo veja o restante do texto.
- Exemplo: `hey /status` aciona uma resposta de status, e o texto restante continua pelo fluxo normal.
- Atualmente: `/help`, `/commands`, `/status`, `/whoami` (`/id`).
- Mensagens somente-comando não autorizadas são ignoradas silenciosamente, e tokens inline `/...` são tratados como texto simples.
- **Comandos de skill:** Skills `user-invocable` são expostas como comandos slash. Os nomes são sanitizados para `a-z0-9_` (máx. 32 caracteres); colisões recebem sufixos numéricos (ex.: `_2`).
- `/skill <name> [input]` executa uma skill pelo nome (útil quando limites de comando nativo impedem comandos por skill).
- Mensagens somente com comandos não autorizadas são ignoradas silenciosamente, e tokens inline `/...` são tratados como texto simples.
- **Comandos de skill:** skills `user-invocable` são expostas como slash commands. Os nomes são sanitizados para `a-z0-9_` (máx. 32 caracteres); colisões recebem sufixos numéricos (por exemplo, `_2`).
- `/skill <name> [input]` executa uma skill pelo nome (útil quando limites de comandos nativos impedem comandos por skill).
- Por padrão, comandos de skill são encaminhados ao modelo como uma solicitação normal.
- Skills podem opcionalmente declarar `command-dispatch: tool` para rotear o comando diretamente para uma ferramenta (determinístico, sem modelo).
- Exemplo: `/prose` (Plugin OpenProse) — consulte [OpenProse](/pt-BR/prose).
- **Argumentos de comando nativo:** o Discord usa autocomplete para opções dinâmicas (e menus de botão quando você omite argumentos obrigatórios). Telegram e Slack mostram um menu de botões quando um comando oferece opções e você omite o argumento.
- As skills podem opcionalmente declarar `command-dispatch: tool` para encaminhar o comando diretamente para uma ferramenta (determinístico, sem modelo).
- Exemplo: `/prose` (plugin OpenProse) — veja [OpenProse](/pt-BR/prose).
- **Argumentos de comando nativo:** o Discord usa autocomplete para opções dinâmicas (e menus de botão quando você omite args obrigatórios). Telegram e Slack mostram um menu de botões quando um comando oferece escolhas e você omite o arg.
## `/tools`
`/tools` responde a uma pergunta de runtime, não a uma pergunta de configuração: **o que este agente pode usar agora
nesta conversa**.
- O `/tools` padrão é compacto e otimizado para leitura rápida.
- O padrão de `/tools` é compacto e otimizado para leitura rápida.
- `/tools verbose` adiciona descrições curtas.
- Superfícies de comando nativo com suporte a argumentos expõem a mesma troca de modo `compact|verbose`.
- Superfícies com comandos nativos que oferecem suporte a argumentos expõem a mesma troca de modo como `compact|verbose`.
- Os resultados têm escopo de sessão, então mudar agente, canal, thread, autorização do remetente ou modelo pode
alterar a saída.
- `/tools` inclui ferramentas realmente acessíveis em runtime, incluindo ferramentas do núcleo, ferramentas de
Plugin conectadas e ferramentas controladas pelo canal.
plugins conectados e ferramentas pertencentes ao canal.
Para editar perfis e substituições, use o painel Tools da UI de controle ou superfícies de configuração/catálogo em vez
Para editar perfis e substituições, use o painel Tools da UI de Controle ou as superfícies de config/catálogo em vez
de tratar `/tools` como um catálogo estático.
## Superfícies de uso (o que aparece onde)
- **Uso/quota do provedor** (exemplo: “Claude 80% restante”) aparece em `/status` para o provedor do modelo atual quando o rastreamento de uso está habilitado. O OpenClaw normaliza janelas de provedor para `% restante`; para MiniMax, campos de porcentagem somente-restante são invertidos antes da exibição, e respostas `model_remains` preferem a entrada do modelo de chat mais um rótulo de plano com tag do modelo.
- **Linhas de token/cache** em `/status` podem usar como fallback a entrada de uso mais recente da transcrição quando o snapshot ao vivo da sessão é escasso. Valores ao vivo existentes diferentes de zero ainda prevalecem, e o fallback da transcrição também pode recuperar o rótulo do modelo de runtime ativo mais um total maior orientado a prompt quando os totais armazenados estão ausentes ou são menores.
- **Uso/cota do provedor** (exemplo: “Claude 80% restante”) aparece em `/status` para o provedor do modelo atual quando o rastreamento de uso está ativado. O OpenClaw normaliza janelas de provedor para `% restante`; no MiniMax, campos de percentual apenas-restante são invertidos antes da exibição, e respostas `model_remains` preferem a entrada do modelo de chat mais um rótulo de plano com tag do modelo.
- **Linhas de tokens/cache** em `/status` podem recorrer à entrada de uso mais recente da transcrição quando o snapshot da sessão ao vivo é escasso. Valores ativos existentes diferentes de zero ainda prevalecem, e o fallback da transcrição também pode recuperar o rótulo do modelo de runtime ativo mais um total maior orientado ao prompt quando os totais armazenados estiverem ausentes ou forem menores.
- **Tokens/custo por resposta** é controlado por `/usage off|tokens|full` (anexado às respostas normais).
- `/model status` trata de **modelos/autenticação/endpoints**, não de uso.
- `/model status` trata de **modelos/auth/endpoints**, não de uso.
## Seleção de modelo (`/model`)
@ -251,16 +252,16 @@ Exemplos:
/model status
```
Observações:
Notas:
- `/model` e `/model list` mostram um seletor compacto numerado (família do modelo + provedores disponíveis).
- No Discord, `/model` e `/models` abrem um seletor interativo com dropdowns de provedor e modelo mais uma etapa de envio.
- No Discord, `/model` e `/models` abrem um seletor interativo com menus suspensos de provedor e modelo mais uma etapa de envio.
- `/model <#>` seleciona a partir desse seletor (e prefere o provedor atual quando possível).
- `/model status` mostra a visualização detalhada, incluindo o endpoint do provedor configurado (`baseUrl`) e o modo de API (`api`) quando disponíveis.
- `/model status` mostra a visualização detalhada, incluindo o endpoint configurado do provedor (`baseUrl`) e o modo de API (`api`) quando disponíveis.
## Substituições de debug
## Substituições de depuração
`/debug` permite definir substituições de configuração **somente de runtime** (memória, não disco). Somente owner. Desabilitado por padrão; habilite com `commands.debug: true`.
`/debug` permite definir substituições de configuração **somente de runtime** (memória, não disco). Somente proprietário. Desativado por padrão; ative com `commands.debug: true`.
Exemplos:
@ -272,14 +273,14 @@ Exemplos:
/debug reset
```
Observações:
Notas:
- As substituições se aplicam imediatamente a novas leituras de configuração, mas **não** gravam em `openclaw.json`.
- As substituições são aplicadas imediatamente a novas leituras de configuração, mas **não** gravam em `openclaw.json`.
- Use `/debug reset` para limpar todas as substituições e voltar à configuração em disco.
## Saída de trace de Plugin
## Saída de rastreamento de plugin
`/trace` permite alternar **linhas de trace/debug de Plugin com escopo de sessão** sem ativar o modo verbose completo.
`/trace` permite alternar **linhas de rastreamento/depuração de plugin com escopo de sessão** sem ativar o modo detalhado completo.
Exemplos:
@ -289,18 +290,18 @@ Exemplos:
/trace off
```
Observações:
Notas:
- `/trace` sem argumento mostra o estado atual de trace da sessão.
- `/trace on` habilita linhas de trace de Plugin para a sessão atual.
- `/trace off` desabilita essas linhas novamente.
- Linhas de trace de Plugin podem aparecer em `/status` e como uma mensagem diagnóstica de acompanhamento após a resposta normal do assistente.
- `/trace` sem argumento mostra o estado atual de rastreamento da sessão.
- `/trace on` ativa linhas de rastreamento de plugin para a sessão atual.
- `/trace off` as desativa novamente.
- Linhas de rastreamento de plugin podem aparecer em `/status` e como uma mensagem diagnóstica de acompanhamento após a resposta normal do assistente.
- `/trace` não substitui `/debug`; `/debug` continua gerenciando substituições de configuração somente de runtime.
- `/trace` não substitui `/verbose`; a saída normal detalhada de ferramenta/status ainda pertence a `/verbose`.
- `/trace` não substitui `/verbose`; a saída normal detalhada de ferramentas/status continua pertencendo a `/verbose`.
## Atualizações de configuração
`/config` grava na sua configuração em disco (`openclaw.json`). Somente owner. Desabilitado por padrão; habilite com `commands.config: true`.
`/config` grava na sua configuração em disco (`openclaw.json`). Somente proprietário. Desativado por padrão; ative com `commands.config: true`.
Exemplos:
@ -312,14 +313,14 @@ Exemplos:
/config unset messages.responsePrefix
```
Observações:
Notas:
- A configuração é validada antes da gravação; alterações inválidas são rejeitadas.
- Atualizações de `/config` persistem após reinicializações.
- As atualizações de `/config` persistem após reinicializações.
## Atualizações de MCP
`/mcp` grava definições de servidor MCP gerenciadas pelo OpenClaw em `mcp.servers`. Somente owner. Desabilitado por padrão; habilite com `commands.mcp: true`.
`/mcp` grava definições de servidor MCP gerenciadas pelo OpenClaw em `mcp.servers`. Somente proprietário. Desativado por padrão; ative com `commands.mcp: true`.
Exemplos:
@ -330,14 +331,14 @@ Exemplos:
/mcp unset context7
```
Observações:
Notas:
- `/mcp` armazena a configuração na configuração do OpenClaw, não em configurações de projeto controladas pelo Pi.
- `/mcp` armazena configuração na config do OpenClaw, não em configurações de projeto de propriedade do Pi.
- Adaptadores de runtime decidem quais transportes são realmente executáveis.
## Atualizações de Plugin
## Atualizações de plugins
`/plugins` permite que operadores inspecionem Plugins descobertos e alternem a habilitação na configuração. Fluxos somente leitura podem usar `/plugin` como alias. Desabilitado por padrão; habilite com `commands.plugins: true`.
`/plugins` permite que operadores inspecionem plugins descobertos e alternem a ativação na configuração. Fluxos somente leitura podem usar `/plugin` como alias. Desativado por padrão; ative com `commands.plugins: true`.
Exemplos:
@ -349,36 +350,36 @@ Exemplos:
/plugins disable context7
```
Observações:
Notas:
- `/plugins list` e `/plugins show` usam descoberta real de Plugin no workspace atual mais a configuração em disco.
- `/plugins enable|disable` atualiza apenas a configuração do Plugin; não instala nem desinstala Plugins.
- Após alterações de habilitar/desabilitar, reinicie o Gateway para aplicá-las.
- `/plugins list` e `/plugins show` usam descoberta real de plugins com base no workspace atual mais a configuração em disco.
- `/plugins enable|disable` atualiza apenas a configuração do plugin; não instala nem desinstala plugins.
- Após alterações de ativação/desativação, reinicie o gateway para aplicá-las.
## Observações de superfície
## Notas de superfície
- **Comandos de texto** são executados na sessão normal de chat (DMs compartilham `main`, grupos têm sua própria sessão).
- **Comandos nativos** usam sessões isoladas:
- Discord: `agent:<agentId>:discord:slash:<userId>`
- Slack: `agent:<agentId>:slack:slash:<userId>` (prefixo configurável via `channels.slack.slashCommand.sessionPrefix`)
- Telegram: `telegram:slash:<userId>` (aponta para a sessão do chat via `CommandTargetSessionKey`)
- **`/stop`** aponta para a sessão de chat ativa para poder abortar a execução atual.
- **Slack:** `channels.slack.slashCommand` ainda é compatível para um único comando no estilo `/openclaw`. Se você habilitar `commands.native`, deverá criar um comando slash do Slack por comando embutido (os mesmos nomes de `/help`). Menus de argumento de comando para o Slack são entregues como botões efêmeros do Block Kit.
- Telegram: `telegram:slash:<userId>` (direciona para a sessão do chat via `CommandTargetSessionKey`)
- **`/stop`** mira a sessão de chat ativa para que possa interromper a execução atual.
- **Slack:** `channels.slack.slashCommand` ainda é compatível para um único comando no estilo `/openclaw`. Se você ativar `commands.native`, deverá criar um slash command do Slack por comando embutido (com os mesmos nomes de `/help`). Menus de argumentos de comando para o Slack são entregues como botões efêmeros do Block Kit.
- Exceção nativa do Slack: registre `/agentstatus` (não `/status`) porque o Slack reserva `/status`. O `/status` em texto ainda funciona em mensagens do Slack.
## Perguntas laterais BTW
## Perguntas paralelas BTW
`/btw` é uma **pergunta lateral** rápida sobre a sessão atual.
`/btw` é uma **pergunta paralela** rápida sobre a sessão atual.
Diferentemente do chat normal:
- ele usa a sessão atual como contexto de fundo,
- ele é executado como uma chamada avulsa separada **sem ferramentas**,
- ele é executado como uma chamada única separada **sem ferramentas**,
- ele não altera o contexto futuro da sessão,
- ele não é gravado no histórico da transcrição,
- ele é entregue como um resultado lateral ao vivo em vez de uma mensagem normal do assistente.
- ele é entregue como um resultado paralelo ao vivo em vez de uma mensagem normal do assistente.
Isso torna `/btw` útil quando você quer um esclarecimento temporário enquanto a
Isso faz de `/btw` algo útil quando você quer um esclarecimento temporário enquanto a
tarefa principal continua.
Exemplo:
@ -387,5 +388,5 @@ Exemplo:
/btw o que estamos fazendo agora?
```
Consulte [BTW Side Questions](/pt-BR/tools/btw) para o comportamento completo e os detalhes
da UX do cliente.
Veja [BTW Side Questions](/pt-BR/tools/btw) para o comportamento completo e os
detalhes de UX do cliente.