Trạng thái: Plugin có thể tải xuống (mã thông báo bot + sự kiện WebSocket). Hỗ trợ kênh, nhóm và DM. Mattermost là một 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://docs2.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Cài đặt
Cài đặt Mattermost trước khi cấu hình kênh:- npm registry
- Bản checkout cục bộ
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 đã bao gồm Plugin này. Các bản cài đặt cũ/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 POST gọi lại trên máy chủ HTTP của Gateway.
Ghi chú hành vi
Ghi chú hành vi
native: "auto"mặc định bị tắt cho Mattermost. Đặtnative: trueđể bật.- Nếu bỏ qua
callbackUrl, OpenClaw suy ra một URL từ máy chủ/cổng 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ị của tài khoản ghi đè các trường cấp cao nhất). - Các gọi lại lệnh được xác thực bằng mã thông báo theo từng lệnh do Mattermost trả về khi OpenClaw đăng ký lệnh
oc_*. - OpenClaw làm mới đăng ký lệnh Mattermost hiện tại trước khi chấp nhận mỗi gọi lại, để các mã thông báo cũ từ lệnh slash đã xóa hoặc được tạo lại không còn được chấp nhận mà không cần khởi động lại Gateway.
- Xác thực gọi lại thất bại đóng nếu API Mattermost không thể xác nhận lệnh vẫn còn hiện hành; các lần xác thực thất bại được lưu vào bộ nhớ đệm trong thời gian ngắn, các tra cứu đồng thời được gộp lại, và việc bắt đầu tra cứu mới được giới hạn tốc độ theo từng lệnh để giới hạn áp lực phát lại.
- Gọi lại slash thất bại đóng khi đăng ký thất bại, khởi động chỉ hoàn tất một phần, hoặc mã thông báo gọi lại không khớp với mã thông báo đã đăng ký của lệnh được phân giải (mã thông báo hợp lệ cho một lệnh không thể tới bước xác thực thượng nguồn cho một lệnh khác).
Yêu cầu có thể truy cập
Yêu cầu có thể truy cập
Điểm cuối gọi lại phải có thể truy cập được từ máy chủ Mattermost.
- Không đặt
callbackUrlthànhlocalhosttrừ khi Mattermost chạy trên cùng máy chủ/không gian tên 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; một 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 gọi lại 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 máy chủ/miền gọi lại.Dùng mục máy chủ/miền, không dùng URL đầy đủ.- Đúng:
gateway.tailnet-name.ts.net - Sai:
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 máy chủ Gateway nếu bạn ưu tiê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ế độ trò chuyện
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 @mention rõ ràng.channels.mattermost.requireMentionvẫn được tôn trọng cho cấu hình cũ, nhưng ưu tiên dùngchatmode.
Luồng và phiên
Dùngchannels.mattermost.replyToMode để kiểm soát việc phản hồi kênh và nhóm ở lại kênh chính hay bắt đầu một luồng dưới bài đăng kích hoạt.
off(mặc định): chỉ phản hồi trong luồng khi bài đăng đến đã nằm trong một luồng.first: với bài đăng kênh/nhóm cấp cao nhất, bắt đầu một luồng dưới bài đăng đó và định tuyến cuộc trò chuyện tới phiên theo phạm vi luồng.all: hiện nay 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 luồng.
- Phiên theo phạm vi luồng dùng id bài đăng kích hoạt làm gốc luồng.
firstvàallhiện tương đương vì khi Mattermost đã có gốc luồng, các đoạn tiếp theo và phương tiện tiếp tục trong cùng luồng đó.
Kiểm soát truy cập (DM)
- Mặc định:
channels.mattermost.dmPolicy = "pairing"(người gửi không xác định 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=["*"]. channels.mattermost.allowFromchấp nhận các mụcaccessGroup:<name>. Xem Nhóm truy cập.
Kênh (nhóm)
- Mặc định:
channels.mattermost.groupPolicy = "allowlist"(được kiểm soát bằng mention). - Cho phép người gửi bằng
channels.mattermost.groupAllowFrom(khuyến nghị dùng ID người dùng). channels.mattermost.groupAllowFromchấp nhận các mụcaccessGroup:<name>. Xem Nhóm truy cập.- Ghi đè mention theo từng kênh nằm dưới
channels.mattermost.groups.<channelId>.requireMentionhoặcchannels.mattermost.groups["*"].requireMentioncho mặc định. - Khớp
@usernamelà có thể thay đổi và chỉ được bật khichannels.mattermost.dangerouslyAllowNameMatching: true. - Kênh mở:
channels.mattermost.groupPolicy="open"(được kiểm soát bằng mention). - Ghi chú runtime: nếu
channels.mattermosthoàn toàn bị thiếu, runtime quay vềgroupPolicy="allowlist"cho kiểm tra nhóm (ngay cả khichannels.defaults.groupPolicyđược đặt).
Đích cho 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 DM@usernamecho DM (được phân giải qua API Mattermost)
Thử lại kênh DM
Khi OpenClaw gửi tới một đí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 đó ở phạm vi 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 hết thời gian chờ.
- Lỗi máy khách 4xx ngoài
429được coi là vĩnh viễn và không được thử lại.
Truyền phát bản xem trước
Mattermost truyền phát suy luận, hoạt động công cụ và văn bản phản hồi từng phần vào một bài đăng xem trước nháp duy nhất, đượ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 ngập kênh bằng tin nhắn theo từng đoạn. Kết quả cuối cùng dạng phương tiện/lỗi hủy các chỉnh sửa xem trước đang chờ và dùng cách gửi bình thường thay vì đẩy ra một bài đăng xem trước tạm. Bật quachannels.mattermost.streaming:
Chế độ truyền phát
Chế độ truyền phát
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 dần, rồi được hoàn tất với câu trả lời đầy đủ.blockdùng các đoạ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 truyền phát bản xem trước.
Ghi chú hành vi truyền phát
Ghi chú hành vi truyền phát
- Nếu luồng 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 cùng mới để phản hồi không bao giờ bị mất.
- Payload chỉ có suy luận 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 suy luận ở các bề mặt khác; bài đăng Mattermost cuối cùng chỉ giữ câu trả lời. - Xem Truyền phát để biết ma trận ánh xạ kênh.
Phản ứng (công cụ tin nhắn)
- Dùng
message action=reactvớichannel=mattermost. messageIdlà id bài đăng Mattermost.emojichấp nhận các tên nhưthumbsuphoặc:+1:(dấu hai chấm là tùy chọn).- Đặt
remove=true(boolean) để xóa một phản ứng. - Sự kiện thêm/xóa phản ứng được chuyển tiếp dưới dạng sự kiện hệ thống tới phiên tác nhân được định tuyến.
channels.mattermost.actions.reactions: bật/tắt hành động phản ứng (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 có nút có thể bấm. Khi người dùng bấm một nút, tác nhân 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 năng lực 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 (được 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ả nút được thay bằng một dòng xác nhận (ví dụ: ”✓ Có được @user chọn”).
Ghi chú triển khai
Ghi chú triển khai
- Các lệnh gọi lại 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 lệnh gọi lại khỏi phản hồi API của nó (tính năng bảo mật), vì vậy tất cả nút đều 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 được làm sạch tự động (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 khả năng. Thêm"inlineButtons"để bật mô tả công cụ nút trong lời nhắc hệ thống của tác tử.channels.mattermost.interactions.callbackBaseUrl: URL cơ sở bên ngoài tùy chọn cho các lệnh gọi lại của nút (ví dụhttps://gateway.example.com). Dùng mục này khi Mattermost không thể truy cập trực tiếp Gateway tại host bind của nó.- Trong các thiết lập nhiều tài khoản, bạn cũng có thể đặt cùng trường đó dưới
channels.mattermost.accounts.<id>.interactions.callbackBaseUrl. - Nếu bỏ qua
interactions.callbackBaseUrl, OpenClaw suy ra URL lệnh gọi lại từgateway.customBindHost+gateway.port, rồi dự phòng vềhttp://localhost:<port>. - Quy tắc khả năng truy cập: URL lệnh gọi lại 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 mục tiêu lệnh gọi lại của bạn là riêng tư/tailnet/nội bộ, hãy thêm host/miền 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 bên ngoài và Webhook có thể đăng nút trực tiếp qua API REST Mattermost thay vì đi qua công cụmessage của tác tử. 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 tải trọng:
Dẫn xuất khóa bí mật từ mã thông báo bot
HMAC-SHA256(key="openclaw-mattermost-interactions", data=botToken)Tuần tự hóa với khóa đã sắp xếp
Tuần tự hóa 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 ra đầu ra gọn).Lỗi thường gặp với HMAC
Lỗi thường gặp với HMAC
json.dumpscủa Python thêm khoảng trắng theo mặc định ({"key": "val"}). Dùngseparators=(",", ":")để khớp với đầu ra gọn của JavaScript ({"key":"val"}).- Luôn ký tất cả trường ngữ cảnh (trừ
_token). Gateway loại bỏ_tokenrồi ký mọi thứ còn lại. Ký một tập con gây lỗi xác minh â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 ngữ cảnh khi lưu tải trọng. - Dẫn xuất khóa bí mật từ mã thông báo bot (xác định), không phải byte ngẫu nhiên. Khóa bí mật 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à người dùng qua API Mattermost. Điều này bật các mục tiêu#channel-name và @username trong openclaw message send và các lượt gửi Cron/Webhook.
Không cần cấu hình - bộ chuyển đổi dùng mã thông báo bot từ cấu hình tài khoản.
Nhiều tài khoản
Mattermost hỗ trợ nhiều tài khoản dướichannels.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 có trong kênh và nhắc đến nó (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 mã thông báo bot, URL cơ sở và tài khoản có được bật hay không.
- Sự cố 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 bị lỗi
Lệnh slash gốc bị lỗi
Unauthorized: invalid command token.: OpenClaw không chấp nhận mã thông báo lệnh gọi lại. Nguyên nhân thường gặp:- việc đăng ký lệnh slash thất bại hoặc chỉ hoàn tất một phần khi khởi động
- lệnh gọi lại đang đi tới sai Gateway/tài khoản
- Mattermost vẫn có các lệnh cũ trỏ tới mục tiêu lệnh gọi lại 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 nhật ký để tìm
mattermost: failed to register slash commandshoặcmattermost: native slash commands enabled but no commands could be registered. - Nếu bỏ qua
callbackUrlvà nhật ký cảnh báo rằng lệnh gọi lại phân giải thànhhttp://127.0.0.1:18789/..., URL đó có thể 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à truy cập được từ bên ngoài.
Sự cố nút
Sự cố nút
- Các nút xuất hiện dưới dạng hộp trắng: tác tử có thể đang gửi dữ liệu nút sai định dạng. Kiểm tra mỗi nút có cả trường
textvàcallback_data. - Các nút hiển thị nhưng lượt 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. - Các nút trả về 404 khi nhấp:
idcủa nút có thể chứa dấu gạch nối hoặc dấu gạch dưới. Bộ định tuyến hành động của Mattermost bị lỗi với ID không phải chữ và số. Chỉ dùng[a-zA-Z0-9]. - Nhật ký Gateway ghi
invalid _token: HMAC không khớp. Kiểm tra rằng bạn ký tất cả trường ngữ cảnh (không phải một tập con), dùng khóa đã sắp xếp và dùng JSON gọn (không có khoảng trắng). Xem phần HMAC ở trên. - Nhật ký Gateway ghi
missing _token in context: trường_tokenkhông nằm trong ngữ cảnh của nút. Đảm bảo trường này được bao gồm khi tạo tải trọng 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 thành cùng một giá trị đã làm sạch. - Tác tử 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ả kênh được hỗ trợ
- Nhóm - hành vi trò chuyện nhóm và kiểm soát bằng nhắc đến
- Ghép cặp - xác thực tin nhắn trực tiếp và luồng ghép cặp
- Bảo mật - mô hình truy cập và gia cố bảo mật