packet.status_changed — teslimat statüsü değişti ⏳ Yakında

Paketin teslimat statüsü geçişi artık ayrı bir olay. packet.updated'tan ayrıldı çünkü statü — kuryeden müşteri bildirimine — farklı bir tüketici kitlesini ilgilendiriyor; onları updated gürültüsü içinde filtre yazmaya zorlamamak için kendi tipini aldı.

← Event Kataloğu · Hesap yaşam döngüsü

⏳ Sandbox'ta canlı, production'a dağıtılmadı. Test mağazanda karşılaşabilirsin; canlı mağazada henüz akmıyor.

Neden ayrı olay

Statü geçişi packet.updated içinde de görünüyordu, ama o olay kalem ve tahsilat değişimlerinin tamamını taşıyor. Kurye panosu, müşteri bildirimi ya da teslimat SLA'sı izleyen bir tüketicinin her paket güncellemesini alıp içinden statü değişimini ayıklaması gerekiyordu. Ayrı tip bunu ortadan kaldırır — Square order.fulfillment.updated, Shopify fulfillments/update ile aynı ayrım.

Gövde

Gövde packet.updated ile aynı şekildedir — üstüne iki alan gelir.

AlanTipZorunluAçıklama
statusstring–Yeni teslimat statüsü: none · Approved · Ready · OnDelivery · Delivered · Rejected. Sözlük genişleyebilir → tanımadığın değeri güvenle yok say, olayın tamamını atma.
previousStatusstring | null–Önceki statü — uydurulmaz: bilinmiyorsa null gelir. Böylece none → OnDelivery ile Ready → OnDelivery ayırt edilebilir; ilki atlanmış bir adım demektir.
Örnek zarf
{
  "id": "evt_7a1c3e90bd",
  "type": "packet.status_changed",
  "version": "1",
  "environment": "production",
  "tenantId": "<tenantId>",
  "occurredAt": 1768818260617,
  "sequence": 7,
  "sequenceScope": "sq_2c14d8e0",
  "data": {
    "packetId": "pkt-9931",
    "uuid": "9f3c1a7e-4b21-4c8e-9a55-7f2b1d0e6c31",
    "docNo": 87,
    "type": "delivery",
    "currency": "TRY",
    "amountExponent": 2,
    "status": "OnDelivery",
    "previousStatus": "Ready",
    "orders": [ … packet.updated ile AYNI satır şekli … ],
    "cancels": [],
    "payments": [ … ],
    "total": 120,
    "paid": 120,
    "totalDiscount": 0
  }
}

İki tuzak

Zarfta actor BULUNMAZ. Olayı yayınlayan bir Firestore trigger'ıdır ve yazımı kimin yaptığını göremez. Uydurma bir aktör, echo bastırma yapan tüketiciyi yanıltırdı → isOwnEcho() bu olayda daima false döner. Kendi yazdığın statü değişimini ayırt etmen gerekiyorsa kendi tarafında izle.
Statü değişmeyen yazımlarda olay çıkmaz. Kalem ve tahsilat güncellemeleri bu olayı tetiklemez — onlar packet.updated'tır.

Handler

Tüketici deseni
case 'packet.status_changed': {
  const { status, previousStatus } = envelope.data;

  // previousStatus UYDURULMAZ: bilinmiyorsa null gelir.
  // "none → OnDelivery" ile "Ready → OnDelivery" AYNI ŞEY DEĞİLDİR — ilki atlanmış bir adımdır.
  if (previousStatus === null) log.warn('önceki statü bilinmiyor', { status });

  await courierBoard.move(envelope.data.uuid ?? envelope.data.packetId, status);

  // ⚠️ Bu olayda zarf 'actor' TAŞIMAZ → isOwnEcho DAİMA false döner.
  //    Kendi yazdığın statü değişimini ayırt etmen gerekiyorsa kendi tarafında izle.
  break;
}
// ⚠️ Tanımadığın bir statü değeri gelirse olayı ATMA: sözlük genişleyebilir, güvenle yok say.

Abonelik

Manifest'inde packet.status_changed event'ini işaretle; önerilen scope orders:read. Teslim garantileri ve dedup zorunluluğu için Teslim Sağlığı.