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