สถานะ: Plugin แบบดาวน์โหลดได้ (โทเค็นบอต + เหตุการณ์ WebSocket) รองรับช่อง กลุ่ม และ DM Mattermost เป็นแพลตฟอร์มส่งข้อความสำหรับทีมที่โฮสต์เองได้; ดูรายละเอียดผลิตภัณฑ์และดาวน์โหลดได้ที่เว็บไซต์ทางการ mattermost.comDocumentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
ติดตั้ง
ติดตั้ง Mattermost ก่อนกำหนดค่าช่อง:- npm registry
- Local checkout
ตั้งค่าอย่างรวดเร็ว
Ensure plugin is available
OpenClaw รุ่นแพ็กเกจปัจจุบันรวม Plugin นี้ไว้แล้ว การติดตั้งรุ่นเก่าหรือแบบกำหนดเองสามารถเพิ่มด้วยตนเองได้ด้วยคำสั่งด้านบน
คำสั่ง slash แบบเนทีฟ
คำสั่ง slash แบบเนทีฟเป็นแบบเลือกเปิดใช้ เมื่อเปิดใช้ OpenClaw จะลงทะเบียนคำสั่ง slashoc_* ผ่าน Mattermost API และรับ POST callback บนเซิร์ฟเวอร์ HTTP ของ Gateway
Behavior notes
Behavior notes
native: "auto"มีค่าเริ่มต้นเป็นปิดใช้งานสำหรับ Mattermost ตั้งค่าnative: trueเพื่อเปิดใช้- หากละ
callbackUrlไว้ OpenClaw จะสร้างค่าจากโฮสต์/พอร์ตของ Gateway +callbackPath - สำหรับการตั้งค่าหลายบัญชี สามารถตั้ง
commandsที่ระดับบนสุดหรือภายใต้channels.mattermost.accounts.<id>.commandsได้ (ค่าของบัญชีจะเขียนทับฟิลด์ระดับบนสุด) - callback ของคำสั่งจะถูกตรวจสอบด้วยโทเค็นรายคำสั่งที่ Mattermost ส่งคืนเมื่อ OpenClaw ลงทะเบียนคำสั่ง
oc_* - OpenClaw รีเฟรชการลงทะเบียนคำสั่ง Mattermost ปัจจุบันก่อนยอมรับ callback แต่ละครั้ง เพื่อให้โทเค็นเก่าจากคำสั่ง slash ที่ถูกลบหรือสร้างใหม่หยุดถูกยอมรับโดยไม่ต้องรีสตาร์ต Gateway
- การตรวจสอบ callback จะปิดกั้นโดยค่าเริ่มต้นหาก Mattermost API ไม่สามารถยืนยันได้ว่าคำสั่งยังเป็นปัจจุบันอยู่; การตรวจสอบที่ล้มเหลวจะถูกแคชชั่วครู่ การค้นหาพร้อมกันจะถูกรวมเข้าด้วยกัน และการเริ่มค้นหาใหม่จะถูกจำกัดอัตราต่อคำสั่งเพื่อจำกัดแรงกดดันจากการเล่นซ้ำ
- callback ของ slash จะปิดกั้นเมื่อการลงทะเบียนล้มเหลว การเริ่มต้นทำได้บางส่วน หรือโทเค็น callback ไม่ตรงกับโทเค็นที่ลงทะเบียนของคำสั่งที่ resolve ได้ (โทเค็นที่ใช้ได้กับคำสั่งหนึ่งจะไม่สามารถไปถึงการตรวจสอบ upstream สำหรับอีกคำสั่งหนึ่งได้)
Reachability requirement
Reachability requirement
endpoint ของ callback ต้องเข้าถึงได้จากเซิร์ฟเวอร์ Mattermost
- อย่าตั้ง
callbackUrlเป็นlocalhostเว้นแต่ Mattermost จะทำงานบนโฮสต์/namespace เครือข่ายเดียวกับ OpenClaw - อย่าตั้ง
callbackUrlเป็น URL ฐานของ Mattermost เว้นแต่ URL นั้นจะ reverse-proxy/api/channels/mattermost/commandไปยัง OpenClaw - การตรวจสอบแบบรวดเร็วคือ
curl https://<gateway-host>/api/channels/mattermost/command; GET ควรคืนค่า405 Method Not Allowedจาก OpenClaw ไม่ใช่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
ตัวแปรสภาพแวดล้อม (บัญชีเริ่มต้น)
ตั้งค่าเหล่านี้บนโฮสต์ Gateway หากคุณต้องการใช้ตัวแปรสภาพแวดล้อม:MATTERMOST_BOT_TOKEN=...MATTERMOST_URL=https://chat.example.com
ตัวแปรสภาพแวดล้อมมีผลกับบัญชี เริ่มต้น (
default) เท่านั้น บัญชีอื่นต้องใช้ค่าการกำหนดค่าไม่สามารถตั้ง MATTERMOST_URL จาก .env ของ workspace ได้; ดู ไฟล์ .env ของ workspaceโหมดแชท
Mattermost ตอบ DM โดยอัตโนมัติ พฤติกรรมของช่องถูกควบคุมโดยchatmode:
- oncall (default)
- onmessage
- onchar
ตอบเฉพาะเมื่อถูก @mentioned ในช่อง
oncharยังคงตอบต่อการ @mention อย่างชัดเจนchannels.mattermost.requireMentionยังรองรับสำหรับการกำหนดค่าเดิม แต่แนะนำให้ใช้chatmode
เธรดและเซสชัน
ใช้channels.mattermost.replyToMode เพื่อควบคุมว่าการตอบกลับในช่องและกลุ่มจะอยู่ในช่องหลักหรือเริ่มเธรดใต้โพสต์ที่ทริกเกอร์
off(ค่าเริ่มต้น): ตอบในเธรดเฉพาะเมื่อโพสต์ขาเข้าอยู่ในเธรดอยู่แล้วfirst: สำหรับโพสต์ระดับบนสุดในช่อง/กลุ่ม ให้เริ่มเธรดใต้โพสต์นั้นและกำหนดเส้นทางการสนทนาไปยังเซสชันตามขอบเขตเธรดall: พฤติกรรมเดียวกับfirstสำหรับ Mattermost ในปัจจุบัน- ข้อความโดยตรงจะไม่สนใจการตั้งค่านี้และยังคงไม่เป็นเธรด
- เซสชันตามขอบเขตเธรดใช้ id ของโพสต์ที่ทริกเกอร์เป็นรากของเธรด
firstและallเทียบเท่ากันในปัจจุบัน เพราะเมื่อ Mattermost มีรากของเธรดแล้ว chunk ติดตามผลและสื่อจะดำเนินต่อในเธรดเดียวกันนั้น
การควบคุมการเข้าถึง (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"(ถูกควบคุมด้วยการ mention) - allowlist ผู้ส่งด้วย
channels.mattermost.groupAllowFrom(แนะนำให้ใช้ ID ผู้ใช้) channels.mattermost.groupAllowFromรับรายการaccessGroup:<name>ดู กลุ่มการเข้าถึง- การเขียนทับการ mention ต่อช่องอยู่ภายใต้
channels.mattermost.groups.<channelId>.requireMentionหรือchannels.mattermost.groups["*"].requireMentionสำหรับค่าเริ่มต้น - การจับคู่
@usernameเปลี่ยนแปลงได้และเปิดใช้เฉพาะเมื่อchannels.mattermost.dangerouslyAllowNameMatching: true - ช่องเปิด:
channels.mattermost.groupPolicy="open"(ถูกควบคุมด้วยการ mention) - หมายเหตุ runtime: หาก
channels.mattermostขาดหายไปทั้งหมด runtime จะ fallback เป็นgroupPolicy="allowlist"สำหรับการตรวจสอบกลุ่ม (แม้จะตั้งchannels.defaults.groupPolicyไว้ก็ตาม)
เป้าหมายสำหรับการส่งออก
ใช้รูปแบบเป้าหมายเหล่านี้กับopenclaw message send หรือ cron/webhook:
channel:<id>สำหรับช่องuser:<id>สำหรับ DM@usernameสำหรับ DM (resolve ผ่าน Mattermost API)
การ retry ช่อง DM
เมื่อ OpenClaw ส่งไปยังเป้าหมาย DM ของ Mattermost และต้อง resolve ช่องโดยตรงก่อน ระบบจะ retry ความล้มเหลวชั่วคราวในการสร้างช่องโดยตรงตามค่าเริ่มต้น ใช้channels.mattermost.dmChannelRetry เพื่อปรับพฤติกรรมนี้แบบทั่วทั้ง Plugin Mattermost หรือใช้ channels.mattermost.accounts.<id>.dmChannelRetry สำหรับบัญชีเดียว
- ใช้กับการสร้างช่อง DM (
/api/v4/channels/direct) เท่านั้น ไม่ใช่ทุกการเรียก Mattermost API - การ retry ใช้กับความล้มเหลวชั่วคราว เช่น การจำกัดอัตรา การตอบกลับ 5xx และข้อผิดพลาดเครือข่ายหรือ timeout
- ข้อผิดพลาดไคลเอนต์ 4xx นอกเหนือจาก
429ถือเป็นถาวรและจะไม่ retry
การสตรีมตัวอย่างก่อนส่ง
Mattermost สตรีมการคิด กิจกรรมเครื่องมือ และข้อความตอบกลับบางส่วนเข้าไปใน โพสต์ตัวอย่างแบบร่าง เดียว ซึ่งจะสรุปในที่เดิมเมื่อคำตอบสุดท้ายปลอดภัยที่จะส่ง ตัวอย่างจะอัปเดตบน id โพสต์เดียวกันแทนการสแปมช่องด้วยข้อความราย chunk ผลลัพธ์สุดท้ายที่เป็นสื่อ/ข้อผิดพลาดจะยกเลิกการแก้ไขตัวอย่างที่ค้างอยู่และใช้การส่งแบบปกติแทนการ flush โพสต์ตัวอย่างชั่วคราว เปิดใช้ผ่านchannels.mattermost.streaming:
Streaming modes
Streaming modes
partialเป็นตัวเลือกทั่วไป: โพสต์ตัวอย่างหนึ่งรายการที่ถูกแก้ไขเมื่อคำตอบยาวขึ้น จากนั้นสรุปด้วยคำตอบที่สมบูรณ์blockใช้ chunk แบบร่างสไตล์ต่อท้ายภายในโพสต์ตัวอย่างprogressแสดงตัวอย่างสถานะระหว่างสร้าง และโพสต์เฉพาะคำตอบสุดท้ายเมื่อเสร็จสิ้นoffปิดใช้งานการสตรีมตัวอย่าง
Streaming behavior notes
Streaming behavior notes
- หากไม่สามารถสรุปสตรีมในที่เดิมได้ (เช่น โพสต์ถูกลบระหว่างสตรีม) OpenClaw จะ fallback ไปส่งโพสต์สุดท้ายใหม่ เพื่อให้คำตอบไม่สูญหาย
- payload ที่เป็นเฉพาะการใช้เหตุผลจะถูกระงับจากโพสต์ในช่อง รวมถึงข้อความที่มาถึงเป็น blockquote
> Reasoning:ตั้งค่า/reasoning onเพื่อดูการคิดในพื้นผิวอื่น; โพสต์สุดท้ายของ Mattermost จะเก็บไว้เฉพาะคำตอบ - ดู การสตรีม สำหรับเมทริกซ์การแมปช่อง
ปฏิกิริยา (เครื่องมือข้อความ)
- ใช้
message action=reactกับchannel=mattermost messageIdคือ id โพสต์ของ Mattermostemojiรับชื่ออย่างthumbsupหรือ:+1:(เครื่องหมายโคลอนเป็นทางเลือก)- ตั้ง
remove=true(บูลีน) เพื่อลบปฏิกิริยา - เหตุการณ์เพิ่ม/ลบปฏิกิริยาจะถูกส่งต่อเป็นเหตุการณ์ระบบไปยังเซสชัน agent ที่ถูกกำหนดเส้นทาง
channels.mattermost.actions.reactions: เปิด/ปิดการกระทำปฏิกิริยา (ค่าเริ่มต้น true)- การเขียนทับต่อบัญชี:
channels.mattermost.accounts.<id>.actions.reactions
ปุ่มโต้ตอบ (เครื่องมือข้อความ)
ส่งข้อความพร้อมปุ่มที่คลิกได้ เมื่อผู้ใช้คลิกปุ่ม agent จะได้รับตัวเลือกและสามารถตอบกลับได้ เปิดใช้ปุ่มโดยเพิ่มinlineButtons ไปยังความสามารถของช่อง:
message action=send พร้อมพารามิเตอร์ buttons ปุ่มเป็นอาร์เรย์ 2 มิติ (แถวของปุ่ม):
ป้ายกำกับที่แสดงผล
ค่าที่ส่งกลับเมื่อคลิก (ใช้เป็น ID ของการดำเนินการ)
สไตล์ของปุ่ม
Buttons replaced with confirmation
ปุ่มทั้งหมดจะถูกแทนที่ด้วยบรรทัดยืนยัน (เช่น ”✓ Yes selected by @user”)
Implementation notes
Implementation notes
- คอลแบ็กของปุ่มใช้การตรวจสอบ HMAC-SHA256 (อัตโนมัติ ไม่ต้องตั้งค่า)
- Mattermost ตัดข้อมูลคอลแบ็กออกจากการตอบกลับ API ของตัวเอง (คุณสมบัติด้านความปลอดภัย) ดังนั้นปุ่มทั้งหมดจะถูกลบเมื่อคลิก - ไม่สามารถลบบางส่วนได้
- ID การดำเนินการที่มีขีดกลางหรือขีดล่างจะถูกทำให้ปลอดภัยโดยอัตโนมัติ (ข้อจำกัดการกำหนดเส้นทางของ Mattermost)
Config and reachability
Config and reachability
channels.mattermost.capabilities: อาร์เรย์ของสตริงความสามารถ เพิ่ม"inlineButtons"เพื่อเปิดใช้คำอธิบายเครื่องมือปุ่มในพรอมป์ระบบของเอเจนต์channels.mattermost.interactions.callbackBaseUrl: URL ฐานภายนอกแบบไม่บังคับสำหรับคอลแบ็กของปุ่ม (เช่นhttps://gateway.example.com) ใช้ค่านี้เมื่อ Mattermost ไม่สามารถเข้าถึง Gateway ที่โฮสต์ที่ผูกไว้ได้โดยตรง- ในการตั้งค่าหลายบัญชี คุณยังสามารถตั้งค่าฟิลด์เดียวกันภายใต้
channels.mattermost.accounts.<id>.interactions.callbackBaseUrlได้ด้วย - หากละเว้น
interactions.callbackBaseUrlOpenClaw จะอนุมาน URL คอลแบ็กจากgateway.customBindHost+gateway.portแล้วจึงย้อนกลับไปใช้http://localhost:<port> - กฎการเข้าถึง: URL คอลแบ็กของปุ่มต้องเข้าถึงได้จากเซิร์ฟเวอร์ Mattermost
localhostใช้ได้เฉพาะเมื่อ Mattermost และ OpenClaw ทำงานบนโฮสต์/เนมสเปซเครือข่ายเดียวกัน - หากปลายทางคอลแบ็กของคุณเป็นแบบส่วนตัว/tailnet/ภายใน ให้เพิ่มโฮสต์/โดเมนนั้นลงใน
ServiceSettings.AllowedUntrustedInternalConnectionsของ Mattermost
การผสานรวม API โดยตรง (สคริปต์ภายนอก)
สคริปต์ภายนอกและ Webhook สามารถโพสต์ปุ่มโดยตรงผ่าน Mattermost REST API แทนการผ่านเครื่องมือmessage ของเอเจนต์ ใช้ buildButtonAttachments() จาก Plugin เมื่อเป็นไปได้ หากโพสต์ JSON ดิบ ให้ทำตามกฎเหล่านี้:
โครงสร้างเพย์โหลด:
Derive the secret from the bot token
HMAC-SHA256(key="openclaw-mattermost-interactions", data=botToken)Serialize with sorted keys
ซีเรียลไลซ์โดยใช้ คีย์ที่เรียงลำดับแล้ว และ ไม่มีช่องว่าง (Gateway ใช้
JSON.stringify กับคีย์ที่เรียงลำดับแล้ว ซึ่งสร้างผลลัพธ์แบบกะทัดรัด)Common HMAC pitfalls
Common HMAC pitfalls
json.dumpsของ Python เพิ่มช่องว่างโดยค่าเริ่มต้น ({"key": "val"}) ใช้separators=(",", ":")เพื่อให้ตรงกับผลลัพธ์แบบกะทัดรัดของ JavaScript ({"key":"val"})- เซ็น ทุก ฟิลด์บริบทเสมอ (ยกเว้น
_token) Gateway จะตัด_tokenออกแล้วเซ็นทุกอย่างที่เหลือ การเซ็นเพียงบางส่วนจะทำให้การตรวจสอบล้มเหลวอย่างเงียบ ๆ - ใช้
sort_keys=True- Gateway เรียงคีย์ก่อนเซ็น และ Mattermost อาจเรียงฟิลด์บริบทใหม่เมื่อจัดเก็บเพย์โหลด - อนุมานความลับจากโทเค็นบอต (กำหนดได้แน่นอน) ไม่ใช่ไบต์แบบสุ่ม ความลับต้องเหมือนกันระหว่างโปรเซสที่สร้างปุ่มและ Gateway ที่ตรวจสอบ
อะแดปเตอร์ไดเรกทอรี
Plugin Mattermost มีอะแดปเตอร์ไดเรกทอรีที่แปลงชื่อแชนเนลและชื่อผู้ใช้ผ่าน Mattermost API ซึ่งทำให้ใช้เป้าหมาย#channel-name และ @username ใน openclaw message send และการส่ง Cron/Webhook ได้
ไม่จำเป็นต้องตั้งค่า - อะแดปเตอร์ใช้โทเค็นบอตจากค่าตั้งค่าบัญชี
หลายบัญชี
Mattermost รองรับหลายบัญชีภายใต้channels.mattermost.accounts:
การแก้ไขปัญหา
No replies in channels
No replies in channels
ตรวจสอบว่าบอตอยู่ในแชนเนลและกล่าวถึงบอต (oncall), ใช้คำนำหน้าทริกเกอร์ (onchar), หรือตั้งค่า
chatmode: "onmessage"Auth or multi-account errors
Auth or multi-account errors
- ตรวจสอบโทเค็นบอต, URL ฐาน และบัญชีเปิดใช้งานอยู่หรือไม่
- ปัญหาหลายบัญชี: env vars ใช้กับบัญชี
defaultเท่านั้น
Native slash commands fail
Native slash commands fail
Unauthorized: invalid command token.: OpenClaw ไม่ยอมรับโทเค็นคอลแบ็ก สาเหตุทั่วไป:- การลงทะเบียนคำสั่ง slash ล้มเหลวหรือเสร็จสมบูรณ์เพียงบางส่วนตอนเริ่มต้น
- คอลแบ็กกำลังไปยัง Gateway/บัญชีที่ผิด
- Mattermost ยังมีคำสั่งเก่าที่ชี้ไปยังปลายทางคอลแบ็กก่อนหน้า
- Gateway รีสตาร์ทโดยไม่ได้เปิดใช้งานคำสั่ง slash อีกครั้ง
- หากคำสั่ง slash แบบเนทีฟหยุดทำงาน ให้ตรวจสอบล็อกสำหรับ
mattermost: failed to register slash commandsหรือmattermost: native slash commands enabled but no commands could be registered - หากละเว้น
callbackUrlและล็อกเตือนว่าคอลแบ็กแปลงเป็นhttp://127.0.0.1:18789/...URL นั้นน่าจะเข้าถึงได้เฉพาะเมื่อ Mattermost ทำงานบนโฮสต์/เนมสเปซเครือข่ายเดียวกันกับ OpenClaw ให้ตั้งค่าcommands.callbackUrlที่เข้าถึงได้จากภายนอกอย่างชัดเจนแทน
Buttons issues
Buttons issues
ที่เกี่ยวข้อง
- การกำหนดเส้นทางแชนเนล - การกำหนดเส้นทางเซสชันสำหรับข้อความ
- ภาพรวมแชนเนล - แชนเนลที่รองรับทั้งหมด
- กลุ่ม - พฤติกรรมแชทกลุ่มและการควบคุมด้วยการกล่าวถึง
- การจับคู่ - การยืนยันตัวตน DM และโฟลว์การจับคู่
- ความปลอดภัย - โมเดลการเข้าถึงและการเสริมความแข็งแกร่ง