Installieren
Installieren Sie Mattermost, bevor Sie den Channel konfigurieren:- npm-Registry
- Lokaler Checkout
Schnelle Einrichtung
Sicherstellen, dass das Plugin verfügbar ist
Installieren Sie
@openclaw/mattermost mit dem obigen Befehl und starten Sie anschließend den Gateway neu, falls er bereits ausgeführt wird.Native Slash-Befehle
Native Slash-Befehle sind optional. Wenn sie aktiviert sind, registriert OpenClawoc_*-Slash-Befehle über die Mattermost-API und empfängt Callback-POSTs auf dem Gateway-HTTP-Server.
Hinweise zum Verhalten
Hinweise zum Verhalten
native: "auto"ist für Mattermost standardmäßig deaktiviert. Setzen Sienative: true, um es zu aktivieren.- Wenn
callbackUrlweggelassen wird, leitet OpenClaw eine URL aus Gateway-Host/Port +callbackPathab. - Für Multi-Account-Einrichtungen kann
commandsauf oberster Ebene oder unterchannels.mattermost.accounts.<id>.commandsgesetzt werden (Kontowerte überschreiben Felder auf oberster Ebene). - Befehls-Callbacks werden mit den pro Befehl zurückgegebenen Token validiert, die Mattermost zurückgibt, wenn OpenClaw
oc_*-Befehle registriert. - OpenClaw aktualisiert die aktuelle Mattermost-Befehlsregistrierung, bevor jeder Callback akzeptiert wird, sodass veraltete Token von gelöschten oder neu generierten Slash-Befehlen ohne Gateway-Neustart nicht mehr akzeptiert werden.
- Die Callback-Validierung schlägt geschlossen fehl, wenn die Mattermost-API nicht bestätigen kann, dass der Befehl noch aktuell ist; fehlgeschlagene Validierungen werden kurz zwischengespeichert, gleichzeitige Lookups werden zusammengeführt, und Starts frischer Lookups werden pro Befehl ratenbegrenzt, um Wiedergabedruck zu begrenzen.
- Slash-Callbacks schlagen geschlossen fehl, wenn die Registrierung fehlgeschlagen ist, der Start nur teilweise erfolgreich war oder das Callback-Token nicht mit dem registrierten Token des aufgelösten Befehls übereinstimmt (ein für einen Befehl gültiges Token kann die Upstream-Validierung für einen anderen Befehl nicht erreichen).
Erreichbarkeitsanforderung
Erreichbarkeitsanforderung
Der Callback-Endpunkt muss vom Mattermost-Server erreichbar sein.
- Setzen Sie
callbackUrlnicht auflocalhost, es sei denn, Mattermost läuft auf demselben Host/in demselben Netzwerk-Namespace wie OpenClaw. - Setzen Sie
callbackUrlnicht auf Ihre Mattermost-Basis-URL, es sei denn, diese URL leitet/api/channels/mattermost/commandper Reverse Proxy an OpenClaw weiter. - Eine schnelle Prüfung ist
curl https://<gateway-host>/api/channels/mattermost/command; ein GET sollte von OpenClaw405 Method Not Allowedzurückgeben, nicht404.
Mattermost-Egress-Allowlist
Mattermost-Egress-Allowlist
Wenn Ihr Callback private/Tailnet-/interne Adressen ansteuert, setzen Sie Mattermost
ServiceSettings.AllowedUntrustedInternalConnections so, dass der Callback-Host/die Callback-Domain enthalten ist.Verwenden Sie Host-/Domain-Einträge, keine vollständigen URLs.- Gut:
gateway.tailnet-name.ts.net - Schlecht:
https://gateway.tailnet-name.ts.net
Umgebungsvariablen (Standardkonto)
Setzen Sie diese auf dem Gateway-Host, wenn Sie Umgebungsvariablen bevorzugen:MATTERMOST_BOT_TOKEN=...MATTERMOST_URL=https://chat.example.com
Umgebungsvariablen gelten nur für das Standardkonto (
default). Andere Konten müssen Konfigurationswerte verwenden.MATTERMOST_URL kann nicht aus einer Workspace-.env gesetzt werden; siehe Workspace-.env-Dateien.Chat-Modi
Mattermost antwortet automatisch auf DMs. Das Channel-Verhalten wird durchchatmode gesteuert:
- oncall (Standard)
- onmessage
- onchar
Nur antworten, wenn in Channels per @ erwähnt.
oncharreagiert weiterhin auf explizite @Erwähnungen.channels.mattermost.requireMentionwird für Legacy-Konfigurationen berücksichtigt, aberchatmodewird bevorzugt.- Nachdem der Bot in einem Channel-Thread eine sichtbare Antwort gesendet hat, werden spätere Nachrichten im selben Thread ohne neue @Erwähnung oder
onchar-Präfix beantwortet, sodass mehrstufige Thread-Unterhaltungen weiterlaufen. Die Teilnahme wird für 7 Tage Thread-Inaktivität gespeichert (bei jeder Antwort aufgefrischt) und bleibt über Gateway-Neustarts hinweg bestehen. Threads, die der Bot nur beobachtet hat, sind nicht betroffen; starten Sie eine neue Top-Level-Nachricht, um wieder eine explizite Erwähnung zu verlangen.
Threading und Sitzungen
Verwenden Siechannels.mattermost.replyToMode, um zu steuern, ob Channel- und Gruppenantworten im Haupt-Channel bleiben oder einen Thread unter dem auslösenden Post starten.
off(Standard): nur in einem Thread antworten, wenn der eingehende Post bereits in einem ist.first: bei Top-Level-Channel-/Gruppen-Posts einen Thread unter diesem Post starten und die Unterhaltung an eine Thread-bezogene Sitzung weiterleiten.all: heute dasselbe Verhalten wiefirstfür Mattermost.- Direktnachrichten ignorieren diese Einstellung und bleiben ohne Thread.
- Thread-bezogene Sitzungen verwenden die ID des auslösenden Posts als Thread-Stamm.
firstundallsind derzeit äquivalent, weil Folge-Chunks und Medien im selben Thread fortgesetzt werden, sobald Mattermost einen Thread-Stamm hat.
Zugriffskontrolle (DMs)
- Standard:
channels.mattermost.dmPolicy = "pairing"(unbekannte Absender erhalten einen Kopplungscode). - Genehmigen über:
openclaw pairing list mattermostopenclaw pairing approve mattermost <CODE>
- Öffentliche DMs:
channels.mattermost.dmPolicy="open"pluschannels.mattermost.allowFrom=["*"]. channels.mattermost.allowFromakzeptiertaccessGroup:<name>-Einträge. Siehe Zugriffsgruppen.
Channels (Gruppen)
- Standard:
channels.mattermost.groupPolicy = "allowlist"(erwähnungsgesteuert). - Absender mit
channels.mattermost.groupAllowFromerlauben (Benutzer-IDs empfohlen). channels.mattermost.groupAllowFromakzeptiertaccessGroup:<name>-Einträge. Siehe Zugriffsgruppen.- Erwähnungsüberschreibungen pro Channel befinden sich unter
channels.mattermost.groups.<channelId>.requireMentionoderchannels.mattermost.groups["*"].requireMentionals Standardwert. @username-Abgleich ist veränderlich und nur aktiviert, wennchannels.mattermost.dangerouslyAllowNameMatching: true.- Offene Channels:
channels.mattermost.groupPolicy="open"(erwähnungsgesteuert). - Laufzeithinweis: Wenn
channels.mattermostvollständig fehlt, fällt die Laufzeit für Gruppenprüfungen aufgroupPolicy="allowlist"zurück (auch wennchannels.defaults.groupPolicygesetzt ist).
Ziele für ausgehende Zustellung
Verwenden Sie diese Zielformate mitopenclaw message send oder Cron/Webhooks:
channel:<id>für einen Channeluser:<id>für eine DM@usernamefür eine DM (über die Mattermost-API aufgelöst)
DM-Channel-Wiederholung
Wenn OpenClaw an ein Mattermost-DM-Ziel sendet und zuerst den direkten Channel auflösen muss, wiederholt es vorübergehende Fehler bei der Erstellung des direkten Channels standardmäßig. Verwenden Siechannels.mattermost.dmChannelRetry, um dieses Verhalten global für das Mattermost-Plugin anzupassen, oder channels.mattermost.accounts.<id>.dmChannelRetry für ein Konto.
- Dies gilt nur für die Erstellung von DM-Channels (
/api/v4/channels/direct), nicht für jeden Mattermost-API-Aufruf. - Wiederholungen gelten für vorübergehende Fehler wie Ratenlimits, 5xx-Antworten sowie Netzwerk- oder Timeout-Fehler.
- 4xx-Clientfehler außer
429werden als dauerhaft behandelt und nicht erneut versucht.
Preview-Streaming
Mattermost streamt Denkprozesse, Tool-Aktivität und Teilantworttext in einen einzelnen Entwurfsvorschau-Post, der direkt finalisiert wird, sobald die endgültige Antwort sicher gesendet werden kann. Die Vorschau wird auf derselben Post-ID aktualisiert, statt den Channel mit Nachrichten pro Chunk zu fluten. Medien-/Fehler-Endzustände brechen ausstehende Vorschau-Bearbeitungen ab und verwenden normale Zustellung, statt einen wegwerfbaren Vorschau-Post zu flushen. Aktivieren überchannels.mattermost.streaming:
Streaming-Modi
Streaming-Modi
partialist die übliche Wahl: ein Vorschau-Post, der bearbeitet wird, während die Antwort wächst, und dann mit der vollständigen Antwort finalisiert wird.blockverwendet Entwurfs-Chunks im Append-Stil innerhalb des Vorschau-Posts.progresszeigt während der Generierung eine Statusvorschau und postet die endgültige Antwort erst nach Abschluss.offdeaktiviert Preview-Streaming.
Hinweise zum Streaming-Verhalten
Hinweise zum Streaming-Verhalten
- Wenn der Stream nicht direkt finalisiert werden kann (zum Beispiel weil der Post während des Streams gelöscht wurde), fällt OpenClaw auf das Senden eines frischen finalen Posts zurück, damit die Antwort nie verloren geht.
- Payloads, die nur Denkprozesse enthalten, werden aus Channel-Posts unterdrückt, einschließlich Text, der als
> Thinking-Blockquote eintrifft. Setzen Sie/reasoning on, um Denkprozesse in anderen Oberflächen zu sehen; der finale Mattermost-Post enthält nur die Antwort. - Siehe Streaming für die Channel-Mapping-Matrix.
Reaktionen (Nachrichtentool)
- Verwenden Sie
message action=reactmitchannel=mattermost. messageIdist die Mattermost-Post-ID.emojiakzeptiert Namen wiethumbsupoder:+1:(Doppelpunkte sind optional).- Setzen Sie
remove=true(boolesch), um eine Reaktion zu entfernen. - Ereignisse zum Hinzufügen/Entfernen von Reaktionen werden als Systemereignisse an die geroutete Agentensitzung weitergeleitet.
channels.mattermost.actions.reactions: Reaktionsaktionen aktivieren/deaktivieren (standardmäßig true).- Überschreibung pro Konto:
channels.mattermost.accounts.<id>.actions.reactions.
Interaktive Buttons (Nachrichtentool)
Senden Sie Nachrichten mit anklickbaren Buttons. Wenn ein Benutzer auf einen Button klickt, erhält der Agent die Auswahl und kann antworten. Normale Agent-Antworten können auch semantischepresentation-Payloads enthalten. OpenClaw rendert Value-Schaltflächen als interaktive Mattermost-Schaltflächen, hält URL-Schaltflächen im Nachrichtentext sichtbar und stuft Auswahlmenüs zu lesbarem Text herab.
Aktivieren Sie Schaltflächen, indem Sie inlineButtons zu den Channel-Capabilities hinzufügen:
message action=send mit einem buttons-Parameter. Schaltflächen sind ein 2D-Array (Zeilen von Schaltflächen):
Anzeigebezeichnung.
Wert, der beim Klicken zurückgesendet wird (als Aktions-ID verwendet).
Schaltflächenstil.
Buttons replaced with confirmation
Alle Schaltflächen werden durch eine Bestätigungszeile ersetzt (z. B. ”✓ Yes selected by @user”).
Implementation notes
Implementation notes
- Schaltflächen-Callbacks verwenden HMAC-SHA256-Verifizierung (automatisch, keine Konfiguration erforderlich).
- Mattermost entfernt Callback-Daten aus seinen API-Antworten (Sicherheitsfunktion), daher werden beim Klicken alle Schaltflächen entfernt - eine teilweise Entfernung ist nicht möglich.
- Aktions-IDs, die Bindestriche oder Unterstriche enthalten, werden automatisch bereinigt (Mattermost-Routing-Einschränkung).
Config and reachability
Config and reachability
channels.mattermost.capabilities: Array von Capability-Strings. Fügen Sie"inlineButtons"hinzu, um die Beschreibung des Schaltflächen-Tools im Agent-System-Prompt zu aktivieren.channels.mattermost.interactions.callbackBaseUrl: optionale externe Basis-URL für Schaltflächen-Callbacks (zum Beispielhttps://gateway.example.com). Verwenden Sie dies, wenn Mattermost den Gateway nicht direkt über dessen Bind-Host erreichen kann.- In Multi-Account-Setups können Sie dasselbe Feld auch unter
channels.mattermost.accounts.<id>.interactions.callbackBaseUrlsetzen. - Wenn
interactions.callbackBaseUrlausgelassen wird, leitet OpenClaw die Callback-URL ausgateway.customBindHost+gateway.portab und fällt dann aufhttp://localhost:<port>zurück. - Erreichbarkeitsregel: Die Schaltflächen-Callback-URL muss vom Mattermost-Server erreichbar sein.
localhostfunktioniert nur, wenn Mattermost und OpenClaw auf demselben Host/in demselben Netzwerk-Namespace ausgeführt werden. - Wenn Ihr Callback-Ziel privat/tailnet/intern ist, fügen Sie seinen Host bzw. seine Domain zu Mattermost
ServiceSettings.AllowedUntrustedInternalConnectionshinzu.
Direkte API-Integration (externe Skripte)
Externe Skripte und Webhooks können Schaltflächen direkt über die Mattermost-REST-API posten, statt über dasmessage-Tool des Agent zu gehen. Verwenden Sie nach Möglichkeit buildButtonAttachments() aus dem Plugin; wenn Sie rohes JSON posten, befolgen Sie diese Regeln:
Payload-Struktur:
Derive the secret from the bot token
HMAC-SHA256(key="openclaw-mattermost-interactions", data=botToken)Serialize with sorted keys
Serialisieren Sie mit sortierten Schlüsseln und ohne Leerzeichen (der Gateway verwendet
JSON.stringify mit sortierten Schlüsseln, wodurch kompakte Ausgabe entsteht).Common HMAC pitfalls
Common HMAC pitfalls
- Pythons
json.dumpsfügt standardmäßig Leerzeichen hinzu ({"key": "val"}). Verwenden Sieseparators=(",", ":"), um der kompakten JavaScript-Ausgabe ({"key":"val"}) zu entsprechen. - Signieren Sie immer alle Kontextfelder (minus
_token). Der Gateway entfernt_tokenund signiert dann alles, was übrig bleibt. Das Signieren einer Teilmenge führt zu einem stillen Verifizierungsfehler. - Verwenden Sie
sort_keys=True- der Gateway sortiert Schlüssel vor dem Signieren, und Mattermost kann Kontextfelder beim Speichern der Payload neu anordnen. - Leiten Sie das Secret aus dem Bot-Token ab (deterministisch), nicht aus zufälligen Bytes. Das Secret muss in dem Prozess, der Schaltflächen erstellt, und im Gateway, der verifiziert, identisch sein.
Verzeichnisadapter
Das Mattermost-Plugin enthält einen Verzeichnisadapter, der Channel- und Benutzernamen über die Mattermost-API auflöst. Dies ermöglicht#channel-name- und @username-Ziele in openclaw message send sowie Cron-/Webhook-Zustellungen.
Es ist keine Konfiguration erforderlich - der Adapter verwendet das Bot-Token aus der Account-Konfiguration.
Multi-Account
Mattermost unterstützt mehrere Accounts unterchannels.mattermost.accounts:
Fehlerbehebung
No replies in channels
No replies in channels
Stellen Sie sicher, dass sich der Bot im Channel befindet, und erwähnen Sie ihn (oncall), verwenden Sie ein Trigger-Präfix (onchar), oder setzen Sie
chatmode: "onmessage".Auth or multi-account errors
Auth or multi-account errors
- Prüfen Sie das Bot-Token, die Basis-URL und ob der Account aktiviert ist.
- Multi-Account-Probleme: Env-Vars gelten nur für den
default-Account.
Native slash commands fail
Native slash commands fail
Unauthorized: invalid command token.: OpenClaw hat das Callback-Token nicht akzeptiert. Typische Ursachen:- Die Slash-Command-Registrierung ist fehlgeschlagen oder wurde beim Start nur teilweise abgeschlossen
- Der Callback trifft den falschen Gateway/Account
- Mattermost hat noch alte Commands, die auf ein früheres Callback-Ziel zeigen
- Der Gateway wurde neu gestartet, ohne Slash Commands erneut zu aktivieren
- Wenn native Slash Commands nicht mehr funktionieren, prüfen Sie die Logs auf
mattermost: failed to register slash commandsodermattermost: native slash commands enabled but no commands could be registered. - Wenn
callbackUrlausgelassen wird und Logs warnen, dass der Callback zuhttp://127.0.0.1:18789/...aufgelöst wurde, ist diese URL wahrscheinlich nur erreichbar, wenn Mattermost auf demselben Host/in demselben Netzwerk-Namespace wie OpenClaw läuft. Setzen Sie stattdessen eine explizite, extern erreichbarecommands.callbackUrl.
Verwandt
- Channel-Routing - Session-Routing für Nachrichten
- Channel-Übersicht - alle unterstützten Channels
- Gruppen - Gruppenchat-Verhalten und Mention-Gating
- Pairing - DM-Authentifizierung und Pairing-Ablauf
- Sicherheit - Zugriffsmodell und Härtung