form
Tipli alanlar ve tek bir gönderim, form gönderimi olarak döndürülür.
Bir cümlenin yetersiz kaldığı durumlar için yapılandırılmış girdi. form, bir ila on arasında tipli alanı toplar ve bunları bir mesajdan ayrı bir istek biçimi olan form_submission olarak geri gönderir; böylece değerler düz metinden ayrıştırılmak yerine tipli olarak iletilir.
Aşağıda listelenen on üç alan türü: altı temel tür (text, number, select, toggle, date, time) ve Flutter 0.41.0 / Web 0.18.0 sürümünden itibaren email, tel, url, multiline, multi_select, date_range ve upload.
Ekran görüntüsü değildir; tarayıcınızda SDK'nın kendi boyut ve renkleriyle canlı olarak çizilir.
Flutter SDK ve Web SDK ile, her ikisi de 0.1.0 sürümünden itibaren yerel olarak render edilir; form v2 türleri, autofill, sayı ve tarih sınırları, stepper ve aranabilir seçimler Flutter 0.41.0 ve Web 0.18.0 sürümünden itibaren render edilir.
Ne zaman kullanılmamalı?
Birkaç yanıtı olan tek bir soru için form kullanmayın. Bunun için choice vardır ve iki dokunma yerine tek dokunmayla çalışır.
Randevu almak için time alanı kullanmayın: kullanıcı hangi saatlerin uygun olduğunu bilemez, bu nedenle bunun yerine datetime_slots sunun. Bir şeyi onaylamak için de form kullanmayın: onaylama işlemi sunucu tarafında oluşturulan confirm_card bileşenidir.
Alan türleri
| Tür | Çizdiği bileşen | Değer |
|---|---|---|
text, email, tel, url | Eşleşen klavyeye sahip tek satırlı bir alan | string |
multiline | Yazıldıkça genişleyen bir alan | string |
number | Sayısal bir alan veya stepper ile bir − / + artırıcı; min, max, step | number |
select | Alanın satırında açılan bir listede options değerlerinden biri; searchable olduğunda bir arama alanı ile birlikte | string |
multi_select | options değerlerinden birkaçı | string[] |
toggle | Bir anahtar (switch) | boolean |
date, time | Alanın satırında açılan, SDK'nın ay görünümü veya 15 dakikalık aralıklar listesi; tarihler için min_date / max_date | string |
date_range | Her biri bir ayı açan Başlangıç ve Bitiş | {name}_start, {name}_end |
upload | Kameradan veya dosyalardan, accept türünde en fazla max_files adet dosya | upload id değerleri |
autofill, alanın ne için olduğunu belirtir (name, email, tel, street_address, postal_code, city, country); böylece cihaz bu alanı otomatik doldurabilir.
Bir formun asla istemeyeceği şeyler
Alanı parola, tek kullanımlık veya SMS kodu, kart numarası, CVV, PIN veya güvenlik kodu, IBAN ya da kimlik veya pasaport numarası olarak adlandırılan, etiketlenen veya tanımlanan bir form, istemde ne yazarsa yazsın asla gösterilmez: sunucu bunun yerine fallback_text değerini koyar. Bir asistanın içinde böyle bir form kimlik avı (phishing) gibi görünür. IBAN yalnızca aksiyonlarınızdan birinin parametresi olarak istenir.
upload, siz Files in forms ayarını açana kadar (Settings → Keys & environments) kapalıdır. Form aracılığıyla gönderilen dosyalar Rendel'e diğer tüm ekler gibi ulaşır ve bunları yükleyen cihaza göre kontrol edilir. Bir dosya, içinde bulunduğu sohbet ile birlikte silinir; bir turda hiçbir zaman gönderilmeyen dosya ise bir gün sonra silinir.
Props
Her blok ayrıca type ve 1 ila 300 karakterden oluşan zorunlu bir fallback_text taşır.
| Prop | Tür | Zorunlu | Kısıtlamalar |
|---|---|---|---|
form_id | string | Evet | 1 ila 64 karakter. Gönderimle birlikte geri döner. |
title | string | Hayır | En fazla 120 karakter. |
fields | array | Evet | 1 ila 10 öğe. |
fields[].kind | text | number | select | toggle | date | time | multi_select | multiline | email | tel | url | date_range | upload | Evet | Yok |
fields[].name | string | Evet | 1 ila 64 karakter. values içindeki anahtar. |
fields[].label | string | Evet | 1 ila 80 karakter. |
fields[].required | boolean | Hayır | Bir toggle için bu, “açık olmalı” anlamına gelir. |
fields[].placeholder | string | Hayır | En fazla 80 karakter. Asla etiket olarak kullanılmaz. |
fields[].value | string | number | boolean | string[] | Hayır | Önceden doldurma. Kullanıcının hâlihazırda yazmış olduğu bir cevabın üzerine asla yazmaz. |
fields[].options | array | Hayır | En fazla 100 girdi. Bir select bunlara ihtiyaç duyar, ancak şema bunu zorunlu kılmaz; bunlar olmadan gelen bir tanesi etkisiz şekilde oluşturulur. |
fields[].options[].label | string | Evet | En fazla 60 karakter. |
fields[].options[].value | string | Evet | En fazla 60 karakter. |
fields[].autofill | name | email | tel | street_address | postal_code | city | country | Hayır | Yok |
fields[].min | number | Hayır | Yok |
fields[].max | number | Hayır | Yok |
fields[].step | number | Hayır | 0'dan büyük. |
fields[].stepper | boolean | Hayır | Yok |
fields[].min_date | string | Hayır | Yok |
fields[].max_date | string | Hayır | Yok |
fields[].accept | image | document | any | Hayır | Yok |
fields[].max_files | integer | Hayır | 1 ila 4. |
fields[].searchable | boolean | Hayır | Yok |
submit_label | string | Evet | 1 ila 40 karakter. |
Ağ üzerinde
{
"id": "blk_11",
"type": "form",
"fallback_text": "A return request form: order number, reason, number of pairs.",
"props": {
"form_id": "return_request",
"title": "Start a return",
"fields": [
{
"kind": "text",
"name": "order_id",
"label": "Order number",
"required": true,
"placeholder": "1042"
},
{
"kind": "select",
"name": "reason",
"label": "Reason",
"required": true,
"options": [
{
"label": "Too small",
"value": "too_small"
},
{
"label": "Arrived damaged",
"value": "damaged"
}
]
},
{
"kind": "number",
"name": "pairs",
"label": "How many pairs",
"required": true
},
{
"kind": "toggle",
"name": "keep_box",
"label": "I still have the original box"
}
],
"submit_label": "Request pickup"
}
}Etkileşim
Gönderim işlemi doğrular, ardından iletir:
{
"form_submission": {
"form_id": "return_request",
"values": { "order_id": "1042", "reason": "damaged", "pairs": 2, "keep_box": true }
}
}Değerler string, number, boolean veya dize listesidir. Bir number alanı sayı olarak gönderilir; date YYYY-MM-DD ve time HH:mm biçiminde gönderir; multi_select işaretli değerleri, upload ise upload id değerlerini liste olarak gönderir; date_range ise iki dize gönderir: {name}_start ve {name}_end.
Kısmen doldurulmuş değerler bloğun kendisinde saklanır; bu sayede önceki bir sayfaya geri dönüp tekrar ileri gitmek formu sıfırlamaz.
Durumlar
| Durum | SDK'nın çizdiği bileşen |
|---|---|
| Geçersiz | Hatalar, kullanıcının çoktan kaydırıp geçtiği formun en üstünde bir özet olarak değil, ait oldukları alanın altında görünür. Alanın kenarlığı 1,5 pt kalınlığında tam belirginliğe geçer. Gönder butonunun hemen üzerinde bir sayaç (“Yukarıdaki 3 alanın düzeltilmesi gerekiyor.”) yer alır; çünkü uzun bir formda alan bazlı mesajlar butonun bulunduğu ekran alanının yukarısında kalır ve aksi takdirde Gönder butonuna basıldığında hiçbir şey olmamış gibi görünür. |
| Seçeneği olmayan select | Denetim render edilir ve kendisini seçilmemiş olarak bildirir ancak hareketsizdir: boş bir listeye açılan bir alt sayfa (sheet) açmaz. |
| Boş | Hiçbir girdisi olmayan bir fields dizisi veya name taşımayan hiçbir alanın bulunmaması durumunda, plakanın içinde fallback_text render edilir. |
| Gönderiliyor | Butonda “Gönderiliyor…” yazar ve her alan devre dışı bırakılır. |
| Gönderildi | Formun yerini gönderilenlerin salt okunur bir listesi ve bir “Gönderildi” işareti alır. Bu değişim aniden atlamak yerine boyutlandırılarak ve çapraz geçişle (crossfade) gerçekleşir. |
| Tur hâlâ açık | Asistan yanıtın ortasındaysa gönderim reddedilir ve form bunu bildirir; hiçbir zaman iletilmemiş bir istek için “Gönderildi” raporlanmaz. |
| Yükleniyor | Başlık çubuğu, 44 pt boyutunda iki alan kutusu ve bir buton şekli içeren bir plaka. |
Erişilebilirlik
Metin ve sayı alanları, görünür etiketlerini alanın kendi erişilebilir düğümüyle birleştirir; böylece yer tutucu kaybolduğunda bile adlandırılmış kalırlar. Select, date, time ve toggle kendilerine ait eksiksiz bir etiket taşır ve iki kez okunmasını önlemek için görünür etiket ekran okuyucudan gizlenir. Hatalar live region olarak iletilir.
fallback_text, formu göremeyen bir kullanıcının doldurmaya değer olup olmadığını anlayabilmesi için formun ne istediğini açıklamalıdır.