- metin bölümleri
- küçük bağlam/alt bilgi metni
- ayırıcılar
- düğmeler
- seçim menüleri
- kart başlığı ve ton
components, Slack
blocks, Telegram buttons, Teams card veya Feishu card gibi yeni sağlayıcıya özgü alanları paylaşılan
mesaj aracına eklemeyin. Bunlar kanal Plugin’ine ait renderer çıktılarıdır.
Sözleşme
Plugin yazarları genel sözleşmeyi şuradan içe aktarır:value, kanal tıklanabilir denetimleri desteklediğinde kanalın mevcut etkileşim yolu üzerinden geri yönlendirilen bir uygulama eylem değeridir.url, bağlantı düğmesidir.valueolmadan var olabilir.labelzorunludur ve metin fallback’inde de kullanılır.styleyönlendiricidir. Renderer’lar desteklenmeyen stilleri gönderimi başarısız kılmak yerine güvenli varsayılanlara eşlemelidir.
options[].value, seçilen uygulama değeridir.placeholderyönlendiricidir ve yerel seçim desteği olmayan kanallarda yok sayılabilir.- Bir kanal seçimleri desteklemiyorsa fallback metin etiketleri listeler.
Üretici örnekleri
Basit kart:Renderer sözleşmesi
Kanal Plugin’leri, giden adaptörlerinde render desteğini bildirir:Çekirdek render akışı
BirReplyPayload veya mesaj eylemi presentation içerdiğinde çekirdek:
- Sunum payload’unu normalize eder.
- Hedef kanalın giden adaptörünü çözümler.
presentationCapabilitiesdeğerini okur.- Adaptör payload’u oluşturabiliyorsa
renderPresentationçağırır. - Adaptör yoksa veya oluşturamıyorsa korumacı metne fallback yapar.
- Ortaya çıkan payload’u normal kanal teslim yolu üzerinden gönderir.
- İlk başarılı gönderilen
mesajdan sonra
delivery.pingibi teslim meta verilerini uygular.
Bozulma kuralları
Sunum, sınırlı kanallarda güvenle gönderilebilir olmalıdır. Fallback metin şunları içerir:- ilk satır olarak
title - normal paragraflar olarak
textblokları - sıkıştırılmış bağlam satırları olarak
contextblokları - görsel ayırıcı olarak
dividerblokları - bağlantı düğmeleri için URL’ler dahil düğme etiketleri
- seçim seçenek etiketi
- Inline düğmeleri devre dışı Telegram, metin fallback’i gönderir.
- Seçim desteği olmayan bir kanal, seçim seçeneklerini metin olarak listeler.
- Yalnızca URL içeren bir düğme ya yerel bağlantı düğmesine ya da fallback URL satırına dönüşür.
- İsteğe bağlı pin hataları teslim edilen mesajı başarısız kılmaz.
delivery.pin.required: true durumudur; sabitleme zorunlu
olarak istenmişse ve kanal gönderilen mesajı sabitleyemiyorsa teslim başarısız raporlanır.
Sağlayıcı eşleme
Mevcut paketlenmiş renderer’lar:| Kanal | Yerel render hedefi | Notlar |
|---|---|---|
| Discord | Components ve component container’ları | Mevcut sağlayıcıya özgü payload üreticileri için eski channelData.discord.components korunur, ancak yeni paylaşılan gönderimler presentation kullanmalıdır. |
| Slack | Block Kit | Mevcut sağlayıcıya özgü payload üreticileri için eski channelData.slack.blocks korunur, ancak yeni paylaşılan gönderimler presentation kullanmalıdır. |
| Telegram | Metin artı inline klavyeler | Düğmeler/seçimler hedef yüzey için inline button yeteneği gerektirir; aksi hâlde metin fallback’i kullanılır. |
| Mattermost | Metin artı etkileşimli props | Diğer bloklar metne bozulur. |
| Microsoft Teams | Adaptive Cards | Her ikisi de sağlandığında düz message metni kartla birlikte eklenir. |
| Feishu | Etkileşimli kartlar | Kart başlığı title kullanabilir; gövde bu başlığı yinelemekten kaçınır. |
| Düz kanallar | Metin fallback’i | Renderer olmayan kanallar bile okunabilir çıktı alır. |
Presentation ve InteractiveReply
InteractiveReply, onay ve etkileşim
yardımcıları tarafından kullanılan daha eski iç alt kümedir. Şunları destekler:
- metin
- düğmeler
- seçimler
MessagePresentation, kanonik paylaşılan gönderim sözleşmesidir. Şunları ekler:
- başlık
- ton
- bağlam
- ayırıcı
- yalnızca URL içeren düğmeler
ReplyPayload.deliveryüzerinden genel teslim meta verileri
openclaw/plugin-sdk/interactive-runtime içindeki yardımcıları kullanın:
MessagePresentation kabul etmeli veya üretmelidir.
Teslim Pin’i
Sabitleme, sunum değil teslim davranışıdır.channelData.telegram.pin gibi
sağlayıcıya özgü alanlar yerine delivery.pin kullanın.
Semantik:
pin: true, ilk başarılı teslim edilen mesajı sabitler.pin.notifyvarsayılan olarakfalseolur.pin.requiredvarsayılan olarakfalseolur.- İsteğe bağlı pin hataları bozulur ve gönderilen mesajı sağlam bırakır.
- Zorunlu pin hataları teslimi başarısız kılar.
- Parçalanmış mesajlar kuyruk parçasını değil, ilk teslim edilen parçayı sabitler.
pin, unpin ve pins mesaj eylemleri hâlâ vardır.
Plugin yazarı kontrol listesi
- Kanal anlamsal sunumu render edebiliyorsa veya güvenle bozabiliyorsa
describeMessageTool(...)içindenpresentationbildirin. - Çalışma zamanı giden adaptörüne
presentationCapabilitiesekleyin. renderPresentationuygulamasını çalışma zamanı kodunda yapın; denetim düzlemi Plugin kurulum kodunda değil.- Yerel UI kütüphanelerini sıcak kurulum/katalog yollarının dışında tutun.
- Platform sınırlarını renderer ve testlerde koruyun.
- Desteklenmeyen düğmeler, seçimler, URL düğmeleri, başlık/metin
yinelenmesi ve karışık
messageartıpresentationgönderimleri için fallback testleri ekleyin. - Sağlayıcı gönderilen mesaj kimliğini sabitleyebiliyorsa
teslim pin desteğini
deliveryCapabilities.pinvepinDeliveredMessageüzerinden ekleyin. - Paylaşılan mesaj eylemi şeması üzerinden yeni sağlayıcıya özgü kart/blok/bileşen/düğme alanları açığa çıkarmayın.