Installeren
Installeer Mattermost voordat je het kanaal configureert:- npm-registry
- Lokale checkout
Snelle setup
Zorg dat de plugin beschikbaar is
Installeer
@openclaw/mattermost met de bovenstaande opdracht en herstart daarna de Gateway als die al draait.Native slash-commands
Native slash-commands zijn opt-in. Wanneer ingeschakeld registreert OpenClawoc_* slash-commands via de Mattermost-API en ontvangt callback-POST’s op de HTTP-server van de gateway.
Gedragsnotities
Gedragsnotities
native: "auto"is standaard uitgeschakeld voor Mattermost. Stelnative: truein om dit in te schakelen.- Als
callbackUrlis weggelaten, leidt OpenClaw er een af uit gateway-host/poort +callbackPath. - Voor setups met meerdere accounts kan
commandsop het hoogste niveau worden ingesteld of onderchannels.mattermost.accounts.<id>.commands(accountwaarden overschrijven velden op het hoogste niveau). - Command-callbacks worden gevalideerd met de per-command tokens die Mattermost retourneert wanneer OpenClaw
oc_*-commands registreert. - OpenClaw vernieuwt de huidige Mattermost-commandregistratie voordat elke callback wordt geaccepteerd, zodat verouderde tokens van verwijderde of opnieuw gegenereerde slash-commands niet meer worden geaccepteerd zonder herstart van de gateway.
- Callbackvalidatie faalt gesloten als de Mattermost-API niet kan bevestigen dat het command nog actueel is; mislukte validaties worden kort gecachet, gelijktijdige lookups worden samengevoegd en het starten van nieuwe lookups wordt per command begrensd in snelheid om replay-druk te beperken.
- Slash-callbacks falen gesloten wanneer registratie is mislukt, startup gedeeltelijk was, of het callbacktoken niet overeenkomt met het geregistreerde token van het opgeloste command (een token dat geldig is voor één command kan geen upstreamvalidatie bereiken voor een ander command).
Bereikbaarheidsvereiste
Bereikbaarheidsvereiste
Het callback-eindpunt moet bereikbaar zijn vanaf de Mattermost-server.
- Stel
callbackUrlniet in oplocalhost, tenzij Mattermost op dezelfde host/netwerknaamruimte draait als OpenClaw. - Stel
callbackUrlniet in op je Mattermost-basis-URL, tenzij die URL/api/channels/mattermost/commandreverse-proxyt naar OpenClaw. - Een snelle controle is
curl https://<gateway-host>/api/channels/mattermost/command; een GET zou405 Method Not Allowedvan OpenClaw moeten retourneren, niet404.
Mattermost-egress-allowlist
Mattermost-egress-allowlist
Als je callbackdoelen privé-/tailnet-/interne adressen zijn, stel dan Mattermost
ServiceSettings.AllowedUntrustedInternalConnections in zodat de callback-host/het callback-domein is opgenomen.Gebruik host-/domeinitems, geen volledige URL’s.- Goed:
gateway.tailnet-name.ts.net - Fout:
https://gateway.tailnet-name.ts.net
Omgevingsvariabelen (standaardaccount)
Stel deze in op de gateway-host als je de voorkeur geeft aan omgevingsvariabelen:MATTERMOST_BOT_TOKEN=...MATTERMOST_URL=https://chat.example.com
Omgevingsvariabelen gelden alleen voor het standaardaccount (
default). Andere accounts moeten configuratiewaarden gebruiken.MATTERMOST_URL kan niet worden ingesteld vanuit een workspace-.env; zie Workspace-.env-bestanden.Chatmodi
Mattermost reageert automatisch op DM’s. Kanaalgedrag wordt bepaald doorchatmode:
- oncall (standaard)
- onmessage
- onchar
Reageer alleen wanneer er in kanalen een @mention is.
oncharreageert nog steeds op expliciete @mentions.channels.mattermost.requireMentionwordt gerespecteerd voor legacy-configuraties, maarchatmodeheeft de voorkeur.- Nadat de bot een zichtbaar antwoord in een kanaalthread heeft verzonden, worden latere berichten in diezelfde thread beantwoord zonder nieuwe @mention of
onchar-prefix, zodat threadgesprekken met meerdere beurten blijven doorlopen. Deelname wordt 7 dagen threadinactiviteit onthouden (ververst bij elk antwoord) en blijft behouden na gateway-herstarts. Threads die de bot alleen heeft geobserveerd, blijven onaangetast; start een nieuw bericht op het hoogste niveau om weer een expliciete vermelding te vereisen.
Threads en sessies
Gebruikchannels.mattermost.replyToMode om te bepalen of antwoorden in kanalen en groepen in het hoofdkanaal blijven of een thread starten onder de activerende post.
off(standaard): antwoord alleen in een thread wanneer de inkomende post er al in zit.first: start voor posts op het hoogste niveau in kanalen/groepen een thread onder die post en routeer het gesprek naar een thread-gescopeerde sessie.all: hetzelfde gedrag alsfirstvoor Mattermost vandaag.- Directe berichten negeren deze instelling en blijven zonder thread.
- Thread-gescopeerde sessies gebruiken de ID van de activerende post als thread-root.
firstenallzijn momenteel equivalent omdat, zodra Mattermost een thread-root heeft, vervolgchunks en media in dezelfde thread doorgaan.
Toegangsbeheer (DM’s)
- Standaard:
channels.mattermost.dmPolicy = "pairing"(onbekende afzenders krijgen een koppelingscode). - Goedkeuren via:
openclaw pairing list mattermostopenclaw pairing approve mattermost <CODE>
- Openbare DM’s:
channels.mattermost.dmPolicy="open"pluschannels.mattermost.allowFrom=["*"]. channels.mattermost.allowFromaccepteertaccessGroup:<name>-items. Zie Toegangsgroepen.
Kanalen (groepen)
- Standaard:
channels.mattermost.groupPolicy = "allowlist"(mention-gated). - Zet afzenders op de allowlist met
channels.mattermost.groupAllowFrom(gebruikers-ID’s aanbevolen). channels.mattermost.groupAllowFromaccepteertaccessGroup:<name>-items. Zie Toegangsgroepen.- Per-kanaal mention-overschrijvingen staan onder
channels.mattermost.groups.<channelId>.requireMentionofchannels.mattermost.groups["*"].requireMentionvoor een standaardwaarde. @username-matching is veranderlijk en alleen ingeschakeld wanneerchannels.mattermost.dangerouslyAllowNameMatching: true.- Open kanalen:
channels.mattermost.groupPolicy="open"(mention-gated). - Runtime-notitie: als
channels.mattermostvolledig ontbreekt, valt runtime terug opgroupPolicy="allowlist"voor groepscontroles (zelfs alschannels.defaults.groupPolicyis ingesteld).
Doelen voor uitgaande levering
Gebruik deze doelformaten metopenclaw message send of cron/webhooks:
channel:<id>voor een kanaaluser:<id>voor een DM@usernamevoor een DM (opgelost via de Mattermost-API)
Opnieuw proberen voor DM-kanaal
Wanneer OpenClaw naar een Mattermost-DM-doel verzendt en eerst het directe kanaal moet oplossen, probeert het standaard tijdelijke fouten bij het maken van directe kanalen opnieuw. Gebruikchannels.mattermost.dmChannelRetry om dat gedrag globaal voor de Mattermost-plugin af te stemmen, of channels.mattermost.accounts.<id>.dmChannelRetry voor één account.
- Dit geldt alleen voor het maken van DM-kanalen (
/api/v4/channels/direct), niet voor elke Mattermost-API-aanroep. - Nieuwe pogingen gelden voor tijdelijke fouten zoals rate limits, 5xx-responses en netwerk- of timeoutfouten.
- 4xx-clientfouten anders dan
429worden als permanent behandeld en niet opnieuw geprobeerd.
Preview-streaming
Mattermost streamt denkstappen, toolactiviteit en gedeeltelijke antwoordtekst naar één conceptpreviewpost die ter plekke wordt afgerond wanneer het definitieve antwoord veilig kan worden verzonden. De preview wordt bijgewerkt op dezelfde post-ID in plaats van het kanaal te spammen met berichten per chunk. Definitieve media-/foutberichten annuleren openstaande previewbewerkingen en gebruiken normale levering in plaats van een wegwerp-previewpost te flushen. Schakel in viachannels.mattermost.streaming:
Streamingmodi
Streamingmodi
partialis de gebruikelijke keuze: één previewpost die wordt bewerkt terwijl het antwoord groeit en daarna wordt afgerond met het volledige antwoord.blockgebruikt conceptchunks in append-stijl binnen de previewpost.progresstoont een statuspreview tijdens het genereren en plaatst alleen het definitieve antwoord bij voltooiing.offschakelt preview-streaming uit.
Gedragsnotities voor streaming
Gedragsnotities voor streaming
- Als de stream niet ter plekke kan worden afgerond (bijvoorbeeld omdat de post halverwege de stream is verwijderd), valt OpenClaw terug op het verzenden van een nieuwe definitieve post zodat het antwoord nooit verloren gaat.
- Payloads met alleen denken worden onderdrukt in kanaalposts, inclusief tekst die binnenkomt als een
> Thinking-blockquote. Stel/reasoning onin om denken in andere oppervlakken te zien; de definitieve Mattermost-post houdt alleen het antwoord. - Zie Streaming voor de kanaalmappingmatrix.
Reacties (message-tool)
- Gebruik
message action=reactmetchannel=mattermost. messageIdis de Mattermost-post-ID.emojiaccepteert namen zoalsthumbsupof:+1:(dubbele punten zijn optioneel).- Stel
remove=true(booleaan) in om een reactie te verwijderen. - Gebeurtenissen voor toevoegen/verwijderen van reacties worden als systeemgebeurtenissen doorgestuurd naar de gerouteerde agentsessie.
channels.mattermost.actions.reactions: schakel reactieacties in/uit (standaard true).- Per-account overschrijving:
channels.mattermost.accounts.<id>.actions.reactions.
Interactieve knoppen (message-tool)
Verzend berichten met klikbare knoppen. Wanneer een gebruiker op een knop klikt, ontvangt de agent de selectie en kan reageren. Normale agentantwoorden kunnen ook semantischepresentation-payloads bevatten. OpenClaw rendert waardeknoppen als interactieve Mattermost-knoppen, houdt URL-knoppen zichtbaar in de berichttekst en zet selectiemenu’s om naar leesbare tekst.
Schakel knoppen in door inlineButtons toe te voegen aan de kanaalmogelijkheden:
message action=send met een buttons-parameter. Knoppen zijn een 2D-array (rijen met knoppen):
Weergavelabel.
Waarde die bij klikken wordt teruggestuurd (gebruikt als de actie-ID).
Knopstijl.
Knoppen vervangen door bevestiging
Alle knoppen worden vervangen door een bevestigingsregel (bijvoorbeeld ”✓ Yes geselecteerd door @user”).
Implementatienotities
Implementatienotities
- Knop-callbacks gebruiken HMAC-SHA256-verificatie (automatisch, geen configuratie nodig).
- Mattermost verwijdert callbackgegevens uit zijn API-antwoorden (beveiligingsfunctie), dus alle knoppen worden bij klikken verwijderd - gedeeltelijke verwijdering is niet mogelijk.
- Actie-ID’s met koppeltekens of underscores worden automatisch opgeschoond (beperking in Mattermost-routering).
Configuratie en bereikbaarheid
Configuratie en bereikbaarheid
channels.mattermost.capabilities: array van capability-strings. Voeg"inlineButtons"toe om de beschrijving van het knoppentool in de systeemprompt van de agent in te schakelen.channels.mattermost.interactions.callbackBaseUrl: optionele externe basis-URL voor knop-callbacks (bijvoorbeeldhttps://gateway.example.com). Gebruik dit wanneer Mattermost de Gateway niet rechtstreeks op de bind-host kan bereiken.- In setups met meerdere accounts kun je hetzelfde veld ook instellen onder
channels.mattermost.accounts.<id>.interactions.callbackBaseUrl. - Als
interactions.callbackBaseUrlis weggelaten, leidt OpenClaw de callback-URL af vangateway.customBindHost+gateway.porten valt daarna terug ophttp://localhost:<port>. - Bereikbaarheidsregel: de knop-callback-URL moet bereikbaar zijn vanaf de Mattermost-server.
localhostwerkt alleen wanneer Mattermost en OpenClaw op dezelfde host/netwerk-namespace draaien. - Als je callback-doel privé/tailnet/intern is, voeg de host/het domein toe aan Mattermost
ServiceSettings.AllowedUntrustedInternalConnections.
Directe API-integratie (externe scripts)
Externe scripts en Webhooks kunnen knoppen rechtstreeks via de Mattermost REST API plaatsen in plaats van via hetmessage-tool van de agent te gaan. Gebruik waar mogelijk buildButtonAttachments() uit de Plugin; als je ruwe JSON plaatst, volg dan deze regels:
Payloadstructuur:
Leid het geheim af van het bot-token
HMAC-SHA256(key="openclaw-mattermost-interactions", data=botToken)Serialiseer met gesorteerde sleutels
Serialiseer met gesorteerde sleutels en geen spaties (de Gateway gebruikt
JSON.stringify met gesorteerde sleutels, wat compacte output oplevert).Veelvoorkomende HMAC-valkuilen
Veelvoorkomende HMAC-valkuilen
- Python’s
json.dumpsvoegt standaard spaties toe ({"key": "val"}). Gebruikseparators=(",", ":")om overeen te komen met JavaScripts compacte output ({"key":"val"}). - Onderteken altijd alle contextvelden (min
_token). De Gateway verwijdert_tokenen ondertekent daarna alles wat overblijft. Het ondertekenen van een subset veroorzaakt stilzwijgende verificatiefouten. - Gebruik
sort_keys=True- de Gateway sorteert sleutels vóór het ondertekenen, en Mattermost kan contextvelden opnieuw ordenen wanneer de payload wordt opgeslagen. - Leid het geheim af van het bot-token (deterministisch), niet van willekeurige bytes. Het geheim moet hetzelfde zijn in het proces dat knoppen maakt en de Gateway die verifieert.
Directory-adapter
De Mattermost-Plugin bevat een directory-adapter die kanaal- en gebruikersnamen via de Mattermost API oplost. Dit maakt#channel-name- en @username-doelen mogelijk in openclaw message send en Cron-/Webhook-leveringen.
Er is geen configuratie nodig - de adapter gebruikt het bot-token uit de accountconfiguratie.
Multi-account
Mattermost ondersteunt meerdere accounts onderchannels.mattermost.accounts:
Probleemoplossing
Geen antwoorden in kanalen
Geen antwoorden in kanalen
Zorg dat de bot in het kanaal zit en vermeld hem (oncall), gebruik een triggerprefix (onchar), of stel
chatmode: "onmessage" in.Auth- of multi-accountfouten
Auth- of multi-accountfouten
- Controleer het bot-token, de basis-URL en of het account is ingeschakeld.
- Multi-accountproblemen: env vars zijn alleen van toepassing op het
default-account.
Native slash-commands mislukken
Native slash-commands mislukken
Unauthorized: invalid command token.: OpenClaw heeft het callback-token niet geaccepteerd. Typische oorzaken:- registratie van slash-commands is mislukt of slechts gedeeltelijk voltooid bij het opstarten
- de callback raakt de verkeerde Gateway/het verkeerde account
- Mattermost heeft nog oude commands die naar een vorig callback-doel wijzen
- de Gateway is opnieuw gestart zonder slash-commands opnieuw te activeren
- Als native slash-commands niet meer werken, controleer de logs op
mattermost: failed to register slash commandsofmattermost: native slash commands enabled but no commands could be registered. - Als
callbackUrlis weggelaten en logs waarschuwen dat de callback is opgelost naarhttp://127.0.0.1:18789/..., is die URL waarschijnlijk alleen bereikbaar wanneer Mattermost op dezelfde host/netwerk-namespace draait als OpenClaw. Stel in plaats daarvan een expliciete extern bereikbarecommands.callbackUrlin.
Problemen met knoppen
Problemen met knoppen
- Knoppen verschijnen als witte vakken: de agent verzendt mogelijk verkeerd gevormde knopgegevens. Controleer dat elke knop zowel
text- alscallback_data-velden heeft. - Knoppen worden weergegeven maar klikken doen niets: verifieer dat
AllowedUntrustedInternalConnectionsin de Mattermost-serverconfiguratie127.0.0.1 localhostbevat, en datEnablePostActionIntegrationtrueis in ServiceSettings. - Knoppen retourneren 404 bij klikken: de knop-
idbevat waarschijnlijk koppeltekens of underscores. De actierouter van Mattermost breekt op niet-alfanumerieke ID’s. Gebruik alleen[a-zA-Z0-9]. - Gateway-logs tonen
invalid _token: HMAC komt niet overeen. Controleer dat je alle contextvelden ondertekent (niet een subset), gesorteerde sleutels gebruikt en compacte JSON gebruikt (geen spaties). Zie de HMAC-sectie hierboven. - Gateway-logs tonen
missing _token in context: het_token-veld staat niet in de context van de knop. Zorg dat het wordt opgenomen bij het bouwen van de integratiepayload. - Bevestiging toont ruwe ID in plaats van knopnaam:
context.action_idkomt niet overeen met deidvan de knop. Stel beide in op dezelfde opgeschoonde waarde. - Agent kent knoppen niet: voeg
capabilities: ["inlineButtons"]toe aan de Mattermost-kanaalconfiguratie.
Gerelateerd
- Kanaalroutering - sessieroutering voor berichten
- Kanalenoverzicht - alle ondersteunde kanalen
- Groepen - groepschatgedrag en vermeldingsgate
- Koppelen - DM-authenticatie en koppelingsflow
- Beveiliging - toegangsmodel en hardening