Wofino2 Import - Dokumentace JSON Formátu

Přehled

Wofino2 import je pokročilý importní formát pro správu pracovních nabídek pomocí JSON souboru. Umožňuje úplnou správu životního cyklu inzerátů včetně vytváření, aktualizace, publikování, depublikování a mazání.

Základní struktura

JSON soubor musí obsahovat hlavní objekt s polem jobs:

{
  "jobs": [
    {
      // jednotlivé pracovní nabídky
    }
  ]
}

Struktura jednotlivé pracovní nabídky

Povinná pole

| Pole | Typ | Popis | | ------- | ------ | ------------------------------------------------- | | id | string | Jedinečný identifikátor pozice (reference number) | | title | string | Název pozice |

Volitelná pole

| Pole | Typ | Výchozí hodnota | Popis | | -------------- | ----------------- | ---------------- | ---------------------------- | | action | string | "create" | Akce k provedení (viz níže) | | description | string | "" | Popis pozice (HTML/Markdown) | | published_at | string (ISO 8601) | current datetime | Datum publikování | | valid_to | string (ISO 8601) | +30 days | Datum ukončení platnosti |

Akce (action)

| Hodnota | Popis | | ----------- | --------------------------------------------------------------- | | create | Vytvoří novou pozici nebo aktualizuje existující a publikuje ji | | update | Aktualizuje existující pozici (zůstává publikovaná) | | publish | Publikuje pozici (stejné jako create/update) | | unpublish | Depublikuje pozici (skryje z webu) | | delete | Smaže pozici úplně |

Informace o platu

{
  "salary": {
    "from": 50000,
    "to": 80000
  }
}

| Pole | Typ | Popis | | ------------- | ------ | -------------- | | salary.from | number | Plat od (v Kč) | | salary.to | number | Plat do (v Kč) |

Lokace

{
  "location": {
    "geoname_id": 3067696,
    "city": "Praha",
    "region": "Praha",
    "country": "CZ",
    "address": "Wenceslas Square 1",
    "postal_code": "110 00",
    "remote": false,
    "hybrid": true
  }
}

| Pole | Typ | Popis | | --------------------- | ------ | ------------------------------------------------------------------------ | | location.geoname_id | number | ID z GeoNames databáze (preferovaný způsob) | | location.city | string | Město (používá se pokud není zadáno geoname_id) |

Zpracování lokace

  1. Priorita geoname_id: Pokud je zadáno geoname_id, systém nejprve hledá existující lokalitu v databázi podle tohoto ID
  2. Vytvoření nové lokality: Pokud lokalita neexistuje, automaticky se vytvoří nový záznam pomocí GeoNames API
  3. Fallback na název města: Pokud není zadáno geoname_id, systém hledá lokalitu podle názvu města (city)
  4. Automatické propojení: Úspěšně rozpoznané lokality se automaticky propojí s pracovní nabídkou

Tip: Pro přesné určení lokality doporučujeme používat geoname_id, které můžete najít na geonames.org.

Kontaktní informace

{
  "contact": {
    "name": "Jan Novák",
    "email": "[email protected]",
    "phone": "+420 123 456 789"
  }
}

| Pole | Typ | Povinné | Popis | | --------------- | ------ | ------- | ------------------------------------------------------------------------ | | contact.email | string | ANO | E-mailová adresa kontaktní osoby (inzerát bude depublikován pokud chybí) | | contact.name | string | NE | Jméno kontaktní osoby | | contact.phone | string | NE | Telefonní číslo |

Zpracování kontaktních informací

  1. Povinný email: Pole email je povinné - pokud chybí, inzerát bude automaticky depublikován
  2. Normalizace emailu: Email se normalizuje na malá písmena pro konzistentní vyhledávání
  3. Vyhledání existujícího kontaktu: Systém hledá existující kontaktní osobu podle emailu pro danou firmu
  4. Vytvoření nového kontaktu: Pokud kontakt neexistuje, vytvoří se nový záznam
  5. Automatické propojení: Kontakt se automaticky propojí s pracovní nabídkou

Kategorie

{
  "categories": ["IT", "Backend Development", "PHP"]
}

Kompletní příklad

{
  "jobs": [
    {
      "id": "php-developer-001",
      "title": "Senior PHP Developer",
      "action": "create",
      "description": "<h2>O pozici</h2><p>Hledáme zkušeného PHP vývojáře...</p>",
      "published_at": "2025-01-15T09:00:00Z",
      "valid_to": "2025-03-15T23:59:59Z",
      "salary": {
        "from": 60000,
        "to": 90000
      },
      "location": {
        "geoname_id": 3067696,
        "city": "Praha",
        "region": "Praha",
        "country": "CZ",
        "remote": true,
        "hybrid": true
      },
      "contact": {
        "name": "HR Oddělení",
        "email": "[email protected]",
        "phone": "+420 123 456 789"
      },
      "categories": ["IT", "Backend Development", "PHP"]
    },
    {
      "id": "frontend-developer-002",
      "title": "Frontend Developer",
      "action": "update",
      "description": "<p>Pozice pro frontend vývojáře s React...</p>",
      "salary": {
        "from": 45000,
        "to": 70000
      },
      "location": {
        "city": "Brno",
        "region": "Jihomoravský",
        "country": "CZ",
        "remote": false,
        "hybrid": true
      }
    },
    {
      "id": "old-position-003",
      "action": "delete"
    },
    {
      "id": "temporary-hidden-004",
      "action": "unpublish"
    }
  ]
}

Chování importu

Vytváření a aktualizace

  • Pozice se identifikují podle id pole
  • Pokud pozice s daným ID neexistuje, vytvoří se nová
  • Pokud existuje, aktualizuje se

Publikování/Depublikování

  • action: "create", "update", "publish" → pozice bude publikována
  • action: "unpublish" → pozice bude skryta (ale ne smazána)
  • action: "delete" → pozice bude úplně smazána

Automatické depublikování

  • Pozice, které nejsou přítomny v aktuálním importu, budou automaticky depublikovány
  • Toto zabraňuje zobrazování zastaralých pozic

Zpracování lokalit

  • Systém automaticky spravuje lokality pomocí interní databáze a GeoNames API
  • Preferuje se zadání geoname_id pro přesné určení lokality
  • Při zadání pouze názvu města systém se pokusí lokalitu automaticky dohledat
  • Nové lokality se automaticky vytváří a cachují pro budoucí použití

Formáty dat

Data

Všechna data musí být ve formátu ISO 8601:

  • 2025-01-15T09:00:00Z (UTC)
  • 2025-01-15T10:00:00+01:00 (s timezone)

Číselné hodnoty

  • Platy se zadávají jako čísla bez měny (předpokládá se CZK)
  • Desetinná čísla jsou povolena
  • geoname_id musí být celé číslo

Chybové stavy

Import selže v následujících případech:

  • Nevalidní JSON formát
  • Chybí povinné pole jobs
  • Pozice bez id nebo title budou přeskočeny

Podpora

Pro technickou podporu kontaktujte vývojový tým.