Web / SaaS-платформы

Jarvis

Серверная платформа на ASP.NET Core для автоматизированной регистрации и работы с таксистами в Uber, объединяющая в одном решении парк Telegram-ботов, AI-ассистента поддержки, прием криптовалютных платежей в нескольких блокчейн-сетях и веб-панель администратора, работающую в реальном времени. Система круглосуточно принимает входящие обращения пользователей по нескольким каналам одновременно, мгновенно и осмысленно отвечает с помощью языковых моделей, автоматически зачисляет поступившие платежи на баланс клиента и сводит всю операционную активность в единый управляемый контур.
ASP.NET Core C#

Задача

Бизнесу требовалось полностью автоматизировать обслуживание растущего потока клиентов в Telegram. Ручная обработка не справлялась с объемом однотипных обращений: ответы приходили с задержкой, оплата принималась и сверялась вручную, а данные о клиентах, переписке и транзакциях оставались разрозненными. Нужна была единая система, способная одновременно принимать обращения через несколько ботов, отвечать мгновенно и по существу, самостоятельно подтверждать и зачислять криптоплатежи, а также давать администраторам прозрачную картину происходящего без простоев и потери сообщений. Отдельным требованием была отказоустойчивость: платформа должна работать непрерывно и переживать сбои внешних сервисов (Telegram, блокчейн-ноды, API языковых моделей) без остановки всего контура.

Решение

Разработана единая фоновая платформа, в которой все процессы выполняются автономно и параллельно, а веб-панель служит лишь окном управления и наблюдения.
  • Парк Telegram-интеграций. Реализовано восемь независимых модулей: несколько ботов на Bot API под разные сценарии (поддержка, оповещения, зеркалирование каналов, статистика) и полноценный MTProto-клиент на WTelegramClient, работающий от лица реального аккаунта. Каждый модуль изолирован и обслуживает свой канал, что позволяет масштабировать систему добавлением нового бота без вмешательства в остальные.
  • AI-слой поддержки с тремя провайдерами. Подключены OpenAI (GPT-3.5 и davinci с дообучением через fine-tuning), локальная языковая модель через Oobabooga и Botsonic. Слой ведет историю диалога по каждому собеседнику, удерживает контекст и формирует ответы в заданной роли.
  • Прием криптоплатежей в нескольких сетях. Поддержаны Bitcoin, Ethereum, USDT ERC-20, Tron и USDT TRC-20, включая тестовые сети. Платформа сама генерирует адреса, отслеживает поступления, конвертирует суммы в доллары по актуальному курсу и зачисляет средства на баланс клиента.
  • Оркестрация фоновых процессов. Десять периодических задач на Quartz с интервалами от 100 миллисекунд до одного часа: обработка очереди действий, сбор статистики, сведение балансов, очистка устаревших данных, зеркалирование контента.
  • Панель администратора реального времени на SignalR: более 25 экранов с ролевым доступом, живые логи, управление настройками и интерактивная авторизация Telegram-аккаунта прямо из браузера.

Архитектура и сложности

Платформа построена как набор автономных воркеров поверх ASP.NET Core, с SQL Server через Entity Framework Core (23 сущности предметной области, более 50 миграций) и SignalR в роли двунаправленного канала между сервером и панелью. Самыми нетривиальными оказались четыре инженерных задачи.
Параллельное выполнение десятка задач без гонок. Каждая Quartz-задача помечена атрибутом запрета параллельного запуска самой себя, а доступ к данным построен на короткоживущих экземплярах контекста БД, создаваемых через фабрику под каждую операцию. Это исключило конфликты состояния между задачами, которые крутятся одновременно с разной частотой, и сняло проблему параллельного доступа к одному контексту EF.
Авторизация MTProto-аккаунта через браузер. Вход реального Telegram-аккаунта требует ввода кода подтверждения и пароля двухфакторной защиты, которые приходят в момент логина на сервере. Реализован мост через SignalR: серверная процедура логина приостанавливается и ждет, панель администратора получает запрос на ввод кода, оператор вводит его в браузере, значение возвращается в ожидающую процедуру, и авторизация продолжается. Весь процесс обернут в цикл переподключения, поэтому обрыв связи с Telegram не валит систему.
Качество ответов локальной языковой модели. Локальные модели склонны зацикливаться и повторять фрагменты. Построен многоступенчатый фильтр ответа: обнаружение конца реплики по регулярному выражению, сравнение нового ответа с последними репликами по расстоянию Левенштейна с собственной функцией стоимости замены (символы и буквы весят по-разному), обрезка повторяющихся начала и хвоста сообщения и повтор генерации с очисткой истории при обнаружении цикла. Для OpenAI реализовано бюджетирование токенов через SharpToken: история диалога подрезается так, чтобы запрос укладывался в лимит контекстного окна.
Единая абстракция над тремя блокчейнами. Bitcoin, Ethereum с ERC-20 и Tron с TRC-20 живут в разных библиотеках и моделях транзакций (NBitcoin, Nethereum, TronNet). Они сведены под один интерфейс кошелька с операциями проверки баланса, получения курса и перевода. Фоновая задача периодически опрашивает балансы, при достижении порога автоматически переводит средства на консолидирующие адреса и зачисляет эквивалент в долларах на баланс клиента. Зачисление идемпотентно: факт списания подтверждается повторной проверкой баланса после перевода, что исключает двойное начисление.
Дополнительно в систему встроены генерация документов и штрихкодов (Word, PDF, Excel, QR и PDF417), почтовый модуль на MailKit и Aspose.Email, ролевая модель доступа на пять ролей и сквозное логирование с замером времени каждого запроса.

Результат

  • Обслуживание клиентов переведено в режим круглосуточной автономной работы: ответы приходят за секунды вместо ручной обработки с задержкой, а операторы подключаются только к нестандартным обращениям.
  • Прием платежей стал полностью безоператорным: средства в пяти криптовалютах подтверждаются и зачисляются на баланс без участия человека, с защитой от двойного начисления.
  • Парк из восьми Telegram-модулей и десяти фоновых задач работает параллельно и непрерывно, а изоляция воркеров и циклы переподключения обеспечивают устойчивость к сбоям внешних сервисов.
  • Вся операционная активность собрана в единую панель реального времени с ролевым доступом, что дало администраторам мгновенную наблюдаемость вместо разрозненных источников данных.
  • Архитектура выдержала более 50 итераций схемы данных без переписывания ядра, что подтвердило ее расширяемость: новые боты, валюты и сценарии добавляются модульно.

Стек

C# и .NET 8, ASP.NET Core MVC, SignalR, Entity Framework Core, SQL Server, Quartz.NET, WTelegramClient (MTProto) и Telegram Bot API, OpenAI API с fine-tuning, локальные языковые модели через Oobabooga, Botsonic, SharpToken, NBitcoin, Nethereum, TronNet, MailKit и Aspose.Email, EPPlus, Barcoder, HtmlAgilityPack, Newtonsoft.Json. 
Сюда Туда