Kommo + Float: ресурсное планирование команды при закрытии сделки
Float - платформа ресурсного планирования для агентств и сервисных компаний: кто из команды свободен, когда, на сколько часов. Когда сделка в Kommo переходит в «Won», проект нужно немедленно внести в Float - иначе руководитель не знает о новой загрузке, команда перегружается, дедлайны срываются. Float REST API v3 позволяет автоматизировать этот переход.
В отличие от задачников (Linear, Jira, Asana), Float решает другую задачу: не «что нужно сделать», а «кто это будет делать и когда». Для агентств это критично - настройка воронки Kommo под сервисный бизнес всегда заканчивается вопросом: как передать выигранную сделку в производство?
Проблема без интеграции
Типичный процесс без автоматизации: менеджер закрывает сделку -> открывает Float -> вручную создаёт проект -> ищет доступного специалиста -> создаёт аллокацию. На это уходит 20-30 минут. При 15-20 новых проектах в месяц это 5-8 часов административной работы.
Вторая проблема - синхронизация данных. Название проекта в Float часто отличается от сделки в Kommo. Бюджет берётся из памяти, а не из CRM. Дата начала - приблизительная. Через месяц Float и Kommo рассинхронизированы: непонятно, какой проект Float соответствует какой сделке Kommo.
Третья проблема - ресурсные конфликты. Если ресурсное планирование не обновляется мгновенно после закрытия сделки, руководитель отдела может взять ещё один проект на те же ресурсы. Конфликт обнаруживается слишком поздно.
Архитектура интеграции
Float API v3 работает через REST, аутентификация Bearer token (Personal Access Token из профиля Float). API покрывает: проекты (/projects), клиентов (/clients), аллокации (/allocations), людей (/people).
Схема работы:
- Kommo отправляет webhook при смене статуса сделки на «Won».
- Сервис создаёт или находит Client в Float по названию компании из Kommo.
- Создаёт Project с данными из сделки: название, бюджет, дата начала/окончания.
- Опционально: создаёт начальные аллокации для ключевых ролей на основе шаблона.
- Записывает Float Project ID обратно в кастомное поле сделки Kommo.
- При обновлении статуса проекта в Float (через webhook Float) - обновляет тег в Kommo.
import requests
from datetime import datetime, timedelta
FLOAT_BASE = "https://api.float.com/v3"
def get_or_create_client(token: str, company_name: str) -> int:
"""Находим или создаём клиента в Float."""
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json",
}
# Поиск по имени (Float не имеет поиска, получаем список)
clients = requests.get(f"{FLOAT_BASE}/clients", headers=headers).json()
for client in clients:
if client["name"].lower() == company_name.lower():
return client["client_id"]
# Создаём нового клиента
resp = requests.post(
f"{FLOAT_BASE}/clients",
headers=headers,
json={"name": company_name}
)
resp.raise_for_status()
return resp.json()["client_id"]
def create_float_project(
token: str,
client_id: int,
name: str,
budget_total: float,
start_date: str,
end_date: str,
tags: list = None
) -> dict:
"""Создаём проект в Float."""
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json",
}
payload = {
"name": name,
"client_id": client_id,
"budget_total": budget_total,
"start_date": start_date,
"end_date": end_date,
"status": 1, # 1=Tentative, 2=Confirmed
"tags": tags or [],
}
resp = requests.post(
f"{FLOAT_BASE}/projects",
headers=headers,
json=payload
)
resp.raise_for_status()
return resp.json()
def create_allocation(
token: str,
project_id: int,
person_id: int,
start_date: str,
end_date: str,
hours_per_day: float
) -> dict:
"""Выделяем ресурс (человека) на проект."""
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json",
}
resp = requests.post(
f"{FLOAT_BASE}/allocations",
headers=headers,
json={
"project_id": project_id,
"people_id": person_id,
"start_date": start_date,
"end_date": end_date,
"hours": hours_per_day,
}
)
resp.raise_for_status()
return resp.json()
def on_deal_won(deal: dict, float_token: str, kommo_client):
"""Точка входа: вызывается при закрытии сделки."""
company = deal.get("company_name", "Без компании")
project_name = deal["name"]
budget = float(deal.get("price", 0))
# Дата начала - из кастомного поля сделки или +7 дней от сегодня
raw_start = deal.get("custom_start_date")
start_date = raw_start or (
datetime.now() + timedelta(days=7)
).strftime("%Y-%m-%d")
# Дата окончания - из кастомного поля или +30 дней
raw_end = deal.get("custom_end_date")
end_date = raw_end or (
datetime.now() + timedelta(days=37)
).strftime("%Y-%m-%d")
client_id = get_or_create_client(float_token, company)
project = create_float_project(
float_token, client_id, project_name,
budget, start_date, end_date,
tags=["kommo-auto"]
)
# Записываем Float Project ID обратно в Kommo
kommo_client.update_lead(
deal["id"],
custom_fields={"float_project_id": str(project["project_id"])}
)
return project
Пошаговая реализация
Шаг 1 - Float Personal Access Token. В профиле Float: Account Settings -> Developer API. Генерируете токен. Он не истекает, но рекомендуем ротировать раз в год.
Шаг 2 - кастомные поля в Kommo. Создаёте поля в сделках: «Дата начала проекта», «Дата окончания», «Float Project ID». Менеджеры заполняют первые два при закрытии сделки - они подхватываются интеграцией.
Шаг 3 - Kommo webhook. Подписываетесь на событие смены статуса. Фильтр: только переход в статус «Won» (pipeline_id + status_id).
Шаг 4 - шаблоны аллокаций (опционально). Для типовых проектов можно создать шаблон: при создании проекта Float автоматически выделяется Project Manager на всё время и Senior Developer на первые 2 недели. Шаблон хранится в конфигурации сервиса.
Шаг 5 - Float webhook для обратной синхронизации. Float поддерживает outbound webhooks (настраивается в Settings -> Integrations -> Webhooks). Событие project.updated позволяет обновлять данные в Kommo при изменении статуса проекта в Float.
Шаг 6 - уведомления руководителю. При создании нового проекта в Float отправляете уведомление в Slack-канал руководителя проектов: «Новый проект добавлен: [название]. Бюджет: $X. Начало: [дата]. Требует назначения ресурсов».
Реальный кейс: digital-агентство, 22 человека
Дизайн-агентство, Берлин. Команда 22 человека: 3 менеджера по продажам, 6 дизайнеров, 4 разработчика, 2 PM. В среднем 12-15 новых проектов в месяц.
До интеграции: когда сделка закрывалась, PM узнавал об этом из Slack или случайно. Создание проекта в Float занимало 25-30 минут. Несколько раз один специалист оказывался аллоцирован на два проекта одновременно - обнаруживалось в пятницу, когда переработка уже случилась.
После интеграции: при закрытии сделки в Kommo менеджер заполняет два поля (дата начала, дата окончания). Через 30 секунд проект появляется в Float с клиентом, бюджетом и временными рамками. PM получает Slack-уведомление и назначает конкретных людей.
Результат: время от закрытия сделки до появления проекта в Float - с 1-2 дней до 1 минуты. Ресурсные конфликты сократились до нуля за 4 месяца наблюдения.
Для кого подходит
Интеграция Kommo с Float актуальна для:
- Агентств (digital, консалтинг, разработка) с командой 10-100 человек
- Компаний, где продажи и производство - разные команды с разными инструментами
- Организаций с повторяющимися типами проектов, где аллокацию можно шаблонизировать
- Руководителей, которые сейчас планируют ресурсы в Excel или «по памяти»
Если ваша команда управляет задачами в Linear или Jira - эти интеграции можно совмещать: Float отвечает за «кто и когда», задачники - за «что именно делать». Кастомные интеграции Kommo позволяют объединить оба потока из одной точки - закрытой сделки.
Часто задаваемые вопросы
Float показывает загрузку в процентах или часах. Как лучше настроить аллокацию?
Float поддерживает оба формата. API принимает hours (часов в день) или percent (процент рабочего времени). Для проектного бизнеса с фиксированными часами удобнее hours, для ретейнеров - percent. В нашей интеграции мы обычно используем hours, вычисляя из бюджета и ставки специалиста приблизительное количество часов.
Можно ли автоматически назначать конкретных людей или только создавать проект?
Можно назначать конкретных людей через allocations API, но для этого нужно знать их people_id в Float. Обычно строится маппинг: роль в сделке Kommo -> конкретный человек в Float. Или: тип проекта из кастомного поля сделки -> шаблон аллокаций. Полная автоматизация работает для типовых проектов; нестандартные назначает PM вручную.
Float это платно. Есть ли альтернативы с похожим API?
Ресурсным планированием занимаются также Teamdeck, Resource Guru, Runn. У всех есть REST API. Архитектура интеграции с Kommo будет схожей, меняется только API-специфика. Выбор инструмента зависит от размера команды и набора функций.
Как обрабатывать изменение дат проекта в Kommo?
Если менеджер меняет кастомные поля дат в сделке Kommo, Kommo webhook lead.updated уведомляет сервис. Сервис находит Float Project ID из кастомного поля, вызывает PUT /projects/{id} с новыми датами и при необходимости корректирует существующие аллокации. Полная двусторонняя синхронизация.
Что происходит с проектом в Float если сделка в Kommo теряется (перешла в Lost)?
Если сделка была закрыта как Won, Float-проект уже создан. При повторном открытии или потере сделки в Kommo интеграция может отправить уведомление PM - «сделка X изменила статус, проверьте Float». Автоматическое удаление проекта Float при этом не рекомендуется - могут быть уже выделены ресурсы, требующие ручного перепланирования.
Следующий шаг
Если вам нужна интеграция Kommo с Float - опишите задачу команде Exceltic.dev. Разберём ваш процесс передачи проектов в производство и предложим архитектуру. Обычно проект занимает 2-3 недели с учётом настройки шаблонов аллокаций.