Durum
Paylaşılan ajan, CLI, plugin yeteneği ve giden teslimat yüzeyleri için uygulandı:ReplyPayload.presentationanlamsal mesaj kullanıcı arayüzünü taşır.ReplyPayload.delivery.pingönderilmiş mesaj sabitleme isteklerini taşır.- Paylaşılan mesaj eylemleri, sağlayıcıya özgü
components,blocks,buttonsveyacardyerinepresentation,deliveryvepinsunar. - Çekirdek, sunumu plugin tarafından bildirilen giden yetenekler aracılığıyla işler veya otomatik olarak daha basit bir biçime dönüştürür.
- Discord, Slack, Telegram, Mattermost, MS Teams ve Feishu işleyicileri genel sözleşmeyi kullanır.
- Discord kanalının kontrol düzlemi kodu artık Carbon tabanlı kullanıcı arayüzü kapsayıcılarını içe aktarmaz.
Sorun
Kanal kullanıcı arayüzü şu anda birbiriyle uyumsuz birkaç yüzeye bölünmüştür:- Çekirdek,
buildCrossContextComponentsaracılığıyla Discord biçimli, bağlamlar arası bir işleyici kancasına sahiptir. - Discord
channel.ts,DiscordUiContaineraracılığıyla yerel Carbon kullanıcı arayüzünü içe aktarabilir; bu da çalışma zamanı kullanıcı arayüzü bağımlılıklarını kanal plugininin kontrol düzlemine çeker. - Ajan ve CLI; Discord
components, Slackblocks, Telegram veya Mattermostbuttonsve Teams veya Feishucardgibi yerel yük kaçış yolları sunar. ReplyPayload.channelDatahem aktarım ipuçlarını hem de yerel kullanıcı arayüzü zarflarını taşır.- Genel
interactivemodeli mevcuttur ancak Discord, Slack, Teams, Feishu, LINE, Telegram ve Mattermost tarafından hâlihazırda kullanılan daha zengin düzenlerden daha sınırlıdır.
Hedefler
- Çekirdek, bildirilen yeteneklere göre bir mesaj için en iyi anlamsal sunuma karar verir.
- Uzantılar yeteneklerini bildirir ve anlamsal sunumu yerel aktarım yüklerine dönüştürür.
- Web Denetim Kullanıcı Arayüzü, sohbetin yerel kullanıcı arayüzünden ayrı kalır.
- Yerel kanal yükleri, paylaşılan ajan veya CLI mesaj yüzeyi üzerinden kullanıma sunulmaz.
- Desteklenmeyen sunum özellikleri otomatik olarak en uygun metin gösterimine indirgenir.
- Gönderilmiş bir mesajı sabitleme gibi teslimat davranışları sunum değil, genel teslimat meta verileridir.
Hedef olmayanlar
buildCrossContextComponentsiçin geriye dönük uyumluluk katmanı yoktur.components,blocks,buttonsveyacardiçin herkese açık yerel kaçış yolları yoktur.- Çekirdek, kanala özgü kullanıcı arayüzü kitaplıklarını içe aktarmaz.
- Paketlenmiş kanallar için sağlayıcıya özgü SDK bağlantı noktaları yoktur.
Hedef model
ReplyPayload öğesine çekirdeğin sahip olduğu bir presentation alanı ekleyin.
interactive, presentation öğesinin bir alt kümesi hâline gelir:
interactivemetin bloğupresentation.blocks[].type = "text"öğesine eşlenir.interactivedüğmeler bloğupresentation.blocks[].type = "buttons"öğesine eşlenir.interactiveseçim bloğupresentation.blocks[].type = "select"öğesine eşlenir.
presentation kullanır; interactive, mevcut yanıt üreticileri için dahili ve eski bir ayrıştırma/işleme yardımcısı olarak kalır.
Herkese açık, üreticilere yönelik API, interactive öğesini kullanımdan kaldırılmış kabul eder. Yeni kod presentation üretirken mevcut onay yardımcılarının ve eski pluginlerin çalışmaya devam etmesi için çalışma zamanı
desteği korunur.
Teslimat meta verileri
Kullanıcı arayüzüyle ilgili olmayan gönderim davranışı için çekirdeğin sahip olduğu birdelivery alanı ekleyin.
delivery.pin = true, başarıyla teslim edilen ilk mesajı sabitlemek anlamına gelir.notifyvarsayılan olarakfalsedeğerini alır.requiredvarsayılan olarakfalsedeğerini alır; desteklenmeyen kanallar veya başarısız sabitleme işlemleri teslimata devam edilerek otomatik olarak daha basit bir davranışa indirgenir.- Mevcut mesajlar için elle kullanılan
pin,unpinvelist-pinsmesaj eylemleri korunur.
channelData.telegram.pin = true öğesinden delivery.pin = true öğesine taşınmalıdır.
Çalışma zamanı yetenek sözleşmesi
Sunum ve teslimat işleme kancalarını kontrol düzlemi kanal pluginine değil, çalışma zamanı giden bağdaştırıcısına ekleyin.- Hedef kanalı ve çalışma zamanı bağdaştırıcısını çözümleyin.
- Sunum yeteneklerini sorgulayın.
- İşlemeden önce desteklenmeyen blokları daha basit biçimlere dönüştürün ve genel yetenek sınırlarını uygulayın.
renderPresentationçağrısını yapın.- İşleyici yoksa sunumu yedek metne dönüştürün.
- Başarılı gönderimden sonra
delivery.pinistenmiş ve destekleniyorsapinDeliveredMessageçağrısını yapın.
Kanal eşlemesi
Discord:presentationöğesini yalnızca çalışma zamanı modüllerinde v2 bileşenlerine ve Carbon kapsayıcılarına dönüştürün.- Vurgu rengi yardımcılarını hafif modüllerde tutun.
- Kanal plugininin kontrol düzlemi kodundan
DiscordUiContaineriçe aktarımlarını kaldırın.
presentationöğesini Block Kit’e dönüştürün.- Ajan ve CLI
blocksgirdisini kaldırın.
- Metni, bağlamı ve ayırıcıları metin olarak işleyin.
- Yapılandırıldığında ve hedef yüzey için izin verildiğinde eylemleri ve seçimi satır içi klavyeler olarak işleyin.
- Satır içi düğmeler devre dışı bırakıldığında yedek metni kullanın.
- ACP konu sabitlemesini
delivery.pinöğesine taşıyın.
- Yapılandırıldığı yerlerde eylemleri etkileşimli düğmeler olarak işleyin.
- Diğer blokları yedek metin olarak işleyin.
presentationöğesini Adaptive Cards biçimine dönüştürün.- Elle kullanılan sabitleme, sabitlemeyi kaldırma ve sabitlenmiş öğeleri listeleme eylemlerini koruyun.
- Graph desteği hedef konuşma için güvenilir durumdaysa isteğe bağlı olarak
pinDeliveredMessageöğesini uygulayın.
presentationöğesini etkileşimli kartlara dönüştürün.- Elle kullanılan sabitleme, sabitlemeyi kaldırma ve sabitlenmiş öğeleri listeleme eylemlerini koruyun.
- API davranışı güvenilir durumdaysa gönderilmiş mesajları sabitlemek için isteğe bağlı olarak
pinDeliveredMessageöğesini uygulayın.
- Mümkün olduğunda
presentationöğesini Flex veya şablon mesajlara dönüştürün. - Desteklenmeyen bloklar için yedek metne dönün.
- LINE kullanıcı arayüzü yüklerini
channelDataöğesinden kaldırın.
- Sunumu ölçülü biçimlendirmeyle metne dönüştürün.
Yeniden düzenleme adımları
ui-colors.tsöğesini Carbon tabanlı kullanıcı arayüzünden ayıran veextensions/discord/src/channel.tsiçindenDiscordUiContaineröğesini kaldıran Discord sürüm düzeltmesini yeniden uygulayın.ReplyPayload, giden yük normalleştirmesi, teslimat özetleri ve kanca yüklerinepresentationiledeliveryekleyin.- Dar kapsamlı bir SDK/çalışma zamanı alt yoluna
MessagePresentationşemasını ve ayrıştırıcı yardımcılarını ekleyin. - Mesaj yetenekleri
buttons,cards,componentsveblocksöğelerini anlamsal sunum yetenekleriyle değiştirin. - Sunum işleme ve teslimat sabitlemesi için çalışma zamanı giden bağdaştırıcı kancaları ekleyin.
- Bağlamlar arası bileşen oluşturmayı
buildCrossContextPresentationile değiştirin. src/infra/outbound/channel-adapters.tsöğesini silin vebuildCrossContextComponentsöğesini kanal plugin türlerinden kaldırın.maybeApplyCrossContextMarkeröğesini yerel parametreler yerinepresentationekleyecek şekilde değiştirin.- Plugin yönlendirmesinin gönderim yollarını yalnızca anlamsal sunumu ve teslimat meta verilerini kullanacak şekilde güncelleyin.
- Ajan ve CLI yerel yük parametrelerini kaldırın:
components,blocks,buttonsvecard. - Yerel mesaj aracı şemaları oluşturan SDK yardımcılarını kaldırıp bunların yerine sunum şeması yardımcılarını ekleyin.
- Kullanıcı arayüzü/yerel zarfları
channelDataöğesinden kaldırın; kalan her alan incelenene kadar yalnızca aktarım meta verilerini tutun. - Discord, Slack, Telegram, Mattermost, MS Teams, Feishu ve LINE işleyicilerini geçirin.
- Mesaj CLI’si, kanal sayfaları, plugin SDK’sı ve yetenek tarifleri için belgeleri güncelleyin.
- Discord ve etkilenen kanal giriş noktaları için içe aktarma yayılımı profillemesi çalıştırın.
channelData aktarım zarfları için daha kapsamlı bir dahili temizleme aşaması olarak kalır. Tür/test geçidinin ötesinde nicel içe aktarma yayılımı sayıları isteniyorsa 15. adım sonraki doğrulama çalışması olarak kalır.
Testler
Ekleyin veya güncelleyin:- Sunum normalleştirme testleri.
- Desteklenmeyen bloklar için sunumu otomatik olarak daha basit biçime dönüştürme testleri.
- Plugin yönlendirmesi ve çekirdek teslimat yolları için bağlamlar arası işaretleyici testleri.
- Discord, Slack, Telegram, Mattermost, MS Teams, Feishu, LINE ve yedek metin için kanal işleme matrisi testleri.
- Yerel alanların kaldırıldığını kanıtlayan mesaj aracı şeması testleri.
- Yerel bayrakların kaldırıldığını kanıtlayan CLI testleri.
- Carbon’u kapsayan Discord giriş noktası içe aktarma tembelliği regresyon testi.
- Telegram’ı ve genel geri dönüş davranışını kapsayan teslimat sabitleme testleri.
Açık sorular
- İlk aşamada
delivery.pinDiscord, Slack, MS Teams ve Feishu için mi uygulanmalı, yoksa önce yalnızca Telegram için mi? - İleride
delivery;replyToId,replyToCurrent,silentveaudioAsVoicegibi mevcut alanları bünyesine katmalı mı, yoksa gönderim sonrası davranışlara odaklanmayı sürdürmeli mi? - Sunum, görüntüleri veya dosya referanslarını doğrudan desteklemeli mi, yoksa medya şimdilik kullanıcı arayüzü düzeninden ayrı mı kalmalı?