table.created ✓ Canlı

Dine-in bir masa GERÇEKTEN açıldığında (bir masaya ilk sipariş eklendiğinde) eklentinin webhookUrl'ine async (fire-and-forget) imzalı POST edilir. Açılış SONRASI bir bildirimdir.

← Event Kataloğu

Yalnız gerçek dine-in masa açılışında tetiklenir. Masa taşıma (move) veya paket→masa dönüşümünde tetiklenMEZ. Müşteri atanmış açılış paket sayılır → packet.created; müşterisiz masa açılışı → table.created.

Abonelik

HTTP, imza & teslimat

POST {webhookUrl}
Content-Type: application/json
X-Restomenum-Signature: t=<unixSec>,v1=<HMAC_SHA256(webhookSecret, "<t>.<rawBody>")>
X-Restomenum-Event: table.created
X-Restomenum-Delivery: <deliveryId>
  • İmzayı ham gövde üzerinden doğrula ("<t>.<rawBody>"), ±5 dk replay toleransı — bkz. imza şeması.
  • Header'lar: X-Restomenum-Event: table.created, X-Restomenum-Delivery: <id>.
  • Idempotency: envelope id ile dedup (at-least-once → aynı id tekrar gelebilir).
  • Ack: 2xx → tamam; 5xx/timeout → retry → tükenirse dead-letter.

Envelope (tüm event'lerde ortak)

AlanTipZorunluAçıklama
idstring✓Idempotency anahtarı. Aynı id tekrar gelebilir → dedup et.
typestring✓table.created
versionstring✓Envelope şema versiyonu ("1").
environment"sandbox" | "production"✓Teslimin ortamı (test mağazası = "sandbox") — imzalı gövdede; header kopyasını değil bunu kullan.
tenantIdstring✓Restoran (tenant) id.
occurredAtnumber✓Açılış zamanı (unix ms).
dataobject✓Event'e özel gövde (aşağıda).

data alanları

AlanTipZorunluAçıklama
tableIdstring✓Masa id'si — tables/get?id= ile aynı.
tableNamestring✓Masanın görünen adı (ör. "Masa 1").
docNonumber✓Adisyon/belge no.
desingstring–Bölüm (salon/alan) adı (ör. "Bahçe") — tables/get'teki desing ile aynı.
locationstring–Masanın görünen adı (ör. "Masa 1") — genelde tableName ile aynı.
personCountnumber–Kişi sayısı (girilmemişse 0).
customerobject | null–PII — müşteri atanmamış masa açılışında null; doluysa yalnız customers:read + consent ile gelir, aksi halde maskelenir.
orders[]array✓Açılış kalemleri: id, title, quantity, options[], extra, discount, note, lineTotalDecimal. options = nesne dizisi { id, title, price } (eskiden düz ad dizisi); price katalogtan gelir, lineTotalDecimal'a platformca dahildir; lineTotalDecimal'ı Restomenum hesaplar.
totalnumber✓Adisyon toplamı (kuver dahil).
paidnumber✓Ödenen tutar (açılışta genelde 0).
totalDiscountnumber–Toplam indirim.

Tam örnek payload

table.created envelope (gerçek)
{
  "id": "evt_<uuid>",
  "type": "table.created",
  "version": "1",
  "environment": "sandbox",
  "tenantId": "<tenantId>",
  "occurredAt": 1781000000000,
  "data": {
    "tableId": "masa-1",
    "tableName": "Masa 1",
    "docNo": 12,
    "desing": "Bahçe",
    "location": "Masa 1",
    "personCount": 2,
    "customer": null,
    "orders": [
      { "id": "masa-1-ab", "title": "Menemen", "quantity": 2, "options": [], "extraDecimal": 0, "discountDecimal": 0, "note": "", "lineTotalDecimal": 38 }
    ],
    "total": 38,
    "paid": 0,
    "totalDiscount": 0
  }
}

Kendi açtığınız masa da event üretir — echo & döngü

tables/create ile sizin açtığınız masa, personelin açtığı masayla aynı table.created event'ini üretir — abone olduğunuzda kendi eyleminizin echo'sunu da alırsınız.

Döngü riski. table.created handler'ınızda masa açan bir mantık varsa (ör. "masa açılınca yan masayı da aç") sonsuz döngü oluşur. Handler'da kendi oluşturduğunuz masaları eleyin: açtığınız tableId/docNo'yu kendi kaydınıza yazın, event geldiğinde eşleştirip atlayın. (Envelope id ile dedup bundan ayrıdır ve her durumda zorunludur — teslim at-least-once.)