Matrix (плагин)¶
Matrix — это открытый децентрализованный протокол обмена сообщениями. OpenClaw подключается как пользователь Matrix на любом домашнем сервере (homeserver), поэтому для бота требуется учётная запись Matrix. После входа в систему вы можете писать боту в личные сообщения или приглашать его в комнаты (Matrix «группы»). Beeper также является допустимым клиентом, но требует включения E2EE.
Статус: поддерживается через плагин (@vector-im/matrix-bot-sdk). Личные сообщения, комнаты, треды, медиа, реакции, опросы (отправка + poll-start как текст), геолокация и E2EE (с криптоподдержкой).
Требуется плагин¶
Matrix поставляется как плагин и не входит в базовую установку.
Установка через CLI (реестр npm):
openclaw plugins install @openclaw/matrix
Локальный checkout (при запуске из git-репозитория):
openclaw plugins install ./extensions/matrix
Если вы выбираете Matrix во время конфигурации/онбординга и обнаружен git-checkout, OpenClaw автоматически предложит путь локальной установки.
Подробности: Plugins
Настройка¶
-
Установите плагин Matrix: - Из npm:
openclaw plugins install @openclaw/matrix- Из локального checkout:openclaw plugins install ./extensions/matrix -
Создайте учётную запись Matrix на homeserver: - Посмотрите варианты хостинга на https://matrix.org/ecosystem/hosting/ - Или разверните свой собственный.
-
Получите access token для учётной записи бота:
- Используйте API входа Matrix с
curlна вашем домашнем сервере:
bash
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 вашего homeserver. - Либо задайте
channels.matrix.userId+channels.matrix.password: OpenClaw вызывает тот же эндпоинт входа, сохраняет access token в~/.openclaw/credentials/matrix/credentials.json, и повторно использует его при следующем запуске.
-
Настройте учётные данные: - Env:
MATRIX_HOMESERVER,MATRIX_ACCESS_TOKEN(илиMATRIX_USER_ID+MATRIX_PASSWORD) - Или в конфиге:channels.matrix.*- Если заданы оба варианта, приоритет у конфига. - При использовании access token идентификатор пользователя извлекается автоматически через/whoami. - Если задано,channels.matrix.userIdдолжен быть полным Matrix ID (пример:@bot:example.org). -
Перезапустите Gateway (шлюз) (или завершите онбординг).
-
Начните личный диалог с ботом или пригласите его в комнату из любого клиента Matrix (Element, Beeper и т. п.; см. https://matrix.org/ecosystem/clients/). Beeper требует E2EE, поэтому установите
channels.matrix.encryption: trueи подтвердите устройство.
Минимальный конфиг (access token, user 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.
Состояние криптографии хранится для каждой учётной записи + access token в
~/.openclaw/matrix/accounts/<account>/<homeserver>__<user>/<token-hash>/crypto/
(база данных SQLite). Состояние синхронизации находится рядом в bot-storage.json.
Если access token (устройство) меняется, создаётся новое хранилище, и бота необходимо
повторно подтвердить для зашифрованных комнат.
Подтверждение устройства: Когда E2EE включено, бот при запуске запрашивает подтверждение у ваших других сессий. Откройте Element (или другой клиент) и одобрите запрос подтверждения, чтобы установить доверие. После подтверждения бот сможет расшифровывать сообщения в зашифрованных комнатах.
Модель маршрутизации¶
- Ответы всегда возвращаются в 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принимает полные Matrix user ID (пример:@user:server). Мастер настройки разрешает отображаемые имена в user ID, когда поиск в каталоге находит единственное точное совпадение.
Комнаты (группы)¶
- По умолчанию:
channels.matrix.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ограничивает, какие отправители могут триггерить бота в комнатах (полные Matrix user ID).- Списки разрешённых
usersна уровне комнаты могут дополнительно ограничивать отправителей внутри конкретной комнаты (используйте полные Matrix user ID). - Мастер настройки запрашивает allowlist комнат (ID, алиасы или имена) и разрешает имена только при точном уникальном совпадении.
- При запуске OpenClaw разрешает имена комнат/пользователей в списках разрешённых в ID и логирует соответствие; неразрешённые записи игнорируются при сопоставлении allowlist.
- Приглашения по умолчанию принимаются автоматически; управление через
channels.matrix.autoJoinиchannels.matrix.autoJoinAllowlist. - Чтобы запретить все комнаты, установите
channels.matrix.groupPolicy: "disabled"(или оставьте allowlist пустым). - Устаревший ключ:
channels.matrix.rooms(та же форма, что иgroups).
Потоки¶
- Поддерживаются ответы в тредах.
channels.matrix.threadRepliesуправляет тем, остаются ли ответы в тредах:off,inbound(по умолчанию),alwayschannels.matrix.replyToModeуправляет метаданными «reply-to», когда ответ не в треде:off(по умолчанию),first,all
Возможности¶
| Функция | Статус |
|---|---|
| Прямые сообщения | ✅ Поддерживается |
| Комнаты | ✅ Поддерживается |
| Потоки | ✅ Поддерживается |
| Медиа | ✅ Поддерживается |
| E2EE | ✅ Поддерживается (требуется криптомодуль) |
| Реакции | ✅ Поддерживается (отправка/чтение через инструменты) |
| Опросы | ✅ Поддерживается отправка; входящие старты опросов преобразуются в текст (ответы/завершения игнорируются) |
| Геолокация | ✅ Поддерживается (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)¶
Полная конфигурация: Configuration
Параметры провайдера:
channels.matrix.enabled: включение/отключение запуска канала.channels.matrix.homeserver: URL homeserver.channels.matrix.userId: Matrix user ID (необязательно при наличии access token).channels.matrix.accessToken: access token.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: allowlist личных сообщений (полные Matrix user ID).openтребует"*". Мастер настройки разрешает имена в ID, когда это возможно.channels.matrix.groupPolicy:allowlist | open | disabled(по умолчанию: allowlist).channels.matrix.groupAllowFrom: разрешённые отправители для групповых сообщений (полные Matrix user ID).channels.matrix.allowlistOnly: принудительное применение правил allowlist для личных сообщений и комнат.channels.matrix.groups: allowlist групп + карта настроек по комнатам.channels.matrix.rooms: устаревший allowlist/конфиг групп.channels.matrix.replyToMode: режим «reply-to» для тредов/тегов.channels.matrix.mediaMaxMb: лимит медиа на вход/выход (МБ).channels.matrix.autoJoin: обработка приглашений (always | allowlist | off, по умолчанию: always).channels.matrix.autoJoinAllowlist: разрешённые ID/алиасы комнат для авто-вступления.channels.matrix.actions: ограничение инструментов по действиям (reactions/messages/pins/memberInfo/channelInfo).