Перейти к основному содержанию
В Twenty пока нет собственной поддержки формульных полей (планируется в 2026), но того же результата можно добиться с помощью рабочих процессов. Это обходное решение позволяет автоматически вычислять и заполнять значения полей — от простых конкатенаций до сложной бизнес-логики.

Типичные случаи использования

Сценарий использованияПример формулы
Полное имяИмя + ” ” + Фамилия
Ожидаемая суммаСумма × Вероятность
Дней до срокаСрок - Сегодня
Дней на этапеСегодня - Дата входа в этап
Оценка лидаБаллы на основе нескольких критериев
Полный пример отслеживания времени на этапах воронки см. в разделе Как отслеживать, сколько времени возможности находятся на каждом этапе.

Базовая формула: конкатенация

Пример: автозаполнение полного имени

Цель: автоматически объединять имя и фамилию в поле полного имени.

Настройка

  1. Триггер: запись обновлена или создана (Люди)
  2. Фильтр: проверьте, что изменились имя или фамилия
  3. Действие кода:
export const main = async (params) => {
  const { firstName, lastName } = params;

  const fullName = [firstName, lastName]
    .filter(Boolean)
    .join(' ');

  return { fullName };
};
  1. Обновить запись: установить Полное имя равным {{code.fullName}}

Числовая формула: ожидаемая сумма

Пример: рассчитать ожидаемую выручку

Цель: умножить сумму возможности на вероятность, чтобы получить ожидаемую сумму. Полный рабочий процесс см. в разделе Как показать ожидаемую сумму в воронке.

Быстрая настройка

  1. Триггер: запись обновлена (Возможности, поле Сумма ИЛИ Вероятность)
  2. Действие кода:
export const main = async (params) => {
  const { amount, probability } = params;

  const expectedAmount = (amount || 0) * (probability || 0) / 100;

  return { expectedAmount };
};
  1. Обновить запись: установить Ожидаемую сумму равной {{code.expectedAmount}}

Формула даты: вычисление дней

Пример: дни до срока задачи

Цель: вычислить, сколько дней осталось до срока задачи.

Настройка

  1. Триггер: запись обновлена или создана (Задачи, поле Срок)
  2. Действие кода:
export const main = async (params) => {
  const { dueDate } = params;

  if (!dueDate) {
    return { daysUntilDue: null };
  }

  const due = new Date(dueDate);
  const today = new Date();
  const diffTime = due - today;
  const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));

  return { daysUntilDue: diffDays };
};
  1. Обновить запись: установить поле «Дни до срока» равным {{code.daysUntilDue}}
Отрицательные значения означают просроченные задачи. Это поле можно использовать для фильтрации или сортировки задач по срочности.

Условная формула: оценка лида

Пример: расчет оценки лида на основе критериев

Цель: оценивать лидов на основе размера компании, отрасли и вовлеченности.

Настройка

  1. Триггер: запись обновлена (Люди или Компании)
  2. Действие кода:
export const main = async (params) => {
  const { companySize, industry, hasEmail, hasPhone, source } = params;

  let score = 0;

  // Company size scoring
  if (companySize === 'Enterprise') score += 30;
  else if (companySize === 'Mid-Market') score += 20;
  else if (companySize === 'SMB') score += 10;

  // Industry scoring
  const targetIndustries = ['Technology', 'Finance', 'Healthcare'];
  if (targetIndustries.includes(industry)) score += 25;

  // Contact info scoring
  if (hasEmail) score += 10;
  if (hasPhone) score += 15;

  // Source scoring
  if (source === 'Referral') score += 20;
  else if (source === 'Website') score += 10;

  return { leadScore: score };
};
  1. Обновить запись: установить Оценку лида равной {{code.leadScore}}

Текстовая формула: извлечение домена

Пример: извлечение домена из email

Цель: автоматически извлечь и сохранить домен email.

Настройка

  1. Триггер: запись обновлена (Люди, поле Email)
  2. Действие кода:
export const main = async (params) => {
  const { email } = params;

  if (!email) return { domain: null };

  const domain = email.split('@')[1]?.toLowerCase();

  return { domain };
};
  1. Обновить запись: установить поле Домен равным {{code.domain}}

Лучшие практики

Производительность

  • Запускайте только при изменении релевантных полей
  • Используйте фильтры, чтобы пропускать записи, которым не требуется вычисление
  • Избегайте сложных вычислений в высоконагруженных рабочих процессах

Обработка ошибок

  • Проверяйте значения null/undefined перед вычислениями
  • Используйте значения по умолчанию при отсутствии данных
  • Возвращайте понятные сообщения об ошибках при сбое вычислений

Тестирование

  • Тестируйте на крайних случаях (пустые поля, нулевые значения)
  • Проверьте вычисления вручную перед активацией
  • Отслеживайте выполнения рабочих процессов на предмет неожиданных результатов

Связанные материалы