Paket İşlemleri — packet.detail.actions

Paket detay ekranındaki işlem menüsüne (slot: packet.detail.actions) eklediğin butonlar tıklanınca actionUrl'ine imzalı POST gelir. Ortak sözleşme (istek/yanıt/imza) Genel Bakış'ta; burada bu slot'a özel kısımlar var.

← Aksiyon Uçları (Genel Bakış)

Slot & hedef

slottarget.typetarget.id
packet.detail.actionspacketpaket id

Payload şekli her slot için aynıdır: { type:"action", hook, tenantId, slot, target:{type,id}, actor:{userId,role}, occurredAt, id } — bkz. Genel Bakış.

Hook'lar

Hook adlarını sen tanımlarsın (butonun action.hook'u — bkz. Aksiyon Butonları). Aynı slot'ta birden çok buton olabilir; gelen istekte hook ile ayırt et, tanımadığına { success:false, level:"error" } dön.

Örnek (kurye · packet.sendToCourier)

// hook ile hangi buton, target ile hangi nesne anlaşılır.
// kurye örneği: başarı → toast (hızlı bilgi), hata/uyarı → popup (önemli sonuç).
if (envlp.hook === 'packet.sendToCourier') {
  const packetId = envlp.target.id;            // target.type === 'packet'
  const cfg = await getConfig(env, envlp.tenantId);
  if (!cfg?.courierUrl)
    return Response.json({ success: false, level: 'warning', display: 'popup', message: 'Kurye adresi ayarlı değil' });

  await forwardToCourier(cfg, packetId);       // … paketi kurye sistemine ilet …

  return Response.json({ success: true, level: 'success', display: 'toast', message: 'Kuryeye gönderildi' });
}

// Tanımadığın hook'a:
return Response.json({ success: false, level: 'error', display: 'popup', message: 'Bilinmeyen işlem' });
Payload yalnız target.id taşır. Ürünler/müşteri/adres/toplam gibi dolu order'ı GET /plugin-api/packets/get ile orders:read kullanarak çek.

Güvenlik & idempotency

  • İmza zorunlu: webhook ile aynı webhookSecret + ham gövde + ±5 dk; geçersizse 401 dön (imza şeması).
  • Cross-tenant: target.id'nin (paket) gerçekten istek sahibi tenant'a (tenantId) ait olduğunu kendi tarafında teyit et.
  • Idempotency: aynı çağrı id (retry/çift tık) tekrar gelebilir → id ile dedup; işlemi (örn. kuryeye gönderme) aynı packetId için tekrarlama.