Developer and self-hosted
Mattermost
Status: downloadbare plugin (bottoken + WebSocket-gebeurtenissen). Kanalen, privékanalen, groeps-DM's en DM's worden ondersteund. Mattermost is een zelf te hosten platform voor teamberichten (mattermost.com).
Installeren
npm-register
openclaw plugins install @openclaw/mattermostLokale checkout
openclaw plugins install ./path/to/local/mattermost-pluginDetails: Plugins
Snelle configuratie
Zorg dat de plugin beschikbaar is
Installeer @openclaw/mattermost met de bovenstaande opdracht en start daarna de Gateway opnieuw als deze al actief is.
Maak een Mattermost-bot
Maak een Mattermost-botaccount, kopieer het bottoken en voeg de bot toe aan de teams en kanalen die deze moet kunnen lezen.
Kopieer de basis-URL
Kopieer de basis-URL van Mattermost (bijvoorbeeld https://chat.example.com). Een afsluitende /api/v4 wordt automatisch verwijderd.
Configureer OpenClaw en start de Gateway
Minimale configuratie:
{ channels: { mattermost: { enabled: true, botToken: "mm-token", baseUrl: "https://chat.example.com", dmPolicy: "pairing", }, },}Niet-interactief alternatief:
openclaw channels add --channel mattermost --bot-token <token> --http-url https://chat.example.comSysteemeigen slash-opdrachten
Systeemeigen slash-opdrachten zijn optioneel. Wanneer ze zijn ingeschakeld, registreert OpenClaw oc_* slash-opdrachten voor elk team waarvan de bot lid is en ontvangt het callback-POST-verzoeken op de HTTP-server van de Gateway.
{ channels: { mattermost: { commands: { native: true, nativeSkills: true, callbackPath: "/api/channels/mattermost/command", // Gebruik dit wanneer Mattermost de Gateway niet rechtstreeks kan bereiken (reverse proxy/openbare URL). callbackUrl: "https://gateway.example.com/api/channels/mattermost/command", }, }, },}Geregistreerde opdrachten: /oc_status, /oc_model, /oc_models, /oc_new, /oc_help, /oc_think, /oc_reasoning, /oc_verbose, /oc_queue. Met nativeSkills: true worden Skills-opdrachten ook geregistreerd als /oc_<skill>.
Opmerkingen over gedrag
nativeennativeSkillszijn standaard ingesteld op"auto", wat voor Mattermost wordt geïnterpreteerd als uitgeschakeld. Stel ze expliciet in optrue.callbackPathis standaard ingesteld op/api/channels/mattermost/command.- Als
callbackUrlis weggelaten, leidt OpenClawhttp://<gateway.customBindHost or localhost>:<gateway.port, default 18789><callbackPath>af. Bindhosts met jokertekens (0.0.0.0,::) vallen terug oplocalhost. - Voor configuraties met meerdere accounts kan
commandsop het hoogste niveau of onderchannels.mattermost.accounts.<id>.commandsworden ingesteld (accountwaarden overschrijven velden op het hoogste niveau). - Bestaande slash-opdrachten met dezelfde trigger die door andere integraties zijn gemaakt, blijven ongewijzigd (de registratie slaat ze over); opdrachten die door de bot zijn gemaakt, worden bijgewerkt of opnieuw gemaakt wanneer de callback-URL afwijkt.
- Callbacks van opdrachten worden gevalideerd met de tokens per opdracht die Mattermost retourneert wanneer OpenClaw
oc_*opdrachten registreert. - OpenClaw vernieuwt de huidige registratie van Mattermost-opdrachten voordat elke callback wordt geaccepteerd, zodat verouderde tokens van verwijderde of opnieuw gegenereerde slash-opdrachten niet meer worden geaccepteerd zonder de Gateway opnieuw te starten.
- Callbackvalidatie mislukt gesloten als de Mattermost-API niet kan bevestigen dat de opdracht nog actueel is; mislukte validaties worden kort in de cache bewaard, gelijktijdige zoekacties worden samengevoegd en nieuwe zoekacties worden per opdracht in frequentie beperkt om de druk van replay-aanvallen te begrenzen.
- Slash-callbacks mislukken gesloten wanneer de registratie is mislukt, het opstarten gedeeltelijk was of het callbacktoken niet overeenkomt met het geregistreerde token van de gevonden opdracht (een token dat geldig is voor één opdracht kan de bovenliggende validatie voor een andere opdracht niet bereiken).
- Geaccepteerde callbacks worden bevestigd met een tijdelijk antwoord "Bezig met verwerken..."; het werkelijke antwoord volgt als een normaal bericht.
Bereikbaarheidsvereiste
Het callback-eindpunt moet bereikbaar zijn vanaf de Mattermost-server.
- Stel
callbackUrlniet in oplocalhost, tenzij Mattermost op dezelfde host of in dezelfde netwerknaamruimte als OpenClaw draait. - Stel
callbackUrlniet in op de basis-URL van Mattermost, tenzij die URL/api/channels/mattermost/commandvia een reverse proxy naar OpenClaw doorstuurt. - Een snelle controle is
curl https://<gateway-host>/api/channels/mattermost/command; een GET-verzoek moet405 Method Not Allowedvan OpenClaw retourneren, niet404.
Mattermost-toelatingslijst voor uitgaand verkeer
Als je callback is gericht op privé-, tailnet- of interne adressen, stel je ServiceSettings.AllowedUntrustedInternalConnections van Mattermost zo in dat de callbackhost of het callbackdomein wordt opgenomen.
Gebruik host- of domeinvermeldingen, 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
Chatmodi
Mattermost reageert automatisch op DM's. Het gedrag in kanalen wordt bepaald door chatmode:
oncall (standaard)
Reageer in kanalen alleen bij een @vermelding.
onmessage
Reageer op elk kanaalbericht.
onchar
Reageer wanneer een bericht begint met een triggerprefix.
Configuratievoorbeeld:
{ channels: { mattermost: { chatmode: "onchar", oncharPrefixes: [">", "!"], // standaard }, },}Opmerkingen:
oncharreageert nog steeds op expliciete @vermeldingen.channels.mattermost.requireMentionwordt nog steeds gehonoreerd, maarchatmodeheeft de voorkeur. Instellingen vangroups.<channelId>.requireMentionper kanaal hebben voorrang op beide.- Nadat de bot een zichtbaar antwoord in een kanaalthread heeft verzonden, worden latere berichten in diezelfde thread beantwoord zonder een nieuwe @vermelding of
onchar-prefix, zodat gesprekken met meerdere beurten in de thread blijven doorlopen. Deelname wordt 7 dagen onthouden nadat de bot voor het laatst in die thread heeft geantwoord en blijft behouden nadat de Gateway opnieuw is gestart. Threads die de bot alleen heeft waargenomen, worden niet beïnvloed; begin een nieuw bericht op het hoogste niveau om opnieuw een expliciete vermelding te vereisen. - Stel
channels.mattermost.implicitMentions.threadParticipation: falsein om te voorkomen dat vervolgberichten in threads waaraan is deelgenomen de vermeldingsbeperking omzeilen. Accountoverschrijvingen gebruikenchannels.mattermost.accounts.<id>.implicitMentions. Mattermost levert momenteel geenreplyToBot- ofquotedBot-feiten, waardoor deze vlaggen hier geen effect hebben.
Threads en sessies
Gebruik channels.mattermost.replyToMode om te bepalen of antwoorden in kanalen en groepen in het hoofdkanaal blijven of een thread onder het activerende bericht starten.
off(standaard): antwoord alleen in een thread wanneer het inkomende bericht al in een thread staat.first: start voor kanaal- of groepsberichten op het hoogste niveau een thread onder dat bericht en leid het gesprek naar een sessie die aan die thread is gekoppeld.allenbatched: momenteel hetzelfde gedrag alsfirstvoor Mattermost, omdat vervolgsegmenten en media in dezelfde thread doorgaan zodra Mattermost een threadhoofdbericht heeft.- Directe berichten gebruiken standaard
off, zelfs wanneerreplyToModeis ingesteld.
Gebruik channels.mattermost.replyToModeByChatType om de modus te overschrijven voor direct-, group- of channel-chats. Stel direct in om threading voor directe berichten in te schakelen:
off(standaard): directe berichten blijven zonder threads in één doorlopende sessie.first,allofbatched: elk direct bericht op het hoogste niveau start een Mattermost-thread die wordt ondersteund door een nieuwe, onafhankelijke sessie.
{ channels: { mattermost: { replyToMode: "all", replyToModeByChatType: { direct: "first", }, }, },}Opmerkingen:
- Sessies die aan een thread zijn gekoppeld, gebruiken de id van het activerende bericht als threadhoofdbericht.
firstenallzijn momenteel gelijkwaardig, omdat vervolgsegmenten en media in dezelfde thread doorgaan zodra Mattermost een threadhoofdbericht heeft.- Overschrijvingen per chattype hebben voorrang op
replyToMode. Zonder een overschrijving vandirectbehouden bestaande implementaties vlakke DM's zonder threads.
Toegangsbeheer (DM's)
- Standaard:
channels.mattermost.dmPolicy = "pairing"(onbekende afzenders krijgen een koppelingscode). Andere waarden:allowlist,open,disabled. - Goedkeuren via:
openclaw pairing list mattermostopenclaw pairing approve mattermost <CODE>
- Openbare DM's:
channels.mattermost.dmPolicy="open"pluschannels.mattermost.allowFrom=["*"](het configuratieschema dwingt het jokerteken af). channels.mattermost.allowFromaccepteert gebruikers-id's (aanbevolen) enaccessGroup:<name>-vermeldingen. Zie Toegangsgroepen.
Kanalen (groepen)
- Standaard:
channels.mattermost.groupPolicy = "allowlist"(alleen met vermelding). - Sta afzenders toe met
channels.mattermost.groupAllowFrom(gebruikers-id's aanbevolen). channels.mattermost.groupAllowFromaccepteertaccessGroup:<name>-vermeldingen. Zie Toegangsgroepen.- Overschrijvingen voor vermeldingen per kanaal staan onder
channels.mattermost.groups.<channelId>.requireMention, of onderchannels.mattermost.groups["*"].requireMentionvoor een standaardwaarde. - Overeenkomsten met
@usernamezijn veranderlijk en alleen ingeschakeld wanneerchannels.mattermost.dangerouslyAllowNameMatching: true. - Open kanalen:
channels.mattermost.groupPolicy="open"(alleen met vermelding). - Volgorde van omzetting:
channels.mattermost.groupPolicy, vervolgenschannels.defaults.groupPolicyen daarna"allowlist". - Runtime-opmerking: als de sectie
channels.mattermostvolledig ontbreekt, mislukt de runtime gesloten naargroupPolicy="allowlist"voor groepscontroles (zelfs alschannels.defaults.groupPolicyis ingesteld) en wordt een eenmalige waarschuwing gelogd.
Voorbeeld:
{ channels: { mattermost: { groupPolicy: "open", groups: { "*": { requireMention: true }, "team-channel-id": { requireMention: false }, }, }, },}Doelen voor uitgaande levering
Gebruik deze doelindelingen met openclaw message send of Cron/Webhooks:
| Doel | Levert aan |
|---|---|
channel:<id> |
Kanaal op id |
channel:<name> of #channel-name |
Kanaal op naam, gezocht in alle teams waarvan de bot lid is |
user:<id> of mattermost:<id> |
DM met die gebruiker |
@username |
DM (gebruikersnaam wordt via de Mattermost-API omgezet) |
Uitgaande verzendingen ondersteunen maximaal één bijlage per bericht; splits meerdere bestanden op in afzonderlijke verzendingen.
Opnieuw proberen van DM-kanaal
Wanneer OpenClaw naar een Mattermost-DM-doel verzendt en eerst het directe kanaal moet opzoeken, probeert het tijdelijke fouten bij het aanmaken van het directe kanaal standaard opnieuw.
Gebruik channels.mattermost.dmChannelRetry om dat gedrag globaal voor de Mattermost-plugin af te stemmen, of channels.mattermost.accounts.<id>.dmChannelRetry voor één account. Standaardwaarden:
{ channels: { mattermost: { dmChannelRetry: { maxRetries: 3, initialDelayMs: 1000, maxDelayMs: 10000, timeoutMs: 30000, }, }, },}Opmerkingen:
- Dit geldt alleen voor het aanmaken van DM-kanalen (
/api/v4/channels/direct), niet voor elke Mattermost-API-aanroep. - Nieuwe pogingen gebruiken exponentiële back-off met jitter en zijn van toepassing op tijdelijke fouten, zoals snelheidslimieten, 5xx-antwoorden en netwerk- of time-outfouten.
- 4xx-clientfouten anders dan
429worden als permanent behandeld en niet opnieuw geprobeerd.
Previewstreaming
Mattermost streamt denkwerk, toolactiviteit en gedeeltelijke antwoordtekst naar een concept-previewbericht dat ter plaatse wordt afgerond wanneer het definitieve antwoord veilig kan worden verzonden. In de modus partial wordt de preview bijgewerkt met dezelfde bericht-ID, in plaats van het kanaal te overspoelen met berichten per fragment. In de modus block wisselt de preview tussen voltooide tekst- en toolactiviteitsblokken, zodat eerdere blokken als afzonderlijke berichten zichtbaar blijven in plaats van door het volgende blok te worden overschreven. Definitieve media- of foutberichten annuleren openstaande previewbewerkingen en gebruiken normale bezorging in plaats van een overbodig previewbericht te publiceren.
Previewstreaming staat standaard aan in de modus partial. Configureer dit via channels.mattermost.streaming.mode (verouderde scalaire/booleaanse waarden van streaming worden door openclaw doctor --fix gemigreerd):
{ channels: { mattermost: { streaming: { mode: "partial" }, // uit | gedeeltelijk | blok | voortgang }, },}Streamingmodi
partial(standaard): één previewbericht dat wordt bewerkt terwijl het antwoord groeit en daarna wordt afgerond met het volledige antwoord.blockwisselt de preview tussen voltooide tekst- en toolactiviteitsblokken, zodat elk blok als afzonderlijk bericht zichtbaar blijft in plaats van ter plaatse te worden overschreven. Parallelle en opeenvolgende toolupdates delen het huidige toolactiviteitsbericht.progresstoont tijdens het genereren een statuspreview en plaatst het definitieve antwoord pas na voltooiing.offschakelt previewstreaming uit. Metstreaming.block.enabled: trueworden voltooide assistentblokken nog steeds als normale blokantwoorden (afzonderlijke berichten) bezorgd, in plaats van als één samengevoegd definitief bericht.
Opmerkingen over streaminggedrag
- Als de stream niet ter plaatse kan worden afgerond (bijvoorbeeld omdat het bericht tijdens het streamen is verwijderd), valt OpenClaw terug op het verzenden van een nieuw definitief bericht, zodat het antwoord nooit verloren gaat.
- Payloads met alleen denkwerk worden onderdrukt in kanaalberichten, inclusief tekst die als een
> Thinking-blokcitaat binnenkomt. Stel/reasoning onin om denkwerk op andere oppervlakken te zien; het definitieve Mattermost-bericht bevat alleen het antwoord. - Zie Streaming voor de kanaaltoewijzingsmatrix.
Reacties (berichtentool)
- Gebruik
message action=reactmetchannel=mattermost. messageIdis de Mattermost-bericht-ID.emojiaccepteert namen zoalsthumbsupof:+1:(dubbele punten zijn optioneel).- Stel
remove=true(booleaans) in om een reactie te verwijderen. - Gebeurtenissen voor het toevoegen/verwijderen van reacties worden als systeemgebeurtenissen doorgestuurd naar de gerouteerde agentsessie, onderworpen aan dezelfde DM-/groepsbeleidscontroles als berichten.
Voorbeelden:
message action=react channel=mattermost target=channel:<channelId> messageId=<postId> emoji=thumbsupmessage action=react channel=mattermost target=channel:<channelId> messageId=<postId> emoji=thumbsup remove=trueConfiguratie:
channels.mattermost.actions.reactions: reactieacties in-/uitschakelen (standaard true).- Overschrijving per account:
channels.mattermost.accounts.<id>.actions.reactions.
Interactieve knoppen (berichtentool)
Verzend berichten met aanklikbare knoppen. Wanneer een gebruiker op een knop klikt, ontvangt de agent de selectie en kan deze reageren.
Knoppen zijn afkomstig uit de semantische presentation-payload (in normale agentantwoorden en in message action=send). OpenClaw geeft waardeknoppen weer als interactieve Mattermost-knoppen, houdt URL-knoppen zichtbaar in de berichttekst en degradeert keuzemenu's naar leesbare tekst.
message action=send channel=mattermost target=channel:<channelId> presentation={"blocks":[{"type":"buttons","buttons":[{"label":"Ja","value":"yes"},{"label":"Nee","value":"no"}]}]}Velden voor presentatieknoppen:
labelstringrequiredWeergavelabel (alias: text).
valuestringWaarde die bij een klik wordt teruggestuurd en als actie-ID wordt gebruikt (aliassen: callback_data, callbackData). Vereist voor een aanklikbare knop, tenzij url is ingesteld.
urlstringLinkknop; wordt als label: url-tekst in de berichttekst weergegeven in plaats van als interactieve knop.
style"primary" | "secondary" | "success" | "danger"Knopstijl. Mattermost past de standaardopmaak toe op waarden die het niet ondersteunt.
Voeg inlineButtons toe aan de kanaalmogelijkheden om knopondersteuning in de systeemprompt van de agent kenbaar te maken:
{ channels: { mattermost: { capabilities: ["inlineButtons"], }, },}Wanneer een gebruiker op een knop klikt:
Toegangscontrole
Degene die klikt, moet dezelfde DM-/groepsbeleidscontroles doorstaan als een afzender van een bericht; ongeautoriseerde klikken krijgen een tijdelijke melding en worden genegeerd.
Knoppen vervangen door bevestiging
Alle knoppen worden vervangen door een bevestigingsregel (bijvoorbeeld "✓ Ja geselecteerd door @user").
Agent ontvangt de selectie
De agent ontvangt de selectie als een inkomend bericht (plus een systeemgebeurtenis) en reageert.
Implementatieopmerkingen
- Knopcallbacks gebruiken HMAC-SHA256-verificatie (automatisch, geen configuratie nodig).
- Bij een klik wordt het volledige bijlageblok vervangen, zodat alle knoppen tegelijk worden verwijderd - gedeeltelijke verwijdering is niet mogelijk.
- Actie-ID's met koppeltekens of onderstrepingstekens worden automatisch opgeschoond (beperking van Mattermost-routering).
- Klikken waarvan
action_idniet overeenkomt met een actie in het oorspronkelijke bericht, worden geweigerd met403("Onbekende actie").
Configuratie en bereikbaarheid
channels.mattermost.capabilities: reeks met mogelijkheden. Voeg"inlineButtons"toe om de beschrijving van de knoptool in de systeemprompt van de agent in te schakelen.channels.mattermost.interactions.callbackBaseUrl: optionele externe basis-URL voor knopcallbacks (bijvoorbeeldhttps://gateway.example.com). Gebruik dit wanneer Mattermost de Gateway niet rechtstreeks via de bindhost kan bereiken.- Bij configuraties met meerdere accounts kun je hetzelfde veld ook instellen onder
channels.mattermost.accounts.<id>.interactions.callbackBaseUrl. - Als
interactions.callbackBaseUrlwordt weggelaten, leidt OpenClaw de callback-URL af vangateway.customBindHost+gateway.port(standaard 18789) en valt daarna terug ophttp://localhost:<port>. Het callbackpad is/mattermost/interactions/<accountId>. - Bereikbaarheidsregel: de URL voor de knopcallback moet bereikbaar zijn vanaf de Mattermost-server.
localhostwerkt alleen wanneer Mattermost en OpenClaw op dezelfde host/netwerknaamruimte draaien. channels.mattermost.interactions.allowedSourceIps: toelatingslijst met bron-IP-adressen voor knopcallbacks. Zonder deze lijst worden alleen loopbackbronnen (127.0.0.1,::1) geaccepteerd. Een externe Mattermost-server moet hier dus aan de toelatingslijst worden toegevoegd, anders worden de klikken geweigerd met403. Stel achter een reverse proxy ookgateway.trustedProxiesin, zodat het werkelijke client-IP-adres uit doorgestuurde headers wordt afgeleid.- Als je callbackdoel privé/op een tailnet/intern is, voeg je de host/het domein ervan toe aan
ServiceSettings.AllowedUntrustedInternalConnectionsvan Mattermost.
Directe API-integratie (externe scripts)
Externe scripts en webhooks kunnen knoppen rechtstreeks via de Mattermost REST-API plaatsen in plaats van via de message-tool van de agent. Geef de voorkeur aan de message-tool van OpenClaw. Importeer voor directe integraties buildButtonAttachments uit @openclaw/mattermost/api.js; volg bij het plaatsen van onbewerkte JSON deze regels:
Payloadstructuur:
{ channel_id: "<channelId>", message: "Kies een optie:", props: { attachments: [ { actions: [ { id: "mybutton01", // alleen alfanumeriek - zie hieronder type: "button", // vereist, anders worden klikken stilzwijgend genegeerd name: "Goedkeuren", // weergavelabel style: "primary", // optioneel: "default", "primary", "danger" integration: { url: "https://gateway.example.com/mattermost/interactions/default", context: { action_id: "mybutton01", // moet overeenkomen met knop-ID action: "approve", // ... eventuele aangepaste velden ... _token: "<hmac>", // zie het gedeelte over HMAC hieronder }, }, }, ], }, ], },}HMAC-token genereren
De Gateway verifieert knopklikken met HMAC-SHA256. Externe scripts moeten tokens genereren die overeenkomen met de verificatielogica van de Gateway:
Het geheim afleiden van het bottoken
HMAC-SHA256(key="openclaw-mattermost-interactions", data=botToken), hexadecimaal gecodeerd.
Het contextobject opbouwen
Bouw het contextobject op met alle velden behalve _token.
Serialiseren met gesorteerde sleutels
Serialiseer met recursief gesorteerde sleutels en zonder spaties (de Gateway canonicaliseert ook geneste objecten en produceert compacte JSON).
De payload ondertekenen
HMAC-SHA256(key=secret, data=serializedContext)
Het token toevoegen
Voeg de resulterende hexadecimale digest als _token aan de context toe.
Python-voorbeeld:
secret = hmac.new( b"openclaw-mattermost-interactions", bot_token.encode(), hashlib.sha256).hexdigest() ctx = {"action_id": "mybutton01", "action": "approve"}payload = json.dumps(ctx, sort_keys=True, separators=(",", ":"))token = hmac.new(secret.encode(), payload.encode(), hashlib.sha256).hexdigest() context = {**ctx, "_token": token}Veelvoorkomende HMAC-valkuilen
- Python's
json.dumpsvoegt standaard spaties toe ({"key": "val"}). Gebruikseparators=(",", ":")zodat dit overeenkomt met de compacte uitvoer van JavaScript ({"key":"val"}). - Onderteken altijd alle contextvelden (behalve
_token). De Gateway verwijdert_tokenen ondertekent vervolgens alles wat overblijft. Het ondertekenen van een subset veroorzaakt een stille verificatiefout. - Gebruik
sort_keys=True: de Gateway sorteert sleutels vóór ondertekening en Mattermost kan contextvelden opnieuw ordenen wanneer de payload wordt opgeslagen. - Leid het geheim af van het bottoken (deterministisch), niet van willekeurige bytes. Het geheim moet hetzelfde zijn in het proces dat knoppen maakt en de Gateway die ze verifieert.
Directory-adapter
De Mattermost-plugin bevat een directory-adapter die kanaal- en gebruikersnamen via de Mattermost-API omzet. Hierdoor kunnen #channel-name- en @username-doelen worden gebruikt in openclaw message send en leveringen via cron/webhook.
Er is geen configuratie nodig: de adapter gebruikt het bottoken uit de accountconfiguratie.
Meerdere accounts
Mattermost ondersteunt meerdere accounts onder channels.mattermost.accounts:
{ channels: { mattermost: { accounts: { default: { name: "Primary", botToken: "mm-token", baseUrl: "https://chat.example.com" }, alerts: { name: "Alerts", botToken: "mm-token-2", baseUrl: "https://alerts.example.com" }, }, }, },}Accountwaarden overschrijven velden op het hoogste niveau; channels.mattermost.defaultAccount bepaalt welk account wordt gebruikt wanneer er geen account is opgegeven.
Problemen oplossen
Geen antwoorden in kanalen
Zorg dat de bot zich in het kanaal bevindt en vermeld deze (oncall), gebruik een triggerprefix (onchar) of stel chatmode: "onmessage" in.
Authenticatie- of multi-accountfouten
- Controleer het bottoken, de basis-URL en of het account is ingeschakeld.
- Problemen met meerdere accounts: omgevingsvariabelen zijn alleen van toepassing op het
default-account. - Privé-/LAN-hosts van Mattermost vereisen
network.dangerouslyAllowPrivateNetwork: true(de SSRF-beveiliging blokkeert standaard privé-IP-adressen).
Native slash-opdrachten mislukken
Unauthorized: invalid command token.: OpenClaw heeft het callbacktoken niet geaccepteerd. Gebruikelijke oorzaken:- de registratie van de slash-opdracht is mislukt of bij het opstarten slechts gedeeltelijk voltooid
- de callback bereikt de verkeerde Gateway of het verkeerde account
- Mattermost heeft nog oude opdrachten die naar een eerder callbackdoel verwijzen
- de Gateway is opnieuw gestart zonder de slash-opdrachten opnieuw te activeren
- Als native slash-opdrachten niet meer werken, controleer dan de logboeken op
mattermost: failed to register slash commandsofmattermost: native slash commands enabled but no commands could be registered. - Als
callbackUrlis weggelaten en de logboeken waarschuwen dat de callback is omgezet naar een loopback-URL zoalshttp://localhost:18789/..., is die URL waarschijnlijk alleen bereikbaar wanneer Mattermost op dezelfde host/netwerknaamruimte als OpenClaw draait. Stel in plaats daarvan een expliciete, extern bereikbarecommands.callbackUrlin.
Problemen met knoppen
- Knoppen worden als witte vakken of helemaal niet weergegeven: de knopgegevens zijn ongeldig. Elke presentatieknop heeft een
labelen eenvaluenodig (knoppen waarbij een van beide ontbreekt, worden verwijderd). - Knoppen worden weergegeven, maar klikken doet niets: controleer of de Gateway bereikbaar is vanaf de Mattermost-server, of het IP-adres van de Mattermost-server is opgenomen in
channels.mattermost.interactions.allowedSourceIps(zonder deze instelling wordt alleen loopback geaccepteerd) en ofServiceSettings.AllowedUntrustedInternalConnectionsde callbackhost voor privédoelen bevat. - Knoppen retourneren 404 wanneer erop wordt geklikt: de
idvan de knop bevat waarschijnlijk koppeltekens of underscores. De actierouter van Mattermost werkt niet met niet-alfanumerieke ID's. Gebruik alleen[a-zA-Z0-9]. - De Gateway logt
rejected callback source: de klik kwam van een IP-adres buiteninteractions.allowedSourceIps. Voeg de Mattermost-server of je ingress toe aan de toelatingslijst en stelgateway.trustedProxiesin achter een reverse proxy. - De Gateway logt
invalid _token: HMAC komt niet overeen. Controleer of je alle contextvelden ondertekent (niet slechts een subset), gesorteerde sleutels gebruikt en compacte JSON gebruikt (zonder spaties). Zie het gedeelte over HMAC hierboven. - De Gateway logt
missing _token in context: het veld_tokenbevindt zich niet in de context van de knop. Zorg dat dit veld wordt opgenomen bij het opbouwen van de integratiepayload. - De Gateway weigert de klik met
Unknown action:context.action_idkomt niet overeen met eenidvan een actie in het bericht. Stel beide in op dezelfde opgeschoonde waarde. - De agent biedt geen knoppen aan: voeg
capabilities: ["inlineButtons"]toe aan de Mattermost-kanaalconfiguratie.
Gerelateerd
- Kanaalroutering - sessieroutering voor berichten
- Overzicht van kanalen - alle ondersteunde kanalen
- Groepen - gedrag van groepschats en vermeldingstoegang
- Koppeling - DM-authenticatie en koppelingsflow
- Beveiliging - toegangsmodel en beveiligingsmaatregelen