Мессенджер Ласточка. Мы в Rustore. Cобственный DSL и федеративная архитектура

от автора

Путь от идеи до работающего мессенджера с открытым кодом — в последнем отчёте.

Я начал рассказывать о проекте «Ласточка» на Хабре чуть больше двух месяцев назад. Тогда это были вопросы нужен ли еще один мессенджер, которые переросли в твёрдое намерение построить честный российский мессенджер для обычной жизни — семьи, друзей, работы.

Регистрация в Rustore

Через некоторое время после публикации предпоследней статьи я получил вот такое письмо

Скрин из почты

Скрин из почты

И после нескольких модераций приложение одобрили и разместили в Rustore. Поэтому выражаю Хабру и всем коллегам по Хабру огромную признательность.

Текущий статус: 300 пользователей в списке ожидания

На момент написания статьи в списке ожидания (waitlist) зарегистрировано около 300 человек. Доступ даем ограниченному числу, чтобы не разочаровать в продукте и закрыть все нелепые баги до открытия проекта. Темп роста — органический, без рекламы: люди приходят с Хабра, из TG-канала, по рекомендациям. Мы сознательно не форсируем аудиторию.

Что работает сейчас:

  • Регистрация по номеру телефона через wait call (обратный звонок) и SMS (запасной).

  • Веб-клиент на React: личные чаты, групповые чаты. Поиск по пользователям, отправка файлов, базовые уведомления.

  • Android-приложение Уже можно переписываться, создавать группы, редактировать сообщения.

  • Desktop-клиент (Electron) собирается, но пока не выложен — ждём окончания тестов на Windows.

DSL «Ласточка Rules»: скрипты для чатов без программирования

Мы долго думали, как дать обычным пользователям возможность создавать простые автоматизации, не заставляя их писать код на Python. Модель «каждый бот — отдельный пользователь» с Bot API и SDK — это для разработчиков. А базовая потребность выглядит иначе: администратор группы хочет, чтобы бот отвечал на часто задаваемые вопросы, приветствовал новичков или пересылал сообщения по ключевым словам. Без серверов, деплоя и Docker.

Так родилась концепция «Ласточка Rules» — минималистичного DSL (Domain-Specific Language), который пишется прямо в интерфейсе управления группой. Это не язык общего назначения, а набор правил вида «если условие — то действие».

Примеры правил

Приветствие нового участника:

when user joined  send "Привет, {{user.name}}! Правила чата: https://..."

Ответ на частый вопрос:

when message contains "прайс"  send file "price_2026.pdf"

Защита от спама (дополнение к автоматической модерации):

when message matches "купить.*дешево|заработок.*день"  delete message  notify admin "Подозрение на спам от {{user.name}}"

Как это работает под капотом

Синтаксис парсится в абстрактное дерево (AST) прямо на сервере, никакого доступа к глобальным функциям нет: DSL может только читать содержимое входящего сообщения, проверять простые регулярки и вызывать ограниченный набор действий (отправить текст, отправить файл, удалить сообщение, уведомить администратора). Безопасность гарантируется тем, что правила исполняются на стороне сервера и не имеют доступа к внутренним API.

Храниться правила будут в PostgreSQL рядом с метаданными группы. Редактировать их сможет владелец группы через стандартный UI — без кода, просто заполняя поля «Если» и «То». Для продвинутых пользователей оставим raw-режим с подсветкой синтаксиса.

Это решение закрывает сразу два слоя аудитории: обычные администраторы получают низкий порог входа, а гики — прямой доступ к тексту правил, который можно версионировать и шарить.

Федеративная архитектура: свой сервер без потери связи с миром

Вторая крупная тема, которую мы прорабатываем — как дать любым организациям возможность устанавливать собственную ноду мессенджера, но при этом не терять связь с внешними контактами. Федерация в Tinode устроена не так, как в Matrix или XMPP. Здесь нет репликации данных и общей шины. Вместо этого используется механика прокси-пользователей.

Когда компания «Ромашка» запускает свою ноду, её сотрудники создаются и хранятся локально. Центральная нода «Ласточки» узнаёт о них через защищённый федеративный обмен и создаёт у себя временные прокси-записи. Сообщения между нодами передаются по стандартному WebSocket-протоколу Tinode с обязательным TLS, но не сохраняются на центральной стороне — только транзитом. Постоянные данные остаются на той ноде, к которой относится пользователь.

Это даёт важное юридическое следствие: персональные данные сотрудников не покидают контур компании. Федеративная нода сама выступает оператором ПДн, а центральная обрабатывает лишь обезличенный прокси-идентификатор.

Юридическая сторона по федеративной архитектуре пока в проработке с юристами и соответствующими ведомствами.

Пока получается три сценария

Мы выделили три сегмента, и под каждый — свой продукт:

1. «Ласточка» (B2C) — бесплатно, центральная нода. Для обычных пользователей и малого бизнеса/ИП, которым не нужен контроль над инфраструктурой.

2. «Ласточка Сервер Лайт» — для средних организаций (100–1000 сотрудников). Своя нода в облаке (VDS от Selectel или VK Cloud), установка через один Docker Compose, федерация с центральной нодой.

3. «Ласточка Сервер Про» — для крупных организаций (1000+). Своё железо или частное облако, полный набор интеграций (LDAP, SSO, SIEM, DLP), контракт с SLA 24/7.

Что дальше

Стратегия сформулирована, идеология не меняется. Дальше — рутина:

Мы благодарны аудитории Хабра за внимание, споры в комментариях и реальные советы. Именно здесь мы получили первые сотни пользователей, здесь же нас критиковали — и правильно делали. Без этого проект не стал бы тем, чем стал.

Вероятно это будет последняя статья цикла про мессенджер. Спасибо, что были с нами. Если захотите проверить, как там «Ласточка» через год, — репозиторий открыт, серверы в России. Дальше — работа.

P.S. Мы открыты для идей, конструктивной критики, любой помощи и участия в проекте.

ссылка на оригинал статьи https://habr.com/ru/articles/1045828/