GH GambleHub

Hata işleme ve UX açıklamaları

1) Neden önemli

Hata "kırmızı metin'değil, senaryonun devamıdır. İyi UX hataları:
  • Ne olduğunu ve daha sonra ne yapılacağını açıklar,
  • girilen verileri kaydeder ve ilerleme kaybını önler,
  • Güvenli bir tekrarlama veya alternatif bir yol verir,
  • Kullanılabilir kalır (SR/klavye) ve çok fazla ortaya çıkarmaz.

2) Hata tipolojisi (arayüz için)

1. Veri doğrulama (4xx istemci): boş/geçersiz alanlar, biçim, uzunluk, kural çakışması.
2. İş kuralları: sınırlar, coğrafi kısıtlamalar, KYC/KYB, kopyalar, kullanılamayan yuvalar.
3. Haklar/izinler: rol, kaynağa erişim, yaş kısıtlamaları.
4. Ağ/sunucu: zaman aşımı, çevrimdışı, 5xx, aşırı yük, oran sınırı.
5. Çakışmalar/durum: 409/412 (veri değişti), ırklar, kilitler.
6. Kaynak yok: 404/410, silindi/aktarıldı.
7. Ödeme ve risk: Banka/PSP tarafından reddedilme, dolandırıcılıkla mücadele, sorumlu oyunun sınırları.

3) Kanallar ve ekran seviyesi

Bağlam için "hacmi" seçiyoruz:
KanalQuandoÖrnek
Sahada satır içiDoğrulama/İpucu"En az 8 karakter"
Blok/form altındaAdım hatası"Kurtarmayı başaramadı. Tekrar deneyin"
Tost (rol = durum)Engellemesiz olaylar"Dosya hatalarla yüklendi, ayrıntılar aşağıda"
Sayfada bannerÖnemli ama navigasyonu engellemiyor"Çevrimdışı. Önbelleğe alınmış veriler gösteriliyor"
Modalka (rol = alertdialog)Riskli adımları engelleme"Toplantı sona erdi. Tekrar oturum açın"
Hata sayfası404/5xx Kritik Damlalar"Sayfa bulunamadı "/" Üzgünüz, başarısızlık bizim tarafımızda "

Kural: Kritik tost/hover saklamayın. Kullanıcının izlediği yerde, bir mesaj var.

4) Metin yazarlığı hataları

Yapı: neden - sonuç - eylem.
Ton: dürüst, tarafsız, suçsuz.
Özellikler: Bir alan/koşul belirtin, kodlardan ve yığınlardan kaçının.
Düğme eylemi: "Tekrarla", "Kartı değiştir", "Filtreleri sıfırla", "Sohbeti aç".
Hassas veriler: gösterme (PAN maskeleme, kişisel nitelikler).

Örnekler

İyi: "Ödeme başarısız oldu: banka işlemi reddetti. Başka bir yöntem deneyin veya daha sonra tekrar deneyin.
Kötü: "Hata 500. Bir şeyler yanlış gitti».

Güzel: "Günlük harcama limitine ulaşıldı. Yeni bir sınır belirleyin ya da yarın deneyin"

İyi: "Dosya çok büyük (maks. 25 MB). Lütfen bazı dosyaları sıkıştırın veya indirin.

5) Davranış ve odaklanma (A11y)

Hata odak bağlamında görüntülenir: odağı ilk hatalı alana aktarırız.
Yaşayan bölgeler: bilgi için 'rol =' status '(kibar), eleştirel için' rol = 'alert' (iddialı).
Görünür ': odak-görünür', AA ≥ kontrast, renk alternatifleri (simge/metin).
Mesajı 'aria-description by' yoluyla alana bağlıyoruz.

html
<label for = "pwd "> Password </label>
<input id="pwd" name="password" aria-describedby="pwd-err" aria-invalid="true">
<p id = "pwd-err" role = "alert"> Minimum 8 characters </p>

6) Retrai, backoff ve idempotency

Başarı şansı varsa tekrarlama teklif edilir (ağ arızaları, 5xx, oran sınırı).
Üstel geri dönüş 1-2-4-8 s, girişimlerin sınırı, anlaşılabilir düğme "Tekrarla".
Kritik işlemler (oranlar/ödemeler): Zorunlu Idempotency-Key - kopyaları hariç tutar.
İyimser güncellemeleri geri almak - net görsel geri dönüş + açıklama.

js async function retry(fn, attempts=3){
let wait=1000; for(let i=0; i<attempts; i++){
try{ return await fn(); }catch(e){ if(i===attempts-1) throw e; await new Promise(r=>setTimeout(r,wait)); wait=2; }
}
}

7) Çevrimdışı, zaman aşımları ve kısmi içerik

Çevrimdışı: "Bağlantı yok" afişini, önbelleğe erişimi (salt okunur), senkronizasyon kuyruğunu gösteriyoruz.
Zaman aşımları: UI zaman aşımı (3-5 saniye) - durum "Onay bekleniyor"... güvenli yineleme/geri alma.
Kısmi başarı: yönettiğimizi koruruz; "senkronize değil" işaretlemesi.

8) Çatışmalar ve rekabetçilik

409/412: Güncel olmayan veriler. "Update'i önerin ve diff'i (değişen) gösterin.
Kilitler: Bloğu kimin tuttuğunu ve ne kadar süreyle "Erişim iste" düğmesini bildiririz.

9) Örnek UI şablonları

Sayfa afişi:
html
<div class="banner banner--error" role="alert">
<strong> Connection failed. </strong> Shows cached data.
<button class =" btn btn--ghost" id = "retry "> Retry </button>
</div>
Kritik hata modal:
html
<div role="alertdialog" aria-labelledby="err-title" aria-describedby="err-desc">
<h2 id = "err-title "> Session expired </h2>
<p id = "err-desc "> Sign in again to continue. </p>
<button class = "btn "> Sign in </button>
<button class =" btn btn--ghost"> Home </button>
</div>
React ErrorBoundary (korelasyon kimliği ile):
tsx function Fallback({ id, onRetry }: { id: string; onRetry: ()=>void }) {
return (
<div role="alert" className="banner banner--error">
<strong> We couldn't load the page. </strong>
<div> Try again. Код: <code>{id}</code> <button onClick={()=>navigator. clipboard. writeText (id)}> Copy </button> </div>
<button onClick = {onRetry}> Retry </button>
</div>
);
}

10) Hata belirteçleri (tasarım sistemi)

json
{
"error": {
"tones": { "danger": "#", "warning": "#", "info": "#" },
"aria": { "polite": true, "assertive": true },
"timing": { "toastMs": 3500, "retryBackoffMs": [1000,2000,4000] },
"layout": { "fieldGap": 8, "bannerIcon": 20 }
}
}
CSS hazır ayarları:
css
.banner--error { background: var(--bg-danger); color: var(--on-danger); padding: 12px 16px; border-radius: 12px; }
.field-error { color: var(--role-danger); margin-top: 6px; font-size:.875rem; }

11) Güvenlik ve gizlilik

Yığın izlerini, dahili kimlikleri, veritabanı yollarını görüntülemiyoruz.
Hassas değerleri (haritalar, belgeler) maskeliyoruz.
Mesajlar bir saldırgana sorulmamalıdır (örneğin, bir hesabın var olduğu).
Destek için - parçalar yerine korelasyon kimliği.

Yapılandırılmış günlük kaydı (arka uç):
json
{"level":"error","event":"payment_fail","correlation_id":"c-8f1...","user_id":"u-","route":"/pay","psp_code":"DO_NOT_EXPOSE_TO_USER"}

12) Metrikler ve Kontrol

INP ve hata sırasında Uzun Görevlerin payı (hata UI'yi "asmamalıdır").
Başarı oranını yeniden deneyin, 1000 eylem başına hata, geri yükleme zamanı.
"Yardım/Sohbet" üzerine TO, formların yüzdesi düştü.
Isı haritaları: alan hatalarının en sık meydana geldiği yerler.

13) KG kontrol listesi

Kullanılabilirlik

  • İlk geçersiz alana odaklanın; 'aria-describedby'/' aria-invalid' kümesi.
  • Kritik mesajlar - 'role =' alert '; AA ≥ kontrast.

Davranış

  • Form verileri hata ile kaybolmaz.
  • Net bir 'yeniden deneme've doğru bir geri alma var.
  • Çevrimdışı mod/önbellek çalışıyor; Banner bakın.

Metin Yazarlığı

  • Sebep - Eylem; Teknik jargon ve suçlamalar olmadan.
  • Metinler yerelleştirilir ve ızgarayı kırmaz.

Güvenlik

  • PII sızıntısı/sırları yok; Yalnızca güvenli kodları/kimliği göster.
  • Idempotency kritik işlemler için etkinleştirilmiştir.

14) iGaming'in özellikleri

Oranı:
  • UI hemen 'meşgul' kaydeder; Gecikmede> 3 s - "Onay bekleniyor"....
  • Başarısız olduğunda: dürüst durum ("piyasa kapalı", "katsayı değişti") + güvenli 'Yeniden deneme'.
  • Çift teklifi ortadan kaldırmak için Idempotent anahtarı.
Ödeme/Para Çekme:
  • "Banka hatası/PSP" vs "sunucu hatası arasında ayrım yapıyoruz. "Birincisi için -" Başka bir yöntem seç ", ikincisi için -" Yeniden dene ".
  • Şeffaf KYC/AML adımları; Linkler "Neden gerekli? ».
Sorumlu oyun ve sınırlar:
  • Ses tonu duyarlı, baskı yok. "Sınıra ulaşıldı - sınırı duraklatın veya güncelleyin".
  • Hiçbir salgın/neon; AAA kontrastı, SR'de kullanılabilirlik.
Geo/Lisans:
  • Kısıtlamaları açıkça açıklayın ve "Kuralları/desteği okuyun" önerisinde bulunun.

15) Anti-desenler

Eylem ve bağlam olmadan'bir şeyler ters gitti ".
Bir hatadan sonra formu sıfırlar.
Kritik tost 3 saniye boyunca gizleyin.
Metin/simge olmadan sadece renk.
İptal olasılığı olmayan sonsuz geri çekilmeler.
Dahili kodları/yığın izlerini göster.

16) Tasarım sistemindeki belgeler

Компоненты: 'FieldError', 'FormError', 'PageBanner', 'AlertDialog', 'ErrorBoundary'.
Ton/kontrast/zamanlama belirteçleri, a11y hazır ayarları ve ARIA örnekleri.
Metin şablonlarıyla tipik senaryoların (doğrulama, ağ, haklar, ödemeler) haritası.
"Yap/Yapma": Başarısızlık/başarı metrikleri olan ekranlardan önce/sonra gerçek.

Kısa Özet

Hataları anlaşılabilir ve yönetilebilir hale getirin: insan dili konuşun, girilen verileri kaydedin, güvenli tekrar ve alternatifler sunun, erişilebilirliğe ve gizliliğe saygı gösterin. Daha sonra acil durumlar bile güveni korur ve özellikle kritik bahis ve ödeme senaryolarında kullanıcının yolunu kesmez.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.