packet.status_changed — teslimat statüsü değişti ⏳ YakındaPaketin 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ü
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 packet.updated ile aynı şekildedir — üstüne iki alan gelir.
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
| status | string | – | 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. |
| previousStatus | string | null | – | Önceki statü — uydurulmaz: bilinmiyorsa null gelir. Böylece none → OnDelivery ile Ready → OnDelivery ayırt edilebilir; ilki atlanmış bir adım demektir. |
{
"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
}
}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.packet.updated'tır.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.Manifest'inde packet.status_changed event'ini işaretle; önerilen scope orders:read. Teslim garantileri ve dedup zorunluluğu için Teslim Sağlığı.