Status: Plugin yang dapat diunduh (token bot + peristiwa WebSocket). Saluran, grup, dan DM didukung. Mattermost adalah platform perpesanan tim yang dapat di-host sendiri; lihat situs resmi di mattermost.com untuk detail produk dan unduhan.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.
Instal
Instal Mattermost sebelum mengonfigurasi saluran:- registri npm
- Checkout lokal
Penyiapan cepat
Pastikan Plugin tersedia
Rilis OpenClaw paket saat ini sudah menyertakannya. Instalasi lama/kustom dapat menambahkannya secara manual dengan perintah di atas.
Perintah slash native
Perintah slash native bersifat ikut serta. Saat diaktifkan, OpenClaw mendaftarkan perintah slashoc_* melalui API Mattermost dan menerima POST callback di server HTTP Gateway.
Catatan perilaku
Catatan perilaku
native: "auto"default-nya dinonaktifkan untuk Mattermost. Aturnative: trueuntuk mengaktifkan.- Jika
callbackUrldihilangkan, OpenClaw menurunkannya dari host/port Gateway +callbackPath. - Untuk penyiapan multi-akun,
commandsdapat diatur di tingkat atas atau di bawahchannels.mattermost.accounts.<id>.commands(nilai akun menimpa bidang tingkat atas). - Callback perintah divalidasi dengan token per perintah yang dikembalikan oleh Mattermost saat OpenClaw mendaftarkan perintah
oc_*. - OpenClaw menyegarkan pendaftaran perintah Mattermost saat ini sebelum menerima setiap callback sehingga token usang dari perintah slash yang dihapus atau dibuat ulang berhenti diterima tanpa perlu memulai ulang Gateway.
- Validasi callback gagal secara tertutup jika API Mattermost tidak dapat mengonfirmasi bahwa perintah masih terkini; validasi yang gagal di-cache sebentar, pencarian serentak digabungkan, dan awal pencarian baru dibatasi lajunya per perintah untuk membatasi tekanan replay.
- Callback slash gagal secara tertutup saat pendaftaran gagal, startup parsial, atau token callback tidak cocok dengan token terdaftar perintah yang diselesaikan (token yang valid untuk satu perintah tidak dapat mencapai validasi upstream untuk perintah lain).
Persyaratan keterjangkauan
Persyaratan keterjangkauan
Endpoint callback harus dapat dijangkau dari server Mattermost.
- Jangan atur
callbackUrlkelocalhostkecuali Mattermost berjalan di host/namespace jaringan yang sama dengan OpenClaw. - Jangan atur
callbackUrlke URL dasar Mattermost Anda kecuali URL tersebut melakukan reverse-proxy/api/channels/mattermost/commandke OpenClaw. - Pemeriksaan cepat adalah
curl https://<gateway-host>/api/channels/mattermost/command; GET seharusnya mengembalikan405 Method Not Alloweddari OpenClaw, bukan404.
Allowlist egress Mattermost
Allowlist egress Mattermost
Jika callback Anda menargetkan alamat privat/tailnet/internal, atur
ServiceSettings.AllowedUntrustedInternalConnections Mattermost agar menyertakan host/domain callback.Gunakan entri host/domain, bukan URL lengkap.- Baik:
gateway.tailnet-name.ts.net - Buruk:
https://gateway.tailnet-name.ts.net
Variabel lingkungan (akun default)
Atur ini di host Gateway jika Anda lebih memilih variabel lingkungan:MATTERMOST_BOT_TOKEN=...MATTERMOST_URL=https://chat.example.com
Variabel lingkungan hanya berlaku untuk akun default (
default). Akun lain harus menggunakan nilai konfigurasi.MATTERMOST_URL tidak dapat diatur dari .env workspace; lihat File .env workspace.Mode chat
Mattermost merespons DM secara otomatis. Perilaku saluran dikendalikan olehchatmode:
- oncall (default)
- onmessage
- onchar
Respons hanya saat @disebut di saluran.
onchartetap merespons @mention eksplisit.channels.mattermost.requireMentiondihormati untuk konfigurasi lama tetapichatmodelebih disarankan.
Threading dan sesi
Gunakanchannels.mattermost.replyToMode untuk mengontrol apakah balasan saluran dan grup tetap berada di saluran utama atau memulai thread di bawah posting pemicu.
off(default): hanya membalas dalam thread saat posting masuk sudah berada dalam thread.first: untuk posting saluran/grup tingkat atas, mulai thread di bawah posting tersebut dan rutekan percakapan ke sesi dengan cakupan thread.all: perilaku yang sama denganfirstuntuk Mattermost saat ini.- Pesan langsung mengabaikan pengaturan ini dan tetap tanpa thread.
- Sesi dengan cakupan thread menggunakan id posting pemicu sebagai root thread.
firstdanallsaat ini setara karena setelah Mattermost memiliki root thread, potongan lanjutan dan media berlanjut di thread yang sama.
Kontrol akses (DM)
- Default:
channels.mattermost.dmPolicy = "pairing"(pengirim tidak dikenal mendapatkan kode pairing). - Setujui melalui:
openclaw pairing list mattermostopenclaw pairing approve mattermost <CODE>
- DM publik:
channels.mattermost.dmPolicy="open"pluschannels.mattermost.allowFrom=["*"]. channels.mattermost.allowFrommenerima entriaccessGroup:<name>. Lihat Grup akses.
Saluran (grup)
- Default:
channels.mattermost.groupPolicy = "allowlist"(berbasis mention). - Allowlist pengirim dengan
channels.mattermost.groupAllowFrom(ID pengguna direkomendasikan). channels.mattermost.groupAllowFrommenerima entriaccessGroup:<name>. Lihat Grup akses.- Override mention per saluran berada di bawah
channels.mattermost.groups.<channelId>.requireMentionatauchannels.mattermost.groups["*"].requireMentionuntuk default. - Pencocokan
@usernamedapat berubah dan hanya diaktifkan saatchannels.mattermost.dangerouslyAllowNameMatching: true. - Saluran terbuka:
channels.mattermost.groupPolicy="open"(berbasis mention). - Catatan runtime: jika
channels.mattermostsama sekali tidak ada, runtime kembali kegroupPolicy="allowlist"untuk pemeriksaan grup (meskipunchannels.defaults.groupPolicydiatur).
Target untuk pengiriman keluar
Gunakan format target ini denganopenclaw message send atau cron/webhook:
channel:<id>untuk saluranuser:<id>untuk DM@usernameuntuk DM (diselesaikan melalui API Mattermost)
Percobaan ulang saluran DM
Saat OpenClaw mengirim ke target DM Mattermost dan perlu menyelesaikan saluran langsung terlebih dahulu, secara default ia mencoba ulang kegagalan pembuatan saluran langsung yang sementara. Gunakanchannels.mattermost.dmChannelRetry untuk menyetel perilaku tersebut secara global untuk Plugin Mattermost, atau channels.mattermost.accounts.<id>.dmChannelRetry untuk satu akun.
- Ini hanya berlaku untuk pembuatan saluran DM (
/api/v4/channels/direct), bukan setiap panggilan API Mattermost. - Percobaan ulang berlaku untuk kegagalan sementara seperti batas laju, respons 5xx, serta kesalahan jaringan atau timeout.
- Kesalahan klien 4xx selain
429diperlakukan sebagai permanen dan tidak dicoba ulang.
Streaming pratinjau
Mattermost melakukan streaming pemikiran, aktivitas alat, dan teks balasan parsial ke dalam satu posting pratinjau draf yang diselesaikan di tempat saat jawaban akhir aman untuk dikirim. Pratinjau diperbarui pada id posting yang sama alih-alih membanjiri saluran dengan pesan per potongan. Final media/kesalahan membatalkan edit pratinjau yang tertunda dan menggunakan pengiriman normal alih-alih mem-flush posting pratinjau sementara. Aktifkan melaluichannels.mattermost.streaming:
Mode streaming
Mode streaming
partialadalah pilihan umum: satu posting pratinjau yang diedit saat balasan bertambah, lalu diselesaikan dengan jawaban lengkap.blockmenggunakan potongan draf bergaya append di dalam posting pratinjau.progressmenampilkan pratinjau status saat menghasilkan dan hanya memposting jawaban akhir saat selesai.offmenonaktifkan streaming pratinjau.
Catatan perilaku streaming
Catatan perilaku streaming
- Jika stream tidak dapat diselesaikan di tempat (misalnya posting dihapus di tengah stream), OpenClaw kembali mengirim posting akhir baru sehingga balasan tidak pernah hilang.
- Payload yang hanya berisi penalaran disembunyikan dari posting saluran, termasuk teks yang datang sebagai blockquote
> Reasoning:. Atur/reasoning onuntuk melihat pemikiran di permukaan lain; posting akhir Mattermost hanya menyimpan jawaban. - Lihat Streaming untuk matriks pemetaan saluran.
Reaksi (alat pesan)
- Gunakan
message action=reactdenganchannel=mattermost. messageIdadalah id posting Mattermost.emojimenerima nama sepertithumbsupatau:+1:(titik dua opsional).- Atur
remove=true(boolean) untuk menghapus reaksi. - Peristiwa tambah/hapus reaksi diteruskan sebagai peristiwa sistem ke sesi agen yang dirutekan.
channels.mattermost.actions.reactions: aktifkan/nonaktifkan tindakan reaksi (default true).- Override per akun:
channels.mattermost.accounts.<id>.actions.reactions.
Tombol interaktif (alat pesan)
Kirim pesan dengan tombol yang dapat diklik. Saat pengguna mengklik tombol, agen menerima pilihan dan dapat merespons. Aktifkan tombol dengan menambahkaninlineButtons ke kemampuan saluran:
message action=send dengan parameter buttons. Tombol adalah array 2D (baris tombol):
Label tampilan.
Nilai yang dikirim kembali saat diklik (digunakan sebagai ID tindakan).
Gaya tombol.
Tombol diganti dengan konfirmasi
Semua tombol diganti dengan baris konfirmasi (misalnya, ”✓ Yes dipilih oleh @user”).
Catatan implementasi
Catatan implementasi
- Callback tombol menggunakan verifikasi HMAC-SHA256 (otomatis, tidak perlu konfigurasi).
- Mattermost menghapus data callback dari respons API-nya (fitur keamanan), sehingga semua tombol dihapus saat diklik - penghapusan sebagian tidak memungkinkan.
- ID tindakan yang berisi tanda hubung atau garis bawah disanitasi secara otomatis (batasan perutean Mattermost).
Konfigurasi dan keterjangkauan
Konfigurasi dan keterjangkauan
channels.mattermost.capabilities: array string kapabilitas. Tambahkan"inlineButtons"untuk mengaktifkan deskripsi alat tombol di prompt sistem agen.channels.mattermost.interactions.callbackBaseUrl: URL dasar eksternal opsional untuk callback tombol (misalnyahttps://gateway.example.com). Gunakan ini saat Mattermost tidak dapat menjangkau gateway di host bind-nya secara langsung.- Dalam penyiapan multi-akun, Anda juga dapat mengatur bidang yang sama di bawah
channels.mattermost.accounts.<id>.interactions.callbackBaseUrl. - Jika
interactions.callbackBaseUrldihilangkan, OpenClaw memperoleh URL callback darigateway.customBindHost+gateway.port, lalu beralih kehttp://localhost:<port>. - Aturan keterjangkauan: URL callback tombol harus dapat dijangkau dari server Mattermost.
localhosthanya berfungsi saat Mattermost dan OpenClaw berjalan pada host/namespace jaringan yang sama. - Jika target callback Anda privat/tailnet/internal, tambahkan host/domain-nya ke Mattermost
ServiceSettings.AllowedUntrustedInternalConnections.
Integrasi API langsung (skrip eksternal)
Skrip eksternal dan Webhook dapat memposting tombol langsung melalui Mattermost REST API alih-alih melalui alatmessage milik agen. Gunakan buildButtonAttachments() dari Plugin jika memungkinkan; jika memposting JSON mentah, ikuti aturan ini:
Struktur payload:
Serialisasi dengan kunci terurut
Serialisasikan dengan kunci terurut dan tanpa spasi (Gateway menggunakan
JSON.stringify dengan kunci terurut, yang menghasilkan keluaran ringkas).Kekeliruan umum HMAC
Kekeliruan umum HMAC
json.dumpsmilik Python menambahkan spasi secara default ({"key": "val"}). Gunakanseparators=(",", ":")agar cocok dengan keluaran ringkas JavaScript ({"key":"val"}).- Selalu tandatangani semua bidang konteks (dikurangi
_token). Gateway menghapus_tokenlalu menandatangani semua yang tersisa. Menandatangani subset menyebabkan kegagalan verifikasi senyap. - Gunakan
sort_keys=True- Gateway mengurutkan kunci sebelum menandatangani, dan Mattermost dapat menyusun ulang bidang konteks saat menyimpan payload. - Turunkan secret dari token bot (deterministik), bukan byte acak. Secret harus sama antara proses yang membuat tombol dan Gateway yang memverifikasi.
Adapter direktori
Plugin Mattermost menyertakan adapter direktori yang menyelesaikan nama saluran dan pengguna melalui Mattermost API. Ini mengaktifkan target#channel-name dan @username dalam openclaw message send serta pengiriman Cron/Webhook.
Tidak diperlukan konfigurasi - adapter menggunakan token bot dari konfigurasi akun.
Multi-akun
Mattermost mendukung beberapa akun di bawahchannels.mattermost.accounts:
Pemecahan masalah
Tidak ada balasan di saluran
Tidak ada balasan di saluran
Pastikan bot berada di saluran dan sebut bot tersebut (oncall), gunakan prefiks pemicu (onchar), atau atur
chatmode: "onmessage".Kesalahan autentikasi atau multi-akun
Kesalahan autentikasi atau multi-akun
- Periksa token bot, URL dasar, dan apakah akun diaktifkan.
- Masalah multi-akun: variabel env hanya berlaku untuk akun
default.
Perintah slash native gagal
Perintah slash native gagal
Unauthorized: invalid command token.: OpenClaw tidak menerima token callback. Penyebab umum:- pendaftaran perintah slash gagal atau hanya selesai sebagian saat startup
- callback mengenai Gateway/akun yang salah
- Mattermost masih memiliki perintah lama yang menunjuk ke target callback sebelumnya
- Gateway dimulai ulang tanpa mengaktifkan ulang perintah slash
- Jika perintah slash native berhenti berfungsi, periksa log untuk
mattermost: failed to register slash commandsataumattermost: native slash commands enabled but no commands could be registered. - Jika
callbackUrldihilangkan dan log memperingatkan bahwa callback diselesaikan kehttp://127.0.0.1:18789/..., URL tersebut mungkin hanya dapat dijangkau saat Mattermost berjalan pada host/namespace jaringan yang sama dengan OpenClaw. Aturcommands.callbackUrleksplisit yang dapat dijangkau secara eksternal sebagai gantinya.
Masalah tombol
Masalah tombol
- Tombol muncul sebagai kotak putih: agen mungkin mengirim data tombol yang salah format. Periksa bahwa setiap tombol memiliki bidang
textdancallback_data. - Tombol dirender tetapi klik tidak melakukan apa pun: verifikasi
AllowedUntrustedInternalConnectionsdalam konfigurasi server Mattermost mencakup127.0.0.1 localhost, dan bahwaEnablePostActionIntegrationbernilaitruedalam ServiceSettings. - Tombol mengembalikan 404 saat diklik:
idtombol kemungkinan berisi tanda hubung atau garis bawah. Router tindakan Mattermost rusak pada ID non-alfanumerik. Gunakan hanya[a-zA-Z0-9]. - Log Gateway
invalid _token: ketidakcocokan HMAC. Periksa bahwa Anda menandatangani semua bidang konteks (bukan subset), menggunakan kunci terurut, dan menggunakan JSON ringkas (tanpa spasi). Lihat bagian HMAC di atas. - Log Gateway
missing _token in context: bidang_tokentidak ada dalam konteks tombol. Pastikan bidang itu disertakan saat membangun payload integrasi. - Konfirmasi menampilkan ID mentah alih-alih nama tombol:
context.action_idtidak cocok denganidtombol. Atur keduanya ke nilai tersanitasi yang sama. - Agen tidak tahu tentang tombol: tambahkan
capabilities: ["inlineButtons"]ke konfigurasi saluran Mattermost.
Terkait
- Perutean Saluran - perutean sesi untuk pesan
- Ikhtisar Saluran - semua saluran yang didukung
- Grup - perilaku obrolan grup dan gating sebutan
- Pemasangan - autentikasi DM dan alur pemasangan
- Keamanan - model akses dan hardening