Trạng thái: Plugin được đóng gói kèm (token bot + sự kiện WebSocket). Hỗ trợ kênh, nhóm và DM. Mattermost là nền tảng nhắn tin nhóm có thể tự lưu trữ; xem trang chính thức tại mattermost.com để biết chi tiết sản phẩm và tải xuống.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 được đóng gói kèm
Mattermost được phát hành dưới dạng Plugin đóng gói kèm trong các bản phát hành OpenClaw hiện tại, vì vậy các bản dựng đóng gói thông thường không cần cài đặt riêng.
- npm registry
- Local checkout
Thiết lập nhanh
Đảm bảo Plugin có sẵn
Các bản phát hành OpenClaw đóng gói hiện tại đã đóng gói kèm Plugin này. Các bản cài đặt cũ hơn/tùy chỉnh có thể thêm thủ công bằng các lệnh ở trên.
Lệnh slash gốc
Lệnh slash gốc là tùy chọn bật. Khi được bật, OpenClaw đăng ký các lệnh slashoc_* qua API Mattermost và nhận callback POST trên máy chủ HTTP của Gateway.
Ghi chú về hành vi
Ghi chú về hành vi
native: "auto"mặc định là tắt cho Mattermost. Đặtnative: trueđể bật.- Nếu bỏ qua
callbackUrl, OpenClaw suy ra URL từ host/port của Gateway +callbackPath. - Với thiết lập nhiều tài khoản, có thể đặt
commandsở cấp cao nhất hoặc dướichannels.mattermost.accounts.<id>.commands(giá trị tài khoản ghi đè các trường cấp cao nhất). - Callback lệnh được xác thực bằng token theo từng lệnh do Mattermost trả về khi OpenClaw đăng ký các lệnh
oc_*. - Callback slash sẽ fail closed khi đăng ký thất bại, khởi động chỉ hoàn tất một phần, hoặc token callback không khớp với một trong các lệnh đã đăng ký.
Yêu cầu về khả năng truy cập
Yêu cầu về khả năng truy cập
Endpoint callback phải truy cập được từ máy chủ Mattermost.
- Không đặt
callbackUrlthànhlocalhosttrừ khi Mattermost chạy trên cùng host/namespace mạng với OpenClaw. - Không đặt
callbackUrlthành URL cơ sở Mattermost của bạn trừ khi URL đó reverse-proxy/api/channels/mattermost/commandtới OpenClaw. - Kiểm tra nhanh là
curl https://<gateway-host>/api/channels/mattermost/command; yêu cầu GET nên trả về405 Method Not Allowedtừ OpenClaw, không phải404.
Danh sách cho phép egress của Mattermost
Danh sách cho phép egress của Mattermost
Nếu callback của bạn nhắm tới địa chỉ riêng/tailnet/nội bộ, hãy đặt
ServiceSettings.AllowedUntrustedInternalConnections của Mattermost để bao gồm host/miền callback.Dùng mục nhập host/miền, không dùng URL đầy đủ.- Tốt:
gateway.tailnet-name.ts.net - Không tốt:
https://gateway.tailnet-name.ts.net
Biến môi trường (tài khoản mặc định)
Đặt các biến này trên host Gateway nếu bạn muốn dùng biến môi trường:MATTERMOST_BOT_TOKEN=...MATTERMOST_URL=https://chat.example.com
Biến môi trường chỉ áp dụng cho tài khoản mặc định (
default). Các tài khoản khác phải dùng giá trị cấu hình.Không thể đặt MATTERMOST_URL từ .env của workspace; xem Tệp .env của workspace.Chế độ chat
Mattermost tự động phản hồi DM. Hành vi kênh được kiểm soát bởichatmode:
- oncall (mặc định)
- onmessage
- onchar
Chỉ phản hồi khi được @nhắc đến trong kênh.
oncharvẫn phản hồi các lượt @nhắc đến rõ ràng.channels.mattermost.requireMentionvẫn được tôn trọng cho cấu hình cũ nhưng nên dùngchatmode.
Thread và phiên
Dùngchannels.mattermost.replyToMode để kiểm soát việc trả lời trong kênh và nhóm ở lại kênh chính hay bắt đầu một thread dưới bài đăng kích hoạt.
off(mặc định): chỉ trả lời trong thread khi bài đăng đến đã nằm trong một thread.first: với bài đăng kênh/nhóm cấp cao nhất, bắt đầu một thread dưới bài đăng đó và định tuyến cuộc trò chuyện tới phiên theo phạm vi thread.all: hiện tại có cùng hành vi nhưfirstđối với Mattermost.- Tin nhắn trực tiếp bỏ qua thiết lập này và vẫn không dùng thread.
- Phiên theo phạm vi thread dùng id bài đăng kích hoạt làm gốc thread.
firstvàallhiện tương đương vì sau khi Mattermost có gốc thread, các chunk theo sau và media tiếp tục trong cùng thread đó.
Kiểm soát truy cập (DM)
- Mặc định:
channels.mattermost.dmPolicy = "pairing"(người gửi chưa biết sẽ nhận mã ghép đôi). - Phê duyệt qua:
openclaw pairing list mattermostopenclaw pairing approve mattermost <CODE>
- DM công khai:
channels.mattermost.dmPolicy="open"cộng vớichannels.mattermost.allowFrom=["*"].
Kênh (nhóm)
- Mặc định:
channels.mattermost.groupPolicy = "allowlist"(bị chặn bằng yêu cầu nhắc đến). - Cho phép người gửi bằng
channels.mattermost.groupAllowFrom(khuyến nghị dùng ID người dùng). - Ghi đè yêu cầu nhắc đến theo kênh nằm dưới
channels.mattermost.groups.<channelId>.requireMentionhoặcchannels.mattermost.groups["*"].requireMentioncho mặc định. - Khớp
@usernamecó thể thay đổi và chỉ được bật khichannels.mattermost.dangerouslyAllowNameMatching: true. - Kênh mở:
channels.mattermost.groupPolicy="open"(bị chặn bằng yêu cầu nhắc đến). - Ghi chú runtime: nếu hoàn toàn thiếu
channels.mattermost, runtime quay vềgroupPolicy="allowlist"cho kiểm tra nhóm (ngay cả khi đã đặtchannels.defaults.groupPolicy).
Đích để gửi đi
Dùng các định dạng đích này vớiopenclaw message send hoặc cron/webhook:
channel:<id>cho một kênhuser:<id>cho một DM@usernamecho một DM (được phân giải qua API Mattermost)
Thử lại kênh DM
Khi OpenClaw gửi tới đích DM Mattermost và cần phân giải kênh trực tiếp trước, mặc định nó sẽ thử lại các lỗi tạo kênh trực tiếp tạm thời. Dùngchannels.mattermost.dmChannelRetry để tinh chỉnh hành vi đó trên toàn cục cho Plugin Mattermost, hoặc channels.mattermost.accounts.<id>.dmChannelRetry cho một tài khoản.
- Điều này chỉ áp dụng cho việc tạo kênh DM (
/api/v4/channels/direct), không phải mọi lệnh gọi API Mattermost. - Thử lại áp dụng cho các lỗi tạm thời như giới hạn tốc độ, phản hồi 5xx, và lỗi mạng hoặc timeout.
- Lỗi máy khách 4xx ngoài
429được xem là vĩnh viễn và không được thử lại.
Streaming bản xem trước
Mattermost stream phần suy nghĩ, hoạt động công cụ và văn bản phản hồi một phần vào một bài đăng bản nháp xem trước duy nhất, bài đăng này được hoàn tất tại chỗ khi câu trả lời cuối cùng an toàn để gửi. Bản xem trước cập nhật trên cùng id bài đăng thay vì làm tràn kênh bằng tin nhắn theo từng chunk. Kết quả cuối chứa media/lỗi sẽ hủy các chỉnh sửa bản xem trước đang chờ và dùng cách gửi thông thường thay vì flush một bài đăng xem trước tạm. Bật quachannels.mattermost.streaming:
Chế độ streaming
Chế độ streaming
partiallà lựa chọn thông thường: một bài đăng xem trước được chỉnh sửa khi phản hồi dài thêm, rồi được hoàn tất với câu trả lời đầy đủ.blockdùng các chunk bản nháp kiểu nối thêm bên trong bài đăng xem trước.progresshiển thị bản xem trước trạng thái trong khi tạo và chỉ đăng câu trả lời cuối cùng khi hoàn tất.offtắt streaming bản xem trước.
Ghi chú về hành vi streaming
Ghi chú về hành vi streaming
- Nếu stream không thể được hoàn tất tại chỗ (ví dụ bài đăng bị xóa giữa luồng), OpenClaw quay về gửi một bài đăng cuối mới để phản hồi không bao giờ bị mất.
- Payload chỉ chứa reasoning bị chặn khỏi bài đăng kênh, bao gồm văn bản đến dưới dạng blockquote
> Reasoning:. Đặt/reasoning onđể xem phần suy nghĩ trên các bề mặt khác; bài đăng cuối của Mattermost chỉ giữ câu trả lời. - Xem Streaming để biết ma trận ánh xạ kênh.
Reactions (công cụ tin nhắn)
- Dùng
message action=reactvớichannel=mattermost. messageIdlà id bài đăng Mattermost.emojichấp nhận tên nhưthumbsuphoặc:+1:(dấu hai chấm là tùy chọn).- Đặt
remove=true(boolean) để xóa một reaction. - Sự kiện thêm/xóa reaction được chuyển tiếp dưới dạng sự kiện hệ thống tới phiên agent đã định tuyến.
channels.mattermost.actions.reactions: bật/tắt hành động reaction (mặc định true).- Ghi đè theo tài khoản:
channels.mattermost.accounts.<id>.actions.reactions.
Nút tương tác (công cụ tin nhắn)
Gửi tin nhắn với các nút có thể nhấp. Khi người dùng nhấp vào một nút, agent nhận lựa chọn và có thể phản hồi. Bật nút bằng cách thêminlineButtons vào khả năng của kênh:
message action=send với tham số buttons. Nút là mảng 2D (các hàng nút):
Nhãn hiển thị.
Giá trị được gửi lại khi nhấp (dùng làm ID hành động).
Kiểu nút.
Các nút được thay bằng xác nhận
Tất cả các nút được thay bằng một dòng xác nhận (ví dụ: ”✓ Yes selected by @user”).
Ghi chú triển khai
Ghi chú triển khai
- Callback của nút dùng xác minh HMAC-SHA256 (tự động, không cần cấu hình).
- Mattermost loại bỏ dữ liệu callback khỏi phản hồi API của nó (tính năng bảo mật), nên tất cả các nút sẽ bị xóa khi nhấp — không thể xóa một phần.
- ID hành động chứa dấu gạch nối hoặc dấu gạch dưới sẽ được tự động làm sạch (giới hạn định tuyến của Mattermost).
Cấu hình và khả năng truy cập
Cấu hình và khả năng truy cập
channels.mattermost.capabilities: mảng các chuỗi năng lực. Thêm"inlineButtons"để bật mô tả công cụ nút trong system prompt của agent.channels.mattermost.interactions.callbackBaseUrl: URL cơ sở bên ngoài tùy chọn cho callback của nút (ví dụhttps://gateway.example.com). Dùng tùy chọn này khi Mattermost không thể truy cập trực tiếp gateway tại host bind của gateway.- Trong thiết lập nhiều tài khoản, bạn cũng có thể đặt cùng trường này dưới
channels.mattermost.accounts.<id>.interactions.callbackBaseUrl. - Nếu bỏ qua
interactions.callbackBaseUrl, OpenClaw suy ra URL callback từgateway.customBindHost+gateway.port, sau đó fallback vềhttp://localhost:<port>. - Quy tắc khả năng truy cập: URL callback của nút phải truy cập được từ máy chủ Mattermost.
localhostchỉ hoạt động khi Mattermost và OpenClaw chạy trên cùng host/namespace mạng. - Nếu đích callback của bạn là riêng tư/tailnet/nội bộ, hãy thêm host/domain của nó vào
ServiceSettings.AllowedUntrustedInternalConnectionscủa Mattermost.
Tích hợp API trực tiếp (script bên ngoài)
Các script và Webhook bên ngoài có thể đăng nút trực tiếp qua Mattermost REST API thay vì đi qua công cụmessage của agent. Dùng buildButtonAttachments() từ Plugin khi có thể; nếu đăng JSON thô, hãy tuân theo các quy tắc sau:
Cấu trúc payload:
Serialize với khóa đã sắp xếp
Serialize với khóa đã sắp xếp và không có khoảng trắng (gateway dùng
JSON.stringify với khóa đã sắp xếp, tạo đầu ra dạng compact).Các lỗi HMAC thường gặp
Các lỗi HMAC thường gặp
json.dumpscủa Python mặc định thêm khoảng trắng ({"key": "val"}). Dùngseparators=(",", ":")để khớp với đầu ra compact của JavaScript ({"key":"val"}).- Luôn ký tất cả các trường context (trừ
_token). Gateway loại bỏ_tokenrồi ký mọi thứ còn lại. Ký một tập con sẽ khiến xác minh thất bại âm thầm. - Dùng
sort_keys=True— gateway sắp xếp khóa trước khi ký, và Mattermost có thể sắp xếp lại các trường context khi lưu payload. - Suy ra secret từ bot token (xác định), không phải byte ngẫu nhiên. Secret phải giống nhau giữa tiến trình tạo nút và gateway xác minh.
Bộ chuyển đổi thư mục
Plugin Mattermost bao gồm một bộ chuyển đổi thư mục phân giải tên kênh và tên người dùng qua Mattermost API. Điều này cho phép dùng đích#channel-name và @username trong openclaw message send và các lần gửi cron/webhook.
Không cần cấu hình — bộ chuyển đổi dùng bot token từ cấu hình tài khoản.
Nhiều tài khoản
Mattermost hỗ trợ nhiều tài khoản trongchannels.mattermost.accounts:
Khắc phục sự cố
Không có phản hồi trong kênh
Không có phản hồi trong kênh
Đảm bảo bot đã ở trong kênh và mention bot (oncall), dùng tiền tố kích hoạt (onchar), hoặc đặt
chatmode: "onmessage".Lỗi xác thực hoặc nhiều tài khoản
Lỗi xác thực hoặc nhiều tài khoản
- Kiểm tra bot token, URL cơ sở và tài khoản có được bật hay không.
- Vấn đề nhiều tài khoản: biến môi trường chỉ áp dụng cho tài khoản
default.
Lệnh slash gốc thất bại
Lệnh slash gốc thất bại
Unauthorized: invalid command token.: OpenClaw không chấp nhận callback token. Nguyên nhân điển hình:- đăng ký lệnh slash thất bại hoặc chỉ hoàn tất một phần khi khởi động
- callback đang đi tới sai gateway/tài khoản
- Mattermost vẫn có các lệnh cũ trỏ tới đích callback trước đó
- gateway khởi động lại mà không kích hoạt lại lệnh slash
- Nếu lệnh slash gốc ngừng hoạt động, hãy kiểm tra log để tìm
mattermost: failed to register slash commandshoặcmattermost: native slash commands enabled but no commands could be registered. - Nếu bỏ qua
callbackUrlvà log cảnh báo rằng callback được phân giải thànhhttp://127.0.0.1:18789/..., URL đó có lẽ chỉ truy cập được khi Mattermost chạy trên cùng host/namespace mạng với OpenClaw. Thay vào đó, hãy đặtcommands.callbackUrlrõ ràng và có thể truy cập từ bên ngoài.
Vấn đề với nút
Vấn đề với nút
- Nút xuất hiện dưới dạng ô trắng: agent có thể đang gửi dữ liệu nút sai định dạng. Kiểm tra rằng mỗi nút có cả hai trường
textvàcallback_data. - Nút hiển thị nhưng nhấp không có tác dụng: xác minh
AllowedUntrustedInternalConnectionstrong cấu hình máy chủ Mattermost bao gồm127.0.0.1 localhost, vàEnablePostActionIntegrationlàtruetrong ServiceSettings. - Nút trả về 404 khi nhấp:
idcủa nút có khả năng chứa dấu gạch nối hoặc dấu gạch dưới. Router hành động của Mattermost bị hỏng với ID không phải chữ và số. Chỉ dùng[a-zA-Z0-9]. - Log Gateway báo
invalid _token: HMAC không khớp. Kiểm tra rằng bạn ký tất cả các trường context (không phải một tập con), dùng khóa đã sắp xếp và dùng JSON compact (không có khoảng trắng). Xem phần HMAC ở trên. - Log Gateway báo
missing _token in context: trường_tokenkhông có trong context của nút. Đảm bảo trường này được đưa vào khi xây dựng payload tích hợp. - Xác nhận hiển thị ID thô thay vì tên nút:
context.action_idkhông khớp vớiidcủa nút. Đặt cả hai về cùng một giá trị đã làm sạch. - Agent không biết về nút: thêm
capabilities: ["inlineButtons"]vào cấu hình kênh Mattermost.
Liên quan
- Định tuyến kênh — định tuyến phiên cho tin nhắn
- Tổng quan về kênh — tất cả các kênh được hỗ trợ
- Nhóm — hành vi chat nhóm và kiểm soát mention
- Ghép đôi — xác thực DM và luồng ghép đôi
- Bảo mật — mô hình truy cập và gia cố