Webhookok

A webhookokkal a DinkyTask napi terv és beküldés eseményeit más rendszerekhez is ki tudod vezetni. Egy családhoz egy webhook végpontot állítasz be, és a DinkyTask automatikusan elküldi rá a támogatott eseményeket. A fogadó oldalon az event mező alapján tudod szétválasztani, mire reagáljon az automatizáció.

Mire jó?

  • IFTTT Webhooks appletek triggereléséhez
  • Node-RED, Make, Zapier vagy hasonló automatizáló folyamatok bekötéséhez
  • saját backend, script vagy értesítési rendszer meghívásához

Hol lehet beállítani?

  1. Nyisd meg a Profil oldalt szülőként.
  2. Menj a Haladó beállítások részhez.
  3. Kapcsold be a webhookot.
  4. Add meg a cél URL-t.
  5. Válassz HTTP methodot: általában POST.
  6. Ha kell, add meg az auth fejléceket JSON-ben, például {"Authorization":"Bearer ..."} vagy {"X-API-Key":"..."}.

A családi webhook egy közös végpontot használ: ha a webhook be van kapcsolva, minden támogatott esemény erre a végpontra érkezik.

Küldött események

  • plan.started — a napi terv elindult.
  • plan.completed — az összes kötelező feladat sikerült, a terv teljesült.
  • plan.failed — a terv nem teljesült, például kötelező feladat bukott, végleg kimaradt, vagy pending review nélkül lejárt.
  • plan.expired — a terv ideje úgy járt le, hogy még volt szülői review-ra váró beadás; a terv technikai státusza ilyenkor review_expired.
  • submission.pending_review — egy beküldés szülői jóváhagyásra vár.
  • submission.approved — egy beküldés elfogadásra került, akár automatikusan, akár szülő által.
  • submission.rejected — egy beküldést elutasítottak.

HTTP kérés

  • A beállított method lehet POST, PUT vagy PATCH.
  • A payload JSON formátumban megy ki.
  • Egy webhook hívás maximum 10 másodpercig vár válaszra.
  • A DinkyTask naplózza a családhoz a hívás idejét, payloadját, válasz státuszát, időtartamát és sikerességét, hogy support esetén visszanézhető legyen.
  • A webhook küldés aktív próbaidőhöz vagy prémium előfizetéshez kötött. Ha a jogosultság lejár, a mentett beállítás megmarad, de az eseményküldés inaktív lesz, amíg a jogosultság vissza nem tér.

Payload dokumentáció

A payload minden eseménynél ugyanazt az alapstruktúrát használja. Az event mező alapján tudod eldönteni, mire reagáljon az automatizáció.

Gyökér mezők

  • event string
    Az esemény neve. Lehetséges értékek: plan.started, plan.completed, plan.failed, plan.expired, submission.pending_review, submission.approved, submission.rejected. A plan.expired a szülői review miatt lejárt (review_expired) tervekre megy ki; sima sikertelen lejáratnál plan.failed érkezik.
  • model string
    Payload modellverzió, például plan_bound_v2.
  • occurred_at string / ISO dátum
    Az esemény időpontja a szerver szerint.
  • status string
    A terv technikai státusza, például active, completed, failed.
  • display_status string
    Gyerek/szülő felé mutatható állapot. Például partial, ha a terv technikailag bukott, de volt sikeres kötelező feladat.
  • score number vagy null
    Terv eseménynél a terv pontszáma, beküldés eseménynél az érintett beküldés pontszáma.
  • automation_key string vagy null
    A terv opcionális automatizálási kulcsa. Ezt lehet Home Assistant, Node-RED vagy saját script routinghoz használni.
  • child_name string vagy null
    Gyors elérésű gyereknév a payload gyökerén.
  • plan_title string
    Gyors elérésű tervnév a payload gyökerén.
  • family object
    A család adatai. Jelenleg biztosan tartalmazza az id mezőt.
  • child object
    A gyerek adatai: id, name.
  • plan object
    A terv alapadatai: id, title, name, automation_key, date, status, start_at, end_at, ordered, score_pct.
  • summary object
    Összesített eredmények: teljesített kötelezők, összes kötelező, megszerzett ⭐/💎, pontszám és darabszámok.
  • tasks array
    A terv összes feladata státusszal, sorrenddel és jutalommal.
  • completed_tasks array
    A sikeres, jóváhagyott feladatok listája.
  • failed_tasks array
    A sikertelen kötelező feladatok listája.
  • task object
    Beküldés eseményeknél az érintett feladat adatai.
  • submission object
    Beküldés eseményeknél az attempt/beküldés adatai: id, attempt_type, status, score_pct, submitted_at, reviewed_at.

summary mezők

  • required_completed number
    Hány kötelező feladat sikerült.
  • required_total number
    Hány kötelező feladat volt a tervben.
  • stars_earned number
    Mennyi ⭐ csillagot szerzett a gyerek a jóváhagyott kötelező feladatokból.
  • diamonds_earned number
    Mennyi 💎 gyémántot szerzett a jóváhagyott szorgalmi feladatokból.
  • score_pct number vagy null
    A terv számított százalékos eredménye, ha elérhető.
  • completed_count number
    Összesen hány feladat lett jóváhagyva.
  • failed_required_count number
    Hány kötelező feladat nem jóváhagyott állapotban szerepel a payloadban.

tasks[] mezők

  • id string
    Feladat azonosító.
  • title string
    Feladat címe.
  • type string
    Feladattípus, például quiz, matching, study, photo_proof, video, habit.
  • position number
    Feladat helye a tervben.
  • required boolean
    Igaz, ha kötelező feladat.
  • bonus boolean
    Igaz, ha szorgalmi/bonusz feladat.
  • status string vagy null
    Legutóbbi beadás státusza, például approved, rejected, pending_review, vagy null, ha még nincs beadás.
  • attempt_count number
    Hány beadási próbálkozás tartozik a feladathoz.
  • latest_attempt_status string vagy null
    A legutóbbi próbálkozás státusza, ha van.
  • latest_attempt_no number vagy null
    A legutóbbi próbálkozás sorszáma, ha van.
  • score number vagy null
    Legutóbbi kiértékelés pontszáma, ha van.
  • reward_currency string
    star kötelező feladatnál, diamond szorgalmi feladatnál.
  • reward_points number
    A feladatért járó pontos jutalomérték.

Teljes példa payload

JSON payload
{
  "event": "plan.failed",
  "model": "plan_bound_v2",
  "occurred_at": "2026-04-30T18:30:00",
  "status": "failed",
  "display_status": "partial",
  "score": 37.5,
  "automation_key": "homework_done",
  "child_name": "Misi",
  "plan_title": "Misi plan 2026-04-30",
  "family": {
    "id": "80a4cdcd-cd23-431e-81de-ff474f915238"
  },
  "child": {
    "id": "child-user-id",
    "name": "Misi"
  },
  "plan": {
    "id": "plan-id",
    "title": "Misi plan 2026-04-30",
    "name": "Misi plan 2026-04-30",
    "automation_key": "homework_done",
    "date": "2026-04-30",
    "status": "failed",
    "start_at": "2026-04-30T17:00:00",
    "end_at": "2026-04-30T18:30:00",
    "ordered": true,
    "score_pct": 37.5
  },
  "summary": {
    "required_completed": 1,
    "required_total": 2,
    "stars_earned": 3,
    "diamonds_earned": 2,
    "score_pct": 37.5,
    "completed_count": 2,
    "failed_required_count": 1
  },
  "tasks": [
    {
      "id": "task-id-1",
      "title": "Rendrakás",
      "type": "photo_proof",
      "position": 0,
      "required": true,
      "bonus": false,
      "status": "approved",
      "attempt_count": 1,
      "latest_attempt_status": "approved",
      "latest_attempt_no": 1,
      "score": 100,
      "reward_currency": "star",
      "reward_points": 3
    },
    {
      "id": "task-id-2",
      "title": "Matek kvíz",
      "type": "quiz",
      "position": 1,
      "required": true,
      "bonus": false,
      "status": "rejected",
      "attempt_count": 1,
      "latest_attempt_status": "rejected",
      "latest_attempt_no": 1,
      "score": 40,
      "reward_currency": "star",
      "reward_points": 5
    },
    {
      "id": "task-id-3",
      "title": "Extra rajz",
      "type": "photo_proof",
      "position": 2,
      "required": false,
      "bonus": true,
      "status": "approved",
      "attempt_count": 1,
      "latest_attempt_status": "approved",
      "latest_attempt_no": 1,
      "score": 100,
      "reward_currency": "diamond",
      "reward_points": 2
    }
  ],
  "completed_tasks": [
    {
      "id": "task-id-1",
      "title": "Rendrakás",
      "type": "photo_proof",
      "position": 0,
      "required": true,
      "bonus": false,
      "status": "approved",
      "attempt_count": 1,
      "latest_attempt_status": "approved",
      "latest_attempt_no": 1,
      "score": 100,
      "reward_currency": "star",
      "reward_points": 3
    },
    {
      "id": "task-id-3",
      "title": "Extra rajz",
      "type": "photo_proof",
      "position": 2,
      "required": false,
      "bonus": true,
      "status": "approved",
      "attempt_count": 1,
      "latest_attempt_status": "approved",
      "latest_attempt_no": 1,
      "score": 100,
      "reward_currency": "diamond",
      "reward_points": 2
    }
  ],
  "failed_tasks": [
    {
      "id": "task-id-2",
      "title": "Matek kvíz",
      "type": "quiz",
      "position": 1,
      "required": true,
      "bonus": false,
      "status": "rejected",
      "attempt_count": 1,
      "latest_attempt_status": "rejected",
      "latest_attempt_no": 1,
      "score": 40,
      "reward_currency": "star",
      "reward_points": 5
    }
  ]
}

Biztonsági tipp

Webhook URL-t csak olyan rendszer felé adj meg, amit te kezelsz vagy megbízhatónak tartasz. Ha a fogadó oldal támogat titkos tokent, egyedi útvonalat vagy API kulcsot, érdemes használni.