Status: herunterladbares Plugin (Bot-Token + WebSocket-Ereignisse). Kanäle, Gruppen und DMs werden unterstützt. Mattermost ist eine selbst hostbare Team-Messaging-Plattform; Produktdetails und Downloads finden Sie auf der offiziellen Website unter 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.
Installieren
Installieren Sie Mattermost, bevor Sie den Kanal konfigurieren:- npm registry
- Local checkout
Schnelle Einrichtung
Sicherstellen, dass das Plugin verfügbar ist
Aktuelle paketierte OpenClaw-Releases enthalten es bereits. Ältere/angepasste Installationen können es mit den obigen Befehlen manuell hinzufügen.
Einen Mattermost-Bot erstellen
Erstellen Sie ein Mattermost-Bot-Konto und kopieren Sie den Bot-Token.
Native Slash-Befehle
Native Slash-Befehle sind Opt-in. Wenn sie aktiviert sind, registriert OpenClawoc_*-Slash-Befehle über die Mattermost-API und empfängt Callback-POSTs auf dem Gateway-HTTP-Server.
Verhaltenshinweise
Verhaltenshinweise
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. - Bei Setups mit mehreren Konten kann
commandsauf oberster Ebene oder unterchannels.mattermost.accounts.<id>.commandsfestgelegt werden (Kontowerte überschreiben Felder der obersten Ebene). - Befehls-Callbacks werden mit den pro Befehl geltenden Tokens validiert, die Mattermost zurückgibt, wenn OpenClaw
oc_*-Befehle registriert. - OpenClaw aktualisiert die aktuelle Mattermost-Befehlsregistrierung, bevor jeder Callback akzeptiert wird, sodass veraltete Tokens aus gelöschten oder neu generierten Slash-Befehlen nicht ohne Gateway-Neustart weiter 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 neue Lookup-Starts werden pro Befehl rate-limitiert, um Replay-Druck zu begrenzen.
- Slash-Callbacks schlagen geschlossen fehl, wenn die Registrierung fehlgeschlagen ist, der Start nur teilweise abgeschlossen wurde oder der Callback-Token nicht mit dem registrierten Token des aufgelösten Befehls übereinstimmt (ein Token, der für einen Befehl gültig ist, kann keine Upstream-Validierung für einen anderen Befehl 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 auf private/tailnet/interne Adressen zielt, 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 Kanalverhalten wird durchchatmode gesteuert:
- oncall (default)
- onmessage
- onchar
Nur antworten, wenn in Kanälen @erwähnt.
oncharantwortet weiterhin auf explizite @Erwähnungen.channels.mattermost.requireMentionwird für Legacy-Konfigurationen berücksichtigt, aberchatmodewird bevorzugt.
Threads und Sitzungen
Verwenden Siechannels.mattermost.replyToMode, um zu steuern, ob Kanal- und Gruppenantworten im Hauptkanal 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: Für Top-Level-Kanal-/Gruppen-Posts einen Thread unter diesem Post starten und die Unterhaltung an eine threadbezogene Sitzung weiterleiten.all: derzeit dasselbe Verhalten wiefirstfür Mattermost.- Direktnachrichten ignorieren diese Einstellung und bleiben ohne Thread.
- Threadbezogene Sitzungen verwenden die ID des auslösenden Posts als Thread-Root.
firstundallsind derzeit äquivalent, da Folge-Chunks und Medien in demselben Thread fortgesetzt werden, sobald Mattermost einen Thread-Root hat.
Zugriffskontrolle (DMs)
- Standard:
channels.mattermost.dmPolicy = "pairing"(unbekannte Absender erhalten einen Pairing-Code). - 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.
Kanäle (Gruppen)
- Standard:
channels.mattermost.groupPolicy = "allowlist"(erwähnungsgesteuert). - Absender mit
channels.mattermost.groupAllowFromauf die Allowlist setzen (Benutzer-IDs empfohlen). channels.mattermost.groupAllowFromakzeptiertaccessGroup:<name>-Einträge. Siehe Zugriffsgruppen.- Erwähnungsüberschreibungen pro Kanal befinden sich unter
channels.mattermost.groups.<channelId>.requireMentionoderchannels.mattermost.groups["*"].requireMentionals Standard. @username-Abgleich ist veränderlich und nur aktiviert, wennchannels.mattermost.dangerouslyAllowNameMatching: true.- Offene Kanäle:
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 Kanaluser:<id>für eine DM@usernamefür eine DM (über die Mattermost-API aufgelöst)
Wiederholung für DM-Kanal
Wenn OpenClaw an ein Mattermost-DM-Ziel sendet und zuerst den direkten Kanal auflösen muss, wiederholt es standardmäßig vorübergehende Fehler beim Erstellen des direkten Kanals. 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-Kanälen (
/api/v4/channels/direct), nicht für jeden Mattermost-API-Aufruf. - Wiederholungen gelten für vorübergehende Fehler wie Rate Limits, 5xx-Antworten sowie Netzwerk- oder Timeout-Fehler.
- 4xx-Clientfehler außer
429werden als dauerhaft behandelt und nicht wiederholt.
Preview-Streaming
Mattermost streamt Denken, Tool-Aktivität und partiellen Antworttext 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, anstatt den Kanal mit Nachrichten pro Chunk zu überfluten. Medien-/Fehler-Finals brechen ausstehende Vorschauänderungen ab und verwenden die normale Zustellung, statt einen Wegwerf-Vorschau-Post zu leeren. 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 anschließend 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 mitten im Stream gelöscht wurde), fällt OpenClaw darauf zurück, einen neuen finalen Post zu senden, damit die Antwort nie verloren geht.
- Reine Reasoning-Payloads werden aus Kanal-Posts unterdrückt, einschließlich Text, der als
> Reasoning:-Blockzitat eintrifft. Setzen Sie/reasoning on, um Denken in anderen Oberflächen zu sehen; der finale Mattermost-Post enthält nur die Antwort. - Siehe Streaming für die Channel-Mapping-Matrix.
Reaktionen (Message-Tool)
- 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 Agent-Sitzung weitergeleitet.
channels.mattermost.actions.reactions: Reaktionsaktionen aktivieren/deaktivieren (Standard true).- Überschreibung pro Konto:
channels.mattermost.accounts.<id>.actions.reactions.
Interaktive Buttons (Message-Tool)
Senden Sie Nachrichten mit anklickbaren Buttons. Wenn ein Benutzer auf einen Button klickt, erhält der Agent die Auswahl und kann antworten. Aktivieren Sie Buttons, indem SieinlineButtons zu den Kanalfähigkeiten hinzufügen:
message action=send mit einem buttons-Parameter. Buttons sind ein 2D-Array (Button-Zeilen):
Anzeigebezeichnung.
Wert, der beim Klicken zurückgesendet wird (wird als Aktions-ID verwendet).
Button-Stil.
Buttons durch Bestätigung ersetzt
Alle Buttons werden durch eine Bestätigungszeile ersetzt (z. B. ”✓ Yes selected by @user”).
Implementierungshinweise
Implementierungshinweise
- Button-Callbacks verwenden HMAC-SHA256-Verifizierung (automatisch, keine Konfiguration erforderlich).
- Mattermost entfernt Callback-Daten aus seinen API-Antworten (Sicherheitsfunktion), daher werden beim Klicken alle Buttons entfernt - partielles Entfernen ist nicht möglich.
- Aktions-IDs mit Bindestrichen oder Unterstrichen werden automatisch bereinigt (Mattermost-Routing-Einschränkung).
Konfiguration und Erreichbarkeit
Konfiguration und Erreichbarkeit
channels.mattermost.capabilities: Array von Capability-Strings. Fügen Sie"inlineButtons"hinzu, um die Beschreibung des Button-Tools im System-Prompt des Agenten zu aktivieren.channels.mattermost.interactions.callbackBaseUrl: optionale externe Basis-URL für Button-Callbacks (zum Beispielhttps://gateway.example.com). Verwenden Sie dies, wenn Mattermost den Gateway unter seinem Bind-Host nicht direkt erreichen kann.- In Multi-Account-Setups können Sie dasselbe Feld auch unter
channels.mattermost.accounts.<id>.interactions.callbackBaseUrlsetzen. - Wenn
interactions.callbackBaseUrlweggelassen wird, leitet OpenClaw die Callback-URL ausgateway.customBindHost+gateway.portab und fällt dann aufhttp://localhost:<port>zurück. - Erreichbarkeitsregel: Die Button-Callback-URL muss vom Mattermost-Server erreichbar sein.
localhostfunktioniert nur, wenn Mattermost und OpenClaw auf demselben Host/Netzwerk-Namespace ausgeführt werden. - Wenn Ihr Callback-Ziel privat/tailnet/intern ist, fügen Sie seinen Host/seine Domain zu Mattermost
ServiceSettings.AllowedUntrustedInternalConnectionshinzu.
Direkte API-Integration (externe Skripte)
Externe Skripte und Webhooks können Buttons direkt über die Mattermost-REST-API posten, statt über dasmessage-Tool des Agenten zu gehen. Verwenden Sie nach Möglichkeit buildButtonAttachments() aus dem Plugin; wenn Sie Raw-JSON posten, befolgen Sie diese Regeln:
Payload-Struktur:
Secret aus dem Bot-Token ableiten
HMAC-SHA256(key="openclaw-mattermost-interactions", data=botToken)Mit sortierten Schlüsseln serialisieren
Serialisieren Sie mit sortierten Schlüsseln und ohne Leerzeichen (der Gateway verwendet
JSON.stringify mit sortierten Schlüsseln, was kompakte Ausgabe erzeugt).Häufige HMAC-Fallstricke
Häufige HMAC-Fallstricke
- Pythons
json.dumpsfügt standardmäßig Leerzeichen hinzu ({"key": "val"}). Verwenden Sieseparators=(",", ":"), um zur kompakten Ausgabe von JavaScript zu passen ({"key":"val"}). - Signieren Sie immer alle Context-Felder (abzüglich
_token). Der Gateway entfernt_tokenund signiert dann alles Verbleibende. Das Signieren einer Teilmenge führt zu einem stillschweigenden Verifizierungsfehler. - Verwenden Sie
sort_keys=True- der Gateway sortiert Schlüssel vor dem Signieren, und Mattermost kann Context-Felder 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 Buttons erstellt, und im Gateway, der verifiziert, identisch sein.
Verzeichnisadapter
Das Mattermost-Plugin enthält einen Verzeichnisadapter, der Kanal- und Benutzernamen über die Mattermost-API auflöst. Dies ermöglicht Ziele wie#channel-name und @username in openclaw message send sowie in 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
Keine Antworten in Kanälen
Keine Antworten in Kanälen
Stellen Sie sicher, dass der Bot im Kanal ist, und erwähnen Sie ihn (oncall), verwenden Sie ein Trigger-Präfix (onchar), oder setzen Sie
chatmode: "onmessage".Authentifizierungs- oder Multi-Account-Fehler
Authentifizierungs- oder Multi-Account-Fehler
- 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-Befehle schlagen fehl
Native Slash-Befehle schlagen fehl
Unauthorized: invalid command token.: OpenClaw hat das Callback-Token nicht akzeptiert. Typische Ursachen:- Registrierung des Slash-Befehls ist beim Start fehlgeschlagen oder nur teilweise abgeschlossen
- der Callback trifft den falschen Gateway/Account
- Mattermost hat noch alte Befehle, die auf ein früheres Callback-Ziel zeigen
- der Gateway wurde neu gestartet, ohne Slash-Befehle erneut zu aktivieren
- Wenn native Slash-Befehle 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
callbackUrlweggelassen 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/Netzwerk-Namespace wie OpenClaw ausgeführt wird. Setzen Sie stattdessen eine explizite, extern erreichbarecommands.callbackUrl.
Button-Probleme
Button-Probleme
Verwandte Themen
- Kanal-Routing - Sitzungs-Routing für Nachrichten
- Kanäle: Übersicht - alle unterstützten Kanäle
- Gruppen - Verhalten von Gruppenchats und Mention-Gating
- Pairing - DM-Authentifizierung und Pairing-Ablauf
- Sicherheit - Zugriffsmodell und Härtung