- 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 tonu
components, Slack blocks, Telegram
buttons, Teams card veya Feishu card gibi sağlayıcıya özgü yeni alanlar
eklemeyin. Bunlar kanal Plugin’inin sahip olduğu renderer çıktılarıdır.
Sözleşme
Plugin yazarları genel sözleşmeyi şuradan içe aktarır:action.type: "command", çekirdeğin komut yolu üzerinden yerel bir eğik çizgi komutu çalıştırır. Bunu yerleşik komut düğmeleri ve menüler için kullanın.action.type: "callback", kanalın etkileşim yolu üzerinden opak Plugin verisi taşır. Kanal Plugin’leri callback verisini eğik çizgi komutları olarak yeniden yorumlamamalıdır.value, eski opak callback değeridir. Yeni kontrolleractionkullanmalıdır; böylece kanal Plugin’leri metinden tahmin yürütmeden komutları ve callback’leri eşleyebilir.urlbir bağlantı düğmesidir.valueolmadan var olabilir.webApp, kanala özgü yerel bir web uygulaması düğmesini tanımlar. Telegram bunuweb_appolarak oluşturur ve yalnızca özel sohbetlerde destekler.web_app, uyumluluk için gevşek JSON yüklerinde hâlâ kabul edilir, ancak TypeScript üreticileriwebAppkullanmalıdır.labelzorunludur ve metin yedeğinde de kullanılır.styletavsiye niteliğindedir. Renderer’lar desteklenmeyen stilleri gönderimi başarısız kılmak yerine güvenli bir varsayılana eşlemelidir.priorityisteğe bağlıdır. Bir kanal eylem sınırlarını duyurduğunda ve kontrollerin düşürülmesi gerektiğinde, çekirdek önce daha yüksek öncelikli düğmeleri tutar ve aynı önceliğe sahip düğmeler arasında özgün sırayı korur. Tüm kontroller sığdığında, yazıldığı sıra korunur.disabledisteğe bağlıdır. KanallarsupportsDisabledile açıkça destek vermelidir; aksi halde çekirdek devre dışı kontrolü etkileşimsiz yedek metne indirger.reusableisteğe bağlıdır. Yeniden kullanılabilir yerel callback’leri destekleyen kanallar, başarılı bir etkileşimden sonra eylemi kullanılabilir tutabilir. Bunu yenileme, inceleme veya daha fazla ayrıntı gibi tekrarlanabilir ya da idempotent eylemler için kullanın; normal tek seferlik onaylar ve yıkıcı eylemler için ayarlamayın.
options[].action, düğmeactionile aynı komut/callback anlamına sahiptir.options[].value, eski seçili uygulama değeridir.placeholdertavsiye niteliğindedir ve yerel seçim desteği olmayan kanallar tarafından yok sayılabilir.- Bir kanal seçimleri desteklemiyorsa, yedek metin etiketleri listeler.
Üretici örnekleri
Basit kart:Renderer sözleşmesi
Kanal Plugin’leri, giden bağdaştırıcılarında oluşturma desteğini bildirir:limits, çekirdeğin renderer’ı çağırmadan önce
uyarlayabileceği genel zarfı tanımlar:
Çekirdek oluşturma akışı
BirReplyPayload veya ileti eylemi presentation içerdiğinde, çekirdek:
- Sunum yükünü normalleştirir.
- Hedef kanalın giden bağdaştırıcısını çözer.
presentationCapabilitiesdeğerini okur.- Bağdaştırıcı bunları duyurduğunda eylem sayısı, etiket uzunluğu ve seçim seçeneği sayısı gibi genel yetenek sınırlarını uygular.
- Bağdaştırıcı yükü oluşturabiliyorsa
renderPresentationçağrısı yapar. - Bağdaştırıcı yoksa veya oluşturamıyorsa tutucu metne geri döner.
- Ortaya çıkan yükü normal kanal teslim yolu üzerinden gönderir.
- İlk başarılı gönderilen iletiden sonra
delivery.pingibi teslim metaverilerini uygular.
İndirgeme kuralları
Sunum, sınırlı kanallarda gönderilmeye güvenli olmalıdır. Yedek metin şunları içerir:- ilk satır olarak
title - normal paragraflar olarak
textblokları - kompakt 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çeneği etiketleri
Düğme değeri yedek görünürlüğü
Bir kanal etkileşimli kontrolleri oluşturamadığında, düğme ve seçim değerleri düz metne geri döner. Yedek davranış, opak callback verisini gizli tutarken kullanılabilirliği korur:commandtüründeki eylemler, kullanıcıların komutu kopyalayıp kanal girişinde elle çalıştırabilmesi içinlabel: \command“ olarak oluşturulur.callbacktüründeki eylemler ve eskivaluealanları yalnızca etiket olarak oluşturulur. Opak callback değeri yedek metinde gösterilmez.url/webAppdüğmeleri, URL kullanıcıya yönelik olduğu için URL metnini düğme etiketiyle birlikte oluşturur.- Seçim seçenekleri yalnızca etiket olarak oluşturulur. Alttaki seçenek değeri yedek metinde gösterilmez.
- Satır içi düğmeleri devre dışı olan Telegram metin yedeğ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 yedek URL satırına dönüşür.
- İsteğe bağlı sabitleme hataları teslim edilen iletiyi başarısız kılmaz.
delivery.pin.required: true değeridir; sabitleme zorunlu olarak
istenirse ve kanal gönderilen iletiyi sabitleyemezse, teslim başarısızlık
bildirir.
Sağlayıcı eşlemesi
Mevcut paketli renderer’lar:| Kanal | Yerel işleme hedefi | Notlar |
|---|---|---|
| Discord | Bileşenler ve bileşen kapsayıcıları | Mevcut sağlayıcıya yerel yük üreticileri için eski channelData.discord.components yapısını korur, ancak yeni paylaşılan gönderimler presentation kullanmalıdır. |
| Slack | Block Kit | Mevcut sağlayıcıya yerel yük üreticileri için eski channelData.slack.blocks yapısını korur, ancak yeni paylaşılan gönderimler presentation kullanmalıdır. |
| Telegram | Metin ve satır içi klavyeler | Düğmeler/seçimler hedef yüzey için satır içi düğme yeteneği gerektirir; aksi halde metin geri dönüşü kullanılır. |
| Mattermost | Metin ve etkileşimli özellikler | Diğer bloklar metne düşürülür. |
| Microsoft Teams | Adaptive Cards | Her ikisi de sağlandığında düz message metni kartla birlikte dahil edilir. |
| Feishu | Etkileşimli kartlar | Kart başlığı title kullanabilir; gövde bu başlığı yinelemekten kaçınır. |
| Düz kanallar | Metin geri dönüşü | İşleyicisi olmayan kanallar yine de 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 düğmeleri
ReplyPayload.deliveryüzerinden genel teslimat meta verileri
openclaw/plugin-sdk/interactive-runtime içindeki
yardımcıları kullanın:
OC_I18N_900011
Yeni kod doğrudan MessagePresentation kabul etmeli veya üretmelidir. Mevcut
interactive yükleri, presentation öğesinin kullanımdan kaldırılmış bir alt
kümesidir; daha eski üreticiler için runtime desteği sürer.
Eski InteractiveReply* türleri ve dönüştürme yardımcıları SDK’da
@deprecated olarak işaretlenmiştir:
InteractiveReply,InteractiveReplyBlock,InteractiveReplyButton,InteractiveReplyOption,InteractiveReplySelectBlockveInteractiveReplyTextBlocknormalizeInteractiveReply(...)hasInteractiveReplyBlocks(...)interactiveReplyToPresentation(...)presentationToInteractiveReply(...)presentationToInteractiveControlsReply(...)resolveInteractiveTextFallback(...)reduceInteractiveReply(...)
presentationToInteractiveReply(...) ve
presentationToInteractiveControlsReply(...), eski kanal uygulamaları için
işleyici köprüleri olarak kullanılabilir kalır. Yeni üretici kodu bunları
çağırmamalıdır; presentation gönderin ve işlemeyi core/kanal uyarlamasına
bırakın.
Onay yardımcılarının da presentation öncelikli karşılıkları vardır:
buildApprovalInteractiveReplyFromActionDescriptors(...)yerinebuildApprovalPresentationFromActionDescriptors(...)kullanınbuildApprovalInteractiveReply(...)yerinebuildApprovalPresentation(...)kullanınbuildExecApprovalInteractiveReply(...)yerinebuildExecApprovalPresentation(...)kullanın
renderMessagePresentationFallbackText(...), yalnızca ayırıcıdan oluşan bir
presentation gibi metin geri dönüşü olmayan presentation blokları için boş dize
döndürür. Boş olmayan bir gönderim gövdesi gerektiren taşıyıcılar, varsayılan
geri dönüş sözleşmesini değiştirmeden en küçük gövdeyi etkinleştirmek için
emptyFallback geçebilir.
Teslimat sabitlemesi
Sabitleme, presentation değil teslimat davranışıdır.channelData.telegram.pin
gibi sağlayıcıya yerel alanlar yerine delivery.pin kullanın.
Anlamlar:
pin: true, başarıyla teslim edilen ilk mesajı sabitler.pin.notifyvarsayılan olarakfalsedeğerindedir.pin.requiredvarsayılan olarakfalsedeğerindedir.- İsteğe bağlı sabitleme hataları düşürülür ve gönderilen mesaj olduğu gibi bırakılır.
- Zorunlu sabitleme hataları teslimatı başarısız kılar.
- Parçalanmış mesajlar son parçayı değil, teslim edilen ilk parçayı sabitler.
pin, unpin ve pins mesaj eylemleri, sağlayıcının bu işlemleri
desteklediği mevcut mesajlar için hâlâ vardır.
Plugin yazarı kontrol listesi
- Kanal anlamsal presentation öğesini işleyebildiğinde veya güvenli şekilde
düşürebildiğinde
describeMessageTool(...)üzerindenpresentationbildirin. - Runtime giden adaptörüne
presentationCapabilitiesekleyin. renderPresentationişlevini kontrol düzlemi plugin kurulum kodunda değil, runtime kodunda uygulayın.- Yerel kullanıcı arayüzü kütüphanelerini sıcak kurulum/katalog yollarının dışında tutun.
- Bilindiklerinde genel yetenek sınırlarını
presentationCapabilities.limitsüzerinde bildirin. - Son platform sınırlarını işleyicide ve testlerde koruyun.
- Desteklenmeyen düğmeler, seçimler, URL düğmeleri, başlık/metin yinelemesi ve
karışık
messageartıpresentationgönderimleri için geri dönüş testleri ekleyin. - Teslimat sabitleme desteğini yalnızca sağlayıcı gönderilen mesaj kimliğini
sabitleyebildiğinde
deliveryCapabilities.pinvepinDeliveredMessageüzerinden ekleyin. - Paylaşılan mesaj eylemi şeması üzerinden yeni sağlayıcıya yerel kart/blok/bileşen/düğme alanları açmayın.