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 işleyici çıktılarıdır.
Sözleşme
Plugin yazarları herkese açık 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. Yerleşik komut düğmeleri ve menüleri için bunu kullanın.action.type: "callback", belirsiz Plugin verilerini kanalın etkileşim yolu üzerinden taşır. Kanal Plugin’leri, geri çağırma verilerini eğik çizgi komutları olarak yeniden yorumlamamalıdır.action.type: "approval", tek bir kalıcı operatör onayını, açıkexecveyaplugintürünü ve istenen kararı tanımlar. Kanal Plugin’leri bu eylemi aktarıma özel bir geri çağırmaya kodlayıp onay hizmeti üzerinden çözümler;/approvekomut metnini ayrıştırmamalı veya kimlikten tür çıkarımı yapmamalıdır.action.type: "question", çalışma zamanında oluşturulan canlı birask_usersorusunun tek bir seçeneğini tanımlar.approvalgibi bu da bir OpenClaw çalışma zamanı eylemidir; aracılar ve Plugin’ler soru kimlikleri oluşturmamalıdır. Telegram, Discord ve Slack bunu aktarıma özel yerel geri çağırmalara eşler ve seçimi Gateway üzerinden çözümler. Soru yanıtlandığında, süresi dolduğunda veya iptal edildiğinde bu kanallar teslim edilen iletiyi düzenler, eylemlerini kaldırır ve son durumu ekler. WhatsApp, Signal ve iMessage, en fazla dört tek seçimli seçeneği1️⃣ile4️⃣tepkileri olarak oluşturur. Diğer soru biçimleri etiket metnine indirgenir ve kullanıcı düz metinli yanıt verebilir.action.type: "url", normal bir bağlantı açar.action.type: "web-app", kanala özgü yerel bir web uygulaması başlatır. URL destekli bir uygulama içinurl, başlatma mekanizması kanalın sorumluluğunda olan OpenClaw barındırmalı bir bileşen içinwidgetIdayarlayın; en az biri gereklidir. Her ikisi de bulunduğunda kanal, kendi yerel barındırılan bileşen başlatma mekanizmasını tercih edebilir ve bu mekanizmanın kullanılamadığı yerde URL’yi kullanabilir.value, eski belirsiz geri çağırma değeridir. Yeni denetimleractionkullanmalıdır; böylece kanal Plugin’leri metinden tahmin yürütmeden komutları ve geri çağırmaları eşleyebilir.url,webAppveweb_app, kullanımdan kaldırılmış sınır girdileri olarak kabul edilmeye devam eder. Normalleştiriciler bu alanları korur; böylece işleyiciler yayımlanmış eski semantiği açıkça türü belirtilmiş eylemlerden ayırt edebilir. Yeni üreticileractionkullanmalıdır.labelgereklidir ve metin geri dönüşünde de kullanılır.styletavsiye niteliğindedir. İşleyiciler desteklenmeyen stilleri güvenli bir varsayılana eşlemeli, gönderimi başarısız kılmamalıdır.priorityisteğe bağlıdır. Bir kanal eylem sınırlarını bildirdiğinde ve denetimlerin kaldırılması gerektiğinde çekirdek, daha yüksek öncelikli düğmeleri önce tutar ve eşit öncelikli düğmelerin özgün sırasını korur. Tüm denetimler sığdığında, oluşturuldukları sıra korunur.disabledisteğe bağlıdır. KanallarsupportsDisabledile açıkça katılmalıdır; aksi takdirde çekirdek, devre dışı bırakılan denetimi etkileşimsiz geri dönüş metnine indirger. Devre dışı bir düğme,commandeylemi taşısa bile geri dönüş metninde her zaman yalnızca etiket olarak oluşturulur.reusableisteğe bağlıdır. Yeniden kullanılabilir yerel geri çağırmaları destekleyen kanallar, başarılı bir etkileşimden sonra eylemi kullanılabilir tutabilir. Yenileme, inceleme veya daha fazla ayrıntı gibi yinelenebilir ya da eşgüçlü eylemler için kullanın; normal tek seferlik onaylar ve yıkıcı eylemler için ayarlamayın.
options[].actionyalnızcacommandveyacallbackkabul eder; onay ve bağlantı eylemleri yalnızca düğmelerde kullanılabilir.options[].value, seçilen eski uygulama değeridir.placeholdertavsiye niteliğindedir ve yerel seçim desteği olmayan kanallar tarafından yok sayılabilir.- Bir kanal seçimleri desteklemiyorsa geri dönüş metni etiketleri listeler.
pie, pozitif dilim değerleri gerektirir.bar,areaveline, sıralı tek bircategoriesdizisi kullanır. Her seri, aynı sırayla her kategori için tam olarak bir sonlu değer sağlar.- Kategori etiketleri ve seri adları benzersiz olmalıdır. Geçersiz veya eksik grafik blokları, verileri sessizce değiştirmek yerine normalleştirme sırasında kaldırılır.
- Yerel grafik oluşturma,
presentationCapabilities.chartsüzerinden isteğe bağlı olarak etkinleştirilir. Diğer kanallar grafik başlığını, eksenleri, kategorileri, serileri ve değerleri belirlenimci metin olarak alır. Bu aynı zamanda erişilebilirlik geri dönüşüdür.
-
caption, gerekli olan kısa bir başlıktır.headersen az bir benzersiz ve boş olmayan sütun etiketi içermelidir. -
rowsen az bir satır içermelidir. Her satırda her başlık için tam olarak bir hücre bulunmalı ve her hücre boş olmayan bir dize veya sonlu bir sayı olmalıdır. -
rowHeaderColumnIndex, hücreleri yerel işleyiciler tarafından satır başlığı olarak sunulması gereken sütunu tanımlayan, sıfır tabanlı isteğe bağlı bir dizindir. - Tablo normalleştirmesi atomiktir. Geçersiz bir açıklama, başlık, satır genişliği, hücre veya satır başlığı dizini, verileri kesmek ya da onarmak yerine tablo bloğunun kaldırılmasına neden olur.
-
Yerel tablo oluşturma,
presentationCapabilities.tablesüzerinden isteğe bağlı olarak etkinleştirilir. Diğer kanallar açıklamayı ve her satırı, iç boşlukları daraltılmış belirlenimci doğrusal metin olarak alır:
report ayırt edicisi yoktur. title,
tone, text, context, chart, table ve eylem bloklarından bir rapor oluşturun. Böylece her
blok bağımsız olarak oluşturulabilir ve tam rapor aynı
belirlenimci metin geri dönüşüne sahip olur.
Üretici örnekleri
Basit kart:İşleyici sözleşmesi
Kanal pluginleri, giden bağdaştırıcılarında işleme desteğini bildirir:limits, çekirdeğin işleyiciyi çağırmadan önce uyarlayabileceği genel zarfı açıklar:
Çekirdek işleme akışı
CLI ve standart ileti eylemlerinin kullandığı kurallı giden yolda çekirdek:- Sunum yükünü normalleştirir.
- Hedef kanalın giden bağdaştırıcısını çözümler.
presentationCapabilitiesdeğerini okur.- Bağdaştırıcı bunları bildirdiğinde 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ı
sırasıyla
charts: trueveyatables: truedesteğini açıkça bildirmediği sürece grafik ve tablo blokları deterministik metne dönüşür. - Bağdaştırıcı yükü işleyebildiğinde
renderPresentationçağrısını yapar. - Bağdaştırıcı yoksa veya işleyemiyorsa korumacı metne geri döner.
- Ortaya çıkan yükü normal kanal teslim yolu üzerinden gönderir.
- İlk ileti başarıyla gönderildikten sonra
delivery.pingibi teslim meta verilerini uygular.
ReplyPayload değerini doğrudan tüketen kanala özgü yanıt veya önizleme
hunileri, kurallı yola girmeli ya da yükü düz metne/ortama indirgemeden önce aynı
sunum geri dönüşünü somutlaştırmalıdır.
Çekirdek, üreticilerin kanaldan bağımsız kalabilmesi için geri dönüş davranışının
sahibidir. Kanal pluginleri yerel işleme ve etkileşim yönetiminin sahibidir.
Seviyesi düşürme kuralları
Sunum, sınırlı kanallarda güvenle gönderilebilmelidir. Geri dönüş metni şunları içerir:- ilk satır olarak
title - normal paragraflar olarak
textblokları - kısa bağlam satırları olarak
contextblokları - görsel ayırıcı olarak
dividerblokları - bağlantı düğmelerinin URL’leri dâhil olmak üzere düğme etiketleri
- seçim seçeneği etiketleri
- grafik başlığı, türü, eksenleri, kategorileri, serileri ve değerleri
- tablo açıklaması, başlıkları ve her satır değeri
Düğme değeri geri dönüşünün görünürlüğü
Bir kanal etkileşimli denetimleri işleyemediğinde düğme ve seçim değerleri düz metne geri döner. Geri dönüş davranışı, anlaşılmaz geri çağırma verilerini gizli tutarken kullanılabilirliği korur:commandtüründeki eylemlerlabel: `command`olarak işlenir; böylece kullanıcılar komutu kopyalayıp kanal girişinde elle çalıştırabilir.callbacktüründeki eylemler ve eskivaluealanları yalnızca etiket olarak işlenir. Anlaşılmaz geri çağırma değeri geri dönüş metninde gösterilmez.approvaltüründeki eylemler yalnızca etiket olarak işlenir. Onay kimlikleri ve kararlar taşıma verisidir; genel skaler yardımcılar veya geri dönüş metni üzerinden gösterilmez.urleylemleri, URL destekliweb-appeylemleri ve kullanım dışıurl/webApp/web_appgirdileri, URL kullanıcıya yönelik olduğu için URL metnini düğme etiketiyle birlikte işler. Yalnızca barındırılan pencere öğesine özgü eylemler, yerel pencere öğesi başlatma desteği bulunmayan kanallarda yalnızca etiket olarak işlenir.- Seçim seçenekleri yalnızca etiket olarak işlenir. Temel seçenek değeri geri dönüş metninde gösterilmez.
- Satır içi düğmeleri devre dışı olan Telegram metin geri dönüşü gönderir.
- Seçim desteği olmayan bir kanal, seçim seçeneklerini metin olarak listeler.
- Yerel grafik desteği olmayan bir kanal, grafik verilerini metin olarak listeler.
- Yerel tablo desteği olmayan bir kanal, her tablo satırını metin olarak listeler.
- Yalnızca URL içeren bir düğme, yerel bağlantı düğmesine veya geri dönüş URL satırına dönüşür.
- İsteğe bağlı sabitleme hataları, teslim edilen iletinin başarısız olmasına neden olmaz.
delivery.pin.required: true değeridir; sabitleme zorunlu olarak istenir ve
kanal gönderilen iletiyi sabitleyemezse teslim başarısızlık bildirir.
Sağlayıcı eşlemesi
Mevcut paketlenmiş işleyiciler:
Sağlayıcıya özgü yerel yük uyumluluğu, mevcut yanıt üreticileri için bir geçiş
kolaylığıdır. Yeni paylaşımlı yerel alanlar eklemek için gerekçe değildir.
Sunum ve InteractiveReply karşılaştırması
InteractiveReply, onay ve etkileşim yardımcılarının kullandığı eski dâhilî alt
kümedir. Şunları destekler:
- metin
- düğmeler
- seçimler
MessagePresentation, kurallı paylaşımlı gönderim sözleşmesidir. Şunları ekler:
- başlık
- ton
- bağlam
- ayırıcı
- grafik
- tablo
- yalnızca URL içeren düğmeler
ReplyPayload.deliveryüzerinden genel teslim meta verileri
openclaw/plugin-sdk/interactive-runtime yardımcılarını kullanın:
MessagePresentation kabul etmeli veya üretmelidir. Mevcut
interactive yükleri, presentation değerinin kullanım dışı bir alt
kümesidir; eski üreticiler için çalışma zamanı desteği devam eder.
Bilinmesi yararlı, kullanım dışı olmayan yardımcılar:
normalizeMessagePresentation(raw)/hasMessagePresentationBlocks(value)türsüz bir yükü (örneğin, CLI--presentationbayrağından gelen JSON’u) doğrular veMessagePresentationtürüne dönüştürür.isMessagePresentationInteractiveBlock(block), bir bloğun türünübuttons|selectbirleşimine daraltır.resolveMessagePresentationButtonAction(button)veresolveMessagePresentationOptionAction(option), kullanımdan kaldırılmış sınır alanlarını kabul ederken kurallı, türü belirlenmiş eylemi döndürür. Açıkça belirtilmiş biractionher zaman önceliklidir.resolveMessagePresentationActionValue(action)/resolveMessagePresentationControlValue(control)yalnızca komut/geri çağırma skaler değerlerini okur. Skaler olmayan kurallı bir eylem hiçbir zaman eski bir gölgevaluealanına düşmez; böylece onay kimlikleri ve bağlantı hedefleri türlerini korur.renderMessagePresentationChartFallbackText(block)/renderMessagePresentationTableFallbackText(block), kanala özgü geri dönüş yolları için yapılandırılmış tek bir veri bloğunu belirlenimci metin olarak işler.
InteractiveReply* türleri ve dönüştürme yardımcıları SDK’da
@deprecated olarak işaretlenmiştir:
InteractiveReply,InteractiveReplyBlock,InteractiveReplyButtonveInteractiveReplyOptionnormalizeInteractiveReply(...)hasInteractiveReplyBlocks(...)interactiveReplyToPresentation(...)presentationToInteractiveReply(...)presentationToInteractiveControlsReply(...)resolveInteractiveTextFallback(...)reduceInteractiveReply(...)
presentationToInteractiveReply(...) ve
presentationToInteractiveControlsReply(...), eski kanal uygulamaları için işleyici
köprüleri olarak kullanılabilir durumda kalır. Yeni üretici kodu bunları çağırmamalıdır;
presentation göndermeli ve işlemeyi çekirdek/kanal uyarlamasına bırakmalıdır.
Onay yardımcılarının da sunum öncelikli karşılıkları vardır:
buildApprovalInteractiveReply(...)yerinebuildApprovalPresentation(...)kullanınbuildExecApprovalInteractiveReply(...)yerinebuildExecApprovalPresentation(...)kullanın
/approve metninden çıkarsamak yerine
açık bir approval eylemi alması için
buildTypedApprovalPresentation(...),
buildTypedExecApprovalPendingReplyPayload(...) veya
buildTypedPluginApprovalPendingReplyPayload(...) kullanmalıdır.
renderMessagePresentationFallbackText(...), yalnızca ayırıcıdan oluşan bir
sunum gibi metinsel geri dönüşü olmayan sunum blokları için boş dize döndürür.
Boş olmayan bir gönderim gövdesi gerektiren taşıma katmanları, varsayılan geri dönüş
sözleşmesini değiştirmeden asgari bir gövdeyi etkinleştirmek için emptyFallback iletebilir.
Teslimatta sabitleme
Sabitleme, sunum değil teslimat davranışıdır.channelData.telegram.pin gibi
sağlayıcıya özgü alanlar yerine delivery.pin kullanın.
Anlamsal kurallar:
pin: true, başarıyla teslim edilen ilk mesajı sabitler.pin.notifyvarsayılan olarakfalsedeğerini alır.pin.requiredvarsayılan olarakfalsedeğerini alır.- İsteğe bağlı sabitleme hatalarında işlevsellik azaltılır ve gönderilen mesaj olduğu gibi kalır.
- Zorunlu sabitleme hatalarında teslimat başarısız olur.
- Parçalı mesajlarda son parça değil, teslim edilen ilk parça sabitlenir.
pin, unpin ve pins mesaj eylemleri hâlâ mevcuttur.
Plugin yazarı kontrol listesi
- Kanal, anlamsal sunumu işleyebildiğinde veya güvenli biçimde indirgeyebildiğinde
describeMessageTool(...)üzerindenpresentationbildirin. - Çalışma zamanı giden bağdaştırıcısına
presentationCapabilitiesekleyin. renderPresentationöğesini kontrol düzlemi plugin kurulum kodunda değil, çalışma zamanı kodunda uygulayın.- Yerel kullanıcı arayüzü kitaplıklarını sık kullanılan kurulum/katalog yollarından uzak tutun.
- Biliniyorlarsa genel yetenek sınırlarını
presentationCapabilities.limitsüzerinde bildirin. - İşleyicide ve testlerde nihai platform sınırlarını koruyun.
- Desteklenmeyen grafikler, tablolar, düğmeler, seçimler, URL
düğmeleri, başlık/metin yinelemesi ve karma
messageilepresentationgönderimleri için geri dönüş testleri ekleyin. - Yalnızca sağlayıcı gönderilen mesaj kimliğini sabitleyebiliyorsa
deliveryCapabilities.pinvepinDeliveredMessageüzerinden teslimatta sabitleme desteği ekleyin. - Paylaşılan mesaj eylemi şeması üzerinden sağlayıcıya özgü yeni kart/blok/bileşen/düğme alanlarını kullanıma sunmayın.