Команда переросла Excel-таблицы и упёрлась в счёт от amoCRM. Знакомая ситуация. Обычно дальше — компромисс: платить за чужие ограничения или мириться с урезанным бесплатным тарифом. Twenty предлагает третий путь — CRM-систему с открытым кодом, которую вы ставите на свой сервер и настраиваете под свой процесс, а не под чужой шаблон.
На GitHub у проекта 54 000 звёзд, код распространяется под AGPL-3.0, технический стек — TypeScript. Twenty не притворяется простой CRM для первого дня. Это платформа для тех, кому нужен контроль над данными и кто готов invest в настройку. Заявление амбициозное: альтернатива Salesforce, пересобранная в 2026 году, без проприетарных языков вроде APEX и платных сертификаций.
Вторая версия принесла Apps framework — механизм для построения приложений поверх CRM, не форкая основной репозиторий. ИИ-возможности встроены в ядро, а не прикручены сбоку: чат по данным, автономные агенты в workflow и MCP-сервер работают в едином контуре прав доступа с обычными пользователями.
Важно: Twenty — не лёгкая CRM «на старт». Это платформа, которая вознаграждает команды, готовых настраивать инструмент под себя. Если нужен вариант «настроил и забыл» — Pipedrive или HubSpot подойдут лучше.
Главный контраст с облачными CRM — данные принадлежат вам. Twenty поднимается на собственном сервере через Docker, подключается к внешним системам через REST, GraphQL и MCP — и не обложен тарифными ограничениями за каждого пользователя.
Что это и как начать
Twenty — CRM-система с открытым исходным кодом на TypeScript. Бэкенд построен на NestJS с PostgreSQL и Redis, фронтенд — на React. Хранилище PostgreSQL даёт побочный эффект: прямое подключение BI-инструментов к базе без промежуточных слоёв.
Запуск в двух режимах. Облачный — регистрация за минуту, обновления приходят автоматически. Self-hosted — Docker Compose на вашем сервере, со всеми функциями Pro-плана и без лимитов на пользователей. Разница только в том, кто отвечает за инфраструктуру.
Быстрый старт: self-hosted за 4 шага
Минимум для сервера — 2 ГБ оперативной памяти. Docker и Docker Compose должны быть предустановлены.
bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
Одна команда скачивает docker-compose.yml, генерирует .env-файл и поднимает все контейнеры. После завершения — откройте браузер по адресу сервера, создайте воркспейс и начинайте работать.
Для развёртывания конкретного релиза передайте переменные:
VERSION=vx.y.z BRANCH=main bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
Совет: перед запуском в прод укажите SERVER_URL в .env — это публичный адрес, по которому Twenty будет доступен. Без корректного SERVER_URL OAuth-авторизация и MCP-подключение не заработают.
Что внутри: возможности и архитектура
Архитектура Twenty — четыре базовых примитива: объекты, представления, workflows и агенты. Каждый расширяется кодом через Apps framework и SDK. Это не готовая CRM с фиксированным набором полей, а платформа, где структура данных описывается под конкретный процесс.
| Модуль | Назначение |
|---|---|
| Контакты и компании | Единая карточка с таймлайном всех касаний, историей писем и произвольными полями |
| Воронки сделок | Kanban с перетаскиванием между стадиями, фильтрами и группировкой по любому полю |
| Задачи и заметки | Привязанные к сделкам и контактам, с напоминаниями и комментариями внутри карточки |
| Подключение ящика IMAP/SMTP, автоматическая привязка входящих и исходящих к нужному контакту | |
| Кастомные объекты | Новые сущности с любыми полями — создаются через настройки, программировать не нужно |
| Импорт данных | Загрузка контактов, компаний и сделок из CSV, миграция из других систем |
| Real-time | Любые изменения мгновенно отображаются у всех участников воркспейса |
Кастомные объекты — точка, где Twenty перестаёт быть «ещё одной CRM». Создаёте сущность «Проект» с полями «бюджет», «дедлайн» и «ответственный» — и она ведёт себя как стандартная: попадает в фильтры, доступна в workflow, через API, в AI-чате. Без плагинов и без строчки кода.
ИИ внутри CRM: чат, агенты и MCP
ИИ в Twenty — не отдельный плагин, а слой, пронизывающий продукт. Чат по данным, агенты в автоматизациях и MCP-сервер работают с одной моделью данных и одной системой прав. Если у менеджера нет доступа к чужим сделкам — ассистент их тоже не увидит.
AI-чат по данным
Чат принимает вопросы о CRM на обычном языке. Он понимает контекст открытой страницы: «эта компания» или «эта сделка» — указывают на запись, которая сейчас на экране.
- Находит и группирует записи любого типа — от контактов до задач
- Создаёт новые записи и правит существующие прямо в диалоге
- Собирает выжимки по карточкам контактов и сделок
- Готовит черновики дашбордов и схем workflow
Примеры: «Какие сделки закрываются в этом месяце?», «Что висит в переговорах больше 30 дней?», «Собери сводку по всем касаниям с этим человеком». Чат ограничен правами пользователя — чужие закрытые сделки не появятся в ответе.
AI-агенты в workflow
Агенты — следующий уровень после чата. Они действуют автономно внутри автоматизаций, как самостоятельный шаг. В конструкторе workflow добавляется AI Agent, где задаётся:
- Промпт — описание задачи с подставленными переменными из предыдущих шагов
- Модель — какой LLM обрабатывает задачу
- Схема ответа — структура данных, в которой агент вернёт результат
- Права — к каким объектам и операциям агент имеет доступ
Что поручают агентам: дополнение записей данными извне, подготовка follow-up писем, поиск «залипших» сделок в воронке, разбор входящих лидов и направление их нужной команде.
Агент — такой же шаг workflow, как любой другой. Его можно ставить в цепочку с ручными подтверждениями, ветвлениями и вызовами сторонних API. Пример типовой цепочки:
flowchart LR
A["Старт: новая сделка"] --> B["Загрузить данные"]
B --> C["AI-агент: оценка риска"]
C --> D{"Высокий риск?"}
D -->|"Да"| E["Задача менеджеру"]
D -->|"Нет"| F["Сменить статус"]
Skills и Tools
ИИ-слой Twenty состоит из двух кирпичей. Tools — операции над CRM: поиск, создание, изменение записей. Skills — наборы инструкций, которые чат подтягивает под конкретную задачу. Этот же набор инструментов открывается внешним клиентам через MCP.
Через Apps framework и SDK разработчики описывают собственные skills и агенты в коде:
import { defineSkill } from 'twenty-sdk/define';
export default defineSkill({
universalIdentifier: 'a1b2c3d4-e5f6-7890-abcd-ef1234567890',
name: 'sales-outreach',
label: 'Sales Outreach',
description: 'Guides the AI agent through a structured sales outreach process',
icon: 'IconBrain',
content: `You are a sales outreach assistant. When reaching out to a prospect:
1. Research the company and recent news
2. Identify the prospect's role and likely pain points
3. Draft a personalized message referencing specific details
4. Keep the tone professional but conversational`,
});
import { defineAgent } from 'twenty-sdk/define';
export default defineAgent({
universalIdentifier: 'b3c4d5e6-f7a8-9012-bcde-f34567890123',
name: 'sales-assistant',
label: 'Sales Assistant',
description: 'Helps the sales team draft outreach emails and research prospects',
icon: 'IconBrain',
systemPrompt: `You are a sales assistant. Help the team research prospects and draft personalized outreach emails. Always reference specific details about the company.`,
});
Внимание: Skills и агенты — статус alpha. Функционал работает, но команда активно дорабатывает. Перед тем как пускать агента на рабочие данные — прогоните его на отдельном воркспейсе и дайте минимум прав.
Интеграция: API, MCP и webhooks
Twenty открывает данные через три независимых канала: REST, GraphQL и нативный MCP-сервер. Webhooks сообщают о событиях в real-time. Все каналы работают с единой моделью данных, включая пользовательские объекты.
REST API
Классический REST с Bearer-токеном. Ключ создаётся в настройках: Settings, затем APIs и Webhooks, раздел API Keys.
curl -X GET https://api.twenty.com/rest/metadata/objects \
-H "Authorization: Bearer ***"
Базовые пути: /rest/people, /rest/companies, /rest/opportunities, /rest/tasks. Поддерживается полный CRUD по любому объекту — штатному и кастомному.
GraphQL API
Когда нужны связанные данные в одном запросе — GraphQL. Playground открыт по адресу https://
query {
people(first: 10) {
edges {
node {
id
name { firstName lastName }
company { name }
emails { primaryEmail }
}
}
}
}
MCP-сервер
MCP — Model Context Protocol, единый стандарт для связи ИИ-ассистентов с внешними сервисами. Twenty включает MCP-сервер в каждый Cloud-воркспейс по умолчанию. Клиенты с поддержкой MCP — Claude Desktop, Cursor, ChatGPT, OpenClaw — подключаются через OAuth и получают доступ к контактам, сделкам, задачам и заметкам Twenty.
Конфигурация для MCP-клиента:
{
"mcpServers": {
"twenty": {
"url": "https://<your-instance>/mcp"
}
}
}
После подключения ассистент видит доступные tools Twenty, подтягивает skills и выполняет действия — с теми же правами, что у пользователя, от имени которого выполнено подключение.
Webhooks
Webhooks настраиваются там же, в Settings → APIs & Webhooks → Webhooks. Twenty отправляет HTTP POST-запрос на ваш URL при каждом создании, изменении или удалении записи — любого типа, включая кастомные объекты.
Формат событий: person.created, company.updated, opportunity.updated, note.created и так далее для всех типов. Фильтрация по типам пока не предусмотрена — все события идут на один эндпоинт.
Для проверки подлинности каждый запрос подписывается. Заголовок X-Twenty-Signature содержит HMAC-подпись, которую нужно сверить на своей стороне. Пример тела:
{
"event": "person.created",
"data": {
"id": "abc12345",
"firstName": "Alice",
"lastName": "Doe",
"email": "alice@example.com",
"createdAt": "2025-02-10T15:30:45Z",
"createdBy": "user_123"
},
"timestamp": "2025-02-10T15:30:50Z"
}
Ответьте 2xx-статусом (200–299) для подтверждения приёма. Остальные коды логируются как неудачные доставки.
Apps framework и SDK
Вторая версия превратила Twenty из CRM в платформу. SDK позволяет создавать расширения поверх CRM, не трогая основной репозиторий. Каркас нового приложения — одной командой:
npx create-twenty-app my-app
Структура данных описывается в коде:
import { defineObject, FieldType } from 'twenty-sdk/define';
export default defineObject({
nameSingular: 'deal',
namePlural: 'deals',
labelSingular: 'Deal',
labelPlural: 'Deals',
fields: [
{ name: 'name', label: 'Name', type: FieldType.TEXT },
{ name: 'amount', label: 'Amount', type: FieldType.CURRENCY },
{ name: 'closeDate', label: 'Close Date', type: FieldType.DATE_TIME },
],
});
Деплой в воркспейс:
npx twenty app:publish --private
Расширение автоматически наследует систему прав, дашборды, workflow, API, AI-чат, webhooks и аудит-логи Twenty. SDK охватывает: пользовательские объекты, React-компоненты для нативного UI, серверную логику, skills и агентов — всё на TypeScript.
Инсайт: Apps framework — переосмысление идеи Salesforce AppExchange. Та же концепция расширений поверх CRM, но на TypeScript, без APEX и без сертификаций. Команда со знанием React и PostgreSQL может войти в рынок CRM без переобучения.
Тарифы и лицензирование
Twenty доступен в self-hosted и облачном вариантах. Лицензия AGPL-3.0 с Twenty Application Exception — ядро открыто, пакеты SDK, UI-библиотека и приложения — под MIT.
| План | Цена | Состав |
|---|---|---|
| Self-hosted (Free) | 0 ₽ | Все функции Pro-плана. Нет лимитов на пользователей и записи. Инфраструктура — на вашей стороне |
| Cloud Pro | $9/польз/мес (год) | Облако Twenty, все базовые CRM-функции, почта и календарь, workflows, стандартная поддержка |
| Cloud Organization | $19/польз/мес (год) | Всё из Pro плюс SSO, row-level permissions, AI usage data, audit logs, приоритетная поддержка |
Важно: Premium-функции — SSO, row-level permissions, AI usage data, audit logs — доступны только на Organization. На Pro и бесплатном self-hosted их нет.
Бесплатный self-hosted не урезает базовый функционал. Разница между ним и облаком — в управлении сервером и поддержке, не в возможностях. Organization (Self-Hosted) добавляет premium-функции и снимает требование открывать кастомный код по AGPL перед распространением.
Практические сценарии
Уход с amoCRM или Bitrix24
Ставите Twenty на VPS за 1 500 ₽/мес, грузите контакты из CSV, настраиваете стадии воронки под свой процесс. На выходе — CRM без ежемесячной подписки за каждого сотрудника и без потолка по числу сделок. Пятеро менеджеров на amoCRM обходятся от 4 500 ₽/мес — Twenty на собственном сервере заменяет это стоимостью аренды VPS.
Продажи через ИИ-агента
Twenty подключается к агенту в OpenClaw или Claude Desktop по MCP. Агент читает контакты и сделки, сам обновляет статусы, ставит задачи и собирает сводки по воронке — через обычный язык, без программных интеграций.
Оценка сделок прямо в воронке
Логика остаётся внутри Twenty. В workflow добавляется шаг AI Agent: при появлении новой сделки агент анализирует описание и переписку, расставляет приоритеты и при высоком риске создаёт задачу на ответственного. Один контур прав, никакого внешнего оркестратора.
Связка с n8n или Make
Webhook ловит новую сделку → n8n принимает событие → перенаправляет уведомление в Telegram, открывает тикет в Notion, дописывает строку в таблицу Google Sheets. Все CRUD-операции доступны через REST API Twenty, а webhooks доставляют события в реальном времени — без необходимости постоянно опрашивать сервер.
Аналитика поверх PostgreSQL
База PostgreSQL открыта для прямого подключения. Metabase, Grafana или любой BI-инструмент подключается к базе и строит отчёты без ограничений встроенной аналитики. twenty-query-builder даёт типобезопасный доступ к данным для программных запросов.
Twenty — не CRM, которую вы покупаете, а CRM, которую вы собираете. Открытый код, TypeScript и MCP-сервер из коробки стирают границу между «коробочным продуктом» и «собственной разработкой». Если команда готова invest в настройку — она получает платформу, которая растёт вместе с процессом продаж, а не диктует его.
Ограничения
Ограничения
Минимум 2 ГБ RAM — Docker-развёртывание требует не менее 2 ГБ оперативной памяти.
Меньше — процессы падают. Для production с реальной нагрузкой рекомендуется 4 ГБ и выше, особенно если включены AI-агенты и workflows.
Skills и агенты — статус alpha — По официальной документации, AI skills и agents работают, но активно дорабатываются.
Команда Twenty прямо указывает: «currently in alpha». Использование на боевых данных требует тестирования на отдельном workspace и минимальных прав.
Premium-функции не входят в бесплатный self-hosted — SSO, row-level permissions, AI usage data и audit logs — только на тарифе Organization.
Бесплатный self-hosted включает все Pro-функции, но premium-возможности требуют Enterprise-ключа.
Экосистема интеграций моложе конкурентов — Twenty честно признаёт в документации: набор готовых интеграций меньше, чем у HubSpot или Salesforce.
Если нужна сотня предустановленных коннекторов прямо сейчас — экосистема ещё не доросла. Но REST, GraphQL, webhooks и MCP покрывают программные интеграции.
Фильтрация webhooks по событиям не реализована — Все типы событий (created, updated, deleted) отправляются на один URL без фильтрации.
Если нужен только person.created, придётся фильтровать на своей стороне по полю event в теле запроса.
Антипаттерны
Антипаттерны
Сажать AI-агента на боевые данные без теста — AI-слой в alpha.
Перед боевым запуском — тестовый workspace, минимальные права, проверка на реальных данных. Агент с правами на запись может изменить или удалить записи, если промпт составлен неточно.
Менять настройки Docker вне документации — Официальный гайд предупреждает: изменяйте только те настройки, которые явно описаны.
Правка docker-compose.yml «по наитию» — частая причина сломанных установок, особенно вокруг SERVER_URL и переменных окружения.
Игнорировать валидацию webhook-подписи — Twenty подписывает каждый webhook HMAC-подписью в заголовке X-Twenty-Signature.
Если не проверять подпись на своей стороне, эндпоинт открыт для подделки запросов. Валидация — несколько строк кода, но она обязательна.
Ожидать plug-and-play от self-hosted — Twenty — не «настроил и забыл».
Платформа вознаграждает команды, готовые настраивать инструмент под себя. Если нужен вариант без участия разработчика — выбирайте облачный тариф или другую CRM.
Чеклист
Чеклист
Проверьте системные требования — Перед установкой: Docker и Docker Compose установлены, минимум 2 ГБ RAM, домен или IP для SERVER_URL.
Без корректного SERVER_URL OAuth и MCP не заработают.
Начните с однотипного install-скрипта — bash <(curl -sL …install.sh) — самый надёжный путь.
Ручная сборка docker-compose.yml возможна, но скрипт гарантирует совместимую конфигурацию.
Настройте права AI-агента до запуска — Settings
→ Members → Roles. Определите, к каким объектам и полям агент имеет доступ. Read-only для начала — даже если потом расширите до write.
Подключите MCP для внешних агентов — Конфигурация MCP-клиента — 5 строк JSON.
После подключения проверьте: агент видит tools Twenty, может читать контакты и сделки, уважает права доступа.
Проверьте webhooks на тестовом эндпоинте — Создайте webhook на тестовый URL, создайте запись в CRM, убедитесь что POST приходит.
Валидируйте подпись. Только потом переключайте на боевой эндпоинт.
Опишите кастомные объекты как код — Если планируете расширять — используйте Apps framework и twenty-sdk.
Объекты, определённые как код, версонируются и деплоятся на любой workspace. UI-настройка быстрее для прототипа, но код надёжнее для production.
Ссылки
Ссылки
- Сайт: twenty.com
- Документация: docs.twenty.com
- Репозиторий: github.com/twentyhq/twenty