Typy položek
Položky v BriefGate mají typ. Agent řekne, co potřebuje; klientský portál vstup kontroluje v reálném čase; get_intake_results vrátí data, která agent rovnou použije, bez dalšího parsování a převodů typů.
Každá definice položky potřebuje minimálně key (jedinečný v rámci intake), label (vidí ho klient) a type. Většina typů přijímá nepovinná constraints, která portál vynutí ještě před odesláním.
text
Jednořádkové textové pole. Hodí se na krátké strukturované řetězce, jako jsou měřicí ID, názvy účtů nebo kódy.
Omezení (uvnitř objektu constraints)
| Pole | Typ | Popis |
|---|---|---|
min_chars |
integer | Nejmenší počet znaků. |
max_chars |
integer | Největší počet znaků. |
Pole přímo na položce
| Pole | Typ | Popis |
|---|---|---|
pattern |
string | Regulární výraz ECMAScript, kterému hodnota musí odpovídat. Patří přímo do definice položky, ne do constraints. |
Příklad — měřicí ID Google Analytics
{
"key": "ga4_id",
"label": "Google Analytics 4 Measurement ID",
"help": "Found in GA4 > Admin > Data Streams. Format: G-XXXXXXXXXX",
"type": "text",
"required": true,
"pattern": "^G-[A-Z0-9]+"
}Co vrátí get_intake_results
"ga4_id": "G-K4M9X3R2B1"longtext
Víceřádkové pole na několik odstavců. Hodí se na delší texty, medailonky, poslání firmy a všude, kde klient potřebuje prostor.
Omezení
| Pole | Typ | Popis |
|---|---|---|
min_chars |
integer | Nejmenší počet znaků. |
max_chars |
integer | Největší počet znaků. |
Příklad — text do hlavičky
{
"key": "hero_copy",
"label": "Homepage hero text",
"help": "A short paragraph (up to 400 characters) that captures the spirit of the restaurant. Appears above the fold.",
"type": "longtext",
"required": true,
"constraints": {
"max_chars": 400
}
}Co vrátí get_intake_results
"hero_copy": "Since 1987, handcrafted Neapolitan pizza in the heart of the city. Come hungry, leave happy."file
Nahrání jednoho souboru. Hodí se na dokumenty, PDF, tabulky, fonty a další binární soubory, které nejsou obrázky.
Omezení
| Pole | Typ | Popis |
|---|---|---|
formats |
string[] | Povolené přípony bez tečky, například ["pdf","docx"]. Nerozlišuje velikost písmen. |
max_bytes |
integer | Největší velikost souboru v bajtech. Výchozí je 52 428 800 (50 MB). |
Příklad — podepsaná smlouva
{
"key": "signed_contract",
"label": "Signed project contract",
"help": "Upload the signed PDF you received by email.",
"type": "file",
"required": true,
"constraints": {
"formats": ["pdf"],
"max_bytes": 10485760
}
}Co vrátí get_intake_results
"signed_contract": {
"filename": "bella-napoli-contract-signed.pdf",
"url": "https://files.briefgate.dev/in_8f3kQmR2/signed_contract.pdf?token=sig_abc&expires=1710615600",
"mime": "application/pdf",
"size": 283492,
"checksum_sha256": "a3f2e1..."
}url je podepsaná adresa s platností 24 hodin. Stáhněte soubor včas, nebo si zavolejte get_intake_results znovu a dostanete čerstvou adresu.
file_list
Skupina více nahraných souborů. Hodí se na fotogalerie, balíčky podkladů a všude, kde potřebujete několik souborů stejné kategorie.
Omezení
| Pole | Typ | Popis |
|---|---|---|
formats |
string[] | Povolené přípony souborů. |
max_bytes |
integer | Největší velikost jednoho souboru. |
min_count |
integer | Nejmenší požadovaný počet souborů. |
max_count |
integer | Největší přijímaný počet souborů. |
Příklad — fotky restaurace
{
"key": "photos",
"label": "Food and interior photos",
"help": "Upload between 5 and 15 photos of your food, interior, and ambience.",
"type": "file_list",
"required": true,
"constraints": {
"formats": ["jpg", "png", "heic"],
"min_count": 5,
"max_count": 15
}
}Co vrátí get_intake_results
"photos": [
{
"filename": "interior-01.jpg",
"url": "https://files.briefgate.dev/in_8f3kQmR2/photos/interior-01.jpg?token=...",
"mime": "image/jpeg",
"size": 3204812,
"checksum_sha256": "b4c1d2..."
},
{
"filename": "pizza-margherita.jpg",
"url": "https://files.briefgate.dev/in_8f3kQmR2/photos/pizza-margherita.jpg?token=...",
"mime": "image/jpeg",
"size": 2917034,
"checksum_sha256": "f9e3a1..."
}
]image
Nahrání obrázku s volitelnými omezeními na rozměry a formát. Použijte místo file, když potřebujete vynutit rozlišení nebo průhlednost.
Omezení
| Pole | Typ | Popis |
|---|---|---|
formats |
string[] | Výchozí: ["svg","png","jpg","jpeg","webp"]. |
min_width |
integer | Nejmenší šířka obrázku v pixelech. |
max_width |
integer | Největší šířka obrázku v pixelech. |
min_height |
integer | Nejmenší výška obrázku v pixelech. |
max_height |
integer | Největší výška obrázku v pixelech. |
max_bytes |
integer | Největší velikost souboru v bajtech. |
transparent_background |
boolean | S true portál klienta upozorní, když obrázek nemá alfa kanál. |
Příklad — logo
{
"key": "logo",
"label": "Company logo",
"help": "SVG or PNG with a transparent background. Minimum 512px on the shortest side.",
"type": "image",
"required": true,
"constraints": {
"formats": ["svg", "png"],
"min_width": 512,
"transparent_background": true
}
}Co vrátí get_intake_results
"logo": {
"filename": "logo-transparent.png",
"url": "https://files.briefgate.dev/in_8f3kQmR2/logo-transparent.png?token=...",
"mime": "image/png",
"width": 1024,
"height": 512,
"size": 48210
}color_list
Výběr jedné nebo více barev v hexadecimálním zápisu. Portál nabízí vizuální výběr barvy i zadání hexu. Omezení tu nejsou potřeba — portál vždy ověří, že jde o platný hex kód.
Příklad — firemní paleta
{
"key": "brand_colors",
"label": "Brand colors",
"help": "Select your primary and secondary brand colors. Add as many as you use.",
"type": "color_list",
"required": true
}Co vrátí get_intake_results
"brand_colors": ["#1B2A4A", "#E8E2D9", "#C8382E"]select
Rozbalovací seznam nebo přepínače, kde klient vybere právě jednu možnost ze seznamu, který zadáte. Hodí se, když potřebujete omezenou sadu hodnot.
Povinná pole
| Pole | Typ | Popis |
|---|---|---|
options |
array | Pole objektů {value, label}. value se uloží, label vidí klient. |
Příklad — platforma webu
{
"key": "platform",
"label": "Preferred website platform",
"type": "select",
"required": true,
"options": [
{ "value": "wordpress", "label": "WordPress" },
{ "value": "webflow", "label": "Webflow" },
{ "value": "shopify", "label": "Shopify" },
{ "value": "custom", "label": "Custom / I'm not sure" }
]
}Co vrátí get_intake_results
"platform": "wordpress"Výsledkem je vždy řetězec z value, nikdy label.
boolean
Přepínač ano/ne. Portál ho podle motivu vykreslí jako dvojici jasně popsaných tlačítek nebo jako zaškrtávátko.
Příklad — dotaz na stávající web
{
"key": "has_existing_site",
"label": "Do you have an existing website?",
"type": "boolean",
"required": true
}Co vrátí get_intake_results
"has_existing_site": trueurl
Pole pro adresu s vestavěnou kontrolou http/https. Volitelně ho omezíte na konkrétní doménu nebo tvar cesty.
Pole přímo na položce
| Pole | Typ | Popis |
|---|---|---|
pattern |
string | Regulární výraz ECMAScript, kterému adresa musí odpovídat. Patří přímo do definice položky, ne do constraints. Použijte pro omezení na konkrétní doménu. |
Příklad — adresa stávajícího webu
{
"key": "existing_site_url",
"label": "Existing website address",
"help": "The full URL including https://",
"type": "url",
"required": false
}Co vrátí get_intake_results
"existing_site_url": "https://old.bellanapoli.com"secret
Pole pro šifrovaný přístupový údaj. Portál zobrazí pole jako u hesla, s ikonou zámku a jasnou informací, že se hodnota ukládá bezpečně. Otevřený text se zašifruje přes libsodium sealed box ještě před odesláním z prohlížeče a nikdy se neloguje, neindexuje ani neposílá ve webhoocích.
Přístupy propadají po 30 dnech a odhalit je lze právě jednou. Po odhalení token okamžitě propadá.
Příklad — přihlášení do administrace CMS
{
"key": "cms_credentials",
"label": "WordPress admin credentials",
"help": "Your current admin username and password. Stored encrypted and only accessible to your project team.",
"type": "secret",
"required": false
}Co vrátí get_intake_results
Při prvním volání se dešifrovaný text vrátí přímo:
"cms_credentials": {
"value": "username:password",
"one_time": true,
"first_reveal": true,
"expires_at": "2024-04-15T10:22:00Z"
}Při všech dalších voláních value chybí (first_reveal: false). Uložte si text dřív, než budete pokračovat — podruhé ho nedostanete. Přístupy propadají po 30 dnech.
Vyžaduje scope secrets:read nebo admin na API klíči.
structured
Hodnota v JSON odpovídající schématu JSON Schema, které zadáte. Portál ze schématu vygeneruje formulář (u jednoduchých plochých schémat) nebo nabídne editor JSON (u složitých a vnořených). Odeslaná hodnota se proti schématu ověří na serveru dřív, než se položka přijme.
Povinná pole
| Pole | Typ | Popis |
|---|---|---|
schema |
object | Platný objekt JSON Schema (draft 7 nebo 2020-12). |
Příklad — otevírací doba
{
"key": "opening_hours",
"label": "Opening hours",
"help": "Your regular weekly schedule. Use a simple time range like '12:00-22:00' or the word 'Closed'.",
"type": "structured",
"required": true,
"schema": {
"type": "object",
"required": ["mon_fri", "sat", "sun"],
"properties": {
"mon_fri": { "type": "string", "title": "Monday to Friday", "example": "12:00-22:00" },
"sat": { "type": "string", "title": "Saturday", "example": "12:00-23:00" },
"sun": { "type": "string", "title": "Sunday", "example": "Closed" }
}
}
}Co vrátí get_intake_results
"opening_hours": {
"mon_fri": "12:00-22:00",
"sat": "12:00-23:00",
"sun": "13:00-21:00"
}Vrácený objekt zaručeně odpovídá zadanému schématu.
Typy dohromady: příklad webu restaurace
Následující pole items pokrývá hlavní typy položek na realistickém projektu:
[
{
"key": "logo",
"label": "Restaurant logo",
"type": "image",
"required": true,
"constraints": { "formats": ["svg","png"], "min_width": 512, "transparent_background": true }
},
{
"key": "brand_colors",
"label": "Brand colors",
"type": "color_list",
"required": true
},
{
"key": "hero_copy",
"label": "Hero section tagline",
"type": "longtext",
"required": true,
"constraints": { "max_chars": 400 }
},
{
"key": "ga4_id",
"label": "Google Analytics 4 ID",
"type": "text",
"required": false,
"pattern": "^G-[A-Z0-9]+"
},
{
"key": "has_existing_site",
"label": "Do you have an existing website?",
"type": "boolean",
"required": true
},
{
"key": "existing_site_url",
"label": "Existing website URL",
"type": "url",
"required": false
},
{
"key": "platform",
"label": "Preferred platform",
"type": "select",
"required": true,
"options": [
{ "value": "wordpress", "label": "WordPress" },
{ "value": "webflow", "label": "Webflow" },
{ "value": "custom", "label": "Custom / I'm not sure" }
]
},
{
"key": "cms_credentials",
"label": "Existing CMS credentials",
"type": "secret",
"required": false
},
{
"key": "menu_pdf",
"label": "Menu (PDF)",
"type": "file",
"required": true,
"constraints": { "formats": ["pdf"], "max_bytes": 10485760 }
},
{
"key": "photos",
"label": "Food and interior photos",
"type": "file_list",
"required": true,
"constraints": { "formats": ["jpg","png","heic"], "min_count": 5, "max_count": 15 }
},
{
"key": "opening_hours",
"label": "Opening hours",
"type": "structured",
"required": true,
"schema": {
"type": "object",
"required": ["mon_fri","sat","sun"],
"properties": {
"mon_fri": { "type": "string" },
"sat": { "type": "string" },
"sun": { "type": "string" }
}
}
}
]Kontrola vstupů
Kontrola běží na serveru a probíhá při nahrání, ještě než se položka označí jako submitted. Když soubor nesplní omezení (špatný formát, příliš malý, málo souborů, neodpovídá vzoru), klient dostane zpětnou vazbu přímo v portálu. Neplatnou položku odeslat nemůže.
Jediným zdrojem pravdy je definice položky od agenta — type, constraints a schema. BriefGate omezení nedovozuje z obsahu souboru ani jinou heuristikou. Když potřebujete omezení zpřísnit poté, co je intake živý, přidejte přes add_items náhradní položku s novým key a přes request_revision klienta k novému poli nasměrujte.