Di halaman ini
Di halaman ini
Schemas and formatting
Pemformatan Markdown
OpenClaw mengonversi Markdown keluar menjadi representasi perantara bersama (IR) sebelum merender keluaran khusus kanal. IR menyimpan teks biasa beserta rentang gaya/tautan, sehingga satu langkah penguraian digunakan oleh setiap kanal dan pemotongan tidak pernah membagi pemformatan di tengah rentang.
Alur pemrosesan
- Uraikan Markdown menjadi IR (
markdownToIR) - teks biasa beserta rentang gaya (tebal, miring, coret, kode, blok kode, spoiler, kutipan blok, judul 1-6) dan rentang tautan. Offset menggunakan unit kode UTF-16 agar rentang gaya Signal selaras langsung dengan API-nya. Tabel hanya diuraikan jika kanal mengaktifkan mode tabel. - Potong IR (
chunkMarkdownIR/renderMarkdownIRChunksWithinLimit)- pemisahan dilakukan pada teks IR sebelum perenderan, sehingga gaya sebaris dan tautan dipotong per potongan alih-alih terputus pada batas.
- Render per kanal (
renderMarkdownWithMarkers) - peta penanda gaya mengubah rentang menjadi markup asli kanal.
| Kanal | Perender | Catatan |
|---|---|---|
| Slack | token mrkdwn (*bold*, _italic_, `code`, pagar kode) |
Tautan menjadi <url|label>; tautan otomatis dinonaktifkan saat penguraian untuk menghindari tautan ganda |
| Telegram | tag HTML (<b>, <i>, <s>, <code>, <pre><code>, <a href>, <tg-spoiler>) |
Juga mendukung tabel dan judul pesan kaya (<h1>-<h6>) saat richMessages aktif |
| Signal | teks biasa + rentang text-style |
Tautan dirender sebagai label (url) jika label berbeda dari URL |
| Discord, WhatsApp, iMessage, Microsoft Teams, dan kanal lainnya | teks biasa | Tanpa penataan berbasis IR; konversi tabel Markdown tetap dijalankan melalui convertMarkdownTables |
Contoh IR
Markdown masukan: OC_I18N_900000 IR (skematis): OC_I18N_900001
Penanganan tabel
markdown.tables mengontrol cara kanal mengonversi tabel Markdown, per
kanal dan secara opsional per akun:
| Mode | Perilaku |
|---|---|
code |
Render sebagai tabel ASCII yang disejajarkan di dalam blok kode (nilai bawaan cadangan) |
bullets |
Konversi setiap baris menjadi poin butir label: value |
block |
Pertahankan tabel asli jika transportasi mendukungnya; jika tidak, gunakan code sebagai cadangan |
off |
Nonaktifkan penguraian tabel; teks tabel mentah diteruskan tanpa perubahan |
Nilai bawaan Plugin per kanal: Signal, WhatsApp, dan Matrix menggunakan
bullets secara bawaan; Mattermost menggunakan off secara bawaan; Telegram menggunakan block secara bawaan (yang
ditetapkan menjadi code kecuali akun mengaktifkan richMessages). Setiap
kanal tanpa nilai bawaan Plugin eksplisit menggunakan code sebagai cadangan.
OC_I18N_900002
Aturan pemotongan
- Batas potongan berasal dari adaptor/konfigurasi kanal dan berlaku untuk teks IR, bukan keluaran yang telah dirender.
- Blok kode berpagar dipertahankan sebagai satu blok dengan baris baru di akhir agar kanal merender pagar penutup dengan benar.
- Awalan daftar dan kutipan blok merupakan bagian dari teks IR, sehingga pemotongan tidak pernah membagi di tengah awalan.
- Gaya sebaris tidak pernah terbagi di antara potongan; perender membuka kembali gaya yang masih aktif di awal potongan berikutnya.
Lihat Streaming dan pemotongan untuk perilaku batas potongan dan pengiriman di berbagai kanal.
Kebijakan tautan
- Slack:
[label](url)-><url|label>; URL polos tetap polos. - Telegram:
[label](url)-><a href="url">label</a>(mode penguraian HTML). - Signal:
[label](url)->label (url)kecuali label sudah cocok dengan URL.
Spoiler
Penanda spoiler (||spoiler||) diuraikan untuk Signal (dipetakan ke rentang gaya SPOILER)
dan Telegram (dipetakan ke <tg-spoiler>). Kanal lain memperlakukan
||...|| sebagai teks biasa.
Menambahkan atau memperbarui pemformat kanal
- Uraikan sekali dengan
markdownToIR(...), dengan meneruskan opsi yang sesuai untuk kanal (autolink,headingStyle,blockquotePrefix,tableMode). - Render dengan
renderMarkdownWithMarkers(...)dan peta penanda gaya (atau logika rentang gaya khusus untuk transportasi seperti Signal). - Potong dengan
chunkMarkdownIR(...)ataurenderMarkdownIRChunksWithinLimit(...)sebelum merender setiap potongan. - Hubungkan adaptor agar memanggil pemotong dan perender baru dari jalur pengiriman keluar.
- Uji dengan pengujian format serta pengujian pengiriman keluar jika kanal melakukan pemotongan.
Kendala umum
- Token kurung sudut Slack (
<@U123>,<#C123>,<https://...>) harus tetap utuh saat pengodean; HTML mentah tetap harus dikodekan dengan aman. - HTML Telegram memerlukan pengodean teks di luar tag untuk menghindari markup yang rusak.
- Rentang gaya Signal menggunakan offset UTF-16, bukan offset titik kode.
- Pertahankan baris baru di akhir blok kode berpagar agar penanda penutup berada pada baris tersendiri.