Status: Plugin do pobrania (token bota + zdarzenia WebSocket). Obsługiwane są kanały, grupy i wiadomości bezpośrednie. Mattermost to platforma do komunikacji zespołowej możliwa do samodzielnego hostowania; szczegóły produktu i pliki do pobrania znajdziesz na oficjalnej stronie mattermost.com.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Instalacja
Zainstaluj Mattermost przed skonfigurowaniem kanału:- rejestr npm
- Lokalne repozytorium robocze
Szybka konfiguracja
Upewnij się, że Plugin jest dostępny
Obecne pakietowane wydania OpenClaw już go zawierają. Starsze/niestandardowe instalacje mogą dodać go ręcznie przy użyciu powyższych poleceń.
Natywne polecenia slash
Natywne polecenia slash są opcjonalne. Po włączeniu OpenClaw rejestruje polecenia slashoc_* przez API Mattermost i odbiera wywołania zwrotne POST na serwerze HTTP gateway.
Uwagi o zachowaniu
Uwagi o zachowaniu
native: "auto"jest domyślnie wyłączone dla Mattermost. Ustawnative: true, aby włączyć.- Jeśli
callbackUrlzostanie pominięty, OpenClaw wyprowadzi go z hosta/portu gateway +callbackPath. - W konfiguracjach z wieloma kontami
commandsmożna ustawić na najwyższym poziomie albo podchannels.mattermost.accounts.<id>.commands(wartości konta zastępują pola z najwyższego poziomu). - Wywołania zwrotne poleceń są weryfikowane przy użyciu tokenów poszczególnych poleceń zwróconych przez Mattermost, gdy OpenClaw rejestruje polecenia
oc_*. - OpenClaw odświeża bieżącą rejestrację poleceń Mattermost przed zaakceptowaniem każdego wywołania zwrotnego, więc przestarzałe tokeny z usuniętych lub ponownie wygenerowanych poleceń slash przestają być akceptowane bez restartu gateway.
- Walidacja wywołania zwrotnego kończy się odmową, jeśli API Mattermost nie może potwierdzić, że polecenie jest nadal aktualne; nieudane walidacje są krótko buforowane, równoległe wyszukiwania są scalane, a rozpoczęcia świeżych wyszukiwań są limitowane per polecenie, aby ograniczyć presję ponowień.
- Wywołania zwrotne slash kończą się odmową, gdy rejestracja się nie powiodła, uruchomienie było częściowe lub token wywołania zwrotnego nie pasuje do zarejestrowanego tokenu rozwiązanego polecenia (token poprawny dla jednego polecenia nie może dotrzeć do walidacji upstream dla innego polecenia).
Wymóg osiągalności
Wymóg osiągalności
Punkt końcowy wywołania zwrotnego musi być osiągalny z serwera Mattermost.
- Nie ustawiaj
callbackUrlnalocalhost, chyba że Mattermost działa na tym samym hoście/przestrzeni nazw sieci co OpenClaw. - Nie ustawiaj
callbackUrlna bazowy URL Mattermost, chyba że ten URL reverse-proxy przekazuje/api/channels/mattermost/commanddo OpenClaw. - Szybki test to
curl https://<gateway-host>/api/channels/mattermost/command; żądanie GET powinno zwrócić z OpenClaw405 Method Not Allowed, a nie404.
Lista dozwolonych połączeń wychodzących Mattermost
Lista dozwolonych połączeń wychodzących Mattermost
Jeśli wywołanie zwrotne wskazuje adresy prywatne/tailnet/wewnętrzne, ustaw Mattermost
ServiceSettings.AllowedUntrustedInternalConnections tak, aby zawierało host/domenę wywołania zwrotnego.Używaj wpisów hosta/domeny, nie pełnych URL-i.- Poprawnie:
gateway.tailnet-name.ts.net - Błędnie:
https://gateway.tailnet-name.ts.net
Zmienne środowiskowe (konto domyślne)
Ustaw je na hoście gateway, jeśli wolisz zmienne środowiskowe:MATTERMOST_BOT_TOKEN=...MATTERMOST_URL=https://chat.example.com
Zmienne środowiskowe dotyczą tylko konta domyślnego (
default). Inne konta muszą używać wartości konfiguracyjnych.MATTERMOST_URL nie można ustawić z pliku .env obszaru roboczego; zobacz Pliki .env obszaru roboczego.Tryby czatu
Mattermost automatycznie odpowiada na wiadomości bezpośrednie. Zachowanie kanału jest kontrolowane przezchatmode:
- oncall (domyślny)
- onmessage
- onchar
Odpowiadaj w kanałach tylko po @wzmiance.
oncharnadal odpowiada na jawne @wzmianki.channels.mattermost.requireMentionjest honorowane w starszych konfiguracjach, ale preferowane jestchatmode.
Wątki i sesje
Użyjchannels.mattermost.replyToMode, aby kontrolować, czy odpowiedzi w kanałach i grupach pozostają w głównym kanale, czy rozpoczynają wątek pod postem wyzwalającym.
off(domyślnie): odpowiadaj w wątku tylko wtedy, gdy przychodzący post już się w nim znajduje.first: dla postów najwyższego poziomu w kanałach/grupach rozpocznij wątek pod tym postem i skieruj rozmowę do sesji o zakresie wątku.all: obecnie w Mattermost takie samo zachowanie jakfirst.- Wiadomości bezpośrednie ignorują to ustawienie i pozostają bez wątków.
- Sesje o zakresie wątku używają identyfikatora posta wyzwalającego jako korzenia wątku.
firstiallsą obecnie równoważne, ponieważ gdy Mattermost ma korzeń wątku, kolejne fragmenty i media są kontynuowane w tym samym wątku.
Kontrola dostępu (wiadomości bezpośrednie)
- Domyślnie:
channels.mattermost.dmPolicy = "pairing"(nieznani nadawcy otrzymują kod parowania). - Zatwierdź przez:
openclaw pairing list mattermostopenclaw pairing approve mattermost <CODE>
- Publiczne wiadomości bezpośrednie:
channels.mattermost.dmPolicy="open"pluschannels.mattermost.allowFrom=["*"]. channels.mattermost.allowFromakceptuje wpisyaccessGroup:<name>. Zobacz Grupy dostępu.
Kanały (grupy)
- Domyślnie:
channels.mattermost.groupPolicy = "allowlist"(ograniczone wzmiankami). - Dopuszczaj nadawców przez
channels.mattermost.groupAllowFrom(zalecane identyfikatory użytkowników). channels.mattermost.groupAllowFromakceptuje wpisyaccessGroup:<name>. Zobacz Grupy dostępu.- Nadpisania wzmianek per kanał znajdują się pod
channels.mattermost.groups.<channelId>.requireMentionalbochannels.mattermost.groups["*"].requireMentionjako wartość domyślna. - Dopasowywanie
@usernamejest zmienne i włączone tylko wtedy, gdychannels.mattermost.dangerouslyAllowNameMatching: true. - Otwarte kanały:
channels.mattermost.groupPolicy="open"(ograniczone wzmiankami). - Uwaga dotycząca środowiska uruchomieniowego: jeśli
channels.mattermostcałkowicie brakuje, środowisko uruchomieniowe wraca dogroupPolicy="allowlist"dla sprawdzeń grup (nawet jeśli ustawionochannels.defaults.groupPolicy).
Cele dostarczania wychodzącego
Używaj tych formatów celów zopenclaw message send albo cron/webhooks:
channel:<id>dla kanałuuser:<id>dla wiadomości bezpośredniej@usernamedla wiadomości bezpośredniej (rozwiązywane przez API Mattermost)
Ponawianie kanału wiadomości bezpośrednich
Gdy OpenClaw wysyła do celu wiadomości bezpośredniej Mattermost i musi najpierw rozwiązać kanał bezpośredni, domyślnie ponawia przejściowe błędy tworzenia kanału bezpośredniego. Użyjchannels.mattermost.dmChannelRetry, aby dostroić to zachowanie globalnie dla Plugin Mattermost, albo channels.mattermost.accounts.<id>.dmChannelRetry dla jednego konta.
- Dotyczy to tylko tworzenia kanału wiadomości bezpośrednich (
/api/v4/channels/direct), nie każdego wywołania API Mattermost. - Ponowienia dotyczą przejściowych błędów, takich jak limity szybkości, odpowiedzi 5xx oraz błędy sieci lub przekroczenia czasu.
- Błędy klienta 4xx inne niż
429są traktowane jako trwałe i nie są ponawiane.
Strumieniowanie podglądu
Mattermost strumieniuje myślenie, aktywność narzędzi i częściowy tekst odpowiedzi do pojedynczego roboczego posta podglądu, który jest finalizowany w miejscu, gdy końcową odpowiedź można bezpiecznie wysłać. Podgląd aktualizuje się na tym samym identyfikatorze posta zamiast zasypywać kanał wiadomościami dla każdego fragmentu. Końcowe odpowiedzi z mediami/błędami anulują oczekujące edycje podglądu i używają normalnego dostarczania zamiast opróżniać tymczasowy post podglądu. Włącz przezchannels.mattermost.streaming:
Tryby strumieniowania
Tryby strumieniowania
partialto zwykły wybór: jeden post podglądu, który jest edytowany w miarę narastania odpowiedzi, a następnie finalizowany z pełną odpowiedzią.blockużywa roboczych fragmentów dopisywanych w stylu append wewnątrz posta podglądu.progresspokazuje podgląd statusu podczas generowania i publikuje końcową odpowiedź dopiero po zakończeniu.offwyłącza strumieniowanie podglądu.
Uwagi o zachowaniu strumieniowania
Uwagi o zachowaniu strumieniowania
- Jeśli strumienia nie można sfinalizować w miejscu (na przykład post został usunięty w trakcie strumienia), OpenClaw wraca do wysłania świeżego posta końcowego, aby odpowiedź nigdy nie została utracona.
- Ładunki zawierające wyłącznie rozumowanie są pomijane w postach kanału, w tym tekst przychodzący jako cytat blokowy
> Reasoning:. Ustaw/reasoning on, aby widzieć myślenie w innych powierzchniach; końcowy post Mattermost zachowuje tylko odpowiedź. - Zobacz Strumieniowanie, aby poznać macierz mapowania kanałów.
Reakcje (narzędzie wiadomości)
- Użyj
message action=reactzchannel=mattermost. messageIdto identyfikator posta Mattermost.emojiakceptuje nazwy takie jakthumbsupalbo:+1:(dwukropki są opcjonalne).- Ustaw
remove=true(boolean), aby usunąć reakcję. - Zdarzenia dodania/usunięcia reakcji są przekazywane jako zdarzenia systemowe do skierowanej sesji agenta.
channels.mattermost.actions.reactions: włącz/wyłącz akcje reakcji (domyślnie true).- Nadpisanie per konto:
channels.mattermost.accounts.<id>.actions.reactions.
Przyciski interaktywne (narzędzie wiadomości)
Wysyłaj wiadomości z klikalnymi przyciskami. Gdy użytkownik kliknie przycisk, agent otrzymuje wybór i może odpowiedzieć. Włącz przyciski, dodającinlineButtons do możliwości kanału:
message action=send z parametrem buttons. Przyciski są tablicą 2D (wiersze przycisków):
Etykieta wyświetlana.
Wartość odsyłana po kliknięciu (używana jako identyfikator akcji).
Styl przycisku.
Przyciski zastąpione potwierdzeniem
Wszystkie przyciski są zastępowane wierszem potwierdzenia (np. „✓ Tak wybrane przez @user”).
Uwagi implementacyjne
Uwagi implementacyjne
- Wywołania zwrotne przycisków używają weryfikacji HMAC-SHA256 (automatycznie, bez wymaganej konfiguracji).
- Mattermost usuwa dane wywołania zwrotnego ze swoich odpowiedzi API (funkcja bezpieczeństwa), więc wszystkie przyciski są usuwane po kliknięciu - częściowe usunięcie nie jest możliwe.
- Identyfikatory akcji zawierające myślniki lub podkreślenia są automatycznie oczyszczane (ograniczenie routingu Mattermost).
Konfiguracja i osiągalność
Konfiguracja i osiągalność
channels.mattermost.capabilities: tablica ciągów capabilities. Dodaj"inlineButtons", aby włączyć opis narzędzia przycisków w prompcie systemowym agenta.channels.mattermost.interactions.callbackBaseUrl: opcjonalny zewnętrzny bazowy URL dla wywołań zwrotnych przycisków (na przykładhttps://gateway.example.com). Użyj tego, gdy Mattermost nie może dotrzeć do gateway pod jego hostem powiązania bezpośrednio.- W konfiguracjach z wieloma kontami możesz także ustawić to samo pole pod
channels.mattermost.accounts.<id>.interactions.callbackBaseUrl. - Jeśli
interactions.callbackBaseUrlzostanie pominięte, OpenClaw wyprowadza URL wywołania zwrotnego zgateway.customBindHost+gateway.port, a następnie przechodzi awaryjnie nahttp://localhost:<port>. - Reguła osiągalności: URL wywołania zwrotnego przycisku musi być osiągalny z serwera Mattermost.
localhostdziała tylko wtedy, gdy Mattermost i OpenClaw działają na tym samym hoście/przestrzeni nazw sieci. - Jeśli cel wywołania zwrotnego jest prywatny/tailnet/wewnętrzny, dodaj jego host/domenę do
ServiceSettings.AllowedUntrustedInternalConnectionsw Mattermost.
Bezpośrednia integracja API (skrypty zewnętrzne)
Zewnętrzne skrypty i webhooki mogą publikować przyciski bezpośrednio przez Mattermost REST API zamiast przechodzić przez narzędziemessage agenta. Gdy to możliwe, używaj buildButtonAttachments() z pluginu; jeśli publikujesz surowy JSON, przestrzegaj tych reguł:
Struktura payloadu:
Serializuj z posortowanymi kluczami
Serializuj z posortowanymi kluczami i bez spacji (Gateway używa
JSON.stringify z posortowanymi kluczami, co tworzy kompaktowe wyjście).Typowe pułapki HMAC
Typowe pułapki HMAC
- Pythonowe
json.dumpsdomyślnie dodaje spacje ({"key": "val"}). Użyjseparators=(",", ":"), aby dopasować kompaktowe wyjście JavaScriptu ({"key":"val"}). - Zawsze podpisuj wszystkie pola kontekstu (minus
_token). Gateway usuwa_token, a następnie podpisuje wszystko, co pozostaje. Podpisanie podzbioru powoduje cichą porażkę weryfikacji. - Użyj
sort_keys=True- Gateway sortuje klucze przed podpisaniem, a Mattermost może zmienić kolejność pól kontekstu podczas przechowywania payloadu. - Wyprowadź sekret z tokenu bota (deterministycznie), nie z losowych bajtów. Sekret musi być taki sam w procesie tworzącym przyciski i w Gateway, który je weryfikuje.
Adapter katalogu
Plugin Mattermost zawiera adapter katalogu, który rozwiązuje nazwy kanałów i użytkowników przez Mattermost API. Umożliwia to cele#channel-name i @username w openclaw message send oraz dostarczeniach cron/webhook.
Konfiguracja nie jest wymagana - adapter używa tokenu bota z konfiguracji konta.
Wiele kont
Mattermost obsługuje wiele kont podchannels.mattermost.accounts:
Rozwiązywanie problemów
Brak odpowiedzi w kanałach
Brak odpowiedzi w kanałach
Upewnij się, że bot jest w kanale i wspomnij go (oncall), użyj prefiksu wyzwalacza (onchar) albo ustaw
chatmode: "onmessage".Błędy uwierzytelniania lub wielu kont
Błędy uwierzytelniania lub wielu kont
- Sprawdź token bota, bazowy URL i czy konto jest włączone.
- Problemy z wieloma kontami: zmienne środowiskowe dotyczą tylko konta
default.
Natywne polecenia slash zawodzą
Natywne polecenia slash zawodzą
Unauthorized: invalid command token.: OpenClaw nie zaakceptował tokenu wywołania zwrotnego. Typowe przyczyny:- rejestracja polecenia slash nie powiodła się lub została tylko częściowo ukończona podczas uruchamiania
- wywołanie zwrotne trafia do niewłaściwego Gateway/konta
- Mattermost nadal ma stare polecenia wskazujące poprzedni cel wywołania zwrotnego
- Gateway został uruchomiony ponownie bez ponownej aktywacji poleceń slash
- Jeśli natywne polecenia slash przestaną działać, sprawdź logi pod kątem
mattermost: failed to register slash commandslubmattermost: native slash commands enabled but no commands could be registered. - Jeśli
callbackUrlzostanie pominięte, a logi ostrzegają, że wywołanie zwrotne rozwiązało się dohttp://127.0.0.1:18789/..., ten URL jest prawdopodobnie osiągalny tylko wtedy, gdy Mattermost działa na tym samym hoście/przestrzeni nazw sieci co OpenClaw. Zamiast tego ustaw jawne, zewnętrznie osiągalnecommands.callbackUrl.
Problemy z przyciskami
Problemy z przyciskami
- Przyciski pojawiają się jako białe pola: agent może wysyłać nieprawidłowo sformatowane dane przycisków. Sprawdź, czy każdy przycisk ma pola
texticallback_data. - Przyciski są renderowane, ale kliknięcia nic nie robią: sprawdź, czy
AllowedUntrustedInternalConnectionsw konfiguracji serwera Mattermost zawiera127.0.0.1 localhostoraz czyEnablePostActionIntegrationma wartośćtruew ServiceSettings. - Przyciski zwracają 404 po kliknięciu:
idprzycisku prawdopodobnie zawiera myślniki lub podkreślenia. Router akcji Mattermost psuje się na identyfikatorach niealfanumerycznych. Używaj tylko[a-zA-Z0-9]. - Logi Gateway pokazują
invalid _token: niezgodność HMAC. Sprawdź, czy podpisujesz wszystkie pola kontekstu (nie podzbiór), używasz posortowanych kluczy i kompaktowego JSON (bez spacji). Zobacz sekcję HMAC powyżej. - Logi Gateway pokazują
missing _token in context: pole_tokennie znajduje się w kontekście przycisku. Upewnij się, że jest uwzględniane podczas budowania payloadu integracji. - Potwierdzenie pokazuje surowy identyfikator zamiast nazwy przycisku:
context.action_idnie odpowiadaidprzycisku. Ustaw oba na tę samą oczyszczoną wartość. - Agent nie wie o przyciskach: dodaj
capabilities: ["inlineButtons"]do konfiguracji kanału Mattermost.
Powiązane
- Routing kanałów - routing sesji dla wiadomości
- Przegląd kanałów - wszystkie obsługiwane kanały
- Grupy - zachowanie czatu grupowego i bramkowanie wzmianek
- Parowanie - uwierzytelnianie DM i przepływ parowania
- Bezpieczeństwo - model dostępu i utwardzanie