Tipler ve Yardımcılar

Dışa aktarımlar, tipler, HTTP uç noktaları ve scope

@selwise/react-native paketinin dışa aktardığı hook'lar, sınıflar, yardımcılar, tipler ve SDK'nın konuştuğu HTTP uç noktaları. Selwise sınıfının üyeleri API Referansı sayfasındadır.

İki giriş noktası

İçe aktarmaİçerik
@selwise/react-nativeİstemci, köprü, depolar, yardımcılar, tipler. React'e bağlı değildir; servis, saga ve middleware'den de kullanılır.
@selwise/react-native/reactİsteğe bağlı React bağlamaları: SelwiseProvider, useSelwise, useRecommendationWidget, useSelwiseSearch. react 17 ya da üstü gerekir.

Pakette arayüz bileşeni yoktur; kartı, şeridi ve çubuğu uygulamanız çizer.

React bağlamaları

SelwiseProvider(props: { client: Selwise; children: ReactNode })
useSelwise(): Selwise                       // sağlayıcı dışında hata fırlatır
useRecommendationWidget(widgetId: string, options?: { currentProductId?: string; enabled?: boolean })
useSelwiseSearch(options?: SearchOptions & { debounceMs?: number; minChars?: number })

Dönüş şekilleri Öneriler ve Arama sayfalarındadır.

Sınıflar ve sabitler

Dışa aktarımNe
Selwise (ve default)İstemci sınıfı
SDK_VERSIONÇalışan sürüm (0.12.0)
EndpointsTipli ham uç nokta bağlamaları (selwise.endpoints)
WebViewBridge, WEBVIEW_BRIDGE_SCRIPTWebView köprüsü
SelwiseApiError2xx olmayan cevapta fırlatılan hata
RecommendationWidgetLoader, CART_REFRESH_DEBOUNCE_MS, EMPTY_RECOMMENDATION_WIDGET_STATEHook'suz öneri şeridi, sepeti izleyen; 0.10.0'dan beri
MemoryStorage, STORAGE_KEYSBellek deposu ve depo anahtarları
DEFAULT_CONSENT, SESSION_TIMEOUT_MS, generateIdVarsayılan onay, 30 dakikalık oturum süresi, kimlik üretici
DismissalStore, FrequencyCapStore, SegmentGate, ExperimentGate, ScenarioSeenStore, EnrichmentCacheDahili depolar; kendi çizim katmanınızı yazıyorsanız kullanılır
COUNTDOWN_MODES, CUTOFF_TIME_ZONESGeri sayım kipleri ve saat dilimleri

Yardımcı fonksiyonlar

FonksiyonNe yapar
goalStepsCrossed(previous, next)İki görünüm arasında geçilen hedef adımları (number[])
countdownTarget(content, now), nextDailyCutoff, parseDailyCutoffGeri sayım hedef anı
normalizeSurface, normalizeSurfaces, normalizePlacement, selectSurfaces, resolveConflicts, resolveSurfaceContent/config kaydını çizilebilir yüzeye çevirir ve eler
normalizeCartInput, withCartSignals, normalizeProductInputSepet ve ürün girdisini doğrular
evaluateTargeting, evaluatePageTargeting, matchUrlPatternPanelle aynı hedefleme değerlendirici
normalizeRemoteConfig, normalizeScenarioInbox, normalizeEnrichment, normalizeEnrichmentItem, normalizePlacementKey(s), itemsForSlot, selectByTestMode, deepMerge, normalizeSegmentIdsCevap normalleştiriciler

Tipler

SelwiseInitOptions, SelwiseStorage, SelwiseProduct, TrackOptions, EntityType, ConsentSnapshot, ConsentCategory, OrderInput, OrderItemInput, RecommendationContext, RecommendationCartContext, RecommendationWidgetSummary, RecommendationProductsResult, ResolvedRecommendationWidget, RecommendationExperiment, RecommendationWidgetState, RecommendationWidgetSource, SearchOptions, SearchResult, Surface, SurfaceFilter, SurfaceKind, SurfacePlacement, TriggerStrategy, ExperimentAssignment, FrequencyCapConfig, SegmentContext, SegmentTargetingMode, RemoteConfig, RemoteTrackingConfig, CartInput, ProductInput, DynamicCart, DynamicProduct, GoalBarView, GoalBarState, GoalProgress, GoalMetric, GoalReachedDetail, CountdownMode, ScenarioInboxEntry, ScenarioInboxAcknowledgement, ScenarioInboxOutcome, EnrichmentItem, EnrichmentResult.

Önemli tipler:

interface SelwiseStorage {
  getItem(key: string): Promise<string | null>;
  setItem(key: string, value: string): Promise<void>;
  removeItem(key: string): Promise<void>;
}

interface ConsentSnapshot {
  granted: boolean;
  categories?: Partial<Record<'necessary' | 'analytics' | 'marketing' | 'preferences', boolean>>;
  timestamp?: number;
  source?: string;
}

interface Surface {
  id: string; kind: 'campaign' | 'widget'; type: string; isTestMode: boolean;
  content: Record<string, unknown>; styles: Record<string, unknown>;
  placement: SurfacePlacement;
  segmentTargetingMode: string; segmentIds: string[];
  customCss: string; customJs: string;
  experiment: { experimentId: string; variantId: string } | null;
  stateId: string | null;
}

interface SurfacePlacement {
  position: string; placementType: string;
  triggerStrategy: 'immediate' | 'delay' | 'scroll' | 'exit_intent' | 'event';
  triggerDelaySeconds: number; triggerScrollPercent: number; triggerEventName: string | null;
  frequencyCap: { perSession?: number; perDay?: number; perWeek?: number; total?: number; minInterval?: string } | null;
  conflictBehavior: string | null; priority: number;
}

interface OrderInput {
  orderId: string; total: number; currency?: string;
  subtotal?: number; discountTotal?: number; shippingTotal?: number; taxTotal?: number;
  status?: string; placedAt?: string; items?: OrderItemInput[]; metadata?: Record<string, unknown>;
}
interface OrderItemInput {
  productItemCode: string; name?: string; quantity?: number; unitPrice?: number; totalPrice?: number;
  metadata?: Record<string, unknown>;
}

interface EnrichmentItem {
  assignmentId: string; placementKey: string; order: number;
  html: string; css: string; reservedHeightPx?: number;
}

Surface.kind değeri artık hep campaign'dir; widget yalnızca eski kayıtlar için tipte durur. EntityType değerleri Event Takibi sayfasındadır.

HTTP uç noktaları ve anahtar

SDK yalnızca public API'yi çağırır. Tüm yollar apiUrl altındadır; kanal anahtarı yolun içindedir (/public/sites/KANAL_ANAHTARI/...). İki uç nokta yol yerine sorguda taşır: /public/segments/evaluate ve /public/experiments/* (?siteKey=). Her istekte x-selwise-client-platform ve x-selwise-client-version başlıkları gider.

Uç noktaYöntemx-selwise-api-keyScope
configGETGönderilirmobile_read
recommendationsGETGönderilirmobile_read
recommendations/:widgetId/productsPOSTGönderilirmobile_write
search, search-config, search/suggestionsGETGönderilirmobile_read
app/enrichmentsGETGönderilirmobile_read
scenarios/inboxGETGönderilirmobile_read
scenarios/inbox/ackPOSTGönderilirmobile_write
ordersPOSTGönderilirmobile_write
newsletterPOSTGönderilirmobile_write
users/identifyPOSTGönderilirmobile_write
segments/evaluatePOSTGönderilirmobile_write
experiments/assignGETGönderilirAnahtar denetlenmez, kanal anahtarı yeter
events/batchPOSTGönderilmezAnahtar aranmaz
experiments/trackPOSTGönderilmezAnahtar aranmaz

Scope kuralı: GET için mobile_read, geri kalan her yöntem için mobile_write. Uygulama kanalında anahtar her zaman zorunludur; Origin başlığı gönderilse bile geçerlilik yerine geçmez. Anahtar swpk_live_ ve 64 onaltılık karakterdir. Hata kodlarının anlamı: Sorun Giderme, genel kurallar: Hatalar ve Sınırlar.

Olay partisi gövdesi requestId, sessionId, consentSnapshot (zorunlu), visitorId, siteUserId, pageUrl, journeyId, testMode ve events[] taşır; parti en çok 200 olay içerir. Sunucu /events/batch gövdesinde tanımadığı alanı 400 ile reddeder (forbidNonWhitelisted), bu yüzden olay gövdesine kendi alanlarınızı eklemeyin. /orders ise tanımadığı alanı sessizce yok sayar (yalnızca eski id alanı 400 verir): yanlış yazılmış bir productItemCode 201 ile kabul edilir ve kalem kodsuz kalır.

Son güncelleme: 10 Ekim 2026