Nesta página
Nesta página
Mainstream messaging
Metadados de apresentação do Matrix
OpenClaw anexa metadados MessagePresentation normalizados aos eventos m.room.message de saída do Matrix na chave de conteúdo com.openclaw.presentation.
Os clientes Matrix padrão continuam renderizando o texto simples de body. Clientes compatíveis com OpenClaw podem ler os metadados estruturados e renderizar uma interface nativa, como botões, seletores, linhas de contexto e divisores.
Conteúdo do evento
versioné a versão do esquema de metadados; a versão atual é1.typeé um discriminador estável, sempre"message.presentation". O adaptador do Matrix emite apenas cargas com exatamente essa versão e esse tipo; da mesma forma, os clientes devem ignorar versões desconhecidas que não possam interpretar com segurança, valores detypedesconhecidos e tipos de bloco desconhecidos.titleetone(info,success,warning,danger,neutral) são indicações opcionais.- Botões e opções de seleção podem conter uma
actiontipada ({ "type": "command", "command": "/..." }ou{ "type": "callback", "value": "..." }) junto à string legadavalue. Prefiraactionquando ambas estiverem presentes.
Comportamento de fallback
O OpenClaw sempre renderiza em body um fallback de texto simples legível. Os metadados estruturados são adicionais e não devem ser obrigatórios para a interoperabilidade básica com o Matrix.
Regras de renderização do fallback:
- O conteúdo de
title,textecontexté renderizado como linhas de texto simples. - Botões com uma ação
commandsão renderizados comorótulo: `/comando`, para que o comando possa ser copiado. Botões com uma açãocallbackou apenas umvaluelegado são renderizados somente com o rótulo, para que valores opacos de callback permaneçam privados; botões desabilitados são sempre renderizados somente com o rótulo. Botões de URL e de aplicativo web são renderizados comorótulo: URL. - Blocos de seleção renderizam o texto indicativo (ou
Opções:) como título, seguido de linhas de opções contendo somente os rótulos. - Se nada for renderizado, por exemplo, em uma apresentação que contenha apenas um divisor, o corpo usa
---como fallback.
Clientes sem suporte continuam exibindo o texto de fallback. Clientes compatíveis com OpenClaw podem preferir os metadados estruturados para exibição, preservando o fallback para cópia, pesquisa, notificações e acessibilidade.
Blocos compatíveis
O adaptador de saída do Matrix anuncia suporte nativo a:
buttonsselectcontextdivider
Blocos text sempre são compatíveis por meio do corpo de fallback. Trate todos os blocos como indicações de apresentação de melhor esforço; ignore campos e tipos de bloco desconhecidos em vez de rejeitar a mensagem inteira.
Interações
Esses metadados não adicionam semântica de callback ao Matrix. Os valores de botões e seletores são cargas de interação de fallback, geralmente comandos de barra ou comandos de texto. Um cliente Matrix que queira oferecer suporte à interação resolve o valor do controle (action.command, depois action.value e, por fim, value) e o envia de volta à sala como uma mensagem normal.
Por exemplo, um botão com o valor /model deepseek/deepseek-chat pode ser processado enviando esse valor como uma mensagem de texto criptografada do Matrix na mesma sala.
Relação com os metadados de aprovação
com.openclaw.presentation destina-se à apresentação geral de mensagens avançadas.
Solicitações de aprovação usam os metadados dedicados com.openclaw.approval, pois as aprovações contêm estado sensível à segurança, decisões e detalhes de execução/Plugin. Se ambas as chaves de metadados estiverem presentes no mesmo evento, os clientes devem preferir o renderizador dedicado de aprovação.
Mensagens de mídia
Quando uma resposta contém vários URLs de mídia, o OpenClaw envia um evento do Matrix para cada URL de mídia. O texto da legenda e os metadados de apresentação são anexados apenas ao primeiro evento, para que os clientes recebam uma única carga estruturada estável, sem renderizadores duplicados. A mesma regra se aplica quando um texto longo é dividido entre eventos: os metadados acompanham somente o primeiro evento.
Mantenha os metadados de apresentação compactos. Textos extensos visíveis ao usuário devem permanecer em body e usar o fluxo normal de divisão de texto do Matrix.