Matrix (wtyczka)
Matrix to otwarty, zdecentralizowany protokół komunikacyjny. OpenClaw łączy się jako użytkownik Matrix na dowolnym homeserverze, więc potrzebujesz konta Matrix dla bota. Po zalogowaniu możesz wysyłać botowi wiadomości DM lub zapraszać go do pokoi (matrixowe „grupy”). Beeper również jest poprawną opcją klienta, ale wymaga włączonego E2EE. Status: obsługiwany przez wtyczkę (@vector-im/matrix-bot-sdk). Wiadomości bezpośrednie, pokoje, wątki, media, reakcje, ankiety (wysyłanie + poll-start jako tekst), lokalizacja oraz E2EE (z obsługą kryptografii).Wymagana wtyczka
Matrix jest dostarczany jako wtyczka i nie jest dołączony do instalacji rdzenia. Instalacja przez CLI (rejestr npm):Konfiguracja
-
Zainstaluj wtyczkę Matrix:
- Z npm:
openclaw plugins install @openclaw/matrix - Z lokalnego checkoutu:
openclaw plugins install ./extensions/matrix
- Z npm:
-
Utwórz konto Matrix na homeserverze:
- Przeglądaj opcje hostingu na https://matrix.org/ecosystem/hosting/
- Lub hostuj samodzielnie.
-
Uzyskaj token dostępu dla konta bota:
- Użyj API logowania Matrix z
curlna swoim homeserverze:
- Zastąp
matrix.example.orgadresem URL swojego homeservera. - Albo ustaw
channels.matrix.userId+channels.matrix.password: OpenClaw wywołuje ten sam endpoint logowania, zapisuje token dostępu w~/.openclaw/credentials/matrix/credentials.jsoni ponownie używa go przy następnym uruchomieniu.
- Użyj API logowania Matrix z
-
Skonfiguruj poświadczenia:
- Env:
MATRIX_HOMESERVER,MATRIX_ACCESS_TOKEN(lubMATRIX_USER_ID+MATRIX_PASSWORD) - Albo config:
channels.matrix.* - Jeśli oba są ustawione, konfiguracja ma pierwszeństwo.
- Przy użyciu tokenu dostępu: ID użytkownika jest pobierane automatycznie przez
/whoami. - Gdy ustawione,
channels.matrix.userIdpowinno być pełnym ID Matrix (przykład:@bot:example.org).
- Env:
- Zrestartuj gateway (lub zakończ onboarding).
-
Rozpocznij DM z botem lub zaproś go do pokoju z dowolnego klienta Matrix
(Element, Beeper itd.; zob. https://matrix.org/ecosystem/clients/). Beeper wymaga E2EE,
więc ustaw
channels.matrix.encryption: truei zweryfikuj urządzenie.
Szyfrowanie (E2EE)
Szyfrowanie end-to-end jest obsługiwane przez rustowy SDK kryptograficzny. Włącz za pomocąchannels.matrix.encryption: true:
- Jeśli moduł crypto się załaduje, zaszyfrowane pokoje są odszyfrowywane automatycznie.
- Wychodzące media są szyfrowane przy wysyłaniu do zaszyfrowanych pokoi.
- Przy pierwszym połączeniu OpenClaw żąda weryfikacji urządzenia z innych sesji.
- Zweryfikuj urządzenie w innym kliencie Matrix (Element itd.), aby włączyć udostępnianie kluczy. aby włączyć udostępnianie kluczy.
- Jeśli moduł crypto nie może zostać załadowany, E2EE jest wyłączone, a zaszyfrowane pokoje nie będą odszyfrowywane; OpenClaw zapisze ostrzeżenie w logach.
- Jeśli pojawiają się błędy braku modułu crypto (np.
@matrix-org/matrix-sdk-crypto-nodejs-*), zezwól na skrypty budowania dla@matrix-org/matrix-sdk-crypto-nodejsi uruchompnpm rebuild @matrix-org/matrix-sdk-crypto-nodejslub pobierz binarium za pomocąnode node_modules/@matrix-org/matrix-sdk-crypto-nodejs/download-lib.js.
~/.openclaw/matrix/accounts/<account>/<homeserver>__<user>/<token-hash>/crypto/
(baza SQLite). Stan synchronizacji znajduje się obok w bot-storage.json.
Jeśli token dostępu (urządzenie) ulegnie zmianie, tworzony jest nowy magazyn i bot musi
zostać ponownie zweryfikowany dla zaszyfrowanych pokoi.
Weryfikacja urządzenia:
Gdy E2EE jest włączone, bot przy starcie poprosi o weryfikację z innych sesji.
Otwórz Element (lub innego klienta) i zatwierdź żądanie weryfikacji, aby ustanowić zaufanie.
Po weryfikacji bot może odszyfrowywać wiadomości w zaszyfrowanych pokojach.
Wiele kont
Obsługa wielu kont: użyjchannels.matrix.accounts z poświadczeniami dla każdego konta oraz opcjonalnym name. Zobacz gateway/configuration, aby poznać wspólny wzorzec.
Każde konto działa jako oddzielny użytkownik Matrix na dowolnym homeserverze. Konfiguracja dla każdego konta
dziedziczy ustawienia z najwyższego poziomu channels.matrix i może nadpisywać dowolną opcję
(polityka DM, grupy, szyfrowanie itp.).
- Uruchamianie kont jest serializowane, aby uniknąć warunków wyścigu przy równoczesnym imporcie modułów.
- Zmienne środowiskowe (
MATRIX_HOMESERVER,MATRIX_ACCESS_TOKENitp.) mają zastosowanie tylko do konta default. - Podstawowe ustawienia kanału (polityka DM, polityka grup, ograniczenia wzmianek itp.) mają zastosowanie do wszystkich kont, chyba że zostaną nadpisane dla konkretnego konta.
- Użyj
bindings[].match.accountId, aby kierować każde konto do innego agenta. - Stan kryptograficzny jest przechowywany osobno dla każdego konta + access token (oddzielne magazyny kluczy dla każdego konta).
Model routingu
- Odpowiedzi zawsze wracają do Matrix.
- DM-y współdzielą główną sesję agenta; pokoje mapują się na sesje grupowe.
Kontrola dostępu (DM-y)
- Domyślnie:
channels.matrix.dm.policy = "pairing". Nieznani nadawcy otrzymują kod parowania. - Zatwierdzanie przez:
openclaw pairing list matrixopenclaw pairing approve matrix <CODE>
- Publiczne DM-y:
channels.matrix.dm.policy="open"pluschannels.matrix.dm.allowFrom=["*"]. channels.matrix.dm.allowFromakceptuje pełne ID użytkowników Matrix (przykład:@user:server). Kreator rozwiązuje nazwy wyświetlane do ID użytkowników, gdy wyszukiwanie w katalogu znajdzie jedno dokładne dopasowanie.- Nie używaj nazw wyświetlanych ani samych localpartów (np.: “Alice” lub “alice”). Są one niejednoznaczne i są ignorowane przy dopasowywaniu listy dozwolonych. Używaj pełnych identyfikatorów
@user:server.
Pokoje (grupy)
- Domyślnie:
channels.matrix.groupPolicy = "allowlist"(wymagane wzmianki). Użyjchannels.defaults.groupPolicy, aby nadpisać domyślne zachowanie, gdy nieustawione. - Zezwalaj na pokoje przez listę dozwolonych za pomocą
channels.matrix.groups(ID pokoi lub aliasy; nazwy są rozwiązywane do ID, gdy wyszukiwanie w katalogu znajdzie jedno dokładne dopasowanie):
requireMention: falsewłącza automatyczną odpowiedź w danym pokoju.groups."*"może ustawić domyślne reguły wymagania wzmianek dla pokoi.groupAllowFromogranicza, którzy nadawcy mogą wyzwalać bota w pokojach (pełne ID użytkowników Matrix).- Listy dozwolonych per pokój
usersmogą dodatkowo ograniczać nadawców w konkretnym pokoju (używaj pełnych ID użytkowników Matrix). - Kreator konfiguracji pyta o listy dozwolonych pokoi (ID pokoi, aliasy lub nazwy) i rozwiązuje nazwy tylko przy dokładnym, unikalnym dopasowaniu.
- Przy starcie OpenClaw rozwiązuje nazwy pokoi/użytkowników na listach dozwolonych do ID i loguje mapowanie; nierozwiązane wpisy są ignorowane przy dopasowywaniu list dozwolonych.
- Zaproszenia są domyślnie automatycznie akceptowane; steruj za pomocą
channels.matrix.autoJoinichannels.matrix.autoJoinAllowlist. - Aby nie zezwalać na żadne pokoje, ustaw
channels.matrix.groupPolicy: "disabled"(lub pozostaw pustą listę dozwolonych). - Klucz legacy:
channels.matrix.rooms(taki sam kształt jakgroups).
Wątki
- Odpowiedzi w wątkach są obsługiwane.
channels.matrix.threadReplieskontroluje, czy odpowiedzi pozostają w wątkach:off,inbound(domyślnie),always
channels.matrix.replyToModekontroluje metadane reply-to, gdy odpowiedź nie jest w wątku:off(domyślnie),first,all
Możliwości
| Funkcja | Status |
|---|---|
| Wiadomości bezpośrednie | ✅ Obsługiwane |
| Pokoje | ✅ Obsługiwane |
| Wątki | ✅ Obsługiwane |
| Media | ✅ Obsługiwane |
| E2EE | ✅ Obsługiwane (wymagany moduł crypto) |
| Reakcje | ✅ Obsługiwane (wysyłanie/odczyt przez narzędzia) |
| Ankiety | ✅ Wysyłanie obsługiwane; przychodzące starty ankiet konwertowane do tekstu (odpowiedzi/zakończenia ignorowane) |
| Lokalizacja | ✅ Obsługiwane (URI geo; wysokość ignorowana) |
| Polecenia natywne | ✅ Obsługiwane |
Rozwiązywanie problemów
Najpierw uruchom tę drabinę poleceń:- Zalogowany, ale wiadomości z pokoi są ignorowane: pokój zablokowany przez
groupPolicylub listę dozwolonych pokoi. - DM-y ignorowane: nadawca oczekuje na zatwierdzenie, gdy
channels.matrix.dm.policy="pairing". - Problemy z zaszyfrowanymi pokojami: brak obsługi crypto lub niezgodność ustawień szyfrowania.
Referencja konfiguracji (Matrix)
Pełna konfiguracja: Configuration Opcje dostawcy:channels.matrix.enabled: włącz/wyłącz uruchamianie kanału.channels.matrix.homeserver: URL homeservera.channels.matrix.userId: ID użytkownika Matrix (opcjonalne przy tokenie dostępu).channels.matrix.accessToken: token dostępu.channels.matrix.password: hasło do logowania (token jest zapisywany).channels.matrix.deviceName: nazwa wyświetlana urządzenia.channels.matrix.encryption: włącz E2EE (domyślnie: false).channels.matrix.initialSyncLimit: limit początkowej synchronizacji.channels.matrix.threadReplies:off | inbound | always(domyślnie: inbound).channels.matrix.textChunkLimit: rozmiar fragmentów tekstu wychodzącego (znaki).channels.matrix.chunkMode:length(domyślnie) lubnewlinew celu dzielenia po pustych liniach (granice akapitów) przed dzieleniem według długości.channels.matrix.dm.policy:pairing | allowlist | open | disabled(domyślnie: parowanie).channels.matrix.dm.allowFrom: lista dozwolonych DM (pełne ID użytkowników Matrix).openwymaga"*". Kreator rozwiązuje nazwy do ID, gdy to możliwe.channels.matrix.groupPolicy:allowlist | open | disabled(domyślnie: lista dozwolonych).channels.matrix.groupAllowFrom: dozwoleni nadawcy dla wiadomości grupowych (pełne ID użytkowników Matrix).channels.matrix.allowlistOnly: wymuś reguły list dozwolonych dla DM-ów i pokoi.channels.matrix.groups: lista dozwolonych grup + mapa ustawień per pokój.channels.matrix.rooms: legacy lista dozwolonych grup/konfiguracja.channels.matrix.replyToMode: tryb reply-to dla wątków/tagów.channels.matrix.mediaMaxMb: limit mediów przychodzących/wychodzących (MB).channels.matrix.autoJoin: obsługa zaproszeń (always | allowlist | off, domyślnie: zawsze).channels.matrix.autoJoinAllowlist: dozwolone ID/aliasy pokoi dla automatycznego dołączania.channels.matrix.accounts: konfiguracja wielu kont kluczowana identyfikatorem konta (każde konto dziedziczy ustawienia z najwyższego poziomu).channels.matrix.actions: bramkowanie narzędzi per akcja (reakcje/wiadomości/piny/memberInfo/channelInfo).