Matrix (плагин)
Matrix — открытый децентрализованный протокол обмена сообщениями. OpenClaw подключается как пользователь Matrix на любом домашнем сервере, поэтому для бота нужен аккаунт Matrix. После входа можно писать боту в ЛС или приглашать его в комнаты (Matrix «группы»). Beeper тоже подходит как клиент, но требует включения E2EE.
Статус: поддерживается через плагин (@vector-im/matrix-bot-sdk). Прямые сообщения, комнаты, потоки, медиа, реакции, опросы (отправка + poll-start как текст), геолокация и E2EE (с поддержкой криптографии).
Требуется плагин
Matrix поставляется как плагин и не входит в базовую установку.
Установка через CLI (npm-реестр):
openclaw plugins install @openclaw/matrix
Из локальной копии (при работе из git-репозитория):
openclaw plugins install ./extensions/matrix
Если вы выбираете Matrix при настройке/онбординге и обнаружена git-копия, OpenClaw автоматически предложит локальную установку.
Подробнее: Плагины
Настройка
-
Установите плагин Matrix:
- Из npm:
openclaw plugins install @openclaw/matrix - Из локальной копии:
openclaw plugins install ./extensions/matrix
- Из npm:
-
Создайте аккаунт Matrix на домашнем сервере:
- Варианты хостинга: https://matrix.org/ecosystem/hosting/
- Или разверните самостоятельно.
-
Получите токен доступа для аккаунта бота:
- Используйте Matrix login API с
curlна вашем домашнем сервере:
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": "your-user-name" }, "password": "your-password" }'- Замените
matrix.example.orgна URL вашего домашнего сервера. - Или задайте
channels.matrix.userId+channels.matrix.password: OpenClaw вызовет тот же эндпоинт входа, сохранит токен доступа в~/.openclaw/credentials/matrix/credentials.jsonи переиспользует его при следующем запуске.
- Используйте Matrix login API с
-
Настройте учётные данные:
- Env:
MATRIX_HOMESERVER,MATRIX_ACCESS_TOKEN(илиMATRIX_USER_ID+MATRIX_PASSWORD) - Или конфиг:
channels.matrix.* - При наличии обоих конфиг имеет приоритет.
- С токеном доступа: ID пользователя получается автоматически через
/whoami. channels.matrix.userIdдолжен быть полным Matrix ID (пример:@bot:example.org).
- Env:
-
Перезапустите шлюз (или завершите онбординг).
-
Начните ЛС с ботом или пригласите его в комнату из любого Matrix-клиента (Element, Beeper и т.д.; см. https://matrix.org/ecosystem/clients/). Beeper требует E2EE, поэтому задайте
channels.matrix.encryption: trueи верифицируйте устройство.
Минимальная конфигурация (токен доступа, ID пользователя получается автоматически):
{
channels: {
matrix: {
enabled: true,
homeserver: "https://matrix.example.org",
accessToken: "syt_***",
dm: { policy: "pairing" },
},
},
}
Конфигурация E2EE (сквозное шифрование включено):
{
channels: {
matrix: {
enabled: true,
homeserver: "https://matrix.example.org",
accessToken: "syt_***",
encryption: true,
dm: { policy: "pairing" },
},
},
}
Шифрование (E2EE)
Сквозное шифрование поддерживается через Rust crypto SDK.
Включите с помощью channels.matrix.encryption: true:
- Если криптомодуль загружается, зашифрованные комнаты расшифровываются автоматически.
- Исходящие медиа шифруются при отправке в зашифрованные комнаты.
- При первом подключении OpenClaw запрашивает верификацию устройства из других сессий.
- Верифицируйте устройство в другом Matrix-клиенте (Element и т.д.) для обмена ключами.
- Если криптомодуль не загружается, E2EE отключается и зашифрованные комнаты не расшифровываются; OpenClaw логирует предупреждение.
- При ошибках отсутствия криптомодуля (например,
@matrix-org/matrix-sdk-crypto-nodejs-*), разрешите скрипты сборки для@matrix-org/matrix-sdk-crypto-nodejsи выполнитеpnpm rebuild @matrix-org/matrix-sdk-crypto-nodejsили загрузите бинарник черезnode node_modules/@matrix-org/matrix-sdk-crypto-nodejs/download-lib.js.
Состояние криптографии хранится по аккаунту + токену доступа в ~/.openclaw/matrix/accounts/<account>/<homeserver>__<user>/<token-hash>/crypto/ (база SQLite). Состояние синхронизации находится рядом в bot-storage.json.
При смене токена доступа (устройства) создаётся новое хранилище, и бот должен быть заново верифицирован для зашифрованных комнат.
Верификация устройства: При включённом E2EE бот запросит верификацию из других сессий при запуске. Откройте Element (или другой клиент) и подтвердите запрос верификации для установления доверия. После верификации бот сможет расшифровывать сообщения в зашифрованных комнатах.
Мульти-аккаунт
Мульти-аккаунт: используйте channels.matrix.accounts с учётными данными для каждого аккаунта и необязательным name. Подробнее: gateway/configuration.
Каждый аккаунт работает как отдельный пользователь Matrix на любом домашнем сервере. Конфигурация аккаунта наследует настройки верхнего уровня channels.matrix и может переопределять любую опцию (политика ЛС, группы, шифрование и т.д.).
{
channels: {
matrix: {
enabled: true,
dm: { policy: "pairing" },
accounts: {
assistant: {
name: "Main assistant",
homeserver: "https://matrix.example.org",
accessToken: "syt_assistant_***",
encryption: true,
},
alerts: {
name: "Alerts bot",
homeserver: "https://matrix.example.org",
accessToken: "syt_alerts_***",
dm: { policy: "allowlist", allowFrom: ["@admin:example.org"] },
},
},
},
},
}
Примечания:
- Запуск аккаунтов сериализован для предотвращения состояний гонки при параллельном импорте модулей.
- Переменные окружения (
MATRIX_HOMESERVER,MATRIX_ACCESS_TOKENи т.д.) применяются только к аккаунту по умолчанию. - Базовые настройки канала (политика ЛС, групповая политика, гейтинг по упоминанию и т.д.) применяются ко всем аккаунтам, если не переопределены для конкретного аккаунта.
- Используйте
bindings[].match.accountIdдля маршрутизации каждого аккаунта к разному агенту. - Состояние криптографии хранится по аккаунту + токену доступа (отдельные хранилища ключей для каждого аккаунта).
Модель маршрутизации
- Ответы всегда возвращаются в Matrix.
- ЛС используют основную сессию агента; комнаты привязаны к групповым сессиям.
Контроль доступа (ЛС)
- По умолчанию:
channels.matrix.dm.policy = "pairing". Неизвестные отправители получают код спаривания. - Подтверждение:
openclaw pairing list matrixopenclaw pairing approve matrix <CODE>
- Публичные ЛС:
channels.matrix.dm.policy="open"плюсchannels.matrix.dm.allowFrom=["*"]. channels.matrix.dm.allowFromпринимает полные ID пользователей Matrix (пример:@user:server). Мастер настройки преобразует отображаемые имена в ID пользователей при единственном точном совпадении в каталоге.- Не используйте отображаемые имена или голые локальные части (пример:
"Alice"или"alice"). Они неоднозначны и игнорируются для сопоставления списка доступа. Используйте полные ID@user:server.
Комнаты (группы)
- По умолчанию:
channels.matrix.groupPolicy = "allowlist"(с гейтингом по упоминанию). Используйтеchannels.defaults.groupPolicyдля переопределения значения по умолчанию. - Примечание: если
channels.matrixполностью отсутствует, runtime использует fallback кgroupPolicy="allowlist"для проверок комнат (даже если заданchannels.defaults.groupPolicy). - Список доступа комнат через
channels.matrix.groups(ID комнат или алиасы; имена преобразуются в ID при единственном точном совпадении в каталоге):
{
channels: {
matrix: {
groupPolicy: "allowlist",
groups: {
"!roomId:example.org": { allow: true },
"#alias:example.org": { allow: true },
},
groupAllowFrom: ["@owner:example.org"],
},
},
}
requireMention: falseвключает автоответ в этой комнате.groups."*"задаёт настройки по умолчанию для гейтинга по упоминанию для всех комнат.groupAllowFromограничивает, какие отправители могут активировать бота в комнатах (полные ID пользователей Matrix).- Списки доступа
usersдля конкретной комнаты могут дополнительно ограничить отправителей (используйте полные ID пользователей Matrix). - Мастер настройки запрашивает списки доступа комнат (ID комнат, алиасы или имена) и преобразует имена только при точном уникальном совпадении.
- При запуске OpenClaw преобразует имена комнат/пользователей в списках доступа в ID и логирует соответствие; непреобразованные записи игнорируются для сопоставления.
- Приглашения принимаются автоматически по умолчанию; управляйте через
channels.matrix.autoJoinиchannels.matrix.autoJoinAllowlist. - Для запрета всех комнат задайте
channels.matrix.groupPolicy: "disabled"(или оставьте пустой список доступа). - Устаревший ключ:
channels.matrix.rooms(такая же структура, какgroups).
Потоки
- Ответы в потоках поддерживаются.
channels.matrix.threadRepliesуправляет тем, остаются ли ответы в потоках:off,inbound(по умолчанию),always
channels.matrix.replyToModeуправляет метаданными reply-to при ответе вне потока:off(по умолчанию),first,all
Возможности
| Функция | Статус |
|---|---|
| Прямые сообщения | Поддерживается |
| Комнаты | Поддерживается |
| Потоки | Поддерживается |
| Медиа | Поддерживается |
| E2EE | Поддерживается (требуется криптомодуль) |
| Реакции | Поддерживается (отправка/чтение через инструменты) |
| Опросы | Отправка поддерживается; входящие poll start преобразуются в текст (ответы/завершения игнорируются) |
| Геолокация | Поддерживается (geo URI; высота игнорируется) |
| Нативные команды | Поддерживается |
Устранение неполадок
Выполните эти команды первыми:
openclaw status
openclaw gateway status
openclaw logs --follow
openclaw doctor
openclaw channels status --probe
Затем проверьте состояние спаривания ЛС при необходимости:
openclaw pairing list matrix
Частые сбои:
- Вход выполнен, но сообщения комнат игнорируются: комната заблокирована
groupPolicyили списком доступа комнат. - ЛС игнорируются: отправитель ожидает подтверждения при
channels.matrix.dm.policy="pairing". - Зашифрованные комнаты не работают: несоответствие криптографической поддержки или настроек шифрования.
Процесс диагностики: /channels/troubleshooting.
Справочник конфигурации (Matrix)
Полная конфигурация: Конфигурация
Опции провайдера:
channels.matrix.enabled: включение/выключение запуска канала.channels.matrix.homeserver: URL домашнего сервера.channels.matrix.userId: ID пользователя Matrix (необязательно при наличии токена доступа).channels.matrix.accessToken: токен доступа.channels.matrix.password: пароль для входа (токен сохраняется).channels.matrix.deviceName: отображаемое имя устройства.channels.matrix.encryption: включение E2EE (по умолчанию: false).channels.matrix.initialSyncLimit: лимит начальной синхронизации.channels.matrix.threadReplies:off | inbound | always(по умолчанию: inbound).channels.matrix.textChunkLimit: размер исходящего текстового чанка (символы).channels.matrix.chunkMode:length(по умолчанию) илиnewlineдля разделения по пустым строкам (границам абзацев) перед разбивкой по длине.channels.matrix.dm.policy:pairing | allowlist | open | disabled(по умолчанию: pairing).channels.matrix.dm.allowFrom: список доступа ЛС (полные ID пользователей Matrix). Дляopenнужен"*". Мастер преобразует имена в ID при возможности.channels.matrix.groupPolicy:allowlist | open | disabled(по умолчанию: allowlist).channels.matrix.groupAllowFrom: список доступа отправителей для групповых сообщений (полные ID пользователей Matrix).channels.matrix.allowlistOnly: принудительное применение правил списка доступа для ЛС + комнат.channels.matrix.groups: список доступа групп + настройки по комнатам.channels.matrix.rooms: устаревший список доступа/конфигурация групп.channels.matrix.replyToMode: режим reply-to для потоков/тегов.channels.matrix.mediaMaxMb: лимит входящих/исходящих медиа (МБ).channels.matrix.autoJoin: обработка приглашений (always | allowlist | off, по умолчанию: always).channels.matrix.autoJoinAllowlist: разрешённые ID/алиасы комнат для автоприсоединения.channels.matrix.accounts: мульти-аккаунтная конфигурация по ID аккаунта (каждый аккаунт наследует настройки верхнего уровня).channels.matrix.actions: управление действиями по инструментам (reactions/messages/pins/memberInfo/channelInfo).