Cài đặt
Cài đặt Mattermost trước khi cấu hình kênh:- sổ đăng ký npm
- Bản checkout cục bộ
Thiết lập nhanh
Đảm bảo Plugin có sẵn
Cài đặt
@openclaw/mattermost bằng lệnh ở trên, sau đó khởi động lại Gateway nếu Gateway đã chạy.Lệnh gạch chéo gốc
Lệnh gạch chéo gốc là tùy chọn bật. Khi được bật, OpenClaw đăng ký các lệnh gạch chéooc_* qua Mattermost API và nhận các POST callback 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 đối với Mattermost. Đặtnative: trueđể bật.- Nếu bỏ qua
callbackUrl, OpenClaw sẽ suy ra một giá trị 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ị tài khoản ghi đè các trường cấp cao nhất). - Callback lệnh được xác thực bằng các mã thông báo theo từng lệnh do Mattermost trả về khi OpenClaw đăng ký các lệnh
oc_*. - OpenClaw làm mới đăng ký lệnh Mattermost hiện tại trước khi chấp nhận từng callback, để các mã thông báo cũ từ lệnh gạch chéo đã bị xóa hoặc tạo lại sẽ ngừng được chấp nhận mà không cần khởi động lại gateway.
- Xác thực callback đóng khi lỗi nếu Mattermost API 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 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.
- Callback gạch chéo đóng khi lỗi 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 callback không khớp với mã thông báo đã đăng ký của lệnh đã phân giải (mã thông báo hợp lệ cho một lệnh không thể đi tới xác thực upstream cho lệnh khác).
Yêu cầu về khả năng truy cập
Yêu cầu về khả năng truy cập
Điểm cuối 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 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. - Cách kiểm tra nhanh là
curl https://<gateway-host>/api/channels/mattermost/command; một GET phải trả về405 Method Not Allowedtừ OpenClaw, không phải404.
Danh sách cho phép đầu ra Mattermost
Danh sách cho phép đầu ra Mattermost
Nếu callback của bạn nhắm tới địa chỉ riêng/tailnet/nội bộ, hãy đặt Mattermost
ServiceSettings.AllowedUntrustedInternalConnections để bao gồm máy chủ/miền callback.Dùng mục nhập 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 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ế độ trò chuyện
Mattermost tự động phản hồi DM. Hành vi kênh được điều khiển 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 @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.- Sau khi bot gửi một phản hồi hiển thị trong một luồng kênh, các tin nhắn sau đó trong cùng luồng sẽ được trả lời mà không cần @nhắc đến mới hoặc tiền tố
onchar, để các cuộc trò chuyện luồng nhiều lượt tiếp tục liền mạch. Việc tham gia được ghi nhớ trong 7 ngày không hoạt động của luồng (được làm mới ở mỗi phản hồi) và vẫn tồn tại qua các lần khởi động lại gateway. Các luồng mà bot chỉ quan sát sẽ không bị ảnh hưởng; bắt đầu một tin nhắn cấp cao mới để lại yêu cầu nhắc đến rõ ràng.
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ỉ trả lời trong một luồng khi bài đăng đến đã ở trong một luồng.first: với bài đăng cấp cao trong kênh/nhóm, bắt đầu một luồng dưới bài đăng đó và định tuyến cuộc trò chuyện tới một phiên theo phạm vi luồng.all: hành vi giốngfirstđối với Mattermost hiện nay.- Tin nhắn trực tiếp bỏ qua thiết lập này và vẫn không theo 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ì sau khi Mattermost có gốc luồng, các phần tiếp theo và phương tiện sẽ 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ục nhậpaccessGroup:<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 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). channels.mattermost.groupAllowFromchấp nhận các mục nhậpaccessGroup:<name>. Xem Nhóm truy cập.- Ghi đè nhắc đến 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 nhắc đến). - Ghi chú thời gian chạy: nếu thiếu hoàn toàn
channels.mattermost, thời gian chạy sẽ 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 Mattermost API)
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 OpenClaw 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 Mattermost API. - 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 xem là vĩnh viễn và không được thử lại.
Phát trực tuyến bản xem trước
Mattermost phát trực tuyế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 xem trước nháp 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 phần. Kết quả cuối cùng dạng phương tiện/lỗi 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ì xả một bài đăng xem trước dùng rồi bỏ. Bật quachannels.mattermost.streaming:
Chế độ phát trực tuyến
Chế độ phát trực tuyến
partiallà lựa chọn thường dùng: một bài đăng xem trước được chỉnh sửa khi phản hồi dài ra, rồi được hoàn tất với câu trả lời đầy đủ.blockdùng các phầ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 phát trực tuyến bản xem trước.
Ghi chú về hành vi phát trực tuyến
Ghi chú về hành vi phát trực tuyến
- 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ỉ chứa suy nghĩ bị chặn khỏi bài đăng kênh, bao gồm cả văn bản đến dưới dạng blockquote
> Thinking. Đặt/reasoning onđể xem suy nghĩ ở các bề mặt khác; bài đăng cuối cùng Mattermost chỉ giữ câu trả lời. - Xem Phát trực tuyến để 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 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 agent đã đị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 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. Các phản hồi thông thường của tác nhân cũng có thể bao gồm các tải trọngpresentation ngữ nghĩa. OpenClaw hiển thị các nút giá trị dưới dạng nút tương tác Mattermost, giữ các nút URL hiển thị trong nội dung tin nhắn, và hạ cấp menu chọn thành văn bản dễ đọc.
Bật nút bằng cách thêm inlineButtons vào khả năng của kênh:
message action=send với tham số buttons. Nút là một 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.
Buttons replaced with confirmation
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”).
Implementation notes
Implementation notes
- Callback của nút sử 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), vì vậy 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 được tự động làm sạch (giới hạn định tuyến của Mattermost).
Config and reachability
Config and reachability
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 prompt hệ thống của tác nhân.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 máy chủ 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 callback từgateway.customBindHost+gateway.port, rồi 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 máy chủ/không gian tên mạng. - Nếu đích callback của bạn là riêng tư/tailnet/nội bộ, hãy thêm máy chủ/miền của nó vào
ServiceSettings.AllowedUntrustedInternalConnectionscủa Mattermost.
Tích hợp API trực tiếp (tập lệnh bên ngoài)
Các tập lệnh bên ngoài và Webhook có thể đăng nút trực tiếp qua Mattermost REST API thay vì đi qua công cụmessage của tác nhân. Sử 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:
Derive the secret from the bot token
HMAC-SHA256(key="openclaw-mattermost-interactions", data=botToken)Serialize with sorted keys
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).Common HMAC pitfalls
Common HMAC pitfalls
json.dumpscủa Python mặc định thêm khoảng trắng ({"key": "val"}). Dùngseparators=(",", ":")để khớp với đầu ra gọn 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 tải trọng. - Suy ra secret từ bot token (xác định), không dùng 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 bật các đích#channel-name và @username trong openclaw message send cũng như 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 dướichannels.mattermost.accounts:
Khắc phục sự cố
No replies in channels
No replies in channels
Đả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".Auth or multi-account errors
Auth or multi-account errors
- 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.
Native slash commands fail
Native slash commands fail
Unauthorized: invalid command token.: OpenClaw không chấp nhận token callback. Nguyên nhân thường gặp:- đă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 trỏ đến sai Gateway/tài khoản
- Mattermost vẫn có các lệnh cũ trỏ đến đí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 máy chủ/không gian tên mạng với OpenClaw. Thay vào đó, hãy đặtcommands.callbackUrlrõ ràng có thể truy cập từ bên ngoài.
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 trò chuyện nhóm và cổng nhắc đến
- Ghép nối - xác thực DM và luồng ghép nối
- Bảo mật - mô hình truy cập và gia cố