Mainstream messaging
ข้อมูลเมตาการนำเสนอของ Matrix
OpenClaw แนบเมทาดาทา MessagePresentation ที่ปรับให้อยู่ในรูปแบบมาตรฐานกับเหตุการณ์ Matrix m.room.message ขาออกภายใต้คีย์เนื้อหา com.openclaw.presentation
ไคลเอนต์ Matrix มาตรฐานจะยังคงแสดงผล body ซึ่งเป็นข้อความธรรมดา ส่วนไคลเอนต์ที่รองรับ OpenClaw สามารถอ่านเมทาดาทาที่มีโครงสร้างและแสดงผล UI แบบเนทีฟ เช่น ปุ่ม รายการเลือก แถวบริบท และเส้นแบ่ง
เนื้อหาเหตุการณ์
{ "msgtype": "m.text", "body": "Select model\n\nChoose model:\n- DeepSeek", "com.openclaw.presentation": { "version": 1, "type": "message.presentation", "title": "Select model", "tone": "info", "blocks": [ { "type": "select", "placeholder": "Choose model", "options": [ { "label": "DeepSeek", "value": "/model deepseek/deepseek-chat" } ] } ] }}versionคือเวอร์ชันสคีมาของเมทาดาทา โดยเวอร์ชันปัจจุบันคือ1ส่วนtypeคือตัวจำแนกที่คงที่และมีค่าเป็น"message.presentation"เสมอ อะแดปเตอร์ Matrix จะปล่อยเฉพาะเพย์โหลดที่มีเวอร์ชันและชนิดตรงตามนี้เท่านั้น ในทำนองเดียวกัน ไคลเอนต์ควรละเว้นเวอร์ชันที่ไม่รู้จักซึ่งไม่สามารถตีความได้อย่างปลอดภัย ค่าtypeที่ไม่รู้จัก และชนิดบล็อกที่ไม่รู้จักtitleและtone(info,success,warning,danger,neutral) เป็นคำใบ้ที่ระบุหรือไม่ก็ได้- ปุ่มและตัวเลือกในรายการเลือกสามารถมี
actionที่ระบุชนิด ({ "type": "command", "command": "/..." }หรือ{ "type": "callback", "value": "..." }) ควบคู่กับสตริงvalueแบบเดิมได้ เมื่อมีทั้งสองอย่าง ให้เลือกใช้action
ลักษณะการทำงานสำรอง
OpenClaw จะแสดงผลข้อความธรรมดาสำรองที่อ่านได้ลงใน body เสมอ เมทาดาทาที่มีโครงสร้างเป็นส่วนเสริมและต้องไม่เป็นข้อกำหนดสำหรับการทำงานร่วมกันพื้นฐานของ Matrix
กฎการแสดงผลสำรอง:
- เนื้อหา
title,textและcontextจะแสดงผลเป็นบรรทัดข้อความธรรมดา - ปุ่มที่มีการดำเนินการ
commandจะแสดงผลเป็นlabel: `/command`เพื่อให้ยังคัดลอกคำสั่งได้ ปุ่มที่มีการดำเนินการcallbackหรือมีเพียงvalueแบบเดิมจะแสดงผลเฉพาะป้ายกำกับ เพื่อเก็บค่าคอลแบ็กที่ไม่เปิดเผยความหมายไว้เป็นส่วนตัว ส่วนปุ่มที่ปิดใช้งานจะแสดงผลเฉพาะป้ายกำกับเสมอ ปุ่ม URL และเว็บแอปจะแสดงผลเป็นlabel: URL - บล็อกรายการเลือกจะแสดงข้อความตัวอย่าง (หรือ
ตัวเลือก:) เป็นหัวเรื่อง ตามด้วยบรรทัดตัวเลือกที่มีเฉพาะป้ายกำกับ - หากไม่มีสิ่งใดแสดงผล เช่น การนำเสนอที่มีเฉพาะเส้นแบ่ง เนื้อหา body จะใช้
---เป็นข้อความสำรอง
ไคลเอนต์ที่ไม่รองรับจะยังคงแสดงข้อความสำรอง ส่วนไคลเอนต์ที่รองรับ OpenClaw อาจเลือกใช้เมทาดาทาที่มีโครงสร้างในการแสดงผล โดยยังเก็บข้อความสำรองไว้สำหรับการคัดลอก การค้นหา การแจ้งเตือน และการช่วยการเข้าถึง
บล็อกที่รองรับ
อะแดปเตอร์ Matrix ขาออกประกาศการรองรับแบบเนทีฟสำหรับ:
buttonsselectcontextdivider
บล็อก text รองรับผ่าน body สำรองเสมอ ให้ถือว่าบล็อกทั้งหมดเป็นเพียงคำใบ้ในการนำเสนอแบบพยายามอย่างดีที่สุด และละเว้นฟิลด์กับชนิดบล็อกที่ไม่รู้จัก แทนที่จะทำให้ทั้งข้อความล้มเหลว
การโต้ตอบ
เมทาดาทานี้ไม่ได้เพิ่มความหมายเชิงคอลแบ็กให้กับ Matrix ค่าของปุ่มและรายการเลือกเป็นเพย์โหลดการโต้ตอบสำรอง ซึ่งโดยทั่วไปคือคำสั่งแบบเครื่องหมายทับหรือคำสั่งข้อความ ไคลเอนต์ Matrix ที่ต้องการรองรับการโต้ตอบจะหาค่าของตัวควบคุม (action.command จากนั้น action.value และสุดท้าย value) แล้วส่งกลับไปยังห้องเป็นข้อความปกติ
ตัวอย่างเช่น ปุ่มที่มีค่า /model deepseek/deepseek-chat สามารถจัดการได้โดยส่งค่านั้นเป็นข้อความ Matrix แบบเข้ารหัสในห้องเดียวกัน
ความสัมพันธ์กับเมทาดาทาการอนุมัติ
com.openclaw.presentation ใช้สำหรับการนำเสนอข้อความแบบสมบูรณ์ทั่วไป
พรอมต์ขออนุมัติใช้เมทาดาทาเฉพาะ com.openclaw.approval เนื่องจากการอนุมัติมีสถานะที่เกี่ยวข้องกับความปลอดภัย การตัดสินใจ และรายละเอียดการดำเนินการ/Plugin หากมีคีย์เมทาดาทาทั้งสองอยู่ในเหตุการณ์เดียวกัน ไคลเอนต์ควรเลือกใช้ตัวแสดงผลการอนุมัติโดยเฉพาะ
ข้อความสื่อ
เมื่อการตอบกลับมี URL สื่อหลายรายการ OpenClaw จะส่งเหตุการณ์ Matrix หนึ่งเหตุการณ์ต่อ URL สื่อหนึ่งรายการ ข้อความคำบรรยายและเมทาดาทาการนำเสนอจะแนบกับเหตุการณ์แรกเท่านั้น เพื่อให้ไคลเอนต์ได้รับเพย์โหลดที่มีโครงสร้างคงที่เพียงชุดเดียวโดยไม่มีตัวแสดงผลซ้ำ กฎเดียวกันนี้ใช้เมื่อข้อความยาวถูกแบ่งเป็นหลายเหตุการณ์ โดยเมทาดาทาจะอยู่ในเหตุการณ์แรกเท่านั้น
ควรรักษาเมทาดาทาการนำเสนอให้มีขนาดกะทัดรัด ข้อความขนาดใหญ่ที่ผู้ใช้มองเห็นควรอยู่ใน body และใช้เส้นทางการแบ่งข้อความ Matrix ตามปกติ