Developer and self-hosted
Mattermost
Status: Plugin disponível para download (token do bot + eventos WebSocket). Há suporte a canais, canais privados, DMs em grupo e DMs. O Mattermost é uma plataforma auto-hospedável de mensagens para equipes (mattermost.com).
Instalação
Registro npm
openclaw plugins install @openclaw/mattermostCheckout local
openclaw plugins install ./path/to/local/mattermost-pluginDetalhes: Plugins
Configuração rápida
Verifique se o Plugin está disponível
Instale @openclaw/mattermost com o comando acima e reinicie o Gateway caso ele já esteja em execução.
Crie um bot do Mattermost
Crie uma conta de bot no Mattermost, copie o token do bot e adicione o bot às equipes e aos canais que ele deve ler.
Copie a URL base
Copie a URL base do Mattermost (por exemplo, https://chat.example.com). Uma /api/v4 ao final é removida automaticamente.
Configure o OpenClaw e inicie o Gateway
Configuração mínima:
{ channels: { mattermost: { enabled: true, botToken: "mm-token", baseUrl: "https://chat.example.com", dmPolicy: "pairing", }, },}Alternativa não interativa:
openclaw channels add --channel mattermost --bot-token <token> --http-url https://chat.example.comComandos de barra nativos
Os comandos de barra nativos são opcionais. Quando ativados, o OpenClaw registra comandos de barra oc_* em todas as equipes das quais o bot participa e recebe POSTs de callback no servidor HTTP do Gateway.
{ channels: { mattermost: { commands: { native: true, nativeSkills: true, callbackPath: "/api/channels/mattermost/command", // Use quando o Mattermost não puder acessar o Gateway diretamente (proxy reverso/URL pública). callbackUrl: "https://gateway.example.com/api/channels/mattermost/command", }, }, },}Comandos registrados: /oc_status, /oc_model, /oc_models, /oc_new, /oc_help, /oc_think, /oc_reasoning, /oc_verbose, /oc_queue. Com nativeSkills: true, os comandos de Skills também são registrados como /oc_<skill>.
Observações sobre o comportamento
nativeenativeSkillsusam"auto"por padrão, que resulta em desativado para o Mattermost. Defina-os explicitamente comotrue.callbackPathusa/api/channels/mattermost/commandpor padrão.- Se
callbackUrlfor omitido, o OpenClaw derivahttp://<gateway.customBindHost or localhost>:<gateway.port, default 18789><callbackPath>. Hosts de vinculação curinga (0.0.0.0,::) recorrem alocalhost. - Em configurações com várias contas,
commandspode ser definido no nível superior ou emchannels.mattermost.accounts.<id>.commands(os valores da conta substituem os campos do nível superior). - Comandos de barra existentes com o mesmo acionador, criados por outras integrações, permanecem intactos (o registro os ignora); os comandos criados pelo bot são atualizados ou recriados quando a URL de callback diverge.
- Os callbacks de comando são validados com os tokens específicos de cada comando retornados pelo Mattermost quando o OpenClaw registra comandos
oc_*. - O OpenClaw atualiza o registro atual dos comandos do Mattermost antes de aceitar cada callback; assim, tokens obsoletos de comandos de barra excluídos ou regenerados deixam de ser aceitos sem que seja necessário reiniciar o Gateway.
- A validação do callback falha de forma fechada se a API do Mattermost não puder confirmar que o comando ainda é atual; as validações com falha são armazenadas brevemente em cache, as consultas simultâneas são consolidadas e o início de novas consultas tem limitação de frequência por comando para restringir a pressão de repetição.
- Os callbacks de barra falham de forma fechada quando o registro falhou, a inicialização foi parcial ou o token do callback não corresponde ao token registrado do comando resolvido (um token válido para um comando não pode alcançar a validação upstream de outro comando).
- Os callbacks aceitos são confirmados com uma resposta efêmera "Processando..."; a resposta real chega como uma mensagem normal.
Requisito de acessibilidade
O endpoint de callback deve estar acessível pelo servidor do Mattermost.
- Não defina
callbackUrlcomolocalhost, a menos que o Mattermost seja executado no mesmo host/namespace de rede que o OpenClaw. - Não defina
callbackUrlcomo a 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; uma solicitação GET deve retornar405 Method Not Alloweddo OpenClaw, e não404.
Lista de permissões de saída do Mattermost
Se o callback apontar para 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-as no host do Gateway se preferir variáveis de ambiente:
MATTERMOST_BOT_TOKEN=...MATTERMOST_URL=https://chat.example.com
Modos de chat
O Mattermost responde automaticamente às DMs. O comportamento nos canais é controlado por chatmode:
oncall (padrão)
Responde somente quando recebe uma @menção nos canais.
onmessage
Responde a todas as mensagens do canal.
onchar
Responde quando uma mensagem começa com um prefixo acionador.
Exemplo de configuração:
{ channels: { mattermost: { chatmode: "onchar", oncharPrefixes: [">", "!"], // padrão }, },}Observações:
oncharainda responde a @menções explícitas.channels.mattermost.requireMentionainda é respeitado, maschatmodeé preferível. As configuraçõesgroups.<channelId>.requireMentionpor canal prevalecem sobre ambos.- Depois que o bot envia uma resposta visível em uma thread de canal, as mensagens posteriores nessa mesma thread são respondidas sem uma nova @menção ou prefixo
onchar, permitindo que as conversas de vários turnos na thread continuem fluindo. A participação é lembrada por 7 dias após a última resposta do bot nessa thread e persiste após reinicializações do Gateway. Threads que o bot apenas observou não são afetadas; inicie uma nova mensagem no nível superior para voltar a exigir uma menção explícita.
Threads e sessões
Use channels.mattermost.replyToMode para controlar se as respostas em canais e grupos permanecem no canal principal ou iniciam uma thread sob a publicação acionadora.
off(padrão): responde em uma thread somente quando a publicação recebida já está em uma.first: para publicações de canal/grupo no nível superior, inicia uma thread sob essa publicação e encaminha a conversa para uma sessão com escopo de thread.allebatched: atualmente têm o mesmo comportamento quefirstno Mattermost, pois, depois que o Mattermost tem uma raiz de thread, os trechos e as mídias subsequentes continuam nessa mesma thread.- As mensagens diretas usam
offpor padrão, mesmo quandoreplyToModeestá definido.
Use channels.mattermost.replyToModeByChatType para substituir o modo em conversas direct, group ou channel. Defina direct para habilitar threads em mensagens diretas:
off(padrão): as mensagens diretas permanecem sem threads em uma única sessão contínua.first,alloubatched: cada mensagem direta no nível superior inicia uma thread do Mattermost respaldada por uma sessão nova e independente.
{ channels: { mattermost: { replyToMode: "all", replyToModeByChatType: { direct: "first", }, }, },}Observações:
- As sessões com escopo de thread usam o ID da publicação acionadora como raiz da thread.
firsteallsão atualmente equivalentes porque, depois que o Mattermost tem uma raiz de thread, os trechos e as mídias subsequentes continuam nessa mesma thread.- As substituições por tipo de conversa prevalecem sobre
replyToMode. Sem uma substituiçãodirect, as implantações existentes mantêm DMs lineares, sem threads.
Controle de acesso (DMs)
- Padrão:
channels.mattermost.dmPolicy = "pairing"(remetentes desconhecidos recebem um código de pareamento). Outros valores:allowlist,open,disabled. - Aprove por meio de:
openclaw pairing list mattermostopenclaw pairing approve mattermost <CODE>
- DMs públicas:
channels.mattermost.dmPolicy="open"maischannels.mattermost.allowFrom=["*"](o esquema de configuração exige o curinga). channels.mattermost.allowFromaceita IDs de usuário (recomendado) e entradasaccessGroup:<name>. Consulte Grupos de acesso.
Canais (grupos)
- Padrão:
channels.mattermost.groupPolicy = "allowlist"(exige menção). - Inclua remetentes na lista de permissões com
channels.mattermost.groupAllowFrom(recomenda-se usar IDs de usuário). channels.mattermost.groupAllowFromaceita entradasaccessGroup:<name>. Consulte Grupos de acesso.- As substituições de menção por canal ficam em
channels.mattermost.groups.<channelId>.requireMentionou emchannels.mattermost.groups["*"].requireMentionpara um padrão. - A correspondência de
@usernameé mutável e só é ativada quandochannels.mattermost.dangerouslyAllowNameMatching: true. - Canais abertos:
channels.mattermost.groupPolicy="open"(exige menção). - Ordem de resolução:
channels.mattermost.groupPolicy, depoischannels.defaults.groupPolicye, por fim,"allowlist". - Observação de runtime: se a seção
channels.mattermostestiver completamente ausente, o runtime falhará de forma fechada usandogroupPolicy="allowlist"nas verificações de grupo (mesmo quechannels.defaults.groupPolicyesteja definido) e registrará um aviso uma única vez.
Exemplo:
{ channels: { mattermost: { groupPolicy: "open", groups: { "*": { requireMention: true }, "team-channel-id": { requireMention: false }, }, }, },}Destinos para entrega de saída
Use estes formatos de destino com openclaw message send ou cron/webhooks:
| Destino | Entrega em |
|---|---|
channel:<id> |
Canal por ID |
channel:<name> ou #channel-name |
Canal por nome, pesquisado entre as equipes das quais o bot participa |
user:<id> ou mattermost:<id> |
DM com esse usuário |
@username |
DM (nome de usuário resolvido pela API do Mattermost) |
Os envios de saída aceitam no máximo um anexo por mensagem; divida vários arquivos em envios separados.
Nova tentativa do canal de DM
Quando o OpenClaw envia para um destino de MD do Mattermost e precisa primeiro resolver o canal direto, por padrão ele tenta novamente em caso de falhas transitórias na criação do canal direto.
Use channels.mattermost.dmChannelRetry para ajustar esse comportamento globalmente para o Plugin do Mattermost ou channels.mattermost.accounts.<id>.dmChannelRetry para uma conta. Padrões:
{ channels: { mattermost: { dmChannelRetry: { maxRetries: 3, initialDelayMs: 1000, maxDelayMs: 10000, timeoutMs: 30000, }, }, },}Observações:
- Isso se aplica somente à criação de canais de MD (
/api/v4/channels/direct), não a todas as chamadas à API do Mattermost. - As novas tentativas usam espera exponencial com jitter e se aplicam a falhas transitórias, como limites de taxa, respostas 5xx e erros de rede ou de tempo limite.
- Erros 4xx do cliente diferentes de
429são tratados como permanentes e não são tentados novamente.
Streaming de pré-visualização
O Mattermost transmite o raciocínio, a atividade das ferramentas e o texto parcial da resposta para uma publicação de pré-visualização em rascunho, que é finalizada no mesmo lugar quando é seguro enviar a resposta final. No modo partial, a pré-visualização é atualizada com o mesmo ID de publicação, em vez de inundar o canal com mensagens para cada fragmento. No modo block, a pré-visualização alterna entre o texto concluído e os blocos de atividade das ferramentas, de modo que os blocos anteriores permaneçam visíveis como publicações próprias, em vez de serem sobrescritos pelo bloco seguinte. Respostas finais com mídia/erro cancelam as edições pendentes da pré-visualização e usam a entrega normal, em vez de efetivar uma publicação de pré-visualização descartável.
O streaming de pré-visualização fica ativado por padrão no modo partial. Configure por meio de channels.mattermost.streaming.mode (valores escalares/booleanos legados de streaming são migrados por openclaw doctor --fix):
{ channels: { mattermost: { streaming: { mode: "partial" }, // off | partial | block | progress }, },}Modos de streaming
partial(padrão): uma publicação de pré-visualização que é editada à medida que a resposta aumenta e, em seguida, finalizada com a resposta completa.blockalterna a pré-visualização entre o texto concluído e os blocos de atividade das ferramentas, de modo que cada bloco permaneça visível como uma publicação própria, em vez de ser sobrescrito no mesmo lugar. Atualizações de ferramentas paralelas e consecutivas compartilham a publicação atual de atividade das ferramentas.progressmostra uma pré-visualização de status durante a geração e publica a resposta final somente após a conclusão.offdesativa o streaming de pré-visualização. Comstreaming.block.enabled: true, os blocos concluídos do assistente ainda são entregues como respostas normais em blocos (publicações separadas), em vez de uma única publicação final consolidada.
Observações sobre o comportamento do streaming
- Se o stream não puder ser finalizado no mesmo lugar (por exemplo, se a publicação for excluída durante o stream), o OpenClaw recorre ao envio de uma nova publicação final para que a resposta nunca seja perdida.
- Cargas contendo somente raciocínio são suprimidas das publicações do canal, incluindo texto que chega como uma citação em bloco
> Thinking. Defina/reasoning onpara ver o raciocínio em outras superfícies; a publicação final do Mattermost mantém somente a resposta. - Consulte Streaming para ver a matriz de mapeamento dos canais.
Reações (ferramenta de mensagens)
- Use
message action=reactcomchannel=mattermost. messageIdé o ID da publicação do Mattermost.emojiaceita nomes comothumbsupou:+1:(os dois-pontos são opcionais).- Defina
remove=true(booleano) para remover uma reação. - Os eventos de adição/remoção de reações são encaminhados como eventos de sistema para a sessão roteada do agente, sujeitos às mesmas verificações de política de MD/grupo aplicadas às mensagens.
Exemplos:
message action=react channel=mattermost target=channel:<channelId> messageId=<postId> emoji=thumbsupmessage action=react channel=mattermost target=channel:<channelId> messageId=<postId> emoji=thumbsup remove=trueConfiguração:
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 mensagens)
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.
Os botões vêm da carga semântica presentation (em respostas normais do agente e em message action=send). 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 converte menus de seleção em texto legível.
message action=send channel=mattermost target=channel:<channelId> presentation={"blocks":[{"type":"buttons","buttons":[{"label":"Yes","value":"yes"},{"label":"No","value":"no"}]}]}Campos dos botões da apresentação:
labelstringrequiredRótulo exibido (alias: text).
valuestringValor retornado ao clicar, usado como ID da ação (aliases: callback_data, callbackData). Obrigatório para um botão clicável, a menos que url esteja definido.
urlstringBotão de link; renderizado como texto label: url no corpo da mensagem, em vez de um botão interativo.
style"primary" | "secondary" | "success" | "danger"Estilo do botão. O Mattermost aplica o estilo padrão a valores não compatíveis.
Para anunciar a compatibilidade com botões no prompt de sistema do agente, adicione inlineButtons aos recursos do canal:
{ channels: { mattermost: { capabilities: ["inlineButtons"], }, },}Quando um usuário clica em um botão:
Verificação de acesso
Quem clicou deve passar pelas mesmas verificações de política de MD/grupo aplicadas ao remetente de uma mensagem; cliques não autorizados recebem uma notificação efêmera e são ignorados.
Botões substituídos por confirmação
Todos os botões são substituídos por uma linha de confirmação (por exemplo, "✓ Sim selecionado por @user").
O agente recebe a seleção
O agente recebe a seleção como uma mensagem de entrada (além de um evento de sistema) e responde.
Observações sobre a implementação
- Os retornos de chamada dos botões usam verificação HMAC-SHA256 (automática, nenhuma configuração necessária).
- Todo o bloco de anexo é substituído ao clicar, portanto todos os botões são removidos juntos — não é possível removê-los parcialmente.
- IDs de ação contendo hifens ou sublinhados são higienizados automaticamente (limitação de roteamento do Mattermost).
- Cliques cujo
action_idnão corresponde a uma ação na publicação original são rejeitados com403("Ação desconhecida").
Configuração e acessibilidade
channels.mattermost.capabilities: matriz de strings de recursos. Adicione"inlineButtons"para ativar a descrição da ferramenta de botões no prompt de sistema do agente.channels.mattermost.interactions.callbackBaseUrl: URL base externa opcional para retornos de chamada dos botões (por exemplo,https://gateway.example.com). Use-a quando o Mattermost não puder acessar o Gateway diretamente no host de associação.- Em configurações com várias contas, também é possível definir o mesmo campo em
channels.mattermost.accounts.<id>.interactions.callbackBaseUrl. - Se
interactions.callbackBaseUrlfor omitido, o OpenClaw deriva a URL de retorno de chamada degateway.customBindHost+gateway.port(padrão: 18789) e, em seguida, recorre ahttp://localhost:<port>. O caminho do retorno de chamada é/mattermost/interactions/<accountId>. - Regra de acessibilidade: a URL de retorno de chamada do botão deve ser acessível pelo servidor Mattermost.
localhostfunciona somente quando o Mattermost e o OpenClaw são executados no mesmo host/namespace de rede. channels.mattermost.interactions.allowedSourceIps: lista de permissões de IPs de origem para retornos de chamada dos botões. Sem ela, somente origens de loopback (127.0.0.1,::1) são aceitas; portanto, um servidor Mattermost remoto deve ser incluído nessa lista, caso contrário seus cliques serão rejeitados com403. Atrás de um proxy reverso, defina tambémgateway.trustedProxiespara que o IP real do cliente seja derivado dos cabeçalhos encaminhados.- Se o destino do retorno de chamada for privado/da tailnet/interno, adicione seu host/domínio a
ServiceSettings.AllowedUntrustedInternalConnectionsdo Mattermost.
Integração direta com a API (scripts externos)
Scripts externos e webhooks podem publicar botões diretamente por meio da API REST do Mattermost, em vez de passar pela ferramenta message do agente. Prefira a ferramenta message do OpenClaw. Para integrações diretas, importe buildButtonAttachments de @openclaw/mattermost/api.js; ao publicar JSON bruto, siga estas regras:
Estrutura da carga:
{ channel_id: "<channelId>", message: "Escolha uma opção:", props: { attachments: [ { actions: [ { id: "mybutton01", // somente alfanumérico - veja abaixo type: "button", // obrigatório, caso contrário os cliques são ignorados silenciosamente name: "Aprovar", // rótulo de exibição style: "primary", // opcional: "default", "primary", "danger" integration: { url: "https://gateway.example.com/mattermost/interactions/default", context: { action_id: "mybutton01", // deve corresponder ao ID do botão action: "approve", // ... quaisquer campos personalizados ... _token: "<hmac>", // consulte a seção sobre HMAC abaixo }, }, }, ], }, ], },}Geração do token HMAC
O Gateway verifica os cliques nos botões com HMAC-SHA256. Scripts externos devem gerar tokens que correspondam à lógica de verificação do Gateway:
Derive o segredo do token do bot
HMAC-SHA256(key="openclaw-mattermost-interactions", data=botToken), codificado em hexadecimal.
Crie o objeto de contexto
Crie o objeto de contexto com todos os campos, exceto _token.
Serialize com as chaves ordenadas
Serialize com chaves ordenadas recursivamente e sem espaços (o Gateway também canoniza objetos aninhados e produz JSON compacto).
Assine a carga
HMAC-SHA256(key=secret, data=serializedContext)
Adicione o token
Adicione o resumo hexadecimal resultante como _token no contexto.
Exemplo em Python:
secret = hmac.new( b"openclaw-mattermost-interactions", bot_token.encode(), hashlib.sha256).hexdigest() ctx = {"action_id": "mybutton01", "action": "approve"}payload = json.dumps(ctx, sort_keys=True, separators=(",", ":"))token = hmac.new(secret.encode(), payload.encode(), hashlib.sha256).hexdigest() context = {**ctx, "_token": token}Armadilhas comuns de HMAC
- O
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 (exceto
_token). O Gateway remove_tokene, em seguida, assina tudo o que resta. Assinar apenas um subconjunto causa uma falha silenciosa na verificação. - Use
sort_keys=True— o Gateway ordena as chaves antes de assinar, e o Mattermost pode reordenar os campos de contexto ao armazenar o payload. - Derive o segredo do token do bot (de forma determinística), não de bytes aleatórios. O segredo deve ser o mesmo no processo que cria os botões e no Gateway que faz a verificação.
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 entregas de openclaw message send e 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 em channels.mattermost.accounts:
{ channels: { mattermost: { accounts: { default: { name: "Primary", botToken: "mm-token", baseUrl: "https://chat.example.com" }, alerts: { name: "Alerts", botToken: "mm-token-2", baseUrl: "https://alerts.example.com" }, }, }, },}Os valores da conta substituem os campos de nível superior; channels.mattermost.defaultAccount seleciona qual conta é usada quando nenhuma é especificada.
Solução de problemas
Nenhuma resposta nos canais
Verifique se o bot está no canal e mencione-o (oncall), use um prefixo de acionamento (onchar) ou defina chatmode: "onmessage".
Erros de autenticação ou de várias contas
- Verifique o token do bot, a URL base e se a conta está habilitada.
- Problemas com várias contas: as variáveis de ambiente se aplicam somente à conta
default. - Hosts privados/LAN do Mattermost precisam de
network.dangerouslyAllowPrivateNetwork: true(a proteção contra SSRF bloqueia IPs privados por padrão).
Falha nos comandos de barra nativos
Unauthorized: invalid command token.: o OpenClaw não aceitou o token de callback. Causas comuns:- o registro do comando de barra falhou ou foi concluído apenas parcialmente na inicialização
- o callback está chegando ao Gateway ou à conta incorreta
- o Mattermost ainda tem comandos antigos apontando para um destino de callback anterior
- o Gateway foi reiniciado sem reativar os comandos de barra
- Se os comandos de barra nativos pararem de funcionar, verifique nos logs a presença 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 para uma URL de loopback comohttp://localhost:18789/..., essa URL provavelmente só poderá ser acessada quando o Mattermost estiver em execução no mesmo host/namespace de rede que o OpenClaw. Em vez disso, defina explicitamente umcommands.callbackUrlacessível externamente.
Problemas com botões
- Os botões aparecem como caixas brancas ou não aparecem: os dados do botão estão malformados. Cada botão de apresentação precisa de um
labele de umvalue(botões sem um deles são descartados). - Os botões são renderizados, mas os cliques não fazem nada: verifique se o Gateway pode ser acessado pelo servidor do Mattermost, se o IP do servidor do Mattermost está incluído em
channels.mattermost.interactions.allowedSourceIps(sem essa configuração, apenas loopback é aceito) e seServiceSettings.AllowedUntrustedInternalConnectionsinclui o host do callback para destinos privados. - Os botões retornam 404 ao serem clicados: o
iddo botão provavelmente contém hifens ou sublinhados. O roteador de ações do Mattermost falha com IDs que contêm caracteres não alfanuméricos. Use somente[a-zA-Z0-9]. - O Gateway registra
rejected callback source: o clique veio de um IP fora deinteractions.allowedSourceIps. Adicione o servidor do Mattermost ou seu ingresso à lista de permissões e definagateway.trustedProxiesquando estiver atrás de um proxy reverso. - O Gateway registra
invalid _token: incompatibilidade de HMAC. Verifique se todos os campos de contexto estão sendo assinados (não apenas um subconjunto), use chaves ordenadas e JSON compacto (sem espaços). Consulte a seção sobre HMAC acima. - O Gateway registra
missing _token in context: o campo_tokennão está no contexto do botão. Certifique-se de incluí-lo ao criar o payload da integração. - O Gateway rejeita o clique com
Unknown action:context.action_idnão corresponde a nenhumidde ação na publicação. Defina ambos com o mesmo valor sanitizado. - O agente não oferece botões: adicione
capabilities: ["inlineButtons"]à configuração do canal do Mattermost.
Relacionados
- Roteamento de canais — roteamento de sessões para mensagens
- Visão geral dos canais — todos os canais compatíveis
- Grupos — comportamento de chats em grupo e controle por menção
- Emparelhamento — autenticação de mensagens diretas e fluxo de emparelhamento
- Segurança — modelo de acesso e reforço de segurança