defineLogicFunction
Definujte logické funkce a jejich spouštěče
defineLogicFunction
Definujte logické funkce a jejich spouštěče
Každý soubor funkce používá Dostupné typy spouštěčů:Typ
Ve vašem handleru k přeposlaným záhlavím přistupujte takto:Hlavní body:
defineLogicFunction() k exportu konfigurace s obslužnou funkcí (handlerem) a volitelnými spouštěči.src/logic-functions/createPostCard.logic-function.ts
- httpRoute: Zpřístupní vaši funkci na HTTP cestě a metodě pod koncovým bodem
/s/:
např.path: '/post-card/create'je volatelné nahttps://your-twenty-server.com/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,*.created,company.*
Funkci můžete také spustit ručně pomocí CLI:Logy můžete sledovat pomocí:
Payload spouštěče trasy
Když spouštěč typu route vyvolá vaši logickou funkci, ta obdrží objektRoutePayload, který odpovídá
AWS HTTP API v2 formátu.
Importujte typ RoutePayload z twenty-sdk:RoutePayload má následující strukturu:| Vlastnost | Typ | Popis | Příklad |
|---|---|---|---|
headers | Record\<string, string | undefined> | Záhlaví HTTP (pouze ta uvedená v forwardedRequestHeaders) | viz sekci níže |
queryStringParameters | Record\<string, string | undefined> | Parametry query stringu (více hodnot spojených čárkami) | /users?ids=1&ids=2&ids=3&name=Alice -> { ids: '1,2,3', name: 'Alice' } |
pathParameters | Record\<string, string | undefined> | Parametry cesty extrahované ze vzoru trasy | /users/:id, /users/123 -> { id: '123' } |
body | object | null | Parsované tělo požadavku (JSON) | { id: 1 } -> { id: 1 } |
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 |
forwardedRequestHeaders
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']).Zpřístupnění 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 použít v automatizacích pracovních postupů.Chcete-li označit logickou funkci jako nástroj, nastavteisTool: true:src/logic-functions/enrich-company.logic-function.ts
- Můžete kombinovat
isToolse spouštěči — funkce může být zároveň nástrojem (volatelným agenty AI) a současně se spouštět událostmi. toolInputSchema(volitelné): Objekt JSON Schema, který popisuje parametry, jež vaše funkce přijímá. Schéma se určuje automaticky ze statické analýzy zdrojového kódu, ale můžete ho nastavit i explicitně:
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.definePostInstallLogicFunction
Definujte postinstalační logickou funkci (jedna na aplikaci)
definePostInstallLogicFunction
Definujte postinstalační logickou funkci (jedna na aplikaci)
Postinstalační funkce je logická funkce, která se spustí automaticky, jakmile je instalace vaší aplikace v pracovním prostoru dokončena. Server ji provede poté, co byla synchronizována metadata aplikace a vygenerován klient SDK, takže je pracovní prostor plně připraven k použití a nové schéma je zavedeno. Mezi typické případy použití patří naplnění výchozími daty, vytvoření počátečních záznamů, konfigurace nastavení pracovního prostoru nebo zřizování prostředků ve službách třetích stran.Postinstalační funkci můžete také kdykoli spustit ručně pomocí CLI:Hlavní body:
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 obdrží
InstallPayloads{ previousVersion?: string; newVersion: string }—newVersionje verze, která se instaluje, apreviousVersionje verze, která byla nainstalována dříve (neboundefinedpři čisté instalaci). Tyto hodnoty použijte k rozlišení čistých instalací od aktualizací a ke spuštění migrační logiky specifické pro verzi. - Kdy se hook spouští: ve výchozím nastavení pouze při čistých instalacích. Předejte
shouldRunOnVersionUpgrade: true, pokud chcete, aby se spouštěl i při aktualizaci aplikace z předchozí verze. Pokud je vynechán, příznak má výchozí hodnotufalsea při aktualizacích se hook přeskočí. - Model provádění — ve výchozím nastavení asynchronní, synchronní volitelně: příznak
shouldRunSynchronouslyurčuje jak se spouští post-install.shouldRunSynchronously: false(výchozí) — hook je zařazen do fronty zpráv sretryLimit: 3a běží asynchronně ve workeru. Odezva instalace se vrátí hned po zařazení úlohy do fronty, takže pomalá nebo chybující obslužná funkce neblokuje volajícího. Worker se pokusí o opakování až třikrát. Použijte pro dlouho běžící úlohy — plnění velkých datových sad, volání pomalých externích API, zřizování externích prostředků, cokoli, co by mohlo přesáhnout rozumné časové okno HTTP odezvy.shouldRunSynchronously: true— hook se provádí inline během instalačního procesu (stejný vykonavatel jako pre-install). Instalační požadavek blokuje, dokud obslužná funkce nedokončí, a pokud vyvolá výjimku, volající instalace obdržíPOST_INSTALL_ERROR. Žádné automatické opakování. Použijte pro rychlé úlohy, které se musí dokončit před odpovědí — například vrácení validační chyby uživateli nebo rychlé nastavení, na kterém bude klient záviset ihned po návratu volání instalace. Mějte na paměti, že v době, kdy se spustí post-install, už byla migrace metadat aplikována, takže selhání v synchronním režimu změny schématu nevrací zpět — pouze odhalí chybu.
- Ujistěte se, že vaše obslužná funkce je idempotentní. V asynchronním režimu se může fronta pokusit až třikrát; v obou režimech se může hook znovu spustit při aktualizacích, pokud je
shouldRunOnVersionUpgrade: true. - Proměnné prostředí
APPLICATION_ID,APP_ACCESS_TOKENaAPI_URLjsou dostupné uvnitř obslužné funkce (stejně jako u jakékoli jiné logické funkce), takže můžete volat Twenty API s aplikačním přístupovým tokenem omezeným na vaši aplikaci. - Na jednu aplikaci je povolena pouze jedna postinstalační funkce. Sestavení manifestu skončí chybou, pokud je zjištěna více než jedna.
- Atributy funkce
universalIdentifier,shouldRunOnVersionUpgradeashouldRunSynchronouslyjsou během buildu automaticky připojeny k manifestu aplikace do polepostInstallLogicFunction— není potřeba je 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.
- Nespouští se v režimu dev: když je aplikace registrována lokálně (pomocí
yarn twenty dev), server zcela přeskočí instalační tok a synchronizuje soubory přímo prostřednictvím sledovače CLI — takže se post-install v režimu dev nikdy nespustí bez ohledu nashouldRunSynchronously. Použijteyarn twenty exec --postInstallk ručnímu spuštění nad běžícím pracovním prostorem.
definePreInstallLogicFunction
Definujte předinstalační logickou funkci (jedna na aplikaci)
definePreInstallLogicFunction
Definujte předinstalační logickou funkci (jedna na aplikaci)
Funkce pre-install je logická funkce, která se během instalace spouští automaticky, před aplikováním migrace metadat pracovního prostoru. Má stejný tvar payloadu jako post-install (Předinstalační funkci můžete také kdykoli spustit ručně pomocí CLI:Hlavní body:
InstallPayload), ale je zařazena dříve v instalačním toku, aby mohla připravit stav, na němž nadcházející migrace závisí — typické použití zahrnuje zálohování dat, ověření kompatibility s novým schématem nebo archivaci záznamů, které se chystají přeuspořádat nebo odstranit.src/logic-functions/pre-install.ts
- Funkce pre-install používají
definePreInstallLogicFunction()— stejné specializované nastavení jako u post-install, pouze připojené k jiné fázi životního cyklu. - Obě obslužné funkce pre- i post-install přijímají stejný typ
InstallPayload:{ previousVersion?: string; newVersion: string }. Importujte jej jednou a znovu použijte pro oba hooky. - Kdy se hook spouští: umístěn těsně před migrací metadat pracovního prostoru (
synchronizeFromManifest). Před spuštěním server provede čistě aditivní “zjednodušenou synchronizaci”, která v metadatech pracovního prostoru zaregistruje pre-install funkci nové verze — ničeho dalšího se nedotkne — a poté ji spustí. Protože tato synchronizace je pouze aditivní, objekty, pole a data předchozí verze zůstávají při spuštění vaší obslužné funkce zachována: můžete bezpečně číst a zálohovat stav před migrací. - Model provádění: pre-install se provádí synchronně a blokuje instalaci. Pokud obslužná funkce vyvolá výjimku, instalace se přeruší ještě před aplikováním jakýchkoli změn schématu — pracovní prostor zůstane na předchozí verzi v konzistentním stavu. Je to záměrné: pre-install je vaše poslední šance odmítnout rizikovou aktualizaci.
- Stejně jako u post-install je na jednu aplikaci povolena pouze jedna funkce pre-install. Během buildu je automaticky připojena k manifestu aplikace pod
preInstallLogicFunction. - Nespouští se v režimu dev: stejně jako u post-install — u lokálně registrovaných aplikací je instalační tok zcela přeskočen, takže se pre-install pod
yarn twenty devnikdy nespustí. Použijteyarn twenty exec --preInstallk ručnímu spuštění.
Pre-install vs post-install: kdy použít který
Výběr správného instalačního hooku
Pre-install vs post-install: kdy použít který
Výběr správného instalačního hooku
Oba hooky jsou součástí téhož instalačního toku a přijímají stejný Pre-install je vždy synchronní (blokuje instalaci a může ji přerušit). Post-install je ve výchozím nastavení asynchronní — zařazen do workeru s automatickými pokusy o opakování — ale může přejít na synchronní provádění pomocí Použijte Zlaté pravidlo:
InstallPayload. Rozdíl je v tom, kdy se spouštějí vzhledem k migraci metadat pracovního prostoru, a to určuje, jakých dat se mohou bezpečně dotýkat.shouldRunSynchronously: true. Viz accordion definePostInstallLogicFunction výše, kdy použít jednotlivé režimy.Použijte post-install pro cokoli, co vyžaduje existenci nového schématu. To je běžný případ:- Plnění výchozími daty (vytváření počátečních záznamů, výchozích pohledů, demo obsahu) vůči nově přidaným objektům a polím.
- Registrace webhooků u služeb třetích stran poté, co má aplikace své přihlašovací údaje.
- Volání vlastního API k dokončení nastavení, které závisí na synchronizovaných metadatech.
- Idempotentní logika “zajisti, že to existuje”, která má při každé aktualizaci uvést stav do souladu — kombinujte s
shouldRunOnVersionUpgrade: true.
PostCard:src/logic-functions/post-install.ts
pre-install, pokud by migrace jinak zničila nebo poškodila existující data. Protože pre-install běží proti předchozímu schématu a jeho selhání vrací aktualizaci zpět, je to správné místo pro cokoli rizikového:- Zálohování dat, která se chystají odstranit nebo přeuspořádat — např. odstraňujete pole ve verzi v2 a potřebujete jeho hodnoty zkopírovat do jiného pole nebo je před spuštěním migrace exportovat do úložiště.
- Archivace záznamů, které by nové omezení zneplatnilo — např. pole se stává
NOT NULLa je třeba nejprve smazat nebo opravit řádky s hodnotami null. - Ověření kompatibility a odmítnutí aktualizace, pokud nelze aktuální data čistě migrovat — vyhoďte výjimku z obslužné funkce a instalace se ukončí bez provedených změn. Je to bezpečnější, než zjistit nekompatibilitu uprostřed migrace.
- Přejmenování nebo změna klíčů dat před změnou schématu, která by ztratila vazby.
src/logic-functions/pre-install.ts
| You want to… | Použít |
|---|---|
| Naplňte výchozí data, nakonfigurujte pracovní prostor, zaregistrujte externí prostředky | post-install |
| Spusťte dlouho běžící plnění nebo volání třetích stran, která by neměla blokovat odezvu instalace | post-install (výchozí — shouldRunSynchronously: false, s opakovanými pokusy workeru) |
| Spusťte rychlé nastavení, na které bude volající spoléhat ihned po návratu volání instalace | post-install s shouldRunSynchronously: true |
| Čtěte nebo zálohujte data, která by nadcházející migrace ztratila | pre-install |
| Odmítněte aktualizaci, která by poškodila existující data | pre-install (vyhoďte výjimku z obslužné funkce) |
| Spouštějte srovnání stavu při každé aktualizaci | post-install s shouldRunOnVersionUpgrade: true |
| Proveďte jednorázové nastavení pouze při první instalaci | post-install s shouldRunOnVersionUpgrade: false (výchozí) |
Pokud si nejste jisti, výchozí volbou je post-install. Po pre-install sáhněte pouze tehdy, když je samotná migrace destruktivní a potřebujete zachytit předchozí stav, než zmizí.
Typovaní klienti API (twenty-client-sdk)
Balíčektwenty-client-sdk poskytuje dva typované klienty GraphQL pro práci s Twenty API z vašich logických funkcí a frontendových komponent.
| Klient | Importovat | Koncový bod | Generováno? |
|---|---|---|---|
CoreApiClient | twenty-client-sdk/core | /graphql — data pracovního prostoru (záznamy, objekty) | Ano, při vývoji/sestavení |
MetadataApiClient | twenty-client-sdk/metadata | /metadata — konfigurace pracovního prostoru, nahrávání souborů | Ne, dodává se předem sestavený |
CoreApiClient
Dotazování a změny dat pracovního prostoru (záznamy, objekty)
CoreApiClient
Dotazování a změny dat pracovního prostoru (záznamy, objekty)
CoreApiClient je hlavní klient pro dotazování a mutace dat pracovního prostoru. Generuje se z vašeho schématu pracovního prostoru během yarn twenty dev nebo yarn twenty build, takže je plně typovaný tak, aby odpovídal vašim objektům a polím.true zahrnete pole, pro argumenty použijte __args a pro relace vnořujte objekty. Získáte plné automatické doplňování a kontrolu typů založené na schématu vašeho pracovního prostoru.CoreApiClient je generován při vývoji/sestavení. Pokud jej použijete bez předchozího spuštění
yarn twenty dev nebo yarn twenty build, vyvolá chybu. Generování probíhá automaticky — CLI prozkoumá GraphQL schéma vašeho pracovního prostoru a vygeneruje typovaného klienta pomocí @genql/cli.Použití CoreSchema pro anotace typů
CoreSchema poskytuje typy TypeScriptu odpovídající objektům vašeho pracovního prostoru — hodí se pro typování stavu komponent nebo parametrů funkcí:MetadataApiClient
Konfigurace pracovního prostoru, aplikace a nahrávání souborů
MetadataApiClient
Konfigurace pracovního prostoru, aplikace a nahrávání souborů
MetadataApiClient je dodáván předem sestavený v rámci SDK (není vyžadováno žádné generování). Odesílá dotazy na endpoint /metadata pro konfiguraci pracovního prostoru, aplikace a nahrávání souborů.Nahrávání souborů
MetadataApiClient obsahuje metodu uploadFile pro připojování souborů k polím typu souboru:| 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 (pokud je vynechán, výchozí je application/octet-stream) |
fieldMetadataUniversalIdentifier | string | universalIdentifier pole typu souboru ve vašem objektu |
- Používá
universalIdentifierpole (nikoli jeho ID specifické pro pracovní prostor), takže váš kód pro nahrávání funguje v jakémkoli pracovním prostoru, kde je vaše aplikace nainstalována. - Vrácená hodnota
urlje podepsaná adresa URL, kterou můžete použít k přístupu k nahranému souboru.
Když váš kód běží na Twenty (logické funkce nebo frontendové komponenty), platforma vloží přihlašovací údaje jako proměnné prostředí:
TWENTY_API_URL— Základní URL Twenty APITWENTY_APP_ACCESS_TOKEN— krátkodobý klíč s rozsahem omezeným na výchozí roli funkce vaší aplikace
process.env. Oprávnění API klíče jsou určena rolí uvedenou v defaultRoleUniversalIdentifier ve vašem application-config.ts.