Değişiklik Günlüğü

Geliştiriciyi etkileyen değişiklikler (yeni uçlar, hook'lar, scope'lar, yetenekler). Yalnızca canlıya alınmış/doğrulanmış özellikler listelenir; planlananlar 'Yakında' altında.

RSS: kırıcı olabilecek değişiklikleri otomatik takip et — /changelog.xml (RSS 2.0; bot/izleme aracına ekle). AI ajanları için /llms.txt.

2026-08-01 — Sürümle mağaza bilgisi değişikliği + packet.cancelled

  • Mağaza bilgisi değişikliği sürümle gelir: eklenti adı / açıklaması / ikonu artık yeni sürümle birlikte değiştirilebilir. Manifest editöründeki Mağaza Bilgileri kartını doldur (boş alan = değişiklik yok) — öneri sürümle incelemeye girer, sürüm onaylanıp yayınlanınca marketplace'e uygulanır (anında değişmez).
  • MCP aracı set_listing: AI geliştirme akışında da aynı öneri verilebilir (display_name / description / icon_url; "" = öneriyi temizle). get_manifest mevcut öneriyi listing alanında gösterir.
  • Yeni event packet.cancelled: paket sipariş tam iptali. Önerilen scope: orders:read.

2026-06-14 — Event kataloğu + REST hata kodları + müşteri uçları

  • Yeni event table.created (canlı): dine-in masa açıldı (müşterisiz açılış; müşteri atanmış açılış packet.created sayılır). Masa taşıma/dönüşümde tetiklenmez. Scope: orders:read.
  • Yeni event'ler customer.created / customer.updated (canlı): müşteri (CRM) oluşturma/güncelleme — PII, customers:read + consent ile dolu gelir.
  • Yeni okuma uçları customers/list + customers/get (canlı): müşteri kataloğu (CRM/sadakat) — {id, region, name, phone, address, total} allowlist; PII consent gate; list cursor pagination (after/nextCursor, max 500). Scope customers:read.
  • Callback API REST hata kodları: /plugin-api/* artık doğru HTTP status döner — not-found 404, doğrulama 400, scope/sahiplik 403, çakışma 409 (eskiden hepsi 200). Gövde {success,message} uyumlu kaldı (Hata Kodları).
  • OAuth token ucu (RFC 6749): hata yanıtı standart — HTTP 4xx + {error, error_description} (invalid_client→401, invalid_grant→400…). Başarı değişmedi (Token Exchange).

2026-06-13 — Masa yazma uçları, apiKey rotasyonu & rate-limit başlıkları

  • Masa (dine-in) yazma uçları CANLI: tables/update-orders + tables/update-payments — packets karşılıkları (full-replace). Kuver otomatik eklenir, timer ürünlü masalar desteklenmez, ödeme doğrulaması packets ile birebir. tableId'yi tables/open'dan al.
  • apiKey rotasyonu: kurulum başına Callback API key'i portaldan yenilenebilir — eski key anında geçersiz, yenisi bir kez gösterilir (Token Exchange → apiKey rotasyonu).
  • Rate-limit yanıt başlıkları: tüm /plugin-api/* yanıtlarında X-RateLimit-Limit/Remaining/Reset; 429'da Retry-After (sn) — backoff yerine buna uy (Limitler).
  • Eklenti kaldırma (sunset): geliştirici eklentisini portaldan kaldırabilir — tüm kurulumlar sonlandırılır (abonelik iptali + app.uninstalled GDPR sinyali); kayıt tombstone olarak kalır, geri alma taslağa döndürür.
  • Fiyat değişikliği politikası: abonelik fiyatı düşerse mevcut aboneler bir sonraki dönemden itibaren yeni fiyata geçirilir (dönem ortası iade/kredi yok); artarsa/aynıysa mevcut aboneler eski fiyatta kalır (grandfather — sessiz zam yok). Kaldırılan interval'deki aboneler kalıcı grandfather. Migrate edilen abonede tutar, bundan sonraki dönem fiyatıdır.

2026-06-12 — Sipariş platformu yetenekleri

  • Yeni yazma ucu: POST /plugin-api/packets/create — paket/sipariş oluştur (orders:write canlı). Fiyat sunucuda hesaplanır; idempotencyKey ile retry-güvenli.
  • Yeni gate hook'ları: packet.status.update (statü geçişi öncesi — sahiplik damgalı) ve packet.close (hesap kapanışı öncesi — tenant-genel). Scope'lar: hooks:packet.status, hooks:packet.close.
  • Gate iframe akışı: App Bridge resolve/close + önerilen Desen B (iframe → kendi backend'in, session token ile).
  • Gate decision:"pending" + async resolve: packet.status.update gate'inde senkron pencereye (≤10 sn) sığmayan kararlar için geçişi askıya al → gate-resolve ucuyla sonra allow/deny ver.
  • packets/create.callbackUrl: sahiplik damgası (packet.status.update gate'ini açar) + ileride statü bildirimi hedefi.
  • Ödeme doğrulaması (kırıcı olabilir): packets/create + update-payments normal ödeme satırlarının id'sini tenant'ın gerçek yöntemlerine karşı doğrular (unknown_payment_method); önce payment-methods/list. İndirim satırları muaf.

2026-06-11 — Event & uç genişlemesi

  • Lifecycle webhook'ları canlı: app.installed, subscription.activated/past_due/canceled, app.uninstalled — abone olmadan her bağlı kuruluma gelir.
  • Yeni okuma uçları: payment-methods/list, ingredients/list, categories/get.
  • Event payload'ları doğrulandı: tüm subscribable event'ler (product/category/user/payment_method/ingredient + packet/table) canlı; zarf version string "1", entegrasyon string kanal kodu.

2026-06-10 — Teslim sağlığı & GDPR

  • Teslim sağlığı (circuit breaker + cap): sürekli başarısız endpoint'te teslimler geçici atlanır (skipped), 72sa sonra kalıcı durur; hacim cap'i aşımında dropped. Sinyaller: delivery.degraded/restored/disabled/throttled lifecycle webhook'ları (canlı).
  • customer.redact (GDPR/KVKK): tenant müşteri silince zorunlu PII-silme webhook'u (PII scope'lu kurulumlara; critical, breaker/cap muaf).
  • Billing: subscription.canceled.reason="plugin_now_free" (ücretsize geçişte erişim ücretsiz sürer — deprovision etme); ücretsize geçişte mevcut kurulumlar ücretsiz kalır (grandfather).

Yakında

  • Yeni yazma ucu POST /plugin-api/tables/create: dine-in masa açma — QR self-order / kiosk akışlarının giriş noktası (eklenti şimdiye dek yalnız personelin açtığı masayı güncelleyebiliyordu). Yeni scope/manifest alanı gerekmez: mevcut orders:write kapsar (tableId layout'tan geldiği için orders:read de gerekir). Açık masada 409, kuver otomatik, idempotencyKey ile retry-güvenli, table.created tetikler; kapatma yetkisi yok. Backend dağıtımıyla etkinleşir.
  • Yeni yetenek fiscal.de (mali fişleme — Almanya/KassenSichV): katalogda açıldı; provides: [{ capability: "fiscal.de" }] beyan eden eklenti capability:fiscal.de:provide scope'unu otomatik alır ve kapanış gate'inde receiptExtras ile tse.* mali bloğunu fişe yazabilir (yalnız bu scope'la verified işaretlenir). Mali cihaz imzası artık e-fatura yeteneğinden (invoice.issue) ayrı: o GİB'e belge keser (asenkron), bu fişi TSE ile imzalar (senkron). Tüketici POST /capabilities/fiscal.de/invoke çağırır — tutarlar CENT integer, negatif izinli (storno), idempotencyKey zorunlu; sonuç accepted·signed·ausfall·failed (ausfall = TSE arızası, hata değildir). Asenkron durum event'i yoktur (/status → 404). Sözleşme: Mali Fişleme (fiscal.de).
  • Kapanış gate'inde receiptExtras: table.close / packet.close allow yanıtında dönen öğeler kapanış yazılmadan önce adisyona işlenir → fişe basılabilir(KassenSichV/TSE mali bloğu, e-arşiv belge no, sadakat satırı). Karar ile veri aynı yanıtta — ikinci API çağrısı yok. Yeni scope/uç/manifest alanı gerekmez; tse.* namespace'i capability:invoice.issue:provide ile sahiplenilmiştir (yetkisiz key sessizce düşer, verified işareti almaz). Yalnız allow'da yazılır, key değiştirilemez, yazım hatası kararı bozmaz. Backend dağıtımıyla etkinleşir.
  • packet.status_changed event'i: statü değişince sahip eklentiye async (imzalı) webhook bildirim — packets/create'teki callbackUrl'e (yoksa webhookUrl'e) düşecek. Şu an callbackUrl yalnız saklanır.
Test yöntemi & doğrulama için: Test Mağazaları · Hızlı Başlangıç.