Používejte zdroje SDK (typy a konfiguraci)
twenty-sdk poskytuje typované stavební bloky a pomocné funkce, které používáte ve své aplikaci. Níže jsou klíčové části, se kterými budete nejčastěji pracovat.Pomocné funkce
SDK poskytuje pomocné funkce pro definování entit vaší aplikace. Jak je popsáno v Detekce entit, musíte použítexport default define<Entity>({...}), aby byly vaše entity detekovány:
| Funkce | Účel |
|---|---|
defineApplication | Nakonfigurujte metadata aplikace (povinné, jedno na aplikaci) |
defineObject | Definice vlastních objektů s poli |
defineLogicFunction | Definice logických funkcí s obslužnými funkcemi |
definePreInstallLogicFunction | Definujte předinstalační logickou funkci (jedna na aplikaci) |
definePostInstallLogicFunction | Definujte postinstalační logickou funkci (jedna na aplikaci) |
defineFrontComponent | Definujte frontendové komponenty pro vlastní uživatelské rozhraní |
defineRole | Konfigurace oprávnění rolí a přístupu k objektům |
defineField | Rozšiřte existující objekty o další pole |
defineView | Definujte uložená zobrazení pro objekty |
defineNavigationMenuItem | Definujte odkazy postranní navigace |
defineSkill | Definujte dovednosti agenta AI |
Definování objektů
Vlastní objekty popisují jak schéma, tak chování záznamů ve vašem pracovním prostoru. K definování objektů s vestavěnou validací použijtedefineObject():
- Použijte
defineObject()pro vestavěnou validaci a lepší podporu v IDE. - Hodnota
universalIdentifiermusí být jedinečná a stabilní napříč nasazeními. - Každé pole vyžaduje
name,type,labela svůj vlastní stabilníuniversalIdentifier. - Pole
fieldsje volitelné — objekty můžete definovat i bez vlastních polí. - Nové objekty můžete vygenerovat pomocí
yarn twenty entity:add, který vás provede pojmenováním, poli a vztahy.
Základní pole jsou vytvořena automaticky. Když definujete vlastní objekt, Twenty automaticky přidá standardní pole
jako
id, name, createdAt, updatedAt, createdBy, updatedBy a deletedAt.
Nemusíte je definovat v poli fields — přidejte pouze svá vlastní pole.
Výchozí pole můžete přepsat definováním pole se stejným názvem v poli fields,
ale to se nedoporučuje.Konfigurace aplikace (application-config.ts)
Každá aplikace má jeden souborapplication-config.ts, který popisuje:
- Identitu aplikace: identifikátory, zobrazovaný název a popis.
- Jak běží její funkce: kterou roli používají pro oprávnění.
- (Volitelné) proměnné: dvojice klíč–hodnota zpřístupněné vašim funkcím jako proměnné prostředí.
- (Volitelná) předinstalační funkce: logická funkce, která se spouští před instalací aplikace.
- (Volitelná) postinstalační funkce: logická funkce, která se spouští po instalaci aplikace.
defineApplication():
- Pole
universalIdentifierjsou deterministická ID, která vlastníte; vygenerujte je jednou a udržujte je stabilní napříč synchronizacemi. applicationVariablesse stanou proměnnými prostředí pro vaše funkce (napříkladDEFAULT_RECIPIENT_NAMEje dostupné jakoprocess.env.DEFAULT_RECIPIENT_NAME).defaultRoleUniversalIdentifierse musí shodovat se souborem role (viz níže).- Předinstalační a postinstalační funkce jsou při sestavování manifestu automaticky detekovány. Viz Předinstalační funkce a Postinstalační funkce.
Role a oprávnění
Aplikace mohou definovat role, které zapouzdřují oprávnění k objektům a akcím ve vašem pracovním prostoru. PoledefaultRoleUniversalIdentifier v application-config.ts určuje výchozí roli používanou logickými funkcemi vaší aplikace.
- Běhový klíč API vložený jako
TWENTY_API_KEYje odvozen z této výchozí role funkcí. - Typovaný klient bude omezen oprávněními udělenými této roli.
- Dodržujte princip nejmenších oprávnění: vytvořte vyhrazenou roli pouze s oprávněními, která vaše funkce potřebují, a poté odkazujte na její univerzální identifikátor.
Výchozí role funkce (*.role.ts)
Když vygenerujete novou aplikaci, CLI také vytvoří výchozí soubor role. K definování rolí s vestavěnou validací použijtedefineRole():
universalIdentifier této role se poté odkazuje v application-config.ts jako na defaultRoleUniversalIdentifier. Jinými slovy:
- *.role.ts definuje, co může výchozí role funkce dělat.
- application-config.ts ukazuje na tuto roli, aby vaše funkce zdědily její oprávnění.
- Začněte rolí vytvořenou scaffolderem a postupně ji omezujte podle principu nejmenších oprávnění.
- Nahraďte
objectPermissionsafieldPermissionsobjekty/poli, která vaše funkce potřebují. permissionFlagsřídí přístup k schopnostem na úrovni platformy. Držte je na minimu; přidávejte pouze to, co potřebujete.- Podívejte se na funkční příklad v aplikaci Hello World:
packages/twenty-apps/hello-world/src/roles/function-role.ts.
Konfigurace logických funkcí a vstupní bod
Každý soubor funkce používádefineLogicFunction() k exportu konfigurace s obslužnou funkcí (handlerem) a volitelnými spouštěči.
- route: Zpřístupní vaši funkci na HTTP cestě a metodě pod koncovým bodem
/s/:
např.path: '/post-card/create',-> volání na<APP_URL>/s/post-card/create
- cron: Spouští vaši funkci podle plánu pomocí výrazu CRON.
- databaseEvent: Spouští se při událostech životního cyklu objektů v pracovním prostoru. Když je operace události
updated, lze konkrétní sledovaná pole určit v poliupdatedFields. Pokud zůstane nedefinované nebo prázdné, spustí funkci jakákoli aktualizace.
např. person.updated
Poznámky:
- Pole
triggersje volitelné. Funkce bez spouštěčů lze použít jako pomocné funkce volané jinými funkcemi. - V jedné funkci můžete kombinovat více typů spouštěčů.
Předinstalační funkce
Předinstalační funkce je logická funkce, která se automaticky spouští před instalací vaší aplikace v pracovním prostoru. To je užitečné pro validační úlohy, kontrolu předpokladů nebo přípravu stavu pracovního prostoru před zahájením hlavní instalace. Když vygenerujete kostru nové aplikace pomocícreate-twenty-app, vytvoří se pro vás předinstalační funkce v src/logic-functions/pre-install.ts:
- Předinstalační funkce používají
definePreInstallLogicFunction()— specializovanou variantu, která vynechává nastavení spouštěčů (cronTriggerSettings,databaseEventTriggerSettings,httpRouteTriggerSettings,isTool). - Obslužná funkce (handler) obdrží
InstallLogicFunctionPayloads{ previousVersion: string }— verzi aplikace, která byla dříve nainstalována (nebo prázdný řetězec při čisté instalaci). - Na jednu aplikaci je povolena pouze jedna předinstalační funkce. Sestavení manifestu skončí chybou, pokud je zjištěna více než jedna.
- Identifikátor
universalIdentifierfunkce se během sestavení automaticky nastaví v manifestu aplikace jakopreInstallLogicFunctionUniversalIdentifier— není potřeba jej uvádět vdefineApplication(). - Výchozí časový limit je nastaven na 300 sekund (5 minut), aby umožnil delší přípravné úlohy.
- Předinstalační funkce nepotřebují spouštěče — platforma je vyvolává před instalací nebo je lze spustit ručně pomocí
function:execute --preInstall.
Postinstalační funkce
Postinstalační funkce je logická funkce, která se automaticky spouští po instalaci vaší aplikace do pracovního prostoru. To je užitečné pro jednorázové úlohy nastavení, jako je naplnění výchozími daty, vytvoření počátečních záznamů nebo konfigurace nastavení pracovního prostoru. Když vygenerujete kostru nové aplikace pomocícreate-twenty-app, vytvoří se pro vás postinstalační funkce v src/logic-functions/post-install.ts:
- Postinstalační funkce používají
definePostInstallLogicFunction()— specializovanou variantu, která vynechává nastavení spouštěčů (cronTriggerSettings,databaseEventTriggerSettings,httpRouteTriggerSettings,isTool). - Obslužná funkce (handler) obdrží
InstallLogicFunctionPayloads{ previousVersion: string }— verzi aplikace, která byla dříve nainstalována (nebo prázdný řetězec při čisté instalaci). - Na jednu aplikaci je povolena pouze jedna postinstalační funkce. Sestavení manifestu skončí chybou, pokud je zjištěna více než jedna.
- Identifikátor
universalIdentifierfunkce se během sestavení automaticky nastaví v manifestu aplikace jakopostInstallLogicFunctionUniversalIdentifier— není potřeba jej uvádět vdefineApplication(). - Výchozí časový limit je nastaven na 300 sekund (5 minut), aby umožnil delší úlohy nastavení, jako je naplnění daty.
- Postinstalační funkce nepotřebují spouštěče — jsou spouštěny platformou během instalace nebo ručně pomocí
function:execute --postInstall.
Payload spouštěče trasy
Když spouštěč trasy vyvolá vaši logickou funkci, ta obdrží objektRoutePayload, který odpovídá formátu AWS HTTP API v2. Importujte typ z twenty-sdk:
RoutePayload má následující strukturu:
| Vlastnost | Typ | Popis |
|---|---|---|
headers | Record<string, string | undefined> | Záhlaví HTTP (pouze ta uvedená v forwardedRequestHeaders) |
queryStringParameters | Record<string, string | undefined> | Parametry query stringu (více hodnot spojených čárkami) |
pathParameters | Record<string, string | undefined> | Parametry cesty extrahované ze vzoru trasy (např. /users/:id → { id: '123' }) |
body | object | null | Parsované tělo požadavku (JSON) |
isBase64Encoded | boolean | Zda je tělo kódováno base64 |
requestContext.http.method | string | Metoda HTTP (GET, POST, PUT, PATCH, DELETE) |
requestContext.http.path | string | Nezpracovaná cesta požadavku |
Přeposílání záhlaví HTTP
Ve výchozím nastavení se záhlaví HTTP z příchozích požadavků z bezpečnostních důvodů do vaší logické funkce ne předávají. Chcete-li zpřístupnit konkrétní záhlaví, výslovně je uveďte v poliforwardedRequestHeaders:
Názvy záhlaví jsou normalizovány na malá písmena. Přistupujte k nim pomocí klíčů s malými písmeny (například
event.headers['content-type']).- Vygenerované: Spusťte
yarn twenty entity:adda zvolte možnost přidat novou logickou funkci. Tím se vygeneruje startovací soubor s obslužnou funkcí a konfigurací. - Ruční: Vytvořte nový soubor
*.logic-function.tsa použijtedefineLogicFunction()podle stejného vzoru.
Označení logické funkce jako nástroje
Logické funkce lze zpřístupnit jako nástroje pro agenty AI a pracovní postupy. Když je funkce označena jako nástroj, stane se dohledatelnou funkcemi AI produktu Twenty a lze ji vybrat jako krok v automatizacích pracovních postupů. Chcete-li označit logickou funkci jako nástroj, nastavteisTool: true a poskytněte toolInputSchema popisující očekávané vstupní parametry pomocí JSON Schema:
isTool(boolean, výchozí:false): Když je nastaveno natrue, funkce je zaregistrována jako nástroj a zpřístupní se agentům AI a automatizacím pracovních postupů.toolInputSchema(object, volitelné): Objekt JSON Schema, který popisuje parametry, jež vaše funkce přijímá. Agenti AI používají toto schéma k pochopení toho, jaké vstupy nástroj očekává, a k ověřování volání. Pokud je vynecháno, schéma má výchozí podobu{ type: 'object', properties: {} }(žádné parametry).- Funkce s
isTool: false(nebo není nastaveno) nejsou zpřístupněny jako nástroje. Stále je lze spouštět přímo nebo volat z jiných funkcí, ale neobjeví se ve vyhledávání nástrojů. - Pojmenování nástrojů: Když je funkce zpřístupněna jako nástroj, její název se automaticky normalizuje na
logic_function_<name>(převedeno na malá písmena, nealfanumerické znaky jsou nahrazeny podtržítky). Napříkladenrich-companyse změní nalogic_function_enrich_company. - Můžete kombinovat
isToolse spouštěči — funkce může být zároveň nástrojem (volatelným agenty AI) i spouštěna událostmi (cron, databázové události, routes).
Napište kvalitní
description. Agenti AI se spoléhají na pole funkce description při rozhodování, kdy nástroj použít. Buďte konkrétní ohledně toho, co nástroj dělá a kdy se má volat.Frontendové komponenty
Frontendové komponenty vám umožňují vytvářet vlastní React komponenty, které se vykreslují v rozhraní Twenty. K definování komponent s vestavěnou validací použijtedefineFrontComponent():
- Frontendové komponenty jsou React komponenty, které se vykreslují v izolovaných kontextech v rámci Twenty.
- Pole
componentodkazuje na vaši React komponentu. - Komponenty se během
yarn twenty devautomaticky sestaví a synchronizují.
- Vygenerované: Spusťte
yarn twenty entity:adda zvolte možnost přidat novou frontendovou komponentu. - Ruční: Vytvořte nový soubor
.tsxa použijtedefineFrontComponent(), podle stejného vzoru.
Dovednosti
Dovednosti definují znovupoužitelné pokyny a schopnosti, které mohou agenti AI používat ve vašem pracovním prostoru. K definování dovedností s vestavěnou validací použijtedefineSkill():
nameje jedinečný identifikátor dovednosti (doporučuje se kebab-case).labelje uživatelsky čitelný název zobrazovaný v UI.contentobsahuje pokyny dovednosti — je to text, který agent AI používá.icon(volitelné) nastavuje ikonu zobrazovanou v UI.description(volitelné) poskytuje doplňující kontext o účelu dovednosti.
- Vygenerované: Spusťte
yarn twenty entity:adda zvolte možnost přidat novou dovednost. - Ruční: Vytvořte nový soubor a použijte
defineSkill()podle stejného vzoru.
Generované typované klienty
Dva typovaní klienti jsou automaticky generováni pomocíyarn twenty dev a ukládají se do node_modules/twenty-sdk/generated podle schématu vašeho pracovního prostoru:
CoreApiClient— provádí dotazy na endpoint/graphqlza účelem získání dat pracovního prostoruMetadataApiClient— odesílá dotazy na endpoint/metadatapro konfiguraci pracovního prostoru a nahrávání souborů
yarn twenty dev kdykoli se změní vaše objekty nebo pole.
Běhové přihlašovací údaje v logických funkcích
Když vaše funkce běží na Twenty, platforma před spuštěním kódu vloží přihlašovací údaje jako proměnné prostředí:TWENTY_API_URL: Základní URL Twenty API, na které vaše aplikace cílí.TWENTY_API_KEY: Krátkodobý klíč s rozsahem omezeným na výchozí roli funkce vaší aplikace.
- Není nutné předávat URL ani klíč API vygenerovanému klientovi. Za běhu čte
TWENTY_API_URLaTWENTY_API_KEYz process.env. - Oprávnění klíče API jsou určena rolí odkazovanou ve vašem
application-config.tsprostřednictvímdefaultRoleUniversalIdentifier. Toto je výchozí role používaná logickými funkcemi vaší aplikace. - Aplikace mohou definovat role podle principu nejmenších oprávnění. Udělte pouze oprávnění, která vaše funkce potřebují, a poté nastavte
defaultRoleUniversalIdentifierna univerzální identifikátor této role.
Nahrávání souborů
VygenerovanýMetadataApiClient obsahuje metodu uploadFile pro připojování souborů k polím typu souboru u objektů ve vašem pracovním prostoru. Protože standardní klienti GraphQL nativně nepodporují nahrávání souborů pomocí multipart, klient poskytuje tuto speciální metodu, která interně implementuje specifikaci multipart požadavků GraphQL.
| Parametr | Typ | Popis |
|---|---|---|
fileBuffer | Buffer | Surový obsah souboru |
filename | string | Název souboru (používá se pro ukládání a zobrazení) |
contentType | string | Typ MIME souboru (pokud je vynechán, výchozí je application/octet-stream) |
fieldMetadataUniversalIdentifier | string | universalIdentifier pole typu souboru ve vašem objektu |
- Metoda
uploadFileje k dispozici vMetadataApiClient, protože mutaci nahrávání obsluhuje endpoint/metadata. - Používá
universalIdentifierpole (nikoli jeho ID specifické pro pracovní prostor), takže váš kód pro nahrávání funguje ve všech pracovních prostorech, kde je vaše aplikace nainstalována — v souladu s tím, jak aplikace odkazují na pole všude jinde. - Vrácená hodnota
urlje podepsaná adresa URL, kterou můžete použít k přístupu k nahranému souboru.