Instalação
Instale o Mattermost antes de configurar o canal:- Registro npm
- Checkout local
Configuração rápida
Garanta que o Plugin esteja disponível
Instale
@openclaw/mattermost com o comando acima e reinicie o Gateway se ele já estiver em execução.Comandos de barra nativos
Comandos de barra nativos são opcionais. Quando ativados, o OpenClaw registra comandos de barraoc_* pela API do Mattermost e recebe POSTs de callback no servidor HTTP do Gateway.
Notas de comportamento
Notas de comportamento
native: "auto"usa desativado como padrão para Mattermost. Definanative: truepara ativar.- Se
callbackUrlfor omitido, o OpenClaw deriva uma a partir do host/porta do Gateway +callbackPath. - Para configurações com várias contas,
commandspode ser definido no nível superior ou emchannels.mattermost.accounts.<id>.commands(valores da conta substituem campos do nível superior). - Callbacks de comando são validados com os tokens por comando retornados pelo Mattermost quando o OpenClaw registra comandos
oc_*. - O OpenClaw atualiza o registro atual de comandos do Mattermost antes de aceitar cada callback, para que tokens obsoletos de comandos de barra excluídos ou regenerados deixem de ser aceitos sem reiniciar o Gateway.
- A validação do callback falha de forma fechada se a API do Mattermost não conseguir confirmar que o comando ainda é atual; validações com falha são armazenadas brevemente em cache, consultas simultâneas são agrupadas, e novos inícios de consulta são limitados por taxa por comando para limitar a pressão de replay.
- Callbacks de barra falham de forma fechada quando o registro falhou, a inicialização foi parcial ou o token de callback não corresponde ao token registrado do comando resolvido (um token válido para um comando não consegue alcançar a validação upstream de outro comando).
Requisito de alcançabilidade
Requisito de alcançabilidade
O endpoint de callback deve ser alcançável a partir do servidor Mattermost.
- Não defina
callbackUrlcomolocalhosta menos que o Mattermost seja executado no mesmo host/namespace de rede que o OpenClaw. - Não defina
callbackUrlcomo sua URL base do Mattermost a menos que essa URL faça proxy reverso de/api/channels/mattermost/commandpara o OpenClaw. - Uma verificação rápida é
curl https://<gateway-host>/api/channels/mattermost/command; um GET deve retornar405 Method Not Alloweddo OpenClaw, não404.
Allowlist de saída do Mattermost
Allowlist de saída do Mattermost
Se o callback tiver como destino endereços privados/tailnet/internos, defina
ServiceSettings.AllowedUntrustedInternalConnections do Mattermost para incluir o host/domínio do callback.Use entradas de host/domínio, não URLs completas.- Correto:
gateway.tailnet-name.ts.net - Incorreto:
https://gateway.tailnet-name.ts.net
Variáveis de ambiente (conta padrão)
Defina estas no host do Gateway se preferir variáveis de ambiente:MATTERMOST_BOT_TOKEN=...MATTERMOST_URL=https://chat.example.com
Variáveis de ambiente se aplicam apenas à conta padrão (
default). Outras contas devem usar valores de configuração.MATTERMOST_URL não pode ser definido a partir de um .env de workspace; consulte Arquivos .env de workspace.Modos de chat
O Mattermost responde automaticamente a DMs. O comportamento em canais é controlado porchatmode:
- oncall (padrão)
- onmessage
- onchar
Responde apenas quando @mencionado em canais.
oncharainda responde a @menções explícitas.channels.mattermost.requireMentioné respeitado para configurações legadas, maschatmodeé preferido.- Depois que o bot envia uma resposta visível em uma thread de canal, mensagens posteriores nessa mesma thread são respondidas sem uma nova @menção ou prefixo
onchar, para que conversas de thread com vários turnos continuem fluindo. A participação é lembrada por 7 dias de inatividade da thread (atualizada a cada resposta) e persiste entre reinicializações do Gateway. Threads que o bot apenas observou não são afetadas; inicie uma nova mensagem de nível superior para exigir uma menção explícita novamente.
Threads e sessões
Usechannels.mattermost.replyToMode para controlar se respostas de canais e grupos permanecem no canal principal ou iniciam uma thread sob a postagem que acionou a resposta.
off(padrão): responde em uma thread apenas quando a postagem de entrada já está em uma.first: para postagens de nível superior em canais/grupos, inicia uma thread sob essa postagem e roteia a conversa para uma sessão com escopo de thread.all: o mesmo comportamento quefirstpara o Mattermost hoje.- Mensagens diretas ignoram esta configuração e permanecem sem thread.
- Sessões com escopo de thread usam o id da postagem que acionou a resposta como raiz da thread.
firsteallatualmente são equivalentes porque, depois que o Mattermost tem uma raiz de thread, partes subsequentes e mídia continuam nessa mesma thread.
Controle de acesso (DMs)
- Padrão:
channels.mattermost.dmPolicy = "pairing"(remetentes desconhecidos recebem um código de pareamento). - Aprove via:
openclaw pairing list mattermostopenclaw pairing approve mattermost <CODE>
- DMs públicas:
channels.mattermost.dmPolicy="open"maischannels.mattermost.allowFrom=["*"]. channels.mattermost.allowFromaceita entradasaccessGroup:<name>. Consulte Grupos de acesso.
Canais (grupos)
- Padrão:
channels.mattermost.groupPolicy = "allowlist"(controlado por menção). - Coloque remetentes na allowlist com
channels.mattermost.groupAllowFrom(IDs de usuário recomendados). channels.mattermost.groupAllowFromaceita entradasaccessGroup:<name>. Consulte Grupos de acesso.- Substituições de menção por canal ficam em
channels.mattermost.groups.<channelId>.requireMentionouchannels.mattermost.groups["*"].requireMentionpara um padrão. - Correspondência de
@usernameé mutável e só é ativada quandochannels.mattermost.dangerouslyAllowNameMatching: true. - Canais abertos:
channels.mattermost.groupPolicy="open"(controlado por menção). - Nota de runtime: se
channels.mattermostestiver completamente ausente, o runtime recorre agroupPolicy="allowlist"para verificações de grupo (mesmo quechannels.defaults.groupPolicyesteja definido).
Destinos para entrega de saída
Use estes formatos de destino comopenclaw message send ou Cron/Webhooks:
channel:<id>para um canaluser:<id>para uma DM@usernamepara uma DM (resolvido pela API do Mattermost)
Repetição de canal de DM
Quando o OpenClaw envia para um destino de DM do Mattermost e precisa resolver o canal direto primeiro, ele repete por padrão falhas transitórias de criação do canal direto. Usechannels.mattermost.dmChannelRetry para ajustar esse comportamento globalmente para o Plugin Mattermost, ou channels.mattermost.accounts.<id>.dmChannelRetry para uma conta.
- Isso se aplica apenas à criação de canal de DM (
/api/v4/channels/direct), não a toda chamada da API do Mattermost. - Repetições se aplicam a falhas transitórias, como limites de taxa, respostas 5xx e erros de rede ou timeout.
- Erros de cliente 4xx diferentes de
429são tratados como permanentes e não são repetidos.
Streaming de prévia
O Mattermost transmite raciocínio, atividade de ferramentas e texto parcial de resposta em uma única postagem de prévia em rascunho, que é finalizada no lugar quando a resposta final está segura para envio. A prévia é atualizada no mesmo id de postagem em vez de lotar o canal com mensagens por parte. Finais de mídia/erro cancelam edições pendentes da prévia e usam entrega normal em vez de publicar uma postagem de prévia descartável. Ative viachannels.mattermost.streaming:
Modos de streaming
Modos de streaming
partialé a escolha usual: uma postagem de prévia que é editada conforme a resposta cresce e, então, finalizada com a resposta completa.blockusa partes de rascunho em estilo de acréscimo dentro da postagem de prévia.progressmostra uma prévia de status durante a geração e publica apenas a resposta final ao concluir.offdesativa o streaming de prévia.
Notas de comportamento de streaming
Notas de comportamento de streaming
- Se o stream não puder ser finalizado no lugar (por exemplo, a postagem foi excluída no meio do stream), o OpenClaw recorre ao envio de uma nova postagem final para que a resposta nunca seja perdida.
- Payloads apenas de raciocínio são suprimidos das postagens no canal, incluindo texto que chega como uma citação em bloco
> Thinking. Defina/reasoning onpara ver o raciocínio em outras superfícies; a postagem final do Mattermost mantém apenas a resposta. - Consulte Streaming para a matriz de mapeamento de canais.
Reações (ferramenta de mensagem)
- Use
message action=reactcomchannel=mattermost. messageIdé o id da postagem do Mattermost.emojiaceita nomes comothumbsupou:+1:(dois-pontos são opcionais).- Defina
remove=true(booleano) para remover uma reação. - Eventos de adicionar/remover reação são encaminhados como eventos de sistema para a sessão do agente roteada.
channels.mattermost.actions.reactions: ativa/desativa ações de reação (padrão true).- Substituição por conta:
channels.mattermost.accounts.<id>.actions.reactions.
Botões interativos (ferramenta de mensagem)
Envie mensagens com botões clicáveis. Quando um usuário clica em um botão, o agente recebe a seleção e pode responder. Respostas normais de agente também podem incluir payloads semânticos depresentation. O OpenClaw renderiza botões de valor como botões interativos do Mattermost, mantém botões de URL visíveis no texto da mensagem e rebaixa menus de seleção para texto legível.
Habilite botões adicionando inlineButtons às capacidades do canal:
message action=send com um parâmetro buttons. Botões são uma matriz 2D (linhas de botões):
Rótulo de exibição.
Valor enviado de volta no clique (usado como o ID da ação).
Estilo do botão.
Buttons replaced with confirmation
Todos os botões são substituídos por uma linha de confirmação (por exemplo, ”✓ Sim selecionado por @user”).
Implementation notes
Implementation notes
- Callbacks de botão usam verificação HMAC-SHA256 (automática, nenhuma configuração necessária).
- O Mattermost remove dados de callback das respostas da API dele (recurso de segurança), portanto todos os botões são removidos no clique - remoção parcial não é possível.
- IDs de ação contendo hifens ou sublinhados são sanitizados automaticamente (limitação de roteamento do Mattermost).
Config and reachability
Config and reachability
channels.mattermost.capabilities: matriz de strings de capacidade. Adicione"inlineButtons"para habilitar a descrição da ferramenta de botões no prompt do sistema do agente.channels.mattermost.interactions.callbackBaseUrl: URL base externa opcional para callbacks de botão (por exemplo,https://gateway.example.com). Use isto quando o Mattermost não conseguir alcançar o Gateway diretamente no host de bind dele.- Em configurações com várias contas, você também pode definir o mesmo campo em
channels.mattermost.accounts.<id>.interactions.callbackBaseUrl. - Se
interactions.callbackBaseUrlfor omitido, o OpenClaw deriva a URL de callback degateway.customBindHost+gateway.porte depois faz fallback parahttp://localhost:<port>. - Regra de acessibilidade: a URL de callback do botão deve ser acessível a partir do servidor Mattermost.
localhostsó funciona quando Mattermost e OpenClaw rodam no mesmo host/namespace de rede. - Se seu destino de callback for privado/tailnet/interno, adicione o host/domínio dele a
ServiceSettings.AllowedUntrustedInternalConnectionsdo Mattermost.
Integração direta com API (scripts externos)
Scripts externos e Webhooks podem publicar botões diretamente pela API REST do Mattermost em vez de passar pela ferramentamessage do agente. Use buildButtonAttachments() do Plugin quando possível; se publicar JSON bruto, siga estas regras:
Estrutura do payload:
Derive the secret from the bot token
HMAC-SHA256(key="openclaw-mattermost-interactions", data=botToken)Serialize with sorted keys
Serialize com chaves ordenadas e sem espaços (o Gateway usa
JSON.stringify com chaves ordenadas, o que produz saída compacta).Common HMAC pitfalls
Common HMAC pitfalls
json.dumpsdo Python adiciona espaços por padrão ({"key": "val"}). Useseparators=(",", ":")para corresponder à saída compacta do JavaScript ({"key":"val"}).- Sempre assine todos os campos de contexto (menos
_token). O Gateway remove_tokene então assina tudo o que resta. Assinar um subconjunto causa falha silenciosa de verificação. - Use
sort_keys=True- o Gateway ordena chaves antes de assinar, e o Mattermost pode reordenar campos de contexto ao armazenar o payload. - Derive o segredo a partir do token do bot (determinístico), não de bytes aleatórios. O segredo deve ser o mesmo no processo que cria botões e no Gateway que verifica.
Adaptador de diretório
O Plugin do Mattermost inclui um adaptador de diretório que resolve nomes de canais e usuários por meio da API do Mattermost. Isso habilita destinos#channel-name e @username em openclaw message send e entregas por Cron/Webhook.
Nenhuma configuração é necessária - o adaptador usa o token do bot da configuração da conta.
Várias contas
O Mattermost oferece suporte a várias contas emchannels.mattermost.accounts:
Solução de problemas
No replies in channels
No replies in channels
Garanta que o bot esteja no canal e mencione-o (oncall), use um prefixo de acionamento (onchar) ou defina
chatmode: "onmessage".Auth or multi-account errors
Auth or multi-account errors
- Verifique o token do bot, a URL base e se a conta está habilitada.
- Problemas com várias contas: vars de ambiente só se aplicam à conta
default.
Native slash commands fail
Native slash commands fail
Unauthorized: invalid command token.: o OpenClaw não aceitou o token de callback. Causas típicas:- o registro do comando de barra falhou ou foi concluído apenas parcialmente na inicialização
- o callback está chegando ao Gateway/conta errado
- o Mattermost ainda tem comandos antigos apontando para um destino de callback anterior
- o Gateway reiniciou sem reativar os comandos de barra
- Se comandos de barra nativos pararem de funcionar, verifique os logs em busca de
mattermost: failed to register slash commandsoumattermost: native slash commands enabled but no commands could be registered. - Se
callbackUrlfor omitido e os logs avisarem que o callback foi resolvido parahttp://127.0.0.1:18789/..., essa URL provavelmente só é acessível quando o Mattermost roda no mesmo host/namespace de rede que o OpenClaw. Defina umcommands.callbackUrlexplicitamente acessível externamente em vez disso.
Relacionados
- Roteamento de canais - roteamento de sessão para mensagens
- Visão geral de canais - todos os canais compatíveis
- Grupos - comportamento de chat em grupo e bloqueio por menção
- Pareamento - autenticação por DM e fluxo de pareamento
- Segurança - modelo de acesso e reforço de segurança