Matrix (plugin)
Matrix é um protocolo de mensagens aberto e descentralizado. O OpenClaw se conecta como um usuário Matrix em qualquer homeserver, então você precisa de uma conta Matrix para o bot. Uma vez logado, você pode enviar DMs diretamente ao bot ou convidá-lo para salas (os “grupos” do Matrix). Beeper também é uma opção válida de cliente, mas requer E2EE habilitado.
Status: suportado via plugin (@vector-im/matrix-bot-sdk). Mensagens diretas, salas, threads, mídia, reações, enquetes (envio + poll-start como texto), localização e E2EE (com suporte a crypto).
Plugin necessário
O Matrix é distribuído como plugin e não vem incluído na instalação padrão.
Instalação via CLI (registro npm):
openclaw plugins install @openclaw/matrix
Checkout local (quando rodando a partir de um repositório git):
openclaw plugins install ./extensions/matrix
Se você escolher Matrix durante configure/onboarding e um checkout git for detectado, o OpenClaw oferecerá o caminho de instalação local automaticamente.
Detalhes: Plugins
Configuração
-
Instale o plugin Matrix:
- Do npm:
openclaw plugins install @openclaw/matrix - De um checkout local:
openclaw plugins install ./extensions/matrix
- Do npm:
-
Crie uma conta Matrix em um homeserver:
- Veja opções de hospedagem em https://matrix.org/ecosystem/hosting/
- Ou hospede você mesmo.
-
Obtenha um access token para a conta do bot:
- Use a API de login do Matrix com
curlno seu homeserver:
curl --request POST \ --url https://matrix.example.org/_matrix/client/v3/login \ --header 'Content-Type: application/json' \ --data '{ "type": "m.login.password", "identifier": { "type": "m.id.user", "user": "seu-nome-de-usuario" }, "password": "sua-senha" }'- Substitua
matrix.example.orgpela URL do seu homeserver. - Ou defina
channels.matrix.userId+channels.matrix.password: o OpenClaw chama o mesmo endpoint de login, armazena o access token em~/.openclaw/credentials/matrix/credentials.jsone o reutiliza na próxima inicialização.
- Use a API de login do Matrix com
-
Configure as credenciais:
- Env:
MATRIX_HOMESERVER,MATRIX_ACCESS_TOKEN(ouMATRIX_USER_ID+MATRIX_PASSWORD) - Ou config:
channels.matrix.* - Se ambos estiverem definidos, o config tem precedência.
- Com access token: o user ID é obtido automaticamente via
/whoami. - Quando definido,
channels.matrix.userIddeve ser o ID Matrix completo (exemplo:@bot:example.org).
- Env:
-
Reinicie o gateway (ou finalize o onboarding).
-
Inicie uma DM com o bot ou convide-o para uma sala a partir de qualquer cliente Matrix (Element, Beeper, etc.; veja https://matrix.org/ecosystem/clients/). Beeper requer E2EE, então defina
channels.matrix.encryption: truee verifique o dispositivo.
Configuração mínima (access token, user ID obtido automaticamente):
{
channels: {
matrix: {
enabled: true,
homeserver: "https://matrix.example.org",
accessToken: "syt_***",
dm: { policy: "pairing" },
},
},
}
Configuração E2EE (criptografia ponta a ponta habilitada):
{
channels: {
matrix: {
enabled: true,
homeserver: "https://matrix.example.org",
accessToken: "syt_***",
encryption: true,
dm: { policy: "pairing" },
},
},
}
Criptografia (E2EE)
A criptografia ponta a ponta é suportada via Rust crypto SDK.
Habilite com channels.matrix.encryption: true:
- Se o módulo crypto carregar, salas criptografadas são descriptografadas automaticamente.
- Mídia de saída é criptografada ao enviar para salas criptografadas.
- Na primeira conexão, o OpenClaw solicita verificação de dispositivo das suas outras sessões.
- Verifique o dispositivo em outro cliente Matrix (Element, etc.) para habilitar compartilhamento de chaves.
- Se o módulo crypto não puder ser carregado, E2EE é desabilitado e salas criptografadas não serão descriptografadas; o OpenClaw registra um aviso.
- Se você vir erros de módulo crypto ausente (por exemplo,
@matrix-org/matrix-sdk-crypto-nodejs-*), permita scripts de build para@matrix-org/matrix-sdk-crypto-nodejse executepnpm rebuild @matrix-org/matrix-sdk-crypto-nodejsou baixe o binário comnode node_modules/@matrix-org/matrix-sdk-crypto-nodejs/download-lib.js.
O estado crypto é armazenado por conta + access token em
~/.openclaw/matrix/accounts/<account>/<homeserver>__<user>/<token-hash>/crypto/
(banco de dados SQLite). O estado de sync fica ao lado em bot-storage.json.
Se o access token (dispositivo) mudar, um novo store é criado e o bot deve ser
re-verificado para salas criptografadas.
Verificação de dispositivo: Quando E2EE está habilitado, o bot solicita verificação das suas outras sessões na inicialização. Abra o Element (ou outro cliente) e aprove a solicitação de verificação para estabelecer confiança. Uma vez verificado, o bot pode descriptografar mensagens em salas criptografadas.
Múltiplas contas
Suporte a múltiplas contas: use channels.matrix.accounts com credenciais por conta e name opcional. Veja gateway/configuration para o padrão compartilhado.
Cada conta roda como um usuário Matrix separado em qualquer homeserver. A configuração por conta herda das configurações de nível superior channels.matrix e pode sobrescrever qualquer opção (política de DM, grupos, criptografia, etc.).
{
channels: {
matrix: {
enabled: true,
dm: { policy: "pairing" },
accounts: {
assistant: {
name: "Assistente principal",
homeserver: "https://matrix.example.org",
accessToken: "syt_assistant_***",
encryption: true,
},
alerts: {
name: "Bot de alertas",
homeserver: "https://matrix.example.org",
accessToken: "syt_alerts_***",
dm: { policy: "allowlist", allowFrom: ["@admin:example.org"] },
},
},
},
},
}
Observações:
- A inicialização de contas é serializada para evitar condições de corrida com importações concorrentes de módulos.
- Variáveis de ambiente (
MATRIX_HOMESERVER,MATRIX_ACCESS_TOKEN, etc.) se aplicam apenas à conta padrão. - Configurações base do canal (política de DM, política de grupo, gating de menção, etc.) se aplicam a todas as contas, a menos que sobrescritas por conta.
- Use
bindings[].match.accountIdpara rotear cada conta para um agente diferente. - O estado crypto é armazenado por conta + access token (key stores separados por conta).
Modelo de roteamento
- Respostas sempre voltam para o Matrix.
- DMs compartilham a sessão principal do agente; salas mapeiam para sessões de grupo.
Controle de acesso (DMs)
- Padrão:
channels.matrix.dm.policy = "pairing". Remetentes desconhecidos recebem um código de pareamento. - Aprove via:
openclaw pairing list matrixopenclaw pairing approve matrix <CODE>
- DMs públicas:
channels.matrix.dm.policy="open"maischannels.matrix.dm.allowFrom=["*"]. channels.matrix.dm.allowFromaceita IDs Matrix completos (exemplo:@user:server). O wizard resolve nomes de exibição para IDs quando a busca no diretório encontra uma correspondência exata única.- Não use nomes de exibição ou localparts simples (exemplo:
"Alice"ou"alice"). São ambíguos e ignorados para correspondência de allowlist. Use IDs completos@user:server.
Salas (grupos)
- Padrão:
channels.matrix.groupPolicy = "allowlist"(com gating de menção). Usechannels.defaults.groupPolicypara sobrescrever o padrão quando não definido. - Nota de runtime: se
channels.matrixestá completamente ausente, o runtime faz fallback paragroupPolicy="allowlist"para verificações de sala (mesmo sechannels.defaults.groupPolicyestiver definido). - Permita salas com
channels.matrix.groups(IDs de sala ou aliases; nomes são resolvidos para IDs quando a busca no diretório encontra uma correspondência exata única):
{
channels: {
matrix: {
groupPolicy: "allowlist",
groups: {
"!roomId:example.org": { allow: true },
"#alias:example.org": { allow: true },
},
groupAllowFrom: ["@owner:example.org"],
},
},
}
requireMention: falsehabilita resposta automática naquela sala.groups."*"pode definir padrões de gating de menção entre salas.groupAllowFromrestringe quais remetentes podem acionar o bot em salas (IDs Matrix completos).- Allowlists
userspor sala podem restringir ainda mais remetentes dentro de uma sala específica (use IDs Matrix completos). - O wizard de configuração solicita allowlists de sala (IDs de sala, aliases ou nomes) e resolve nomes apenas em correspondência exata e única.
- Na inicialização, o OpenClaw resolve nomes de sala/usuário em allowlists para IDs e registra o mapeamento; entradas não resolvidas são ignoradas para correspondência de allowlist.
- Convites são aceitos automaticamente por padrão; controle com
channels.matrix.autoJoinechannels.matrix.autoJoinAllowlist. - Para não permitir nenhuma sala, defina
channels.matrix.groupPolicy: "disabled"(ou mantenha uma allowlist vazia). - Chave legada:
channels.matrix.rooms(mesmo formato quegroups).
Threads
- Threading de respostas é suportado.
channels.matrix.threadRepliescontrola se respostas ficam em threads:off,inbound(padrão),always
channels.matrix.replyToModecontrola metadados de reply-to quando não respondendo em thread:off(padrão),first,all
Funcionalidades
| Funcionalidade | Status |
|---|---|
| Mensagens diretas | Suportado |
| Salas | Suportado |
| Threads | Suportado |
| Mídia | Suportado |
| E2EE | Suportado (módulo crypto necessário) |
| Reações | Suportado (envio/leitura via ferramentas) |
| Enquetes | Envio suportado; poll starts de entrada são convertidos em texto (respostas/fins ignorados) |
| Localização | Suportado (geo URI; altitude ignorada) |
| Comandos nativos | Suportado |
Resolução de problemas
Execute esta sequência primeiro:
openclaw status
openclaw gateway status
openclaw logs --follow
openclaw doctor
openclaw channels status --probe
Depois confirme o estado de pareamento de DM se necessário:
openclaw pairing list matrix
Falhas comuns:
- Logado mas mensagens de sala ignoradas: sala bloqueada por
groupPolicyou allowlist de sala. - DMs ignoradas: remetente pendente de aprovação quando
channels.matrix.dm.policy="pairing". - Salas criptografadas falham: suporte crypto ou configurações de criptografia incompatíveis.
Para fluxo de triagem: /channels/troubleshooting.
Referência de configuração (Matrix)
Configuração completa: Configuração
Opções do provedor:
channels.matrix.enabled: habilitar/desabilitar inicialização do canal.channels.matrix.homeserver: URL do homeserver.channels.matrix.userId: ID de usuário Matrix (opcional com access token).channels.matrix.accessToken: access token.channels.matrix.password: senha para login (token armazenado).channels.matrix.deviceName: nome de exibição do dispositivo.channels.matrix.encryption: habilitar E2EE (padrão: false).channels.matrix.initialSyncLimit: limite de sync inicial.channels.matrix.threadReplies:off | inbound | always(padrão: inbound).channels.matrix.textChunkLimit: tamanho do chunk de texto de saída (caracteres).channels.matrix.chunkMode:length(padrão) ounewlinepara dividir em linhas em branco (limites de parágrafo) antes da divisão por tamanho.channels.matrix.dm.policy:pairing | allowlist | open | disabled(padrão: pairing).channels.matrix.dm.allowFrom: allowlist de DM (IDs Matrix completos).openrequer"*". O wizard resolve nomes para IDs quando possível.channels.matrix.groupPolicy:allowlist | open | disabled(padrão: allowlist).channels.matrix.groupAllowFrom: remetentes na allowlist para mensagens de grupo (IDs Matrix completos).channels.matrix.allowlistOnly: forçar regras de allowlist para DMs + salas.channels.matrix.groups: mapa de allowlist de grupo + configurações por sala.channels.matrix.rooms: allowlist/configuração legada de grupo.channels.matrix.replyToMode: modo reply-to para threads/tags.channels.matrix.mediaMaxMb: limite de mídia de entrada/saída (MB).channels.matrix.autoJoin: tratamento de convites (always | allowlist | off, padrão: always).channels.matrix.autoJoinAllowlist: IDs/aliases de sala permitidos para auto-join.channels.matrix.accounts: configuração multi-conta chaveada por ID de conta (cada conta herda configurações de nível superior).channels.matrix.actions: gating de ferramenta por ação (reactions/messages/pins/memberInfo/channelInfo).