Mainstream messaging

ข้อมูลเมตาการนำเสนอของ Matrix

OpenClaw แนบเมทาดาทา MessagePresentation ที่ปรับให้อยู่ในรูปแบบมาตรฐานกับเหตุการณ์ Matrix m.room.message ขาออกภายใต้คีย์เนื้อหา com.openclaw.presentation

ไคลเอนต์ Matrix มาตรฐานจะยังคงแสดงผล body ซึ่งเป็นข้อความธรรมดา ส่วนไคลเอนต์ที่รองรับ OpenClaw สามารถอ่านเมทาดาทาที่มีโครงสร้างและแสดงผล UI แบบเนทีฟ เช่น ปุ่ม รายการเลือก แถวบริบท และเส้นแบ่ง

เนื้อหาเหตุการณ์

json
{  "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 ขาออกประกาศการรองรับแบบเนทีฟสำหรับ:

  • buttons
  • select
  • context
  • divider

บล็อก 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 ตามปกติ

Was this useful?
On this page

On this page