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
Controleren of de plugin beschikbaar is
Installeer @openclaw/mattermost met de bovenstaande opdracht en start daarna de Gateway opnieuw als deze al actief is.
Een Mattermost-bot maken
Maak een Mattermost-botaccount, kopieer het bottoken en voeg de bot toe aan de teams en kanalen die deze moet lezen.
De basis-URL kopiëren
Kopieer de basis-URL van Mattermost (bijvoorbeeld https://chat.example.com). Een afsluitend /api/v4 wordt automatisch verwijderd.
OpenClaw configureren en de Gateway starten
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-aanvragen 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 als uitgeschakeld wordt geïnterpreteerd. Stel ze expliciet in optrue.callbackPathis standaard ingesteld op/api/channels/mattermost/command.- Als
callbackUrlwordt weggelaten, leidt OpenClawhttp://<gateway.customBindHost or localhost>:<gateway.port, default 18789><callbackPath>af. Jokerteken-bindhosts (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 (ze worden bij registratie overgeslagen); opdrachten die door de bot zijn gemaakt, worden bijgewerkt of opnieuw gemaakt wanneer de callback-URL afwijkt.
- Opdrachtcallbacks 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 langer worden geaccepteerd zonder dat de Gateway opnieuw hoeft te worden gestart.
- Callbackvalidatie wordt veilig geweigerd als de Mattermost-API niet kan bevestigen dat de opdracht nog actueel is; mislukte validaties worden kort in de cache opgeslagen, gelijktijdige opzoekacties worden samengevoegd en nieuwe opzoekacties worden per opdracht in frequentie beperkt om de druk van herhalingsaanvallen te begrenzen.
- Slash-callbacks worden veilig geweigerd wanneer de registratie is mislukt, het opstarten slechts gedeeltelijk is voltooid 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 kortstondig antwoord
"Processing..."; het echte antwoord wordt als een normaal bericht verzonden.
Bereikbaarheidsvereiste
Het callback-eindpunt moet bereikbaar zijn vanaf de Mattermost-server.
- Stel
callbackUrlniet in oplocalhost, tenzij Mattermost in dezelfde host-/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-aanvraag moet405 Method Not Allowedvan OpenClaw retourneren, niet404.
Mattermost-toegestane lijst voor uitgaand verkeer
Als uw callback op privé-, tailnet- of interne adressen is gericht, stelt u Mattermost ServiceSettings.AllowedUntrustedInternalConnections zo in dat de callbackhost of het callbackdomein wordt opgenomen.
Gebruik host-/domeinvermeldingen, geen volledige URL's.
- Goed:
gateway.tailnet-name.ts.net - Fout:
https://gateway.tailnet-name.ts.net
Omgevingsvariabelen (standaardaccount)
Stel deze op de Gateway-host in als u 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 geregeld door chatmode:
oncall (standaard)
Reageer in kanalen alleen bij een @vermelding.
onmessage
Reageer op elk kanaalbericht.
onchar
Reageer wanneer een bericht met een triggerprefix begint.
Configuratievoorbeeld:
{ channels: { mattermost: { chatmode: "onchar", oncharPrefixes: [">", "!"], // standaard }, },}Opmerkingen:
oncharreageert nog steeds op expliciete @vermeldingen.channels.mattermost.requireMentionwordt nog steeds gerespecteerd, maarchatmodeheeft de voorkeur. Instellingen per kanaal ingroups.<channelId>.requireMentionhebben 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 threadgesprekken met meerdere beurten kunnen doorgaan. Deelname wordt 7 dagen onthouden nadat de bot voor het laatst in die thread heeft geantwoord en blijft behouden wanneer de Gateway opnieuw wordt 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.
Threads en sessies
Gebruik channels.mattermost.replyToMode om te bepalen of antwoorden in kanalen en groepen in het hoofdkanaal blijven of een thread starten onder het bericht dat de reactie heeft geactiveerd.
off(standaard): antwoord alleen in een thread wanneer het inkomende bericht zich al in een thread bevindt.first: start voor kanaal-/groepsberichten op het hoogste niveau een thread onder dat bericht en leid het gesprek naar een threadgebonden sessie.allenbatched: hebben momenteel hetzelfde gedrag alsfirstvoor Mattermost, omdat vervolgfragmenten en media in dezelfde thread blijven zodra Mattermost een threadbegin heeft.- Directe berichten gebruiken standaard
off, zelfs wanneerreplyToModeis ingesteld.
Gebruik channels.mattermost.replyToModeByChatType om de modus te overschrijven voor chats van het type direct, group of channel. Stel direct in om threads 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 door een nieuwe, onafhankelijke sessie wordt ondersteund.
{ channels: { mattermost: { replyToMode: "all", replyToModeByChatType: { direct: "first", }, }, },}Opmerkingen:
- Threadgebonden sessies gebruiken de id van het activerende bericht als threadbegin.
firstenallzijn momenteel gelijkwaardig, omdat vervolgfragmenten en media in dezelfde thread blijven zodra Mattermost een threadbegin heeft.- Overschrijvingen per chattype hebben voorrang op
replyToMode. Zonder een overschrijving voordirectbehouden bestaande implementaties vlakke DM's zonder threads.
Toegangsbeheer (DM's)
- Standaard:
channels.mattermost.dmPolicy = "pairing"(onbekende afzenders krijgen een koppelcode). 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) en vermeldingen van het typeaccessGroup:<name>. Zie Toegangsgroepen.
Kanalen (groepen)
- Standaard:
channels.mattermost.groupPolicy = "allowlist"(vermelding vereist). - Sta afzenders toe met
channels.mattermost.groupAllowFrom(gebruikers-id's aanbevolen). channels.mattermost.groupAllowFromaccepteert vermeldingen van het typeaccessGroup:<name>. Zie Toegangsgroepen.- Overschrijvingen per kanaal voor vermeldingen staan onder
channels.mattermost.groups.<channelId>.requireMentionof, voor een standaardwaarde,channels.mattermost.groups["*"].requireMention. - Overeenkomsten met
@usernamekunnen veranderen en worden alleen ingeschakeld wanneerchannels.mattermost.dangerouslyAllowNameMatching: true. - Open kanalen:
channels.mattermost.groupPolicy="open"(vermelding vereist). - Volgorde van bepaling:
channels.mattermost.groupPolicy, vervolgenschannels.defaults.groupPolicyen daarna"allowlist". - Opmerking over de runtime: als de sectie
channels.mattermostvolledig ontbreekt, weigert de runtime groepscontroles veilig metgroupPolicy="allowlist"(zelfs alschannels.defaults.groupPolicyis ingesteld) en registreert deze een eenmalige waarschuwing.
Voorbeeld:
{ channels: { mattermost: { groupPolicy: "open", groups: { "*": { requireMention: true }, "team-channel-id": { requireMention: false }, }, }, },}Doelen voor uitgaande bezorging
Gebruik deze doelindelingen met openclaw message send of Cron/Webhooks:
| Doel | Wordt bezorgd bij |
|---|---|
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 gevonden) |
Uitgaande verzendingen ondersteunen maximaal één bijlage per bericht; splits meerdere bestanden op in afzonderlijke verzendingen.
Opnieuw proberen voor DM-kanalen
Wanneer OpenClaw naar een Mattermost-DM-doel verzendt en eerst het directe kanaal moet vinden, probeert het tijdelijke fouten bij het maken van directe kanalen standaard opnieuw.
Gebruik channels.mattermost.dmChannelRetry om dat gedrag wereldwijd 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 is alleen van toepassing op het aanmaken van DM-kanalen (
/api/v4/channels/direct), niet op elke Mattermost-API-aanroep. - Nieuwe pogingen gebruiken exponentiële back-off met jitter en worden toegepast op tijdelijke fouten, zoals snelheidslimieten, 5xx-responsen en netwerk- of time-outfouten.
- 4xx-clientfouten anders dan
429worden als permanent beschouwd en niet opnieuw geprobeerd.
Previewstreaming
Mattermost streamt denkactiviteit, toolactiviteit en gedeeltelijke antwoordtekst naar een concept-previewbericht, dat ter plaatse wordt voltooid zodra het uiteindelijke antwoord veilig kan worden verzonden. In de modus partial wordt de preview bijgewerkt op hetzelfde bericht-ID, in plaats van het kanaal te overspoelen met een bericht per fragment. In de modus block wisselt de preview tussen voltooide tekstblokken en blokken met toolactiviteit, zodat eerdere blokken als afzonderlijke berichten zichtbaar blijven in plaats van door het volgende blok te worden overschreven. Definitieve media- en foutberichten annuleren wachtende previewbewerkingen en gebruiken de normale bezorging in plaats van een wegwerp-previewbericht te voltooien.
Previewstreaming is standaard ingeschakeld in de modus partial. Configureer dit via channels.mattermost.streaming (een modustekenreeks, booleaanse waarde of een object zoals { mode: "progress" }):
{ channels: { mattermost: { streaming: "partial", // off | partial | block | progress }, },}Streamingmodi
partial(standaard): één previewbericht dat wordt bewerkt naarmate het antwoord groeit en vervolgens wordt voltooid met het volledige antwoord.blockwisselt de preview tussen voltooide tekstblokken en blokken met toolactiviteit, 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. MetblockStreaming: 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 voltooid (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 die uitsluitend denkactiviteit bevatten, worden niet in kanaalberichten geplaatst, inclusief tekst die als een
> Thinking-blokcitaat binnenkomt. Stel/reasoning onin om denkactiviteit op andere oppervlakken te zien; het definitieve Mattermost-bericht bevat alleen het antwoord. - Zie Streaming voor de kanaaltoewijzingsmatrix.
Reacties (berichttool)
- Gebruik
message action=reactmetchannel=mattermost. messageIdis het Mattermost-bericht-ID.emojiaccepteert namen zoalsthumbsupof:+1:(dubbele punten zijn optioneel).- Stel
remove=true(booleaanse waarde) in om een reactie te verwijderen. - Gebeurtenissen voor het toevoegen/verwijderen van reacties worden als systeemgebeurtenissen doorgestuurd naar de gerouteerde agentsessie, onder 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 (berichttool)
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 zet keuzemenu's om in leesbare tekst.
message action=send channel=mattermost target=channel:<channelId> presentation={"blocks":[{"type":"buttons","buttons":[{"label":"Yes","value":"yes"},{"label":"No","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.
urlstringKoppelingsknop; wordt in de berichttekst weergegeven als label: url in plaats van als interactieve knop.
style"primary" | "secondary" | "success" | "danger"Knopstijl. Mattermost past de standaardstijl toe op waarden die het niet ondersteunt.
Voeg inlineButtons toe aan de kanaalmogelijkheden om knopondersteuning in de systeemprompt van de agent bekend te maken:
{ channels: { mattermost: { capabilities: ["inlineButtons"], }, },}Wanneer een gebruiker op een knop klikt:
Toegangscontrole
De gebruiker 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 „✓ Yes 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 die koppeltekens of onderstrepingstekens bevatten, worden automatisch opgeschoond (beperking van Mattermost-routering).
- Klikken waarvan de
action_idniet overeenkomt met een actie in het oorspronkelijke bericht, worden geweigerd met403("Unknown action").
Configuratie en bereikbaarheid
channels.mattermost.capabilities: matrix van mogelijkheden als tekenreeksen. 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 diens bindingshost kan bereiken.- In configuraties met meerdere accounts kunt u hetzelfde veld ook instellen onder
channels.mattermost.accounts.<id>.interactions.callbackBaseUrl. - Als
interactions.callbackBaseUrlis weggelaten, leidt OpenClaw de callback-URL af vangateway.customBindHost+gateway.port(standaard 18789) en valt vervolgens terug ophttp://localhost:<port>. Het callbackpad is/mattermost/interactions/<accountId>. - Bereikbaarheidsregel: de callback-URL van de knop 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 loopback-bronnen (127.0.0.1,::1) geaccepteerd. Een externe Mattermost-server moet hier dus aan de toelatingslijst worden toegevoegd, anders worden klikken geweigerd met403. Stel achter een reverse proxy ookgateway.trustedProxiesin, zodat het echte client-IP-adres wordt afgeleid uit doorgestuurde headers.- Als uw callbackdoel privé, intern of in een tailnet is, voegt u de host/het domein ervan toe aan Mattermost
ServiceSettings.AllowedUntrustedInternalConnections.
Rechtstreekse API-integratie (externe scripts)
Externe scripts en Webhooks kunnen knoppen rechtstreeks via de Mattermost REST-API plaatsen in plaats van de message-tool van de agent te gebruiken. Gebruik waar mogelijk buildButtonAttachments() uit de Plugin; volg bij het plaatsen van onbewerkte JSON deze regels:
Payloadstructuur:
{ channel_id: "<channelId>", message: "Choose an option:", props: { attachments: [ { actions: [ { id: "mybutton01", // alphanumeric only - see below type: "button", // required, or clicks are silently ignored name: "Approve", // display label style: "primary", // optional: "default", "primary", "danger" integration: { url: "https://gateway.example.com/mattermost/interactions/default", context: { action_id: "mybutton01", // must match button id action: "approve", // ... any custom fields ... _token: "<hmac>", // see HMAC section below }, }, }, ], }, ], },}HMAC-token genereren
De Gateway verifieert klikken op knoppen 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 samenstellen
Stel het contextobject samen 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-functie
json.dumpsvoegt standaard spaties toe ({"key": "val"}). Gebruikseparators=(",", ":")om overeen te komen met de compacte uitvoer van JavaScript ({"key":"val"}). - Onderteken altijd alle contextvelden (met uitzondering van
_token). De Gateway verwijdert_tokenen ondertekent vervolgens alles wat overblijft. Het ondertekenen van een deelverzameling veroorzaakt een verificatiefout zonder melding. - Gebruik
sort_keys=True; de Gateway sorteert sleutels vóór ondertekening en Mattermost kan contextvelden opnieuw ordenen bij het opslaan van de payload. - Leid het geheim af van het bottoken (deterministisch), niet van willekeurige bytes. Het geheim moet hetzelfde zijn in het proces dat knoppen maakt en in 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 doelen als #channel-name en @username worden gebruikt in openclaw message send en bij leveringen via Cron/Webhooks.
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: "Primair", botToken: "mm-token", baseUrl: "https://chat.example.com" }, alerts: { name: "Waarschuwingen", 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 is opgegeven.
Problemen oplossen
Geen antwoorden in kanalen
Zorg ervoor dat de bot zich in het kanaal bevindt en vermeld de bot (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-Mattermost-hosts 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 slash-opdrachten 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 local loopback-URL zoalshttp://localhost:18789/..., is die URL waarschijnlijk alleen bereikbaar wanneer Mattermost in dezelfde host-/netwerknaamruimte als OpenClaw draait. Stel in plaats daarvan expliciet een extern bereikbarecommands.callbackUrlin.
Problemen met knoppen
- Knoppen verschijnen als witte vakken of helemaal niet: de knopgegevens zijn ongeldig. Elke presentatieknop heeft een
labelen eenvaluenodig (knoppen waarbij een van beide ontbreekt, worden weggelaten). - 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 local loopback geaccepteerd) en ofServiceSettings.AllowedUntrustedInternalConnectionsde callbackhost bevat voor privédoelen. - Knoppen retourneren bij klikken een 404-fout: de knop-
idbevat waarschijnlijk koppeltekens of underscores. De actierouter van Mattermost werkt niet met niet-alfanumerieke ID's. Gebruik uitsluitend[a-zA-Z0-9]. - De Gateway logt
rejected callback source: de klik kwam van een IP-adres buiteninteractions.allowedSourceIps. Voeg de Mattermost-server of uw ingress toe aan de toelatingslijst en stelgateway.trustedProxiesin bij gebruik van een reverse proxy. - De Gateway logt
invalid _token: HMAC komt niet overeen. Controleer of u alle contextvelden ondertekent (niet slechts een subset), gesorteerde sleutels gebruikt en compacte JSON gebruikt (zonder spaties). Zie de HMAC-sectie hierboven. - De Gateway logt
missing _token in context: het veld_tokenstaat niet in de context van de knop. Zorg ervoor dat het wordt opgenomen bij het samenstellen van de integratiepayload. - De Gateway weigert de klik met
Unknown action:context.action_idkomt niet overeen met een actie-idin 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
- Koppelen - DM-authenticatie en koppelingsproces
- Beveiliging - toegangsmodel en beveiliging