i18n - docs translations (#17199)

Created by Github action

Co-authored-by: github-actions <github-actions@twenty.com>
This commit is contained in:
github-actions[bot]
2026-01-16 18:36:39 +01:00
committed by GitHub
parent 5bcbe43596
commit b7fbe1c49e
345 changed files with 11211 additions and 7495 deletions
@@ -4,14 +4,14 @@ title: Osvědčené postupy
Tento dokument popisuje osvědčené postupy, které byste měli dodržovat při práci na backendu.
## Follow a modular approach
## Dodržujte modulární přístup
Backend sleduje modulární přístup, což je základní princip při práci s NestJS. Ujistěte se, že rozdělujete svůj kód na znovupoužitelné moduly, abyste udrželi čistý a organizovaný kód.
Každý modul by měl zahrnovat určitou funkci nebo funkcionalitu a mít jasně definovaný rozsah. This modular approach enables clear separation of concerns and removes unnecessary complexities.
Každý modul by měl zahrnovat určitou funkci nebo funkcionalitu a mít jasně definovaný rozsah. Tento modulární přístup umožňuje jasné oddělení odpovědností a odstraňuje zbytečné složitosti.
## Expose services to use in modules
## Zpřístupněte služby pro použití v modulech.
Always create services that have a clear and single responsibility, which enhances code readability and maintainability. Pojmenovávejte služby výstižně a konzistentně.
Vždy vytvářejte služby s jasně vymezenou jedinou odpovědností, což zvyšuje čitelnost a udržovatelnost kódu. Pojmenovávejte služby výstižně a konzistentně.
Měli byste také zpřístupnit služby, které chcete používat v jiných modulech. Zpřístupnění služeb ostatním modulům je možné díky výkonnému systému injektování závislostí v NestJS a podporuje volné vazby mezi komponentami.
@@ -21,7 +21,7 @@ server
└───utils
```
## Ability
## Oprávnění
Definuje oprávnění a zahrnuje zpracovníky pro každou entitu.
@@ -29,7 +29,7 @@ Definuje oprávnění a zahrnuje zpracovníky pro každou entitu.
Definuje vlastní dekorátory v NestJS pro přídavnou funkčnost.
See [custom decorators](https://docs.nestjs.com/custom-decorators) for more details.
Více podrobností naleznete ve [vlastních dekorátorech](https://docs.nestjs.com/custom-decorators).
## Filtry
@@ -37,9 +37,9 @@ Zahrnuje filtry výjimek k zpracování výjimek, které mohou nastat v koncový
## Guards
See [guards](https://docs.nestjs.com/guards) for more details.
Více podrobností naleznete ve [strážích](https://docs.nestjs.com/guards).
## Health
## Zdraví
Zahrnuje veřejně dostupné REST API (healthz), které vrací JSON k potvrzení, zda databáze funguje, jak se očekává.
@@ -49,7 +49,7 @@ Definuje vlastní objekty a poskytuje GraphQL API (graphql/metadata).
## Pracovní prostor
Generates and serves custom GraphQL schema based on the metadata.
Generuje a poskytuje vlastní schéma GraphQL na základě metadat.
### Struktura adresáře pracovního prostoru
@@ -87,7 +87,7 @@ Kořen adresáře pracovního prostoru zahrnuje `workspace.factory.ts`, soubor o
Tato strategie neslouží pouze k organizaci, ale pomáhá i v optimalizaci, jako je ukládání vytvořených typových definic do mezipaměti pro zvýšení výkonu a škálovatelnosti.
### Workspace Schema builder
### Builder schématu pracovního prostoru
Generuje schéma GraphQL a zahrnuje:
@@ -114,7 +114,7 @@ Obsahuje službu, která spojuje FieldMetadataType s odpovídajícími GraphQL s
Zahrnuje třídu `TypeDefinitionsStorage`, která obsahuje opakovaně použitelné definice typů, zabraňující duplikaci typů GraphQL.
### Workspace Resolver Builder
### Builder resolveru pracovního prostoru
Vytváří funkce pro řešení dotazů a mutací v GraphQL schématu.
@@ -5,7 +5,7 @@ title: Příkazy backendu
## Užitečné příkazy
Tyto příkazy by měly být vykonávány z adresáře packages/twenty-server.
From any other folder you can run `npx nx {command} twenty-server` (or `npx nx run twenty-server:{command}`).
Z jakéhokoli jiného adresáře můžete spustit `npx nx {command} twenty-server` (nebo `npx nx run twenty-server:{command}`).
### První nastavení
@@ -36,7 +36,7 @@ Poznámka: můžete spustit `npx nx run twenty-server:test:integration:with-db-r
### Obnovení databáze
If you want to reset and seed the database, you can run the following command:
Pokud chcete resetovat a naplnit databázi daty, můžete spustit následující příkaz:
```bash
npx nx run twenty-server:database:reset
@@ -59,9 +59,9 @@ npx nx run twenty-server:command workspace:sync-metadata -f
```
<Warning>
This will drop the database and re-run the migrations and seed.
Tímto se databáze smaže a znovu se spustí migrace a seedování.
Make sure to back up any data you want to keep before running this command.
Před spuštěním tohoto příkazu si nezapomeňte zálohovat všechna data, která chcete zachovat.
</Warning>
## Technologický stack
@@ -1,6 +1,6 @@
---
title: Bugs, Requests & Pull Requests
info: Report issues, request features, and contribute code
title: Hlášení chyb, požadavky a pull requesty
info: Nahlašujte problémy, žádejte o nové funkce a přispívejte dem
---
## Nahlášení chyb
@@ -13,66 +13,66 @@ O pomoc můžete také požádat na [Discordu](https://discord.gg/cx5n4Jzs57).
Pokud si nejste jisti, zda se jedná o chybu, a máte pocit, že je to spíše žádost o funkci, pak byste pravděpodobně měli [otevřít diskuzi](https://github.com/twentyhq/twenty/discussions/new).
## Submit a Pull Request
## Odešlete pull request
Contributing code to Twenty starts with a pull request (PR).
Přispívání kódem do Twenty začíná pull requestem (PR).
### Než začnete
1. Check [existing issues](https://github.com/twentyhq/twenty/issues) for related work
2. For new features, open an issue first to discuss
3. Review our [Code of Conduct](https://github.com/twentyhq/twenty/blob/main/CODE_OF_CONDUCT.md)
1. Zkontrolujte [existující issues](https://github.com/twentyhq/twenty/issues) ohledně související práce
2. Pro nové funkce nejprve otevřete issue k diskusi
3. Prostudujte si náš [Kodex chování](https://github.com/twentyhq/twenty/blob/main/CODE_OF_CONDUCT.md)
### Fork and Clone
### Fork a klonování
1. Fork the repository on GitHub
2. Clone your fork:
1. Vytvořte fork repozitáře na GitHubu
2. Naklonujte svůj fork:
```bash
git clone https://github.com/YOUR_USERNAME/twenty.git
cd twenty
```
3. Add upstream remote:
3. Přidejte vzdálený upstream:
```bash
git remote add upstream https://github.com/twentyhq/twenty.git
```
### Create a Branch
### Vytvoření větve
```bash
git checkout -b feature/your-feature-name
```
Use descriptive branch names:
Používejte výstižné názvy větví:
* `feature/add-export-button`
* `fix/login-redirect-issue`
* `docs/update-api-guide`
### Make Your Changes
### Proveďte změny
1. Write clean, well-documented code
2. Follow existing code style
3. Add tests for new functionality
4. Update documentation if needed
1. Pište čistý, dobře zdokumentovaný kód
2. Dodržujte stávající styl kódu
3. Přidejte testy pro novou funkcionalitu
4. Podle potřeby aktualizujte dokumentaci
### Submit Your PR
### Odešlete svůj PR
1. Push your branch:
1. Odešlete svou větev:
```bash
git push origin feature/your-feature-name
```
2. Open a PR on GitHub
3. Fill in the PR template
4. Link related issues
2. Otevřete PR na GitHubu
3. Vyplňte šablonu PR
4. Propojte související issues
### PR Checklist
### Kontrolní seznam PR
* [ ] Code follows project style guidelines
* [ ] Tests pass locally
* [ ] Documentation is updated
* [ ] PR description explains the changes
* [ ] Kód odpovídá projektovým zásadám stylu
* [ ] Testy procházejí lokálně
* [ ] Dokumentace je aktualizována
* [ ] Popis PR vysvětluje změny
@@ -77,8 +77,8 @@ If you feel like you need to add a `useEffect` in your root component, you shoul
Stejný postup můžete aplikovat na logiku získávání dat pomocí Apollo hooks.
```tsx
// ❌ Bad, will cause re-renders even if data is not changing,
// because useEffect needs to be re-evaluated
// ❌ Špatně, způsobí překreslení i když se data nemění,
// protože useEffect je třeba přehodnotit
export const PageComponent = () => {
const [data, setData] = useRecoilState(dataState);
const [someDependency] = useRecoilState(someDependencyState);
@@ -96,12 +96,12 @@ export const App = () => (
<RecoilRoot>
<PageComponent />
</RecoilRoot>
);
);},{
```
```tsx
// ✅ Good, will not cause re-renders if data is not changing,
// because useEffect is re-evaluated in another sibling component
// ✅ Dobře, nezpůsobí překreslení, pokud se data nemění,
// protože useEffect je přehodnoceno v další sourozené komponentě
export const PageComponent = () => {
const [data, setData] = useRecoilState(dataState);
@@ -240,7 +240,7 @@ Nejčastější příklad je komponenta ikon:
```tsx
const SomeParentComponent = () => <MyComponent Icon={MyIcon} />;
// In MyComponent
// V komponentě MyComponent
const MyComponent = ({ MyIcon }: { MyIcon: IconComponent }) => {
const theme = useTheme();
@@ -29,7 +29,7 @@ Zahrnuje komponenty nejvyšší úrovně definované aplikačními trasami. Impo
## Moduly
Každý modul představuje funkci nebo skupinu funkcí s jejich specifickými komponenty, stavy a provozní logikou.
Všechny by měly dodržovat strukturu níže. You can nest modules within modules (referred to as submodules) and the same rules will apply.
Všechny by měly dodržovat strukturu níže. Moduly můžete vnořovat do sebe (tzv. podmoduly) a platí pro ně stejná pravidla.
```
module1
@@ -64,7 +64,7 @@ Více podrobností naleznete v [GraphQL](https://graphql.org/learn/).
* Fragmenty
Fragment je znovupoužitelný kus dotazu, který můžete použít na různých místech. By using fragments, it's easier to avoid duplicating code.
Fragment je znovupoužitelný kus dotazu, který můžete použít na různých místech. Pomocí fragmentů je snazší vyhnout se duplikaci kódu.
Více podrobností naleznete v [GraphQL Fragments](https://graphql.org/learn/queries/#fragments).
@@ -76,7 +76,7 @@ Více podrobností naleznete v [GraphQL Queries](https://graphql.org/learn/queri
Více podrobností naleznete v [GraphQL Mutations](https://graphql.org/learn/queries/#mutations).
### Hooks
### Hooky
Více podrobností naleznete v [Hooks](https://react.dev/learn/reusing-logic-with-custom-hooks).
@@ -88,9 +88,9 @@ Obsahuje logiku správy stavů. To řeší [RecoilJS](https://recoiljs.org).
Vestavěná správa stavů v Reactu stále spravuje stav uvnitř komponenty.
### Utils
### Pomocné funkce
Měly by obsahovat pouze znovupoužitelné čisté funkce. Otherwise, create custom hooks in the `hooks` folder.
Měly by obsahovat pouze znovupoužitelné čisté funkce. V opačném případě vytvořte vlastní hooky ve složce `hooks`.
## UI
@@ -25,7 +25,7 @@ npx nx run twenty-front:graphql:generate
### Linter
```bash
npx nx run twenty-front:lint # pass --fix to fix lint errors
npx nx run twenty-front:lint # přidejte --fix pro opravu chyb ve formátování
```
## Překlady
@@ -3,6 +3,6 @@ title: Storybook
description: Prozkoumejte knihovnu komponent UI na Twenty
---
View our complete component library and documentation in Storybook.
Prohlédněte si naši kompletní knihovnu komponent a dokumentaci ve Storybooku.
[Open Storybook →](https://storybook.twenty.com)
[Otevřít Storybook →](https://storybook.twenty.com)
@@ -36,9 +36,9 @@ export function MyComponent() {
### Vlastnosti
Create the type of the props and call it `(ComponentName)Props` if there's no need to export it.
Vytvořte typ rekvizit a pojmenujte jej `(ComponentName)Props`, pokud není potřeba jej exportovat.
Use props destructuring.
Použijte destrukturalizaci rekvizit.
```tsx
// ❌ Bad, no type
@@ -67,11 +67,11 @@ const EmailField: React.FC<{
```
```tsx
/* ✅ - Good, a separate type (OwnProps) is explicitly defined for the
* component's props
* - This method doesn't automatically include the children prop. If
* you want to include it, you have to specify it in OwnProps.
*/
/* ✅ - Dobré, explicitně definován samostatný typ (OwnProps) pro
* rekvizity komponenty
* - Tato metoda automaticky nezahrnuje rekvizitu children. Pokud
* ji chcete zahrnout, musíte ji specifikovat v OwnProps.
*/
type EmailFieldProps = {
value: string;
};
@@ -81,9 +81,9 @@ const EmailField = ({ value }: EmailFieldProps) => (
);
```
#### No Single Variable Prop Spreading in JSX Elements
#### Nepoužívejte rozbalení jediného objektu rekvizit v prvcích JSX
Avoid using single variable prop spreading in JSX elements, like `{...props}`. Tato praxe často vede k tomu, že kód je méně čitelný a obtížnější udržovat, protože není jasné, které rekvizity komponenta přijímá.
Vyhněte se používání rozbalení jediného objektu rekvizit v prvcích JSX, například `{...props}`. Tato praxe často vede k tomu, že kód je méně čitelný a obtížnější udržovat, protože není jasné, které rekvizity komponenta přijímá.
```tsx
/* ❌ - Bad, spreads a single variable prop into the underlying component
@@ -94,9 +94,9 @@ const MyComponent = (props: OwnProps) => {
```
```tsx
/* ✅ - Good, Explicitly lists all props
* - Enhances readability and maintainability
*/
/* ✅ - Dobré, explicitně uvádí všechny rekvizity
* - Zvyšuje čitelnost a udržovatelnost
*/
const MyComponent = ({ prop1, prop2, prop3 }: MyComponentProps) => {
return <OtherComponent {...{ prop1, prop2, prop3 }} />;
};
@@ -105,8 +105,8 @@ const MyComponent = ({ prop1, prop2, prop3 }: MyComponentProps) => {
Odůvodnění:
* Na první pohled je jasné, které prop kód předává, čímž je snazší pochopit a udržovat.
* It helps to prevent tight coupling between components via their props.
* Linting tools make it easier to identify misspelled or unused props when you list props explicitly.
* Pomáhá to předcházet těsnému provázání mezi komponentami prostřednictvím jejich rekvizit.
* Lintovací nástroje usnadňují identifikaci překlepů nebo nepoužívaných rekvizit, když rekvizity uvádíte explicit.
## JavaScript
@@ -123,10 +123,10 @@ const value = process.env.MY_VALUE ?? 'default';
### Používejte volitelné zřetězení `?.`
```tsx
// ❌ Bad
// ❌ Špatné
onClick && onClick();
// ✅ Good
// ✅ Dobré
onClick?.();
```
@@ -234,7 +234,7 @@ Vyhýbejte se používání hodnot `px` nebo `rem` přímo ve stylizovaných kom
#### Barvy
Refrain from introducing new colors; instead, use the existing palette from the theme. Pokud by došlo k tomu, že paleta neodpovídá, prosím nechte komentář, aby to tým mohl napravit.
Zdržte se zavádění nových barev; místo toho použijte existující paletu z tématu. Pokud by došlo k tomu, že paleta neodpovídá, prosím nechte komentář, aby to tým mohl napravit.
```tsx
// ❌ Špatné, přímo specifikuje hodnoty stylu bez využití tématu
@@ -275,11 +275,11 @@ import { Meta, StoryObj } from '@storybook/react';
### Proč Zákaz Importů Typů
* **Consistency**: By avoiding type imports and using a single approach for both type and value imports, the codebase remains consistent in its module import style.
* **Konzistence**: Vyhýbáním se importům typů a použitím jednotného přístupu pro importy typů i hodnot zůstává kódová základna konzistentní ve svém stylu importů modulů.
* **Readability**: No-type imports improve code readability by making it clear when you're importing values or types. Tím se snižuje dvojznačnost a usnadňuje pochopení účelu importovaných symbolů.
* **Čitelnost**: Importy bez type zlepšují čitelnost kódu tím, že je jasné, zda importujete hodnoty nebo typy. Tím se snižuje dvojznačnost a usnadňuje pochopení účelu importovaných symbolů.
* **Maintainability**: It enhances codebase maintainability because developers can identify and locate type-only imports when reviewing or modifying code.
* **Udržovatelnost**: Zvyšuje udržovatelnost kódové základny, protože vývojáři mohou při revizi nebo úpravách kódu identifikovat a najít importy pouze typů.
### Pravidlo ESLint
@@ -287,4 +287,4 @@ Pravidlo ESLint, `@typescript-eslint/consistent-type-imports`, prosazuje standar
Upozorňujeme, že toto pravidlo konkrétně řeší vzácné okrajové případy, kdy dochází k neúmyslným typovým importům. TypeScript sám odrazuje tuto praxi, jak je uvedeno v [poznámkách k verzi TypeScript 3.8](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html). Ve většině případů byste neměli potřebovat používat pouze typové importy.
To ensure your code complies with this rule, make sure to run ESLint as part of your development workflow.
Aby váš kód splňoval toto pravidlo, spusťte ESLint jako součást svého vývojového pracovního postupu.
@@ -1,6 +1,6 @@
---
title: Práce s Figma
info: Learn how you can collaborate with Twenty's Figma
info: Zjistěte, jak můžete spolupracovat s Figmou Twenty
---
Figma je nástroj pro návrh uživatelského rozhraní, který pomáhá překlenout komunikační bariéru mezi návrháři a vývojáři.
@@ -18,7 +18,7 @@ Tento průvodce vysvětluje, jak můžete spolupracovat s Figma.
## Struktura Figma
On the left sidebar, you can access the different pages of Twenty's Figma. Takto jsou organizovány:
Na levém postranním panelu můžete přistupovat k různým stránkám Figmy společnosti Twenty. Takto jsou organizovány:
* **Stránka komponentů:** Toto je první stránka. Návrhář ji používá k vytváření a organizování znovupoužitelných návrhových prvků použitých v celém návrhovém souboru. Například tlačítka, ikony, symboly nebo jakékoli jiné znovupoužitelné komponenty. Slouží k zajištění konzistence v celém návrhu.
* **Hlavní stránka:** Druhá stránka je hlavní stránka, která zobrazuje kompletní uživatelské rozhraní projektu. Můžete stisknout **"Přehrát"**, abyste použili kompletní prototyp aplikace.
@@ -114,7 +114,7 @@ Všechny příkazy v následujících krocích byste měli provádět z kořene
**Možnost 2:** Pokud máte nainstalován docker:
```bash
make postgres-on-docker
make -C packages/twenty-docker postgres-on-docker
```
</Tab>
@@ -172,7 +172,7 @@ Všechny příkazy v následujících krocích byste měli provádět z kořene
**Možnost 2:** Pokud máte nainstalován docker:
```bash
make postgres-on-docker
make -C packages/twenty-docker postgres-on-docker
```
</Tab>
@@ -193,7 +193,7 @@ Všechny příkazy v následujících krocích byste měli provádět z kořene
Použijte tuto možnost pouze pokud si jste jisti extra kroky včetně zapnutí [Docker Desktop WSL2](https://docs.docker.com/desktop/wsl).
```bash
make postgres-on-docker
make -C packages/twenty-docker postgres-on-docker
```
</Tab>
</Tabs>
@@ -212,7 +212,7 @@ Twenty vyžaduje ke svému provozu Redis cache pro zajištění nejlepšího vý
**Možnost 2:** Pokud máte nainstalován docker:
```bash
make redis-on-docker
make -C packages/twenty-docker redis-on-docker
```
</Tab>
@@ -229,7 +229,7 @@ Twenty vyžaduje ke svému provozu Redis cache pro zajištění nejlepšího vý
**Možnost 2:** Pokud máte nainstalován docker:
```bash
make redis-on-docker
make -C packages/twenty-docker redis-on-docker
```
</Tab>
@@ -240,7 +240,7 @@ Twenty vyžaduje ke svému provozu Redis cache pro zajištění nejlepšího vý
**Možnost 2:** Pokud máte nainstalován docker:
```bash
make redis-on-docker
make -C packages/twenty-docker redis-on-docker
```
</Tab>
</Tabs>
@@ -259,7 +259,7 @@ cp ./packages/twenty-server/.env.example ./packages/twenty-server/.env
```
<Info>
**Multi-Workspace Mode:** By default, Twenty runs in single-workspace mode where only one workspace can be created. To enable multi-workspace support (useful for testing subdomain-based features), set `IS_MULTIWORKSPACE_ENABLED=true` in your server `.env` file. See [Multi-Workspace Mode](/l/cs/developers/self-host/capabilities/setup#multi-workspace-mode) for details.
**Režim více pracovních prostorů:** Ve výchozím nastavení běží Twenty v režimu jednoho pracovního prostoru, ve kterém lze vytvořit pouze jeden pracovní prostor. Chcete-li povolit podporu více pracovních prostorů (užitečné pro testování funkcí založených na subdoménách), nastavte v serverovém souboru `.env` hodnotu `IS_MULTIWORKSPACE_ENABLED=true`. Podrobnosti viz [Režim více pracovních prostorů](/l/cs/developers/self-host/capabilities/setup#multi-workspace-mode).
</Info>
## Krok 6: Instalace závislostí
@@ -1,6 +1,6 @@
---
title: Contribute
description: Contribute to Twenty's open-source development.
title: Přispět
description: Přispějte k open-source vývoji Twenty.
---
<Frame>
@@ -9,24 +9,24 @@ description: Contribute to Twenty's open-source development.
## Přehled
Twenty is open-source and welcomes contributions from the community. Whether you're fixing bugs, adding features, or improving documentation, your contributions help make Twenty better for everyone.
Twenty je open-source a vítá příspěvky od komunity. Ať už opravujete chyby, přidáváte funkce nebo zlepšujete dokumentaci, vaše příspěvky pomáhají zlepšovat Twenty pro všechny.
## Ways to Contribute
## Způsoby, jak přispět
* **Report bugs**: Help identify and document issues
* **Submit features**: Propose and implement new functionality
* **Improve documentation**: Make our docs clearer and more helpful
* **Frontend development**: Work on the React-based UI
* **Backend development**: Contribute to the NestJS server
* **Nahlašujte chyby**: Pomozte identifikovat a dokumentovat problémy
* **Přidávejte funkce**: Navrhujte a implementujte novou funkcionalitu
* **Zlepšujte dokumentaci**: Udělejte naši dokumentaci přehlednější a užitečnější
* **Vývoj frontendu**: Pracujte na uživatelském rozhraní postaveném na Reactu
* **Vývoj backendu**: Podílejte se na serveru NestJS
## Getting Started
## Začínáme
<CardGroup cols={2}>
<Card title="Bug Reports & Requests" icon="bug" href="/l/cs/developers/contribute/capabilities/bug-and-requests">
Report issues or request features
<Card title="Hlášení chyb a požadavky" icon="bug" href="/l/cs/developers/contribute/capabilities/bug-and-requests">
Nahlaste problémy nebo požádejte o nové funkce
</Card>
<Card title="Vývoj frontendu" icon="browser" href="/l/cs/developers/contribute/capabilities/frontend-development">
Contribute to the UI
Přispějte k vývoji uživatelského rozhraní
</Card>
</CardGroup>
@@ -1,6 +1,6 @@
---
title: API
description: Query and modify your CRM data programmatically using REST or GraphQL.
description: Programově dotazujte a upravujte svá CRM data pomocí REST nebo GraphQL.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
@@ -9,7 +9,7 @@ Twenty bylo vytvořeno s ohledem na vývojáře, nabízíme výkonné API, kter
## Přístup orientovaný na vývojáře
Twenty generates APIs specifically for your data model:
Twenty generuje API specificky pro váš datový model:
* **Nejsou vyžadována dlouhá ID**: Používejte v koncových bodech přímo názvy objektů a polí.
* **Standardní a vlastní objekty jsou rovnocenně zpracovány**: Vaše vlastní objekty mají stejnou podporu API jako vestavěné.
@@ -17,52 +17,52 @@ Twenty generates APIs specifically for your data model:
* **Vlastní dokumentace**: Generována specificky pro datový model vašeho pracovního prostoru.
<Note>
Your personalized API documentation is available under **Settings → API & Webhooks** after creating an API key. Since Twenty generates APIs that match your custom data model, the documentation is unique to your workspace.
Vaše personalizovaná dokumentace k API je dostupná v **Nastavení → API & Webhooks** po vytvoření API klíče. Protože Twenty generuje API odpovídající vašemu vlastnímu datovému modelu, dokumentace je jedinečná pro váš pracovní prostor.
</Note>
## The Two API Types
## Dva typy API
### Core API
Přístupné na `/rest/` nebo `/graphql/`
Work with your actual **records** (the data):
Pracujte se svými skutečnými **záznamy** (daty):
* Create, read, update, delete People, Companies, Opportunities, etc.
* Query and filter data
* Vytvářejte, čtěte, aktualizujte a mazejte Lidi, Společnosti, Příležitosti atd.
* Dotazujte a filtrujte data
* Spravování vztahů mezi záznamy.
### Metadata API
Přístupné na `/rest/metadata/` nebo `/metadata/`
Manage your **workspace and data model**:
Spravujte svůj **pracovní prostor a datový model**:
* Vytvářet, upravovat nebo mazat objekty a pole.
* Konfigurace nastavení pracovního prostoru.
* Define relationships between objects
* Definujte vztahy mezi objekty
## REST vs GraphQL
Both Core and Metadata APIs are available in REST and GraphQL formats:
Jak Core, tak Metadata API jsou k dispozici ve formátech REST a GraphQL:
| Formát | Available Operations |
| ----------- | ---------------------------------------------------------- |
| **REST** | CRUD, batch operations, upserts |
| **GraphQL** | Same + **batch upserts**, relationship queries in one call |
| Formát | Dostupné operace |
| ----------- | ---------------------------------------------------------------------- |
| **REST** | CRUD, hromadné operace, operace upsert |
| **GraphQL** | Stejné + **hromadné operace upsert**, dotazy na vztahy v jednom volání |
Choose based on your needs — both formats access the same data.
Zvolte podle svých potřeb — oba formáty přistupují ke stejným datům.
## Koncové body API
| Environment | Base URL |
| --------------- | ------------------------- |
| **Cloud** | `https://api.twenty.com/` |
| **Self-Hosted** | `https://{your-domain}/` |
| Prostředí | Základní URL |
| ------------------- | ------------------------- |
| **Cloud** | `https://api.twenty.com/` |
| **Vlastní hosting** | `https://{your-domain}/` |
## Ověření
Every API request requires an API key in the header:
Každý požadavek na API vyžaduje klíč API v hlavičce:
```
Authorization: Bearer YOUR_API_KEY
@@ -70,78 +70,78 @@ Authorization: Bearer YOUR_API_KEY
### Vytvořit API klíč
1. Go to **Settings → APIs & Webhooks**
2. Click **+ Create key**
1. Přejděte na **Nastavení → APIs & Webhooks**
2. Klikněte na **+ Vytvořit klíč**
3. Nakonfigurujte:
* **Name**: Descriptive name for the key
* **Expiration Date**: When the key expires
* **Název**: Popisný název pro klíč
* **Datum vypršení platnosti**: Kdy klíč vyprší
4. Klikněte na **Uložit**
5. **Copy immediately** — the key is only shown once
5. **Zkopírujte ihned** — klíč se zobrazí pouze jednou
<VimeoEmbed videoId="928786722" title="Creating API key" />
<VimeoEmbed videoId="928786722" title="Vytvoření klíče API" />
<Warning>
Your API key grants access to sensitive data. Don't share it with untrusted services. If compromised, disable it immediately and generate a new one.
Váš klíč API poskytuje přístup k citlivým datům. Nesdílejte ho s nedůvěryhodnými službami. Pokud je kompromitován, okamžitě ho deaktivujte a vygenerujte nový.
</Warning>
### Assign a Role to an API Key
### Přiřaďte roli klíči API
For better security, assign a specific role to limit access:
Pro vyšší bezpečnost přiřaďte konkrétní roli, abyste omezili přístup:
1. Přejděte na **Nastavení → Role**
2. Click on the role to assign
2. Klikněte na roli, kterou chcete přiřadit
3. Otevřete záložku **Přiřazení**
4. Under **API Keys**, click **+ Assign to API key**
5. Select the API key
4. V části **API Keys** klikněte na **+ Přiřadit ke klíči API**
5. Vyberte klíč API
The key will inherit that role's permissions. See [Permissions](/l/cs/user-guide/permissions-access/capabilities/permissions) for details.
Klíč zdědí oprávnění této role. Podrobnosti viz [Oprávnění](/l/cs/user-guide/permissions-access/capabilities/permissions).
### Spravovat API klíče
**Regenerate**: Settings → APIs & Webhooks → Click key → **Regenerate**
**Znovu vygenerovat**: Nastavení → APIs & Webhooks → Klikněte na klíč → **Znovu vygenerovat**
**Delete**: Settings → APIs & Webhooks → Click key → **Delete**
**Smazat**: Nastavení → APIs & Webhooks → Klikněte na klíč → **Smazat**
## API Playground
Test your APIs directly in the browser with our built-in playground — available for both **REST** and **GraphQL**.
Testujte svá API přímo v prohlížeči pomocí našeho vestavěného playgrounduk dispozici pro **REST** i **GraphQL**.
### Access the Playground
### Přístup do Playgroundu
1. Go to **Settings → APIs & Webhooks**
2. Create an API key (required)
3. Click on **REST API** or **GraphQL API** to open the playground
1. Přejděte na **Nastavení → APIs & Webhooks**
2. Vytvořte klíč API (povinné)
3. Klikněte na **REST API** nebo **GraphQL API** pro otevření playgroundu
### What You Get
### Co získáte
* **Interactive documentation**: Generated for your specific data model
* **Live testing**: Execute real API calls against your workspace
* **Schema explorer**: Browse available objects, fields, and relationships
* **Request builder**: Construct queries with autocomplete
* **Interaktiv dokumentace**: Generována pro váš specific datový model
* **Živé testování**: Spouštějte reálná volání API vůči vašemu pracovnímu prostoru
* **Průzkumník schématu**: Procházejte dostupné objekty, pole a vztahy
* **Tvůrce požadavků**: Sestavujte dotazy s automatickým doplňováním
The playground reflects your custom objects and fields, so documentation is always accurate for your workspace.
Playground odráží vaše vlastní objekty a pole, takže dokumentace je pro váš pracovní prostor vždy přesná.
## Hromadné operace
Both REST and GraphQL support batch operations:
REST i GraphQL podporují hromadné operace:
* **Velikost dávky**: Až 60 záznamů na požadavek.
* **Operations**: Create, update, delete multiple records
* **Operace**: Vytváření, aktualizace a mazání více záznamů
**GraphQL-only features:**
**Funkce pouze pro GraphQL:**
* **Batch Upsert**: Create or update in one call
* Use plural object names (e.g., `CreateCompanies` instead of `CreateCompany`)
* **Hromadný upsert**: Vytvoření nebo aktualizace v jednom volání
* Používejte množná čísla názvů objektů (např. `CreateCompanies` místo `CreateCompany`)
## Rate Limits
## Limity rychlosti
API requests are throttled to ensure platform stability:
Požadavky na API jsou omezovány, aby byla zajištěna stabilita platformy:
| Limit | Hodnota |
| -------------- | -------------------- |
| **Requests** | 100 calls per minute |
| **Batch size** | 60 records per call |
| Limit | Hodnota |
| ------------------ | -------------------- |
| **Požadavky** | 100 volání za minutu |
| **Velikost dávky** | 60 záznamů na volání |
<Tip>
Use batch operations to maximize throughput — process up to 60 records in a single API call instead of making individual requests.
Pro maximalizaci propustnosti používejte hromadné operace — zpracujte až 60 záznamů v jediném volání API místo odesílání jednotlivých požadavků.
</Tip>
@@ -1,34 +1,34 @@
---
title: Twenty Apps
description: Build and manage Twenty customizations as code.
title: Aplikace Twenty
description: Vytvářejte a spravujte přizpůsobení Twenty jako kód.
---
<Warning>
Apps are currently in alpha testing. The feature is functional but still evolving.
Aplikace jsou aktuálně v alfa testování. Tato funkce je funkční, ale stále se vyvíjí.
</Warning>
## What Are Apps?
## Co jsou aplikace?
Apps let you build and manage Twenty customizations **as code**. Instead of configuring everything through the UI, you define your data model and serverless functions in code — making it faster to build, maintain, and roll out to multiple workspaces.
Aplikace vám umožňují vytvářet a spravovat přizpůsobení Twenty **jako kód**. Místo konfigurace všeho přes uživatelské rozhraní definujete v kódu svůj datový model a serverless funkce — což zrychluje vývoj, údržbu i nasazování do více pracovních prostorů.
**What you can do today:**
**Co můžete dělat už dnes:**
* Define custom objects and fields as code (managed data model)
* Build serverless functions with custom triggers
* Deploy the same app across multiple workspaces
* Definujte vlastní objekty a pole jako kód (spravovaný datový model)
* Vytvářejte serverless funkce s vlastními spouštěči
* Nasazujte stejnou aplikaci do více pracovních prostorů
**Coming soon:**
**Již brzy:**
* Custom UI layouts and components
* Vlastní rozvržení a komponenty uživatelského rozhraní
## Předpoklady
* Node.js 24+ and Yarn 4
* A Twenty workspace and an API key (create one at https://app.twenty.com/settings/api-webhooks)
* Node.js 24+ a Yarn 4
* Pracovní prostor Twenty a klíč API (vytvořte si jej na https://app.twenty.com/settings/api-webhooks)
## Getting Started
## Začínáme
Create a new app using the official scaffolder, then authenticate and start developing:
Vytvořte novou aplikaci pomocí oficiálního scaffolderu, poté se ověřte a začněte vyvíjet:
```bash filename="Terminal"
# Scaffold a new app
@@ -64,18 +64,18 @@ yarn uninstall
yarn help
```
See also: the CLI reference pages for [create-twenty-app](https://www.npmjs.com/package/create-twenty-app) and [twenty-sdk CLI](https://www.npmjs.com/package/twenty-sdk).
Viz také: referenční stránky CLI pro [create-twenty-app](https://www.npmjs.com/package/create-twenty-app) a [twenty-sdk CLI](https://www.npmjs.com/package/twenty-sdk).
## Project structure (scaffolded)
## Struktura projektu (vytvořená scaffolderem)
When you run `npx create-twenty-app@latest my-twenty-app`, the scaffolder:
Když spustíte `npx create-twenty-app@latest my-twenty-app`, scaffolder:
* Copies a minimal base application into `my-twenty-app/`
* Adds a local `twenty-sdk` dependency and Yarn 4 configuration
* Creates config files and scripts wired to the `twenty` CLI
* Generates a default application config and a default function role
* Zkopíruje minimální základní aplikaci do `my-twenty-app/`
* Přidá lokální závislost `twenty-sdk` a konfiguraci pro Yarn 4
* Vytvoří konfigurační soubory a skripty napojené na `twenty` CLI
* Vygeneruje výchozí konfiguraci aplikace a výchozí roli funkcí
A freshly scaffolded app looks like this:
Čerstvě vytvořená aplikace vypadá takto:
```text filename="my-twenty-app/"
my-twenty-app/
@@ -99,21 +99,21 @@ my-twenty-app/
utils/ # Optional - handler implementations & utilities
```
### Convention-over-configuration
### Konvence před konfigura
Applications use a **convention-over-configuration** approach where entities are detected by their file suffix. This allows flexible organization within the `src/app/` folder:
Aplikace používají přístup **konvence před konfigurací**, kde jsou entity detekovány podle přípony souboru. To umožňuje flexibilní organizaci ve složce `src/app/`:
| File suffix | Entity type |
| --------------- | ------------------------------- |
| `*.object.ts` | Custom object definitions |
| `*.function.ts` | Serverless function definitions |
| `*.role.ts` | Role definitions |
| Přípona souboru | Typ entity |
| --------------- | -------------------------- |
| `*.object.ts` | Definice vlastních objektů |
| `*.function.ts` | Definice serverless funkcí |
| `*.role.ts` | Definice rolí |
### Supported folder organizations
### Podporované uspořádání složek
You can organize your entities in any of these patterns:
Entity můžete uspořádat podle některého z těchto vzorů:
**Traditional (by type):**
**Tradiční (podle typu):**
```text
src/app/
@@ -126,7 +126,7 @@ src/app/
└── admin.role.ts
```
**Feature-based:**
**Podle funkcí:**
```text
src/app/
@@ -137,7 +137,7 @@ src/app/
└── postCardAdmin.role.ts
```
**Flat:**
**Plochá:**
```text
src/app/
@@ -147,34 +147,34 @@ src/app/
└── admin.role.ts
```
At a high level:
V kostce:
* **package.json**: Declares the app name, version, engines (Node 24+, Yarn 4), and adds `twenty-sdk` plus scripts like `dev`, `sync`, `generate`, `create-entity`, `logs`, `uninstall`, and `auth` that delegate to the local `twenty` CLI.
* **.gitignore**: Ignores common artifacts such as `node_modules`, `.yarn`, `generated/` (typed client), `dist/`, `build/`, coverage folders, log files, and `.env*` files.
* **yarn.lock**, **.yarnrc.yml**, **.yarn/**: Lock and configure the Yarn 4 toolchain used by the project.
* **.nvmrc**: Pins the Node.js version expected by the project.
* **eslint.config.mjs** and **tsconfig.json**: Provide linting and TypeScript configuration for your app's TypeScript sources.
* **README.md**: A short README in the app root with basic instructions.
* **src/app/**: The main place where you define your application-as-code:
* `application.config.ts`: Global configuration for your app (metadata and runtime wiring). See "Application config" below.
* `*.role.ts`: Role definitions used by your serverless functions. See "Default function role" below.
* `*.object.ts`: Custom object definitions.
* `*.function.ts`: Serverless function definitions.
* **src/utils/**: Optional folder for handler implementations and utilities.
* **package.json**: Deklaruje název aplikace, verzi, engines (Node 24+, Yarn 4) a přidává `twenty-sdk` plus skripty jako `dev`, `sync`, `generate`, `create-entity`, `logs`, `uninstall` a `auth`, které delegují na lokální `twenty` CLI.
* **.gitignore**: Ignoruje běžné artefakty jako `node_modules`, `.yarn`, `generated/` (typovaný klient), `dist/`, `build/`, složky s coverage, logy a soubory `.env*`.
* **yarn.lock**, **.yarnrc.yml**, **.yarn/**: Zamykají a konfigurují nástrojový řetězec Yarn 4 používaný projektem.
* **.nvmrc**: Fixuje verzi Node.js požadovanou projektem.
* **eslint.config.mjs** a **tsconfig.json**: Poskytují lintování a konfiguraci TypeScriptu pro zdrojové soubory vaší aplikace v TypeScriptu.
* **README.md**: Krátké README v kořeni aplikace se základními pokyny.
* **src/app/**: Hlavní místo, kde definujete svou aplikaci jako kód:
* `application.config.ts`: Globální konfigurace vaší aplikace (metadata a napojení za běhu). Viz „Konfigurace aplikace“ níže.
* `*.role.ts`: Definice rolí používané vašimi serverless funkcemi. Viz „Výchozí role funkce“ níže.
* `*.object.ts`: Definice vlastních objektů.
* `*.function.ts`: Definice serverless funkcí.
* **src/utils/**: Volitelná složka pro implementace obslužných funkcí a pomocné nástroje.
Later commands will add more files and folders:
Pozdější příkazy přidají další soubory a složky:
* `yarn generate` will create a `generated/` folder (typed Twenty client + workspace types).
* `yarn create-entity` will add entity definition files under `src/app/` for your custom objects, functions, or roles.
* `yarn generate` vytvoří složku `generated/` (typovaný klient Twenty + typy pracovního prostoru).
* `yarn create-entity` přidá soubory s definicemi entit do `src/app/` pro vaše vlastní objekty, funkce nebo role.
## Ověření
The first time you run `yarn auth`, you'll be prompted for:
Při prvním spuštění `yarn auth` budete vyzváni k zadání:
* API URL (defaults to http://localhost:3000 or your current workspace profile)
* API key
* URL API (výchozí je http://localhost:3000 nebo váš aktuální profil pracovního prostoru)
* Klíč API
Your credentials are stored per-user in `~/.twenty/config.json`. You can maintain multiple profiles and switch using `--workspace <name>`.
Vaše přihlašovací údaje se ukládají pro jednotlivé uživatele do `~/.twenty/config.json`. Můžete spravovat více profilů a přepínat pomocí `--workspace <name>`.
Příklady:
@@ -186,26 +186,26 @@ yarn auth
yarn auth --workspace my-custom-workspace
```
## Use the SDK resources (types & config)
## Používejte zdroje SDK (typy a konfiguraci)
The twenty-sdk provides typed building blocks and helper functions you use inside your app. Below are the key pieces you'll touch most often.
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.
### Helper functions
### Pomocné funkce
The SDK provides four helper functions with built-in validation for defining your app entities:
SDK poskytuje čtyři pomocné funkce s vestavěnou validací pro definování entit vaší aplikace:
| Function | Účel |
| ------------------ | -------------------------------------------- |
| `defineApp()` | Configure application metadata |
| `defineObject()` | Define custom objects with fields |
| `defineFunction()` | Define serverless functions with handlers |
| `defineRole()` | Configure role permissions and object access |
| Funkce | Účel |
| ------------------ | ------------------------------------------------ |
| `defineApp()` | Konfigurace metadat aplikace |
| `defineObject()` | Definice vlastních objektů s poli |
| `defineFunction()` | Definice serverless funkcí s obslužnými funkcemi |
| `defineRole()` | Konfigurace oprávnění rolí a přístupu k objektům |
These functions validate your configuration at runtime and provide better IDE autocompletion and type safety.
Tyto funkce validují vaši konfiguraci za běhu a poskytují lepší automatické doplňování v IDE a lepší typovou bezpečnost.
### Defining objects
### Definování objektů
Custom objects describe both schema and behavior for records in your workspace. Use `defineObject()` to define objects with built-in validation:
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žijte `defineObject()`:
```typescript
// src/app/postCard.object.ts
@@ -276,20 +276,20 @@ export default defineObject({
});
```
Key points:
Hlavní body:
* Use `defineObject()` for built-in validation and better IDE support.
* The `universalIdentifier` must be unique and stable across deployments.
* Each field requires a `name`, `type`, `label`, and its own stable `universalIdentifier`.
* The `fields` array is optional — you can define objects without custom fields.
* You can scaffold new objects using `yarn create-entity`, which guides you through naming, fields, and relationships.
* Použijte `defineObject()` pro vestavěnou validaci a lepší podporu v IDE.
* Hodnota `universalIdentifier` musí být jedinečná a stabilní napříč nasazeními.
* Každé pole vyžaduje `name`, `type`, `label` a svůj vlastní stabilní `universalIdentifier`.
* Pole `fields` je volitelné — objekty můžete definovat i bez vlastních polí.
* Nové objekty můžete vygenerovat pomocí `yarn create-entity`, který vás provede pojmenováním, poli a vztahy.
<Note>
**Base fields are created automatically.** When you define a custom object, Twenty automatically adds standard fields such as `name`, `createdAt`, `updatedAt`, `createdBy`, `position`, and `deletedAt`. You don't need to define these in your `fields` array — only add your custom fields.
**Základní pole jsou vytvořena automaticky.** Když definujete vlastní objekt, Twenty automaticky přidá standardní pole jako `name`, `createdAt`, `updatedAt`, `createdBy`, `position` a `deletedAt`. Nemusíte je definovat v poli `fields` — přidejte pouze svá vlastní pole.
</Note>
<Accordion title="Alternative: Decorator-based syntax">
You can also define objects using TypeScript decorators. This approach uses class-based syntax with `@Object`, `@Field`, and `@Relation` decorators:
<Accordion title="Alternativa: Syntaxe založená na dekorátorech">
Objekty můžete definovat také pomocí dekorátorů TypeScriptu. Tento přístup používá třídovou syntaxi s dekorátory `@Object`, `@Field` a `@Relation`:
```typescript
import {
@@ -336,18 +336,18 @@ Key points:
}
```
Note: The decorator approach requires `experimentalDecorators` in your TypeScript config.
Poznámka: Přístup s dekorátory vyžaduje `experimentalDecorators` v konfiguraci TypeScriptu.
</Accordion>
### Application config (application.config.ts)
### Konfigurace aplikace (application.config.ts)
Every app has a single `application.config.ts` file that describes:
Každá aplikace má jeden soubor `application.config.ts`, který popisuje:
* **Who the app is**: identifiers, display name, and description.
* **How its functions run**: which role they use for permissions.
* **(Optional) variables**: keyvalue pairs exposed to your functions as environment variables.
* **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í.
Use `defineApp()` to define your application configuration:
K definování konfigurace aplikace použijte `defineApp()`:
```typescript
// src/app/application.config.ts
@@ -371,23 +371,23 @@ export default defineApp({
});
```
Notes:
Poznámky:
* `universalIdentifier` fields are deterministic IDs you own; generate them once and keep them stable across syncs.
* `applicationVariables` become environment variables for your functions (for example, `DEFAULT_RECIPIENT_NAME` is available as `process.env.DEFAULT_RECIPIENT_NAME`).
* `functionRoleUniversalIdentifier` must match the role you define in your `*.role.ts` file (see below).
* Pole `universalIdentifier` jsou deterministic ID, která vlastníte; vygenerujte je jednou a udržujte je stabilní napříč synchronizacemi.
* `applicationVariables` se stanou proměnnými prostředí pro vaše funkce (například `DEFAULT_RECIPIENT_NAME` je dostupné jako `process.env.DEFAULT_RECIPIENT_NAME`).
* `functionRoleUniversalIdentifier` se musí shodovat s rolí, kterou definujete ve svém souboru `*.role.ts` (viz níže).
#### Roles and permissions
#### Role a oprávnění
Applications can define roles that encapsulate permissions on your workspace's objects and actions. The field `functionRoleUniversalIdentifier` in `application.config.ts` designates the default role used by your app's serverless functions.
Aplikace mohou definovat role, které zapouzdřují oprávnění k objektům a akcím ve vašem pracovním prostoru. Pole `functionRoleUniversalIdentifier` v `application.config.ts` určuje výchozí roli používanou serverless funkcemi vaší aplikace.
* The runtime API key injected as `TWENTY_API_KEY` is derived from this default function role.
* The typed client will be restricted to the permissions granted to that role.
* Follow leastprivilege: create a dedicated role with only the permissions your functions need, then reference its universal identifier.
* Běhový klíč API vložený jako `TWENTY_API_KEY` je 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.
##### Default function role (\*.role.ts)
##### Výchozí role funkce (\*.role.ts)
When you scaffold a new app, the CLI also creates a default role file. Use `defineRole()` to define roles with built-in validation:
Když vygenerujete novou aplikaci, CLI také vytvoří výchozí soubor role. K definování rolí s vestavěnou validací použijte `defineRole()`:
```typescript
// src/app/default-function.role.ts
@@ -429,37 +429,37 @@ export default defineRole({
});
```
The `universalIdentifier` of this role is then referenced in `application.config.ts` as `functionRoleUniversalIdentifier`. In other words:
Na `universalIdentifier` této role se poté odkazuje v `application.config.ts` jako na `functionRoleUniversalIdentifier`. Jinými slovy:
* **\*.role.ts** defines what the default function role can do.
* **application.config.ts** points to that role so your functions inherit its permissions.
* **\*.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í.
Notes:
Poznámky:
* Start from the scaffolded role, then progressively restrict it following leastprivilege.
* Replace the `objectPermissions` and `fieldPermissions` with the objects/fields your functions need.
* `permissionFlags` control access to platform-level capabilities. Keep them minimal; add only what you need.
* See a working example in the Hello World app: [`packages/twenty-apps/hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
* Začněte rolí vytvořenou scaffolderem a postupně ji omezujte podle principu nejmenších oprávnění.
* Nahraďte `objectPermissions` a `fieldPermissions` objekty/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`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
### Serverless function config and entrypoint
### Konfigurace serverless funkcí a vstupní bod
Each function file uses `defineFunction()` to export a configuration with a handler and optional triggers. Use the `*.function.ts` file suffix for automatic detection.
Každý soubor funkce používá `defineFunction()` k exportu konfigurace s obslužnou funkcí (handlerem) a volitelnými spouštěči. Pro automatickou detekci použijte příponu souboru `*.function.ts`.
```typescript
// src/app/createPostCard.function.ts
import { defineFunction } from 'twenty-sdk';
import type { DatabaseEventPayload, ObjectRecordCreateEvent, CronPayload } from 'twenty-sdk';
import type { DatabaseEventPayload, ObjectRecordCreateEvent, CronPayload, RoutePayload } from 'twenty-sdk';
import Twenty, { type Person } from '../../generated';
const handler = async (
params:
| { name?: string }
| RoutePayload
| DatabaseEventPayload<ObjectRecordCreateEvent<Person>>
| CronPayload,
) => {
const client = new Twenty(); // generated typed client
const name = 'name' in params
? params.name ?? process.env.DEFAULT_RECIPIENT_NAME ?? 'Hello world'
const name = 'name' in params.queryStringParameters
? params.queryStringParameters.name ?? process.env.DEFAULT_RECIPIENT_NAME ?? 'Hello world'
: 'Hello world';
const result = await client.mutation({
@@ -502,30 +502,122 @@ export default defineFunction({
});
```
Common trigger types:
Běžné typy spouštěčů:
* **route**: Exposes your function on an HTTP path and method **under the `/s/` endpoint**:
* **route**: Zpřístupní vaši funkci na HTTP cestě a metodě **pod koncovým bodem `/s/`**:
> e.g. `path: '/post-card/create',` -> call on `<APP_URL>/s/post-card/create`
> např. `path: '/post-card/create',` -> volání na `<APP_URL>/s/post-card/create`
* **cron**: Runs your function on a schedule using a CRON expression.
* **databaseEvent**: Runs on workspace object lifecycle events
* **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
> e.g. `person.created`
> např. `person.created`
Notes:
Poznámky:
* The `triggers` array is optional. Functions without triggers can be used as utility functions called by other functions.
* You can mix multiple trigger types in a single function.
* Pole `triggers` je 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ěčů.
You can create new functions in two ways:
### Route trigger payload
* **Scaffolded**: Run `yarn create-entity` and choose the option to add a new function. This generates a starter file with a handler and config.
* **Manual**: Create a new `*.function.ts` file and use `defineFunction()`, following the same pattern.
<Warning>
**Breaking change (v1.16, January 2026):** The route trigger payload format has changed. Prior to v1.16, query parameters, path parameters, and body were sent directly as the payload. Starting with v1.16, they are nested inside a structured `RoutePayload` object.
### Generated typed client
**Before v1.16:**
Run yarn generate to create a local typed client in generated/ based on your workspace schema. Use it in your functions:
```typescript
const handler = async (params) => {
const { param1, param2 } = params; // Direct access
};
```
**After v1.16:**
```typescript
const handler = async (event: RoutePayload) => {
const { param1, param2 } = event.body; // Access via .body
const { queryParam } = event.queryStringParameters;
const { id } = event.pathParameters;
};
```
**To migrate existing functions:** Update your handler to destructure from `event.body`, `event.queryStringParameters`, or `event.pathParameters` instead of directly from the params object.
</Warning>
When a route trigger invokes your function, it receives a `RoutePayload` object that follows the AWS HTTP API v2 format. Import the type from `twenty-sdk`:
```typescript
import { defineFunction, type RoutePayload } from 'twenty-sdk';
const handler = async (event: RoutePayload) => {
// Access request data
const { headers, queryStringParameters, pathParameters, body } = event;
// HTTP method and path are available in requestContext
const { method, path } = event.requestContext.http;
return { message: 'Success' };
};
```
The `RoutePayload` type has the following structure:
| Property | Typ | Popis |
| ---------------------------- | ------------------------------------- | --------------------------------------------------------------------------------------- |
| `headers` | `Record<string, string \| undefined>` | HTTP headers (only those listed in `forwardedRequestHeaders`) |
| `queryStringParameters` | `Record<string, string \| undefined>` | Query string parameters (multiple values joined with commas) |
| `pathParameters` | `Record<string, string \| undefined>` | Path parameters extracted from the route pattern (e.g., `/users/:id` → `{ id: '123' }`) |
| `text zprávy` | `object \| null` | Parsed request body (JSON) |
| `isBase64Encoded` | `booleovská hodnota` | Whether the body is base64 encoded |
| `requestContext.http.method` | `string` | HTTP method (GET, POST, PUT, PATCH, DELETE) |
| `requestContext.http.path` | `string` | Raw request path |
### Forwarding HTTP headers
By default, HTTP headers from incoming requests are **not** passed to your serverless function for security reasons. To access specific headers, explicitly list them in the `forwardedRequestHeaders` array:
```typescript
export default defineFunction({
universalIdentifier: 'e56d363b-0bdc-4d8a-a393-6f0d1c75bdcf',
name: 'webhook-handler',
handler,
triggers: [
{
universalIdentifier: 'c9f84c8d-b26d-40d1-95dd-4f834ae5a2c6',
type: 'route',
path: '/webhook',
httpMethod: 'POST',
isAuthRequired: false,
forwardedRequestHeaders: ['x-webhook-signature', 'content-type'],
},
],
});
```
In your handler, you can then access these headers:
```typescript
const handler = async (event: RoutePayload) => {
const signature = event.headers['x-webhook-signature'];
const contentType = event.headers['content-type'];
// Validate webhook signature...
return { received: true };
};
```
<Note>
Header names are normalized to lowercase. Access them using lowercase keys (for example, `event.headers['content-type']`).
</Note>
Nové funkce můžete vytvářet dvěma způsoby:
* **Vygenerované**: Spusťte `yarn create-entity` a zvolte možnost přidat novou funkci. Tím se vygeneruje startovací soubor s obslužnou funkcí a konfigurací.
* **Ruční**: Vytvořte nový soubor `*.function.ts` a použijte `defineFunction()` podle stejného vzoru.
### Generovaný typovaný klient
Spusťte yarn generate a vytvořte lokální typovaný klient v generated/ na základě schématu vašeho pracovního prostoru. Použijte jej ve svých funkcích:
```typescript
import Twenty from './generated';
@@ -534,34 +626,34 @@ const client = new Twenty();
const { me } = await client.query({ me: { id: true, displayName: true } });
```
The client is re-generated by `yarn generate`. Re-run after changing your objects and `yarn sync` or when onboarding to a new workspace.
Klient je znovu generován příkazem `yarn generate`. Spusťte jej znovu po změně objektů a po `yarn sync`, případně při připojení k novému pracovnímu prostoru.
#### Runtime credentials in serverless functions
#### Běhové přihlašovací údaje v serverless funkcích
When your function runs on Twenty, the platform injects credentials as environment variables before your code executes:
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`: Base URL of the Twenty API your app targets.
* `TWENTY_API_KEY`: Shortlived key scoped to your application's default function role.
* `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.
Poznámky:
* You do not need to pass URL or API key to the generated client. It reads `TWENTY_API_URL` and `TWENTY_API_KEY` from process.env at runtime.
* The API key's permissions are determined by the role referenced in your `application.config.ts` via `functionRoleUniversalIdentifier`. This is the default role used by serverless functions of your application.
* Applications can define roles to follow leastprivilege. Grant only the permissions your functions need, then point `functionRoleUniversalIdentifier` to that role's universal identifier.
* Není nutné předávat URL ani klíč API vygenerovanému klientovi. Za běhu čte `TWENTY_API_URL` a `TWENTY_API_KEY` z process.env.
* Oprávnění API klíče jsou určena rolí odkazovanou v `application.config.ts` prostřednictvím `functionRoleUniversalIdentifier`. Toto je výchozí role používaná serverless 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 `functionRoleUniversalIdentifier` na univerzální identifikátor této role.
### Hello World example
### Příklad Hello World
Explore a minimal, end-to-end example that demonstrates objects, functions, and multiple triggers [here](https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/hello-world):
Prozkoumejte minimalistický end-to-end příklad, který demonstruje objekty, funkce a více spouštěčů [zde](https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/hello-world):
## Manual setup (without the scaffolder)
## Ruční nastavení (bez scaffolderu)
While we recommend using `create-twenty-app` for the best getting-started experience, you can also set up a project manually. Do not install the CLI globally. Instead, add `twenty-sdk` as a local dependency and wire scripts in your package.json:
Ačkoli pro nejlepší začátky doporučujeme použít `create-twenty-app`, projekt můžete nastavit i ručně. Neinstalujte CLI globálně. Místo toho přidejte `twenty-sdk` jako lokální závislost a propojte skripty v souboru package.json:
```bash filename="Terminal"
yarn add -D twenty-sdk
```
Then add scripts like these:
Poté přidejte skripty jako tyto:
```json filename="package.json"
{
@@ -578,13 +670,13 @@ Then add scripts like these:
}
```
Now you can run the same commands via Yarn, e.g. `yarn dev`, `yarn sync`, etc.
Nyní můžete spouštět stejné příkazy přes Yarn, např. `yarn dev`, `yarn sync` atd.
## Řešení potíží
* Authentication errors: run `yarn auth` and ensure your API key has the required permissions.
* Cannot connect to server: verify the API URL and that the Twenty server is reachable.
* Types or client missing/outdated: run `yarn generate` and then `yarn dev`.
* Dev mode not syncing: ensure `yarn dev` is running and that changes are not ignored by your environment.
* Chyby ověření: spusťte `yarn auth` a ujistěte se, že váš klíč API má požadovaná oprávnění.
* Nelze se připojit k serveru: ověřte URL API a že je server Twenty dosažitelný.
* Typy nebo klient chybí/jsou zastaralé: spusťte `yarn generate` a poté `yarn dev`.
* Režim vývoje nesynchronizuje: ujistěte se, že běží `yarn dev` a že vaše prostředí změny neignoruje.
Discord Help Channel: https://discord.com/channels/1130383047699738754/1130386664812982322
Kanál podpory na Discordu: https://discord.com/channels/1130383047699738754/1130386664812982322
@@ -1,44 +1,44 @@
---
title: Webhooky
description: Receive real-time notifications when events occur in your CRM.
description: Dostávejte oznámení v reálném čase, když ve vašem CRM dojde k událostem.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
Webhooks push data to your systems in real-time when events occur in Twenty — no polling required. Use them to keep external systems in sync, trigger automations, or send alerts.
Webhooky posílají data do vašich systémů v reálném čase, když v Twenty dojde k událostem — bez potřeby průběžného dotazování. Použijte je k udržování externích systémů v synchronizaci, spouštění automatizací nebo zasílání upozornění.
## Vytvořit Webhook
1. Přejděte na **Nastavení → API & Webhooks → Webhooks**
2. Klikněte na **+ Vytvořit webhook**
3. Enter your webhook URL (must be publicly accessible)
3. Zadejte adresu URL svého webhooku (musí být veřejně přístupná)
4. Klikněte na **Uložit**
The webhook activates immediately and starts sending notifications.
Webhook se aktivuje okamžitě a začne odesílat oznámení.
<VimeoEmbed videoId="928786708" title="Creating a webhook" />
<VimeoEmbed videoId="928786708" title="Vytvoření webhooku" />
### Spravovat Webhooky
**Edit**: Click the webhook → Update URL → **Save**
**Upravit**: Klikněte na webhook → Aktualizovat adresu URL → **Uložit**
**Delete**: Click the webhook → **Delete** → Confirm
**Odstranit**: Klikněte na webhook → **Odstranit** → Potvrdit
## Události
Twenty sends webhooks for these event types:
Twenty odesílá webhooky pro tyto typy událostí:
| Událost | Příklad |
| ------------------ | ---------------------------------------------------------- |
| **Record Created** | `person.created`, `company.created`, `note.created` |
| **Record Updated** | `person.updated`, `company.updated`, `opportunity.updated` |
| **Record Deleted** | `person.deleted`, `company.deleted` |
| Událost | Příklad |
| -------------------------- | ---------------------------------------------------------- |
| **Záznam je vytvořen** | `person.created`, `company.created`, `note.created` |
| **Záznam je aktualizován** | `person.updated`, `company.updated`, `opportunity.updated` |
| **Záznam je odstraněn** | `person.deleted`, `company.deleted` |
All event types are sent to your webhook URL. Event filtering may be added in future releases.
Všechny typy událostí jsou odesílány na adresu URL vašeho webhooku. Filtrování událostí může být přidáno v budoucích verzích.
## Payload Format
## Formát payloadu
Each webhook sends an HTTP POST with a JSON body:
Každý webhook odesílá HTTP POST s tělem ve formátu JSON:
```json
{
@@ -55,35 +55,35 @@ Each webhook sends an HTTP POST with a JSON body:
}
```
| Pole | Popis |
| ---------------- | ------------------------------------------------ |
| `událost` | What happened (e.g., `person.created`) |
| `data` | The full record that was created/updated/deleted |
| `časové razítko` | When the event occurred (UTC) |
| Pole | Popis |
| ---------------- | ------------------------------------------------------ |
| `událost` | Co se stalo (např. `person.created`) |
| `data` | Celý záznam, který byl vytvořen/aktualizován/odstraněn |
| `časové razítko` | Kdy k události došlo (UTC) |
<Note>
Respond with a **2xx HTTP status** (200-299) to acknowledge receipt. Non-2xx responses are logged as delivery failures.
Odpovězte se **stavem HTTP 2xx** (200299) pro potvrzení přijetí. Odpovědi mimo 2xx se zaznamenávají jako selhání doručení.
</Note>
## Ověření Webhooku
Twenty signs each webhook request for security. Validate signatures to ensure requests are authentic.
Twenty kvůli bezpečnosti podepisuje každý požadavek webhooku. Ověřujte podpisy, abyste zajistili, že požadavky jsou autentic.
### Headers
### Záhlaví
| Hlavička | Popis |
| ---------------------------- | --------------------- |
| `X-Twenty-Webhook-Signature` | HMAC SHA256 signature |
| `X-Twenty-Webhook-Timestamp` | Request timestamp |
| Hlavička | Popis |
| ---------------------------- | ------------------------ |
| `X-Twenty-Webhook-Signature` | Podpis HMAC SHA256 |
| `X-Twenty-Webhook-Timestamp` | Časové razítko požadavku |
### Validation Steps
### Kroky ověření
1. Get the timestamp from `X-Twenty-Webhook-Timestamp`
2. Create the string: `{timestamp}:{JSON payload}`
3. Compute HMAC SHA256 using your webhook secret
4. Compare with `X-Twenty-Webhook-Signature`
1. Získejte časové razítko z `X-Twenty-Webhook-Timestamp`
2. Vytvořte řetězec: `{timestamp}:{JSON payload}`
3. Vypočítejte HMAC SHA256 pomocí vašeho tajného klíče webhooku
4. Porovnejte s `X-Twenty-Webhook-Signature`
### Example (Node.js)
### Příklad (Node.js)
```javascript
const crypto = require("crypto");
@@ -101,12 +101,12 @@ const expectedSignature = crypto
const isValid = expectedSignature === req.headers["x-twenty-webhook-signature"];
```
## Webhooks vs Workflows
## Webhooky vs. pracovní postupy
| Metoda | Směr | Use Case |
| ---------------------------- | ---- | ---------------------------------------------------------- |
| **Webhooks** | OUT | Automatically notify external systems of any record change |
| **Workflow + HTTP Request** | OUT | Send data out with custom logic (filters, transformations) |
| **Workflow Webhook Trigger** | IN | Receive data into Twenty from external systems |
| Metoda | Směr | Případ použití |
| ----------------------------------------- | ---- | --------------------------------------------------------------- |
| **Webhooky** | OUT | Automaticky informujte externí systémy o jakékoli změně záznamu |
| **Pracovní postup + požadavek HTTP** | OUT | Odesílejte data ven s vlastní logikou (filtry, transformace) |
| **Spouštěč webhooku v pracovním postupu** | IN | Přijímejte data do Twenty z externích systémů |
For receiving external data, see [Set Up a Webhook Trigger](/l/cs/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger).
Pro příjem externích dat viz [Nastavení spouštěče webhooku](/l/cs/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger).
@@ -1,6 +1,6 @@
---
title: Extend
description: Extend Twenty's functionality with APIs, webhooks, and custom apps.
title: Rozšiřte
description: Rozšiřte funkčnost Twenty pomocí rozhraní API, webhooků a vlastních aplikací.
---
<Frame>
@@ -9,26 +9,26 @@ description: Extend Twenty's functionality with APIs, webhooks, and custom apps.
## Přehled
Twenty is designed to be extensible. Use our APIs, webhooks, and app framework to integrate with your existing tools and build custom functionality.
Twenty je navrženo tak, aby bylo rozšiřitelné. Použijte naše rozhraní API, webhooky a aplikační framework k integraci se svými stávajícími nástroji a k vytváření vlastní funkčnosti.
## What You Can Do
## Co můžete dělat
* **APIs**: Query and modify your CRM data programmatically using REST or GraphQL
* **Webhooks**: Receive real-time notifications when events occur in Twenty
* **Apps**: Build custom applications that extend Twenty's capabilities - Coming soon!
* **API**: Programově dotazujte a upravujte svá CRM data pomocí REST nebo GraphQL
* **Webhooky**: Dostávejte oznámení v reálném čase, když v Twenty dojde k událostem
* **Aplikace**: Vytvářejte vlastní aplikace, které rozšiřují možnosti Twenty - Již brzy!
## Getting Started
## Začínáme
<CardGroup cols={2}>
<Card title="API" icon="kód" href="/l/cs/developers/extend/capabilities/apis">
Connect to Twenty programmatically
Programově se připojte k Twenty
</Card>
<Card title="Webhooky" icon="bell" href="/l/cs/developers/extend/capabilities/webhooks">
Get notified of events in real-time
Dostávejte oznámení o událostech v reálném čase
</Card>
<Card title="Apps" icon="puzzle-piece" href="/l/cs/developers/extend/capabilities/apps">
Build customizations as code (Alpha)
<Card title="Aplikace" icon="puzzle-piece" href="/l/cs/developers/extend/capabilities/apps">
Vytvářejte přizpůsobení jako kód (Alpha)
</Card>
</CardGroup>
@@ -1,23 +1,23 @@
---
title: Getting Started
description: Welcome to Twenty Developer Documentation, your resources for extending, self-hosting, and contributing to Twenty.
title: Začínáme
description: Vítejte v dokumentaci pro vývojáře Twenty, která je vaším zdrojem informací pro rozšiřování, vlastní hostování a přispívání do Twenty.
---
import { CardTitle } from "/snippets/card-title.mdx"
<CardGroup cols={3}>
<Card href="/l/cs/developers/extend/extend" img="/images/user-guide/integrations/plug.png">
<CardTitle>Extend</CardTitle>
Build integrations with APIs, webhooks, and custom apps.
<CardTitle>Rozšiřte</CardTitle>
Vytvářejte integrace pomocí API, webhooků a vlastních aplikací.
</Card>
<Card href="/l/cs/developers/self-host/self-host" img="/images/user-guide/what-is-twenty/20.png">
<CardTitle>Self-Host</CardTitle>
Deploy and manage Twenty on your own infrastructure.
<CardTitle>Hostujte sami</CardTitle>
Nasaďte a spravujte Twenty na vlastní infrastruktuře.
</Card>
<Card href="/l/cs/developers/contribute/contribute" img="/images/user-guide/github/github-header.png">
<CardTitle>Contribute</CardTitle>
Join our open-source community and contribute to Twenty.
<CardTitle>Přispějte</CardTitle>
Připojte se k naší open-source komunitě a přispívejte do Twenty.
</Card>
</CardGroup>
@@ -1,9 +1,9 @@
---
title: 1-Click w/ Docker Compose
title: Docker Compose jedním kliknutím
---
<Warning>
Docker containers are for production hosting or self-hosting, for the contribution please check the [Local Setup](/l/cs/developers/contribute/capabilities/local-setup).
Docker kontejnery jsou určeny pro produkční hosting nebo samohostování; pro přispívání si prosím přečtěte [Lokální nastavení](/l/cs/developers/contribute/capabilities/local-setup).
</Warning>
## Přehled
@@ -50,7 +50,7 @@ Postupujte podle těchto kroků pro ruční nastavení.
curl -o .env https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/.env.example
```
2. **Generate Secret Tokens**
2. **Vygenerujte tajné tokeny**
Spusťte následující příkaz k generování jedinečného náhodného řetězce:
@@ -96,7 +96,7 @@ docker compose up -d
Pokud hostujete twentyCRM na svém vlastním počítači, otevřete svůj prohlížeč a přejděte na stránku [http://localhost:3000](http://localhost:3000).
If you host it on a server, check that the server is running and that everything is ok with
Pokud to hostujete na serveru, zkontrolujte, že server běží a že je vše v pořádku s
```bash
curl http://localhost:3000
@@ -183,7 +183,7 @@ Důrazně doporučujeme nastavit Twenty za reverzní proxy se SSL ukončením pr
* **Konfigurace reverzního proxy:**
Ujistěte se, že váš reverzní proxy přesměruje požadavky na správný interní port (výchozí `3000`). Configure SSL termination and any necessary headers.
Ujistěte se, že váš reverzní proxy přesměruje požadavky na správný interní port (výchozí `3000`). Nakonfigurujte terminaci SSL a všechny potřebné hlavičky.
* **Nastavení firewallu:**
@@ -203,50 +203,50 @@ Důrazně doporučujeme nastavit Twenty za reverzní proxy se SSL ukončením pr
Pokud nasazujete do bezstavového prostředí (např. některé cloudové služby), nakonfigurujte externí úložiště pro uchování dat.
## Backup and Restore
## Zálohování a obnovení
Regular backups protect your CRM data from loss.
Pravidelné zálohy chrání vaše data v CRM před ztrátou.
### Create a Database Backup
### Vytvořte zálohu databáze
```bash
docker exec twenty-postgres pg_dump -U postgres twenty > backup_$(date +%Y%m%d).sql
```
### Automate Daily Backups
### Automatizujte denní zálohy
Add to your crontab (`crontab -e`):
Přidejte do svého crontabu (`crontab -e`):
```bash
0 2 * * * docker exec twenty-postgres pg_dump -U postgres twenty > /backups/twenty_$(date +\%Y\%m\%d).sql
```
### Restore from Backup
### Obnovte ze zálohy
1. Stop the application:
1. Zastavte aplikaci:
```bash
docker compose stop twenty-server twenty-front
```
2. Restore the database:
2. Obnovte databázi:
```bash
docker exec -i twenty-postgres psql -U postgres twenty < backup_20240115.sql
```
3. Restart services:
3. Restartujte služby:
```bash
docker compose up -d
```
### Backup Best Practices
### Osvědčené postupy pro zálohování
* **Test restores regularly** — verify backups actually work
* **Store backups off-site** — use cloud storage (S3, GCS, etc.)
* **Encrypt sensitive data** — protect backups with encryption
* **Retain multiple copies** — keep daily, weekly, and monthly backups
* **Pravidelně testujte obnovy** — ověřte, že zálohy skutečně fungují
* **Ukládejte zálohy mimo lokalitu** — použijte cloudové úložiště (S3, GCS, atd.)
* **Šifrujte citlivá data** — chraňte zálohy šifrováním
* **Uchovávejte více kopií** — mějte denní, týdenní a měsíční zálohy
## Řešení potíží
@@ -18,9 +18,9 @@ Twenty nabízí **dvě konfigurační režimy** pro různé potřeby nasazení:
IS_CONFIG_VARIABLES_IN_DB_ENABLED=true # výchozí
```
**Most configuration happens through the UI** after installation:
**Většina konfigurace probíhá prostřednictvím uživatelského rozhraní** po instalaci:
1. Access your Twenty instance (usually `http://localhost:3000`)
1. Přistupte ke své instanci Twenty (obvykle `http://localhost:3000`)
2. Jděte na **Nastavení / Admin panel / Konfigurační proměnné**
3. Nakonfigurujte integrace, e-mail, úložiště a další
4. Změny se projeví okamžitě (u nasazení s více kontejnery do 15 sekund)
@@ -58,63 +58,63 @@ IS_CONFIG_VARIABLES_IN_DB_ENABLED=false
1. Nastavte `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false` ve vašem souboru `.env`
2. Přidejte všechny konfigurační proměnné do souboru `.env`
3. Restartujte kontejnery, aby se změny projevily
4. Admin panel will show current values but cannot modify them
4. Administrační panel zobrazí aktuální hodnoty, ale nemůže je upravovat
## Multi-Workspace Mode
## Režim více pracovních prostorů
By default, Twenty runs in **single-workspace mode** — ideal for most self-hosted deployments where you need one CRM instance for your organization.
Ve výchozím nastavení běží Twenty v **režimu jednoho pracovního prostoru** — ideální pro většinu samostatně hostovaných nasazení, kde potřebujete jednu instanci CRM pro svou organizaci.
### Single-Workspace Mode (Default)
### Režim jednoho pracovního prostoru (výchozí)
```bash
IS_MULTIWORKSPACE_ENABLED=false # default
```
* One workspace per Twenty instance
* First user automatically becomes admin with full privileges (`canImpersonate` and `canAccessFullAdminPanel`)
* New signups are disabled after the first workspace is created
* Simple URL structure: `https://your-domain.com`
* Jeden pracovní prostor na instanci Twenty
* První uživatel se automaticky stává administrátorem s plnými oprávněními (`canImpersonate` a `canAccessFullAdminPanel`)
* Po vytvoření prvního pracovního prostoru jsou nové registrace zakázány.
* Jednoduchá struktura URL: `https://your-domain.com`
### Enabling Multi-Workspace Mode
### Povolení režimu více pracovních prostorů
```bash
IS_MULTIWORKSPACE_ENABLED=true
DEFAULT_SUBDOMAIN=app # default value
```
Enable multi-workspace mode for SaaS-like deployments where multiple independent teams need their own workspaces on the same Twenty instance.
Povolte režim více pracovních prostorů pro nasazení typu SaaS, kde více nezávislých týmů potřebuje své vlastní pracovní prostory na téže instanci Twenty.
**Key differences from single-workspace mode:**
**Klíčové rozdíly oproti režimu jednoho pracovního prostoru:**
* Multiple workspaces can be created on the same instance
* Each workspace gets its own subdomain (e.g., `sales.your-domain.com`, `marketing.your-domain.com`)
* Users sign up and log in at `{DEFAULT_SUBDOMAIN}.your-domain.com` (e.g., `app.your-domain.com`)
* No automatic admin privileges — first user in each workspace is a regular user
* Workspace-specific settings like subdomain and custom domain become available in workspace settings
* Na téže instanci lze vytvářet více pracovních prostorů
* Každý pracovní prostor získá vlastní subdoménu (např. `sales.your-domain.com`, `marketing.your-domain.com`)
* Uživatelé se registrují a přihlašují na `{DEFAULT_SUBDOMAIN}.your-domain.com` (např. `app.your-domain.com`)
* Žádná automatic administrátorská oprávnění — první uživatel v každém pracovním prostoru je běžný uživatel
* Nastavení specifická pro pracovní prostor, jako je subdoména a vlastní doména, se zpřístupní v nastavení pracovního prostoru
<Warning>
**Environment-only setting:** `IS_MULTIWORKSPACE_ENABLED` can only be configured via `.env` file and requires a restart. It cannot be changed through the admin panel.
**Nastavení pouze na úrovni prostředí:** `IS_MULTIWORKSPACE_ENABLED` lze konfigurovat pouze prostřednictvím souboru `.env` a vyžaduje restart. Nelze jej změnit prostřednictvím administračního panelu.
</Warning>
### DNS Configuration for Multi-Workspace
### Konfigurace DNS pro více pracovních prostorů
When using multi-workspace mode, configure your DNS with a wildcard record to allow dynamic subdomain creation:
Při použití režimu více pracovních prostorů nakonfigurujte své DNS pomocí zástupného (wildcard) záznamu, aby bylo možné dynamicky vytvářet subdomény:
```
*.your-domain.com -> your-server-ip
```
This enables automatic subdomain routing for new workspaces without manual DNS configuration.
Tím se umožní automatické směrování subdomén pro nové pracovní prostory bez ruční konfigurace DNS.
### Restricting Workspace Creation
### Omezení vytváření pracovních prostorů
In multi-workspace mode, you may want to limit who can create new workspaces:
V režimu více pracovních prostorů možná budete chtít omezit, kdo může vytvářet nové pracovní prostory:
```bash
IS_WORKSPACE_CREATION_LIMITED_TO_SERVER_ADMINS=true
```
When enabled, only users with `canAccessFullAdminPanel` can create additional workspaces. Users can still create their first workspace during initial signup.
Pokud je povoleno, pouze uživatelé s `canAccessFullAdminPanel` mohou vytvářet další pracovní prostory. Uživatelé si stále mohou při úvodní registraci vytvořit svůj první pracovní prostor.
## Integrace Gmail & Google Kalendář
@@ -133,8 +133,8 @@ When enabled, only users with `canAccessFullAdminPanel` can create additional wo
1. Přejděte na [Pověření](https://console.cloud.google.com/apis/credentials)
2. Vytvořte OAuth 2.0 Client ID
3. Přidejte tyto URI přesměrování:
* `https://{your-domain}/auth/google/redirect` (for SSO)
* `https://{your-domain}/auth/google-apis/get-access-token` (for integrations)
* `https://{your-domain}/auth/google/redirect` (pro SSO)
* `https://{your-domain}/auth/google-apis/get-access-token` (pro integrace)
### Konfigurace v Twenty
@@ -194,7 +194,7 @@ Poznámka: "Mail.ReadWrite" a "Mail.Send" jsou povinné pouze v případě, že
Musíte přidat následující URI přesměrování do vašeho projektu:
* `https://{your-domain}/auth/microsoft/redirect` if you want to use Microsoft SSO
* `https://{your-domain}/auth/microsoft/redirect`, pokud chcete použít Microsoft SSO
* `https://{your-domain}/auth/microsoft-apis/get-access-token`
### Konfigurace v Twenty
@@ -291,3 +291,47 @@ yarn command:prod cron:workflow:automated-cron-trigger
<Warning>
**Režim pouze s prostředím:** Pokud nastavíte `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, přidejte tyto proměnné do souboru `.env`
</Warning>
## Serverless Functions
Twenty supports serverless functions for workflows and custom logic. The execution environment is configured via the `SERVERLESS_TYPE` environment variable.
<Warning>
**Security Notice:** The local serverless driver (`SERVERLESS_TYPE=LOCAL`) runs code directly on the host in a Node.js process with no sandboxing. It should only be used for trusted code in development. For production deployments handling untrusted code, we highly recommend using `SERVERLESS_TYPE=LAMBDA` or `SERVERLESS_TYPE=DISABLED`.
</Warning>
### Available Drivers
| Driver | Environment Variable | Případ použití | Security Level |
| -------- | -------------------------- | ------------------------------------- | ------------------------------- |
| Disabled | `SERVERLESS_TYPE=DISABLED` | Disable serverless functions entirely | N/A |
| Local | `SERVERLESS_TYPE=LOCAL` | Development and trusted environments | Low (no sandboxing) |
| Lambda | `SERVERLESS_TYPE=LAMBDA` | Production with untrusted code | High (hardware-level isolation) |
### Recommended Configuration
**For development:**
```bash
SERVERLESS_TYPE=LOCAL # default
```
**For production (AWS):**
```bash
SERVERLESS_TYPE=LAMBDA
SERVERLESS_LAMBDA_REGION=us-east-1
SERVERLESS_LAMBDA_ROLE=arn:aws:iam::123456789:role/your-lambda-role
SERVERLESS_LAMBDA_ACCESS_KEY_ID=your-access-key
SERVERLESS_LAMBDA_SECRET_ACCESS_KEY=your-secret-key
```
**To disable serverless functions:**
```bash
SERVERLESS_TYPE=DISABLED
```
<Note>
When using `SERVERLESS_TYPE=DISABLED`, any attempt to execute a serverless function will return an error. This is useful if you want to run Twenty without serverless function capabilities.
</Note>
@@ -4,12 +4,12 @@ title: Řešení potíží
## Řešení potíží
If you encounter any problem while setting up environment for development, upgrading your instance or self-hosting,
here are some solutions for common problems.
Pokud narazíte na jakýkoli problém při nastavování prostředí pro vývoj, při aktualizaci své instance nebo při samostatném hostování,
zde jsou některá řešení běžných problémů.
### Vlastní hosting
#### First install results in `password authentication failed for user "postgres"`
#### První instalace skončí chybou `password authentication failed for user "postgres"`
🚨 **DŮLEŽITÉ: Toto řešení je POUZE pro nové instalace** 🚨
Pokud máte existující instanci Twenty s produkčními daty, **NEPROVÁDĚJTE** tyto kroky, protože trvale smažou vaši databázi!
@@ -28,9 +28,9 @@ docker compose down --volumes
docker compose up -d
```
#### CR line breaks found [Windows]
#### Nalezeny konce řádků CR [Windows]
This is due to the line break characters of Windows and the git configuration. Zkuste spustit:
Je to způsobeno znaky konce řádku ve Windows a konfigurací gitu. Zkuste spustit:
```
git config --global core.autocrlf false
@@ -44,7 +44,7 @@ Během instalace Twenty musíte nastavit svou postgres databázi s správnými s
Pokud se vám podaří spustit toto nastavování, měli byste mít ve své databázi schémata `default` a `metadata`.
Pokud ne, ujistěte se, že na vašem počítači neběží více než jedna instance postgres.
#### Cannot find module 'twenty-emails' or its corresponding type declarations.
#### Nelze najít modul 'twenty-emails' ani jeho odpovídající deklarace typů.
Před spuštěním inicializace databáze musíte sestavit balíček `twenty-emails` s `npx nx run twenty-emails:build`
@@ -54,7 +54,7 @@ Ujistěte se, že v kořenovém adresáři spouštíte `yarn` a poté spusťte `
#### Lint při ukládání nefunguje
Toto by mělo fungovat přímo s nainstalovaným rozšířením eslint. If this doesn't work try adding this to your vscode setting (on the dev container scope):
Toto by mělo fungovat přímo s nainstalovaným rozšířením eslint. Pokud to nefunguje, zkuste přidat toto do svého nastavení vscode (v rozsahu dev containeru):
```
"editor.codeActionsOnSave": {
@@ -68,11 +68,11 @@ Toto by mělo fungovat přímo s nainstalovaným rozšířením eslint. If this
In `packages/twenty-front/.env` uncomment `VITE_DISABLE_TYPESCRIPT_CHECKER=true` and `VITE_DISABLE_ESLINT_CHECKER=true` to disable background checks thus reducing amount of needed RAM.
**If it does not work:**
Run only the services you need, instead of `npx nx start`. Například pokud pracujete na serveru, spusťte pouze `npx nx worker twenty-server`
**Pokud to nefunguje:**
Spusťte pouze služby, které potřebujete, místo `npx nx start`. Například pokud pracujete na serveru, spusťte pouze `npx nx worker twenty-server`
**If it does not work:**
If you tried to run only `npx nx run twenty-server:start` on WSL and it's failing with the below memory error:
**Pokud to nefunguje:**
Pokud jste se pokusili spustit pouze `npx nx run twenty-server:start` na WSL a selhává to s následující chybou paměti:
`FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory`
@@ -83,11 +83,11 @@ Pro obejití proveďte níže uvedený příkaz v terminálu nebo jej přidejte
Příznak --max-old-space-size=8192 nastavuje horní limit 8 GB pro hromadu v Node.js; využití se škáluje s požadavkem aplikace.
Odkaz: https://stackoverflow.com/questions/56982005/where-do-i-set-node-options-max-old-space-size-2048
**If it does not work:**
Investigate which processes are taking you most of your machine RAM. V Twenty jsme si všimli, že některá rozšíření VScode zabírala hodně paměti RAM, takže jsme je dočasně deaktivovali.
**Pokud to nefunguje:**
Analyzujte, které procesy vám zabírají většinu paměti na stroji. V Twenty jsme si všimli, že některá rozšíření VScode zabírala hodně paměti RAM, takže jsme je dočasně deaktivovali.
**If it does not work:**
Restart your machine helps to clean up ghost processes.
**Pokud to nefunguje:**
Restartování počítače pomůže vyčistit zombie procesy.
#### Při běhu `npx nx start` se v protokolech objevují podivné [0] a [1]
@@ -142,7 +142,7 @@ To je očekávané, protože uživatel je neautorizovaný, když je odhlášen,
#### Front-end se nedaří spustit a vrací chybu TS5042: Možnost 'project' nelze kombinovat se zdrojovými soubory na příkazovém řádku
Comment out checker plugin in `packages/twenty-ui/vite-config.ts` like in example below
Zakomentujte plugin checker v `packages/twenty-ui/vite-config.ts` jako v příkladu níže
```
plugins: [
@@ -170,7 +170,7 @@ plugins: [
Spusťte `UPDATE core."user" SET "canAccessFullAdminPanel" = TRUE WHERE email = 'you@yourdomain.com';` v databázovém kontejneru pro získání přístupu k administračnímu panelu.
### 1-click Docker compose
### Docker Compose jedním kliknutím
#### Nelze se přihlásit
@@ -206,9 +206,9 @@ Pokud provozujete Twenty za reverzní proxy a máte problémy s připojením:
Po provedení změn restartujte jak reverzní proxy, tak kontejnery Twenty.
#### Error when uploading an image - permission denied
#### Chyba při nahrávání obrázku - přístup odepřen
Switching the data folder ownership on the host from root to another user and group resolves this problem.
Změna vlastnictví datové složky na hostiteli z uživatele root na jiného uživatele a skupinu tento problém vyřeší.
## Získání pomoci
@@ -216,7 +216,7 @@ Pokud se setkáte s problémy, které tento průvodce nepokrývá:
* Zkontrolujte protokoly:
View container logs for error messages:
Zobrazte protokoly kontejneru kvůli chybovým zprávám:
```bash
docker compose logs
@@ -4,9 +4,9 @@ title: Průvodce upgradem
## Obecné pokyny
**Always make sure to back up your database before starting the upgrade process** by running `docker exec -it {db_container_name_or_id} pg_dumpall -U {postgres_user} > databases_backup.sql`.
**Před zahájením procesu upgradu se vždy ujistěte, že jste zálohovali svou databázi** spuštěním `docker exec -it {db_container_name_or_id} pg_dumpall -U {postgres_user} > databases_backup.sql`.
To restore backup, run `cat databases_backup.sql | docker exec -i {db_container_name_or_id} psql -U {postgres_user}`.
Pro obnovení zálohy spusťte `cat databases_backup.sql | docker exec -i {db_container_name_or_id} psql -U {postgres_user}`.
Pokud jste použili Docker Compose, postupujte takto:
@@ -32,7 +32,7 @@ Ahoj Twenty v1.0! 🎉
Všechny interakce s metadatovým API byly optimalizovány pro lepší výkon, zejména pro manipulaci s metadaty objektů a operace vytváření pracovních prostorů.
We've refactored our caching strategy to prioritize cache hits over database queries when possible, significantly improving the performance of metadata API operations.
Refaktorovali jsme naši strategii mezipaměti tak, aby upřednostňovala, pokud je to možné, zásahy do mezipaměti před databázovými dotazy, což výrazně zlepšilo výkon operací rozhraní API metadat.
Pokud po upgradu narazíte na problémy s výkonem, může být nutné vyprázdnit cache, aby bylo zajištěno její sladění s nejnovějšími změnami. Spusťte tento příkaz v kontejneru twenty-server:
@@ -316,8 +316,8 @@ Příkaz `yarn command:prod upgrade-0.31` se postará o datovou migraci všech p
Upgradujte svou instanci Twenty pro použití v0.30.0 image
**Breaking change**:
To enhance performances, Twenty now requires redis cache to be configured. Aktualizovali jsme náš [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml), aby to odrážel.
**Změna, která způsobí nekompatibilitu**:
Pro zvýšení výkonu nyní vyžaduje Twenty konfiguraci cache Redis. Aktualizovali jsme náš [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml), aby to odrážel.
Ujistěte se, že jste aktualizovali svou konfiguraci a své proměnné prostředí odpovídajícím způsobem:
```
@@ -1,6 +1,6 @@
---
title: Self-Host
description: Deploy and manage Twenty on your own infrastructure.
title: Vlastní hosting
description: Nasaďte a spravujte Twenty na vlastní infrastruktuře.
---
<Frame>
@@ -9,22 +9,22 @@ description: Deploy and manage Twenty on your own infrastructure.
## Přehled
Twenty can be self-hosted on your own infrastructure, giving you full control over your data and deployment.
Twenty můžete samostatně hostovat na vlastní infrastruktuře, což vám dává plnou kontrolu nad daty a nasazením.
## Why Self-Host?
## Proč samohostovat?
* **Data ownership**: Keep all CRM data on your own servers
* **Compliance**: Meet regulatory requirements for data residency
* **Customization**: Full access to modify and extend the platform
* **Vlastnictví dat**: Uchovávejte veškerá data CRM na vlastních serverech
* **Soulad**: Splňte regulační požadavky na umístění dat
* **Přizpůsobení**: Plný přístup k úpravám a rozšiřování platformy
## Getting Started
## Začínáme
<CardGroup cols={2}>
<Card title="Docker Compose" icon="docker" href="/l/cs/developers/self-host/capabilities/docker-compose">
Quick setup with Docker
Rychlé nastavení s Dockerem
</Card>
<Card title="Cloud Providers" icon="cloud" href="/l/cs/developers/self-host/capabilities/cloud-providers">
Deploy on AWS, GCP, or Azure
<Card title="Poskytovatelé cloudu" icon="cloud" href="/l/cs/developers/self-host/capabilities/cloud-providers">
Nasaďte na AWS, GCP nebo Azure
</Card>
</CardGroup>