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
- Priorita geoname_id: Pokud je zadáno
geoname_id, systém nejprve hledá existující lokalitu v databázi podle tohoto ID - Vytvoření nové lokality: Pokud lokalita neexistuje, automaticky se vytvoří nový záznam pomocí GeoNames API
- Fallback na název města: Pokud není zadáno
geoname_id, systém hledá lokalitu podle názvu města (city) - 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í
- Povinný email: Pole
emailje povinné - pokud chybí, inzerát bude automaticky depublikován - Normalizace emailu: Email se normalizuje na malá písmena pro konzistentní vyhledávání
- Vyhledání existujícího kontaktu: Systém hledá existující kontaktní osobu podle emailu pro danou firmu
- Vytvoření nového kontaktu: Pokud kontakt neexistuje, vytvoří se nový záznam
- 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
idpole - 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ánaaction: "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_idpro 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_idmusí 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
idnebotitlebudou přeskočeny
Podpora
Pro technickou podporu kontaktujte vývojový tým.
