SaaS-автоматизация
Automations.uz
Мультитенантная платформа автоматизации Instagram — авто-ответы на комментарии и DM, ответы с ИИ, движок правил ice-breaker и обработка сообщений через вебхуки, плюс опубликованный Python SDK для создания ботов. Создана на NestJS, BullMQ, PostgreSQL и панели на Next.js.
Обзор
Бизнесы теряли лиды в комментариях и DM Instagram — слишком много сообщений, слишком мало времени. Automations.uz позволяет им настраивать правила по ключевым словам, ИИ-ответы и интерактивные меню ice-breaker, автоматически вовлекающие подписчиков. Я построил платформу и также опубликовал Python SDK на PyPI, чтобы разработчики могли строить своих ботов поверх того же API.
Что я сделал
Спроектировал и построил весь мультитенантный бэкенд — управление аккаунтами, Instagram OAuth, конвейер входящих вебхуков, движок правил, слой ответов ИИ и режим доставки через бота.
Построил с нуля клиентскую панель Next.js и админ-панель — где бизнесы настраивают правила автоматизации и просматривают историю переписки.
Написал и опубликовал Python SDK на PyPI — декораторы асинхронных обработчиков, long-poll клиент и полный набор тестов, чтобы разработчики могли использовать API без самостоятельного хостинга вебхуков.
Вёл полную историю миграций схемы, Docker-инфраструктуру и CI — поддерживая стабильность системы по мере добавления функций.
Архитектура
Instagram отправляет события (новые комментарии, DM) как вебхуки; платформа проверяет каждый криптографической проверкой подписи, ставит в очередь BullMQ и обрабатывает асинхронно — так что всплеск трафика Instagram никогда не блокирует API. Каждый бизнес-аккаунт полностью изолирован, а разработчики, не желающие разворачивать инфраструктуру вебхуков, могут опрашивать события через Python SDK.
Под капотом
API-ключи хешируются при создании, и сырой ключ никогда не хранится — так что даже утечка базы данных не раскрывает ничего пригодного. Поиск работает проверкой только префикса ключа, затем сравнением хеша — что делает аутентификацию одновременно быстрой и безопасной.
Кнопки ice-breaker работают через косвенную адресацию токена — каждая кнопка призыва к действию получает стабильный случайный токен, который платформа хранит вместе с текстом ответа, затем только токен отправляется в Instagram. Когда пользователь нажимает, Meta возвращает токен, и платформа находит нужный ответ. Это значит, что текст ответа можно обновлять без повторной синхронизации с Instagram.
Слой ИИ-ответов использует OpenAI с tool-calling для захвата лидов — он вставляет недавнюю историю разговора для контекста, и если модель решает захватить номер телефона, вызывает инструмент-функцию, который направляет его в сервис уведомлений о лидах. Тайм-аут и ограничение повторов предотвращают задержку всей очереди из-за одного зависшего вызова ИИ.
Чему я научился
Создание конвейера на основе очереди с самого начала было правильным решением — оно отделило приём от обработки и сделало систему тривиально повторяемой при сбоях нижестоящих вызовов.
Публикация SDK заставила меня думать об API снаружи — она обнажила неудобные интерфейсы, которые я принял внутренне, но никогда бы не передал разработчику.
Технологии
Фронтенд
- Next.js 16
- React 19
- TypeScript 5
- Tailwind CSS v4
- shadcn/ui
- Vitest
- TanStack Query
Бэкенд
- NestJS 11
- TypeScript 5
- Node.js 22
- TypeORM
- PostgreSQL
- bcryptjs
- @nestjs/jwt
Очередь и данные
- BullMQ 5
- Redis
- ioredis 5
- PostgreSQL
Python SDK
- Python 3.9+
- httpx
- pytest
- pytest-asyncio
- PyPI
Инфраструктура и инструменты
- Docker
- docker-compose
- @nestjs/swagger
- OpenAI API

