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
idstringIdempotency anahtarı. Aynı id tekrar gelebilir → dedup et.
typestringtable.created
versionstringEnvelope şema versiyonu ("1").
environment"sandbox" | "production"Teslimin ortamı (test mağazası = "sandbox") — imzalı gövdede; header kopyasını değil bunu kullan.
tenantIdstringRestoran (tenant) id.
occurredAtnumberAçılış zamanı (unix ms).
dataobjectEvent'e özel gövde (aşağıda).

data alanları

AlanTipZorunluAçıklama
tableIdstringMasa id'si — tables/get?id= ile aynı.
tableNamestringMasanın görünen adı (ör. "Masa 1").
docNonumberAdisyon/belge no.
desingstringBölüm (salon/alan) adı (ör. "Bahçe") — tables/get'teki desing ile aynı.
locationstringMasanın görünen adı (ör. "Masa 1") — genelde tableName ile aynı.
personCountnumberKişi sayısı (girilmemişse 0).
customerobject | nullPII — müşteri atanmamış masa açılışında null; doluysa yalnız customers:read + consent ile gelir, aksi halde maskelenir.
orders[]arrayAçılış kalemleri: id, title, quantity, options[], extra, discount, note, lineTotal. options = string array (seçenek adları); lineTotal'ı Restomenum hesaplar.
totalnumberAdisyon toplamı (kuver dahil).
paidnumberÖdenen tutar (açılışta genelde 0).
totalDiscountnumberToplam 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": [], "extra": 0, "discount": 0, "note": "", "lineTotal": 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.)