VISWOO BELGELERİ
Manifest
viswoo-plugin.json alanları, paket kuralları, ayar şeması ve ekranlara yerleşim.
Her paketin kökünde viswoo-plugin.json vardır. Şema SDK’dadır:
@viswoo/plugin-sdk/schemas/plugin-manifest.schema.json (editörünüzde "$schema" ile bağlayabilirsiniz).
{ "schemaVersion": 1, "code": "gunun-firsati", "version": "1.0.0", "name": { "tr": "Günün fırsatı", "en": "Deal of the day" }, "summary": { "tr": "Ekranda günün fırsatını gösterir.", "en": "Shows the deal of the day on screen." }, "publisher": { "name": "Örnek Yazılım", "url": "https://ornek.com" }, "category": "content", "icon": "icon.png", "screenshots": ["screenshots/tv.png"], "billingUnit": "perTenant", "permissions": ["settings"], "panel": { "menu": { "label": { "tr": "Fırsat", "en": "Deal" }, "icon": "tag" } }, "player": { "entry": "player.html", "defaultDuration": 15 }, "settings": { "type": "object", "required": ["title"], "properties": { "title": { "type": "string", "minLength": 1, "maxLength": 60, "x-viswoo-label": { "tr": "Başlık", "en": "Title" } } } }}Alanlar
Bölüm başlığı “Alanlar”| Alan | Zorunlu | Açıklama |
|---|---|---|
schemaVersion |
evet | 1 |
code |
evet | Kalıcı kimlik: kebab-case, ASCII, 3–40 karakter. Yayımlandıktan sonra değişmez |
version |
evet | major.minor.patch; aynı sürüm ikinci kez yüklenemez |
name, summary |
evet | { "tr", "en" }; ad en çok 60, özet en çok 200 karakter |
description |
Mağaza ayrıntı sayfası, Markdown (paragraf, başlık, liste, kalın, bağlantı), en çok 5000 karakter | |
publisher |
evet | { "name", "url" }; adres https. Doğrulanmış işaretini Viswoo verir |
category |
evet | interactive, content, information, integration, reporting, device |
icon |
evet | Mağaza ikonu, 256 px kare PNG |
screenshots |
En çok 6 görsel; ekran görünümü varsa en az bir 16:9 TV görseli | |
billingUnit |
evet | perScreen, perTenant, included. Fiyat pakette değil, Viswoo ile belirlenir |
requiredCapabilities |
Ör. ["touch"]: cihaz bu yeteneği bildirmiyorsa eklenti o ekranda açılamaz |
|
minProtocol |
Ekran görünümü olan eklentide en az 3 (varsayılan) | |
permissions |
Kavramlar | |
panel |
{ "menu": { "label", "icon" }, "entry"?, "tab"? }: menü öğesi, kendi sekmeniz ve adı |
|
player |
{ "entry", "defaultDuration", "placement"? }: ekran görünümü |
|
public |
{ "entry" }: genel sayfa; public izni gerekir |
|
settings |
Ayarların JSON Schema’sı (aşağıda); settings izni gerekir |
|
draw |
Çekiliş havuzları (Sunucu işlevleri); draw izni gerekir |
|
server |
{ "webhookUrl", "events"? } (Kendi sunucunuz); server izni gerekir |
Menü ikonu (panel.menu.icon) şu adlardan biridir: bell, calendar, chart-bar, chart-no-axes-combined,
chart-pie, circle-dollar-sign, clipboard-list, cloud-sun, coffee, ferris-wheel, gift, hand, heart,
image, layout-template, list-checks, map-pin, megaphone, message-square, music, newspaper, percent,
puzzle, qr-code, rss, shopping-cart, smile, sparkles, star, store, tag, thermometer, ticket,
trophy, users, utensils, video, zap.
Paket kuralları
Bölüm başlığı “Paket kuralları”- Paket en çok 5 MB, açılınca en çok 20 MB, en çok 200 dosya.
- Dosya türleri:
html,js,css,json,png,webp,jpg,jpeg,gif,woff2,txt,md. SVG yoktur (içinde betik çalışabilir). - Yollar göreli; yalnız harf, rakam,
.,_,-,/..., mutlak yol, ters bölü ve:yok. - Ekran görünümü tek dosyadır, en çok 512 KB ve ES5’tir (Ekran görünümü).
- SDK dosyaları (
viswoo-panel.js,viswoo-player.js,viswoo-public.js,viswoo-ui.css,viswoo-screen.css) pakete konmaz; sayfalar adlarıyla başvurur,packekler.
Ayar şeması
Bölüm başlığı “Ayar şeması”Panel Ayarlar sekmesini settings şemasından çizer; alan sırası şemadaki sıradır.
| Şema | Panelde |
|---|---|
string |
Metin; format: "date" tarih, "date-time" tarih ve saat; enum seçim |
integer, number |
Sayı; minimum, maximum |
boolean |
Aç/kapa |
object |
Başlıklı alan grubu |
array (öğesi object) |
Satırlar: ekle, sil, sırala; minItems, maxItems |
Desteklenen kurallar: required, minLength, maxLength, pattern, default (boş kurulumda ve eski kayıttaki
eksik alanlarda kullanılır).
Viswoo ekleri:
| Ek | Ne yapar |
|---|---|
x-viswoo-label, x-viswoo-help |
{ "tr", "en" } etiket ve yardım metni (yoksa title, description) |
x-viswoo-widget |
textarea, color, id (gizli, kendiliğinden üretilen satır kimliği) |
x-viswoo-visibility: "server" |
Alan ekrana ve telefona gitmez; panel ve eklentinin sunucusu görür |
"slices": { "type": "array", "minItems": 2, "x-viswoo-label": { "tr": "Dilimler", "en": "Slices" }, "items": { "type": "object", "required": ["id", "label", "weight"], "properties": { "id": { "type": "string", "pattern": "^[a-z0-9-]{1,24}$", "x-viswoo-widget": "id" }, "label": { "type": "string", "minLength": 1, "x-viswoo-label": { "tr": "Ad", "en": "Label" } }, "weight": { "type": "integer", "minimum": 0, "x-viswoo-visibility": "server", "x-viswoo-label": { "tr": "Şans", "en": "Chance" } } } }}- Eklentinin çalışması için gereken her alan
requiredolur. Kayıtlı ayar şemaya uymuyorsa kurulum tamamlanmamıştır: eklenti ekranlarda oynamaz, sunucu işlemleri ve genel sayfaplugin.setup_incompletedöner. - Şemaya uymayan ayar kaydedilmez (
plugin.invalid_settings). - Yeni sürüm şemaya zorunlu alan eklerse kurulumlar müşteri alanı girene kadar durur; yeni zorunlu alana
defaultverin.
Ekranlara yerleşim
Bölüm başlığı “Ekranlara yerleşim”Ekran görünümü olan eklentide müşteri Ekranlar sekmesinde gösterim biçimini, ekranları (tümü, seçili, etiketli), tarih aralığını ve aç/kapa’yı seçer.
| Biçim | Ekranda |
|---|---|
continuous (sürekli) |
Eklenti yayını kaplar (yayın saatleri ve acil duyuru yine geçerlidir) |
interval (aralıklı) |
Her everyMinutes dakikada durationSeconds saniye yayının arasına girer |
playlist |
Yalnız playlist’e öğe olarak eklendiğinde oynar |
"player": { "entry": "player.html", "defaultDuration": 20, "placement": { "modes": ["interval", "continuous", "playlist"], "default": "interval", "everyMinutes": 10, "durationSeconds": 30 }}modes izin verilen biçimlerdir; verilmezse üçü de seçilebilir, varsayılan aralıklıdır. Kampanya tarihleri için
kendi ayar alanınıza gerek yoktur: yerleşimin tarih aralığı dışında eklenti oynamaz, sunucu işlemleri
plugin.not_live döner.