狀態:隨附 Plugin(bot token + WebSocket 事件)。支援頻道、群組和 DM。Mattermost 是可自行託管的團隊訊息平台;產品詳細資料與下載請參閱官方網站 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.
隨附 Plugin
Mattermost 在目前的 OpenClaw 發行版本中以隨附 Plugin 提供,因此一般封裝組建不需要另外安裝。
- npm registry
- 本機 checkout
快速設定
原生 slash commands
原生 slash commands 需要選擇啟用。啟用後,OpenClaw 會透過 Mattermost API 註冊oc_* slash commands,並在 Gateway HTTP 伺服器上接收 callback POST。
行為注意事項
行為注意事項
native: "auto"對 Mattermost 預設為停用。設定native: true以啟用。- 如果省略
callbackUrl,OpenClaw 會從 Gateway 主機/連接埠 +callbackPath推導出一個。 - 對於多帳號設定,
commands可以設定在最上層,或設定在channels.mattermost.accounts.<id>.commands底下(帳號值會覆寫最上層欄位)。 - 命令 callback 會使用 OpenClaw 註冊
oc_*命令時 Mattermost 傳回的每個命令 token 進行驗證。 - 當註冊失敗、啟動不完整,或 callback token 與任何已註冊命令不相符時,slash callback 會以安全失敗方式拒絕。
可連線性需求
可連線性需求
callback 端點必須能由 Mattermost 伺服器連線到。
- 除非 Mattermost 與 OpenClaw 在同一主機/網路命名空間中執行,否則不要將
callbackUrl設為localhost。 - 除非該 URL 會將
/api/channels/mattermost/command反向代理到 OpenClaw,否則不要將callbackUrl設為你的 Mattermost 基底 URL。 - 快速檢查方式是
curl https://<gateway-host>/api/channels/mattermost/command;GET 應該從 OpenClaw 傳回405 Method Not Allowed,而不是404。
Mattermost 輸出 allowlist
Mattermost 輸出 allowlist
如果你的 callback 目標是私有/tailnet/內部位址,請設定 Mattermost
ServiceSettings.AllowedUntrustedInternalConnections 以包含 callback 主機/網域。使用主機/網域項目,而不是完整 URL。- 正確:
gateway.tailnet-name.ts.net - 錯誤:
https://gateway.tailnet-name.ts.net
環境變數(預設帳號)
如果你偏好使用 env vars,請在 Gateway 主機上設定這些項目:MATTERMOST_BOT_TOKEN=...MATTERMOST_URL=https://chat.example.com
Env vars 只套用至預設帳號(
default)。其他帳號必須使用設定值。MATTERMOST_URL 無法從 workspace .env 設定;請參閱 Workspace .env 檔案。聊天模式
Mattermost 會自動回應 DM。頻道行為由chatmode 控制:
- oncall(預設)
- onmessage
- onchar
只在頻道中被 @提及 時回應。
onchar仍會回應明確的 @提及。channels.mattermost.requireMention會為舊版設定保留支援,但建議使用chatmode。
執行緒與工作階段
使用channels.mattermost.replyToMode 控制頻道與群組回覆要留在主要頻道,或是在觸發貼文下方開始執行緒。
off(預設):只有在傳入貼文已經位於執行緒中時,才在執行緒中回覆。first:對於最上層頻道/群組貼文,在該貼文下方開始執行緒,並將對話路由到執行緒範圍的工作階段。all:目前對 Mattermost 與first行為相同。- 直接訊息會忽略此設定並保持非執行緒。
- 執行緒範圍的工作階段會使用觸發貼文 ID 作為執行緒根。
first和all目前等效,因為一旦 Mattermost 有執行緒根,後續片段與媒體會繼續留在同一個執行緒中。
存取控制(DM)
- 預設:
channels.mattermost.dmPolicy = "pairing"(未知傳送者會取得 pairing code)。 - 透過以下方式核准:
openclaw pairing list mattermostopenclaw pairing approve mattermost <CODE>
- 公開 DM:
channels.mattermost.dmPolicy="open"加上channels.mattermost.allowFrom=["*"]。
頻道(群組)
- 預設:
channels.mattermost.groupPolicy = "allowlist"(需提及)。 - 使用
channels.mattermost.groupAllowFrom將傳送者加入 allowlist(建議使用使用者 ID)。 - 每個頻道的提及覆寫位於
channels.mattermost.groups.<channelId>.requireMention底下,或以channels.mattermost.groups["*"].requireMention作為預設值。 @username比對是可變的,且只在channels.mattermost.dangerouslyAllowNameMatching: true時啟用。- 開放頻道:
channels.mattermost.groupPolicy="open"(需提及)。 - 執行階段注意事項:如果完全缺少
channels.mattermost,執行階段會針對群組檢查退回使用groupPolicy="allowlist"(即使已設定channels.defaults.groupPolicy)。
對外傳遞的目標
搭配openclaw message send 或 cron/webhooks 使用這些目標格式:
channel:<id>表示頻道user:<id>表示 DM@username表示 DM(透過 Mattermost API 解析)
DM 頻道重試
當 OpenClaw 傳送到 Mattermost DM 目標且需要先解析直接頻道時,預設會重試暫時性的直接頻道建立失敗。 使用channels.mattermost.dmChannelRetry 為 Mattermost Plugin 全域調整該行為,或使用 channels.mattermost.accounts.<id>.dmChannelRetry 為單一帳號調整。
- 這只套用至 DM 頻道建立(
/api/v4/channels/direct),不套用至每個 Mattermost API 呼叫。 - 重試會套用至暫時性失敗,例如速率限制、5xx 回應,以及網路或逾時錯誤。
- 除了
429以外的 4xx 用戶端錯誤會被視為永久錯誤,不會重試。
預覽串流
Mattermost 會將思考、工具活動和部分回覆文字串流到單一草稿預覽貼文,並在最終答案可安全傳送時就地完成。預覽會更新同一個貼文 ID,而不是用每個片段訊息洗版頻道。媒體/錯誤最終內容會取消待處理的預覽編輯,並使用正常傳遞,而不是送出一次性的預覽貼文。 透過channels.mattermost.streaming 啟用:
串流模式
串流模式
partial是一般選擇:一篇預覽貼文會隨著回覆增加而被編輯,接著以完整答案完成。block會在預覽貼文中使用附加式草稿片段。progress會在產生期間顯示狀態預覽,並只在完成時發布最終答案。off會停用預覽串流。
串流行為注意事項
串流行為注意事項
- 如果串流無法就地完成(例如貼文在串流中途被刪除),OpenClaw 會退回傳送新的最終貼文,確保回覆不會遺失。
- 純推理 payload 會從頻道貼文中隱藏,包括以
> Reasoning:blockquote 到達的文字。設定/reasoning on可在其他介面看到思考;Mattermost 最終貼文只保留答案。 - 請參閱串流了解頻道對應矩陣。
回應(訊息工具)
- 使用
message action=react並搭配channel=mattermost。 messageId是 Mattermost 貼文 ID。emoji接受像thumbsup或:+1:這類名稱(冒號可選)。- 設定
remove=true(boolean)以移除回應。 - 新增/移除回應事件會作為系統事件轉送至已路由的代理工作階段。
channels.mattermost.actions.reactions:啟用/停用回應動作(預設為 true)。- 每帳號覆寫:
channels.mattermost.accounts.<id>.actions.reactions。
互動式按鈕(訊息工具)
傳送含可點擊按鈕的訊息。使用者點擊按鈕時,代理會收到選項並可以回應。 將inlineButtons 新增到頻道 capabilities 以啟用按鈕:
message action=send 並搭配 buttons 參數。按鈕是 2D 陣列(按鈕列):
顯示標籤。
點擊時傳回的值(用作動作 ID)。
按鈕樣式。
實作備註
實作備註
- 按鈕回呼使用 HMAC-SHA256 驗證(自動執行,無需設定)。
- Mattermost 會從其 API 回應中移除回呼資料(安全功能),因此點擊後會移除所有按鈕 — 無法只移除部分按鈕。
- 包含連字號或底線的動作 ID 會自動清理(Mattermost 路由限制)。
設定與可達性
設定與可達性
直接 API 整合(外部指令碼)
外部指令碼和 Webhook 可以透過 Mattermost REST API 直接發佈按鈕,而不必透過代理的message 工具。可行時請使用 Plugin 中的 buildButtonAttachments();如果要發佈原始 JSON,請遵循這些規則:
承載結構:
Python 範例:
常見 HMAC 陷阱
常見 HMAC 陷阱
- Python 的
json.dumps預設會加入空格({"key": "val"})。使用separators=(",", ":")以符合 JavaScript 的緊湊輸出({"key":"val"})。 - 一律簽署所有內容欄位(扣除
_token)。Gateway 會移除_token,然後簽署剩下的所有內容。只簽署子集會導致靜默驗證失敗。 - 使用
sort_keys=True— Gateway 會在簽署前排序鍵,而且 Mattermost 儲存承載時可能會重新排序內容欄位。 - 從機器人權杖推導密鑰(確定性),不要使用隨機位元組。建立按鈕的程序與驗證按鈕的 Gateway 必須使用相同密鑰。
目錄配接器
Mattermost Plugin 包含一個目錄配接器,可透過 Mattermost API 解析頻道和使用者名稱。這會在openclaw message send 與 Cron/Webhook 傳遞中啟用 #channel-name 和 @username 目標。
無需設定 — 配接器會使用帳戶設定中的機器人權杖。
多帳戶
Mattermost 支援在channels.mattermost.accounts 下設定多個帳戶:
疑難排解
頻道中沒有回覆
頻道中沒有回覆
確認機器人在頻道中並提及它(oncall)、使用觸發前綴(onchar),或設定
chatmode: "onmessage"。驗證或多帳戶錯誤
驗證或多帳戶錯誤
- 檢查機器人權杖、基礎 URL,以及帳戶是否已啟用。
- 多帳戶問題:環境變數只會套用到
default帳戶。
原生斜線命令失敗
原生斜線命令失敗
按鈕問題
按鈕問題