狀態:可下載的 Plugin(bot 權杖 + WebSocket 事件)。支援頻道、群組和 DM。Mattermost 是可自行託管的團隊訊息平台;產品詳細資訊與下載請參閱官方網站 mattermost.com。Documentation Index
Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
安裝
設定頻道前,請先安裝 Mattermost:- npm registry
- Local checkout
快速設定
原生斜線命令
原生斜線命令採選擇啟用。啟用後,OpenClaw 會透過 Mattermost API 註冊oc_* 斜線命令,並在 Gateway HTTP 伺服器上接收 callback POST。
Behavior notes
Behavior notes
native: "auto"對 Mattermost 預設為停用。設定native: true以啟用。- 如果省略
callbackUrl,OpenClaw 會從 Gateway 主機/連接埠 +callbackPath推導。 - 對於多帳號設定,可在最上層設定
commands,或在channels.mattermost.accounts.<id>.commands下設定(帳號值會覆寫最上層欄位)。 - 命令 callback 會使用 OpenClaw 註冊
oc_*命令時 Mattermost 傳回的各命令權杖進行驗證。 - OpenClaw 會在接受每個 callback 之前重新整理目前的 Mattermost 命令註冊,因此來自已刪除或重新產生的斜線命令的舊權杖,無需重新啟動 Gateway 就會停止被接受。
- 如果 Mattermost API 無法確認該命令仍為目前版本,callback 驗證會失敗關閉;失敗的驗證會短暫快取,並行查詢會合併,且每個命令的新查詢啟動會受到速率限制,以限制重放壓力。
- 當註冊失敗、啟動部分完成,或 callback 權杖與解析命令的註冊權杖不符時,斜線 callback 會失敗關閉(一個命令有效的權杖無法抵達另一個命令的上游驗證)。
Reachability requirement
Reachability requirement
Mattermost 伺服器必須能連到 callback 端點。
- 除非 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 egress allowlist
Mattermost egress 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 不能從工作區 .env 設定;請參閱工作區 .env 檔案。聊天模式
Mattermost 會自動回應 DM。頻道行為由chatmode 控制:
- oncall (default)
- onmessage
- onchar
在頻道中只有被 @提及時才回應。
onchar仍會回應明確的 @提及。- 舊版設定仍支援
channels.mattermost.requireMention,但建議使用chatmode。
執行緒與工作階段
使用channels.mattermost.replyToMode 控制頻道和群組回覆是留在主頻道,還是在觸發貼文下啟動執行緒。
off(預設):只有在傳入貼文已經位於執行緒中時,才在執行緒中回覆。first:對於最上層頻道/群組貼文,在該貼文下啟動執行緒,並將對話路由到以執行緒為範圍的工作階段。all:目前在 Mattermost 中與first行為相同。- 直接訊息會忽略此設定,並維持非執行緒化。
- 以執行緒為範圍的工作階段會使用觸發貼文 ID 作為執行緒根。
first和all目前等效,因為 Mattermost 一旦有執行緒根,後續區塊和媒體會繼續留在同一執行緒中。
存取控制(DM)
- 預設:
channels.mattermost.dmPolicy = "pairing"(未知寄件者會收到配對碼)。 - 透過以下方式核准:
openclaw pairing list mattermostopenclaw pairing approve mattermost <CODE>
- 公開 DM:
channels.mattermost.dmPolicy="open"加上channels.mattermost.allowFrom=["*"]。 channels.mattermost.allowFrom接受accessGroup:<name>項目。請參閱存取群組。
頻道(群組)
- 預設:
channels.mattermost.groupPolicy = "allowlist"(受提及門檻限制)。 - 使用
channels.mattermost.groupAllowFrom允許清單寄件者(建議使用使用者 ID)。 channels.mattermost.groupAllowFrom接受accessGroup:<name>項目。請參閱存取群組。- 每個頻道的提及覆寫位於
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/Webhook 使用:
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 啟用:
Streaming modes
Streaming modes
partial是通常的選擇:一則預覽貼文會隨回覆成長而編輯,然後以完整答案完成。block會在預覽貼文內使用附加式草稿區塊。progress會在產生期間顯示狀態預覽,並只在完成時張貼最終答案。off會停用預覽串流。
Streaming behavior notes
Streaming behavior notes
- 如果無法就地完成串流(例如貼文在串流中途被刪除),OpenClaw 會退回傳送新的最終貼文,確保回覆不會遺失。
- 純推理 payload 會從頻道貼文中抑制,包括以
> Reasoning:blockquote 抵達的文字。設定/reasoning on可在其他介面查看思考;Mattermost 最終貼文只保留答案。 - 請參閱串流以查看頻道對應矩陣。
回應(訊息工具)
- 搭配
channel=mattermost使用message action=react。 messageId是 Mattermost 貼文 ID。emoji接受像thumbsup或:+1:這樣的名稱(冒號可省略)。- 設定
remove=true(boolean)以移除回應。 - 新增/移除回應事件會作為系統事件轉送到已路由的 agent 工作階段。
channels.mattermost.actions.reactions:啟用/停用回應動作(預設 true)。- 每帳號覆寫:
channels.mattermost.accounts.<id>.actions.reactions。
互動式按鈕(訊息工具)
傳送帶有可點擊按鈕的訊息。當使用者點擊按鈕時,agent 會收到選取項目並可回應。 透過將inlineButtons 新增到頻道能力來啟用按鈕:
buttons 參數的 message action=send。按鈕是 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"})。 - 一律簽署所有 context 欄位(扣除
_token)。Gateway 會移除_token,然後簽署其餘所有內容。只簽署子集合會造成靜默驗證失敗。 - 使用
sort_keys=True,Gateway 會在簽署前排序鍵,而 Mattermost 在儲存承載資料時可能會重新排序 context 欄位。 - 從機器人權杖推導密鑰(具決定性),不要使用隨機位元組。在建立按鈕的程序與驗證的 Gateway 之間,密鑰必須相同。
目錄配接器
Mattermost Plugin 包含一個目錄配接器,可透過 Mattermost API 解析頻道和使用者名稱。這讓#channel-name 和 @username 目標可用於 openclaw message send 以及 Cron/Webhook 傳遞。
不需要設定,配接器會使用帳號設定中的機器人權杖。
多帳號
Mattermost 支援在channels.mattermost.accounts 下設定多個帳號:
疑難排解
頻道中沒有回覆
頻道中沒有回覆
確認機器人在頻道中並提及它(oncall)、使用觸發前綴(onchar),或設定
chatmode: "onmessage"。驗證或多帳號錯誤
驗證或多帳號錯誤
- 檢查機器人權杖、基礎 URL,以及帳號是否已啟用。
- 多帳號問題:環境變數只會套用到
default帳號。
原生斜線命令失敗
原生斜線命令失敗
按鈕問題
按鈕問題