Kavramlar

Generative UI

Bir yanıtın yerel bileşenlerden oluşan bir sayfaya nasıl dönüştüğü.

Bir yanıt bir sayfadır: en fazla on iki bloktan oluşan sıralı bir liste; her biri tipli bir katalogdan bir bileşendir, doğrulanmış proplara ve erişilebilirlik ile kademeli indirgeme için kullanılan zorunlu bir fallback_text değerine sahiptir.

Katalog

Mevcut katalogda otuz altı bileşen sunulur. Model bunlardan otuz beşini çizebilir; otuz altıncısı olan confirm_card bileşenini yalnızca sunucu oluşturur. Her iki SDK da hepsini çizer:

BileşenNe işe yarar
textDüz metin ve akış halinde gelen tek blok.
info_cardİkon, başlık, gövde ve isteğe bağlı bir aksiyon.
media_galleryBir görsel ızgarası veya karusel.
article_cardKaynağı belirtilmiş şekilde getirilen bir pasaj.
status_bannerBir başarı, bilgi, uyarı veya hata bildirimi.
sectionBir yanıt sayfasında, kendisinden sonraki bloklar için bir başlık.
key_pointsHer biri bir ikon, bir başlık ve bir satırdan oluşan birkaç madde: bir seçimin arkasındaki nedenler.
tagsBir şeyi bir bakışta niteleyen birkaç kelime.
disclosureBaşlıkların altına katlanmış ikincil detaylar: SSS, koşullar, teknik notlar.
place_cardKullanıcının gidebileceği bir yer: şu an açık mı, ne kadar uzaklıkta ve yol tarifi.
mapHarita üzerindeki yerler: yakındaki mağazalar, bir rota, kuryenin nerede olduğu.
passSon kullanıcının gösterdiği bir şey: bilet, biniş kartı, teslim alma kodu, kupon.
codeKod, bir komut veya log satırları; sabit aralıklı yazı tipi ve kopyalama butonu ile.
quick_repliesEn fazla altı öneri çipi. Her dokunma bir yanıt gönderir.
item_listKüçük resim ve sağ kenar değeri içeren dokunulabilir satırlar.
product_cardsTek bir ürün kartı veya bunlardan oluşan bir şerit.
datetime_slotsGüne göre gruplanmış, dokunulabilir müsaitlikler.
variant_pickerBeden, renk veya kapasite gibi özelliklerle ayrışan bir kümeden tek bir seçim.
choiceKullanıcının dokunarak yanıtladığı bir soru: tek bir seçim veya birden fazla.
comparisonAynı satırlarda, yan yana okunan iki ila dört öge.
formTipli alanlar ve tek bir gönderim, form gönderimi olarak döndürülür.
booking_cardBir rezervasyon özeti: ne, ne zaman, nerede, referans numarası.
actionsEkrandaki ögeyle ilgili ne yapılacağına dair bir veya iki buton.
screensKaydettiğiniz rotalar üzerinden yanıttan açılacak uygulama ekranlarınız.
contactListelediğiniz kanallarla şirketinizdeki bir kişiye nasıl ulaşılacağı.
ratingUygulamanızın bir şeyin nasıl gittiğine dair kendi sorusu, tek bir dokunuşla yanıtlanır.
checklistKullanıcının kendi işaretlediği adımlar.
confirm_cardYazma veya yıkıcı bir aksiyon için sunucunun oluşturduğu onay.
stat_groupİsteğe bağlı değişimlerle en fazla altı KPI.
chartÇizgi, alan, çubuk, yatay çubuk, yığılmış çubuk veya halka; en fazla üç seri.
tableAltı adede kadar sütun ve yirmi satır; ilk sütun sabittir.
order_trackerTamamlanan, mevcut ve beklemede durumlarını içeren bir adım zaman çizelgesi.
receiptKalemler, ara toplam, vergi ve toplam.
key_valueEtiket ve değer satırları: tek bir şeye dair olgular.
progressOranın asıl yanıt olduğu durumlarda bir limite karşı değer.
timelineZaman sırasına göre planlanmış maddeler: bir ajanda, bir seyahat programı, bir takvim.

Bileşen kataloğu, blok başına bir sayfaya sahiptir: proplar, bir wire örneği, etkileşim davranışı ve durumları.

confirm_card özeldir: sunucularımız aksiyonunuzun şablonundan sentezler, model hiçbir zaman üretmez. Bir halüsinasyon, son kullanıcının neyi onayladığını yanlış gösteremez.

Akış

Metin token token akar. Bileşenler blok düzeyinde atomiktir: SDK, bir blok duyurulduğu anda tipli bir iskelet çizer, ardından blok doğrulandığında tek adımda içeriğini doldurur. Yarım render edilmiş widget'lar olmadan algılanan hıza ulaşırsınız.

Sayfalar ve detaylar

Her soru kendine ait bir ekran alır. Soru eski sayfanın üzerine yazılır ve yeni sayfa, adımın adını belirten bir durum hapının altında blok blok oluşturulur. Son blok, genellikle quick_replies olarak sunulan birkaç devam yolu şeklinde sayfanın alt kısmıdır. Geri ve ileri, bu oturumun açtığı sayfalar arasında geçiş yapar.

Bir product_cards veya item_list öğesine dokunmak o öğenin detayını açar: sayfanın üzerine bir sheet yukarı kayarak açılır ve başlığı (resim, başlık, alt başlık) doğrudan kartın kendisinden anında çizilir. SDK, detail_of parametresi bu karta ayarlanmış olarak soruyu sorar ve yanıt sheet'i doldurur: bir özet, tags, en fazla iki actions (ilki mikrofonun yanında da vurgulanır), ardından sıradan sayfa blokları. Aksiyonu open_url olan bir öğe yine bağlantısını açar. Sheet'i kapatmak, sayfayı tam olarak önceki haline döndürür. Aynı kartı tekrar açmak, yeni bir istek olmadan önceden getirilmiş detayı gösterir.

Yerinde güncellenen ekranlar

Yeni bir sayfa olmadan da bir sayfanın bir parçası değişebilir.

Formlar. Rendel, son kullanıcının henüz göndermediği bir formu aynı form_id ile yeniden çizdiğinde, yeni form eski formun yerini alır. Son kullanıcının hâlâ mevcut olan bir alan için verdiği her yanıt kalır; kendilerinin değiştirdiği bir alan, Rendel şimdi ne önerirse önersin onların değerini korur; yeni formda artık yer almayan bir alan kaldırılır. Her soru ayrıca açık formlarda ne olduğunu da taşır; bu nedenle “aslında, mağaza kredisi olarak iade et” ifadesi, iade formunu önceden seçilmiş sipariş ve neden etrafında yeniden şekillendirir. Gönderilmiş bir form hiçbir zaman değiştirilmez.

Yüzeye göre herhangi bir blok. Rendel, ekranda değişebilecek bir şeyi (bir sepeti, daraltılmakta olan bir listeyi, bir siparişin durumunu) bir surface_id ile adlandırabilir. Aynı kimliğe sahip daha sonraki bir blok onun yerini alır. Sunucu her yeniden çizimi numaralandırır (revision) ve SDK en yenisini tutar: daha eski bir sürümü geç teslim eden, yeniden denenmiş veya devam ettirilmiş bir akış daha yeni olanı geri alamaz. Son kullanıcının eski blokta yaptığı bir seçim (varyant seçicide bir beden, bir zaman aralığı), yeni blok bunu hâlâ sunuyorsa korunur. Bir sohbet en fazla sekiz yüzey adlandırır.

Her iki SDK da bunları el sıkışmalarında (form_update, surface_update) bildirir ve sunucu modele bunlardan yalnızca bildirildiklerinde bahseder.

Seçmek yazmak değildir

variant_picker, datetime_slots veya choice üzerindeki bir seçeneğe dokunmak hiçbir kelime göndermez. SDK bir selection gönderir: bloğun kimliği ve seçilenlerin kimlikleri; ayrıca son kullanıcı bir choice içinde kendi yanıtını yazdığında other_text. Soru katmanı yine de okunabilir bir soru gösterir (“Beden: 43”). Sunucu, seçimi çizdiği bloğa göre kontrol eder. Sunmadığı bir kimlik, kullanılamaz olarak gösterilen bir seçenek, daha yeni bir revizyonun yerini aldığı veya zaten yanıtlanmış bir blok, mesajı zaten son kullanıcının dilinde olan bir invalid_request ile reddedilir. Model yazdığı kimlikleri geri alır, bu nedenle hangi seçeneğin kastedildiğini bir etiketten çıkarmak zorunda kalmaz. Bir konuşma sırası yürütülürken dokunmalar hiçbir şey yapmaz.

Bir rating farklıdır: yanıtı POST /v1/ratings adresine gider ve hiçbir sıra başlatmaz. Sunucu, modelin sohbet başına en fazla bir kez sormasına izin verir ve son kullanıcıdan hâlâ bir şey isteyen bir sayfada asla izin vermez.

Her sıraya ne sunulur

Her istek, SDK'nın el sıkışmasını taşır. Derlemenin çizdiği bileşenleri (bir ad sürüm taşıyabilir, örneğin form@2, ancak henüz hiçbir bloğun sürüm 2'si yoktur), sahip olduğu davranışları (form_update, surface_update, answer_pages, detail_pages, notices) ve yaptığı dokunma türlerini (reply, open_url, navigate, call, copy, add_to_calendar) listeler. Sunucunun bilmediği adlar reddedilmez, yok sayılır; böylece eski bir sunucudaki daha yeni bir SDK sohbeti değil, yalnızca bir bloğu kaybeder. Modele hiçbir zaman derlemenin bildirmediği bir bileşen sunulmaz ve derlemenin yapamayacağı bir dokunma taşıyan bir blok fallback_text olarak gönderilir; böylece çalışmayan bir buton olmaz.

Bunun dahilinde, her sıraya yalnızca ihtiyaç duyması muhtemel olanlar gösterilir. Sayfanın kendi blokları her zaman oradadır (text, section, key_points, quick_replies, actions, tags, info_card, status_banner, screens, choice, contact, rating). Bunların üstüne yönlendirici, soru için aileleri seçer: shopping, data, booking, tracking, knowledge, places, passes, planning. Model, yönlendiricinin seçmediği bir aileden bildirilmiş bir blok çizerse bu blok yine de kabul edilir.

1.0 öncesinde bir prop yerinde değişebilir ve değişiklik günlüğü her seferini Breaking olarak işaretler. El sıkışma zaten bileşen başına bir sürüm taşır, bu nedenle sonraki değişiklikler derleme bazında sınırlandırılabilir.

Temellendirme kuralı

Modele yalnızca gerçekten elinde tuttuğu verileri render etmesi talimatı verilir: aksiyon sonuçları, bilgi pasajları, uygulama durumu. Veri eksikse, önce sorar veya bir okuma aksiyonu çağırır. Doğrulamadan geçemeyen bloklar, yanlış bir kullanıcı arayüzü sunmak yerine metne indirgenir.

Sunucunun kontrol ettiği değerler

Bazı değerler modelin beyanına göre kabul edilmez, çünkü son kullanıcı dünyada bunlara göre hareket eder. Bunların her birinin, bu sohbette daha önce aksiyonlarınızdan birinin döndürdüğü bir alana veya yönetim panelinde belirlenen bir iletişim kanalına eşit olması gerekir: bir call butonundaki veya bir place_card içindeki numara, bir yerin adresi ve koordinatları, bir map pini, add_to_calendar üzerindeki saatler, bir pass kartının kodu ve cüzdan bağlantıları, aynı bloğun henüz göstermediği bir copy değeri ve fromActions olarak işaretlediğiniz bir rota parametresi. Eşleşme hiçbir zaman bir alt dize üzerinde değil, alanın tamamı üzerindedir (bir telefon için rakamlar, bir zaman için anlık değer). Knowledge pasajları ve modelin kendi sözleri asla hesaba katılmaz; böylece bir yardım makalesine yerleştirilmiş bir numara asla tek bir dokunma mesafesinde olmaz. Başarısız olan bir blok fallback_text olarak gönderilir. Bir kartın bir şubenin telefon numarasını göstermesi gerekiyorsa, bunu bir aksiyondan döndürün.