umbot
Version:
Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф
240 lines (179 loc) • 17.4 kB
Markdown
# umbot
`umbot` — это TypeScript-фреймворк для разработки голосовых навыков и чат-ботов. Он даёт единую бизнес-логику для всех
платформ — но одинаково эффективен, даже если вы работаете только с одной.
Поддерживаются: `Яндекс.Алиса`, `Маруся`, `Сбер Салют`, а также `Telegram`, `VK`, `MAX` и `Viber` из коробки.
В отличие от большинства решений, требующих отдельной реализации под каждую платформу, `umbot` абстрагирует различия в
форматах запросов и ответов, предоставляя разработчику единый, предсказуемый интерфейс. Это позволяет писать логику один
раз — и запускать её везде.
Фреймворк следует [SemVer](https://semver.org/). Breaking changes возможны только в MAJOR-версиях.
[](https://badge.fury.io/js/umbot)
[](https://opensource.org/licenses/MIT)
[]()
[]()
[]()
---
## 💡 Почему `umbot`?
> Больше не нужно писать несколько версий одного приложения.
> Больше не нужно разбираться в JSON-форматах Алисы, Сбера, Маруси, Telegram, Max и тд.
> Бизнес-логика — одна. Платформа — любая.
**Ключевые преимущества:**
- ✅ Одна кодовая база для любой платформы. Хотите только Алису? Легко. Решите добавить Марусю или Telegram — просто
добавьте нужный адаптер, логика остаётся.
- ⚡ В типичных сценариях (до 1 000 команд) полная обработка запроса внутри фреймворка, включая поиск и выполнение
команд, занимает **менее 30 мс даже в самом сложном случае (fallback)**. В большинстве случаев это время составляет
**< 10 мс**. Это оставляет разработчику более **2.5 секунд** на выполнение собственной бизнес-логики — это критически
важно для платформ с жёсткими тайм-аутами (Алиса, Маруся, Сбер и др.).
- При первичной загрузке медиафайлов время ответа может превысить 1 секунду — поэтому `umbot` предусмотрел это, и
рекомендует использовать предзагрузку необходимых ресурсов за счет использования класса `Preload`.
- 🔒 Безопасная обработка регулярных выражений с защитой от ReDoS из коробки
- 💾 Встроенное состояние, кэширование медиа, кнопки, карточки — «из коробки»
- 🛠 TypeScript, CLI, автодополнение, 80%+ покрытие тестами
- 🧰 Дополнительные утилиты для навигации и поиска текста, ускоряющие разработку.
`umbot` — пишешь один раз, запускаешь везде.
### Единый API, адаптированный под платформу
`umbot` предоставляет унифицированный интерфейс для работы с ответами, но при этом учитывает специфику каждой платформы:
- Голосовые платформы (Алиса, Маруся, Салют) — поддерживается весь доступный функционал (кнопки, аудиосообщения,
карточки и т.д.).
- Чат-боты (Telegram, VK, Viber и др.) — поддерживается только необходимый и востребованный набор функций (карточки,
кнопки, аудиосообщения). Специфические элементы вроде опросов или кастомных интерфейсов мессенджеров исключены, так
как они не имеют аналогов в голосовых платформах и редко нужны в кроссплатформенной логике.
Этот подход гарантирует, что ваш навык/бот будет вести себя предсказуемо и не потребует специальных обходных путей при
переходе между платформами.
### Чем `umbot` отличается от других решений?
Большинство фреймворков (например, `telegraf`, `alice-sdk` и тд) ориентированы **только на одну платформу**. Чтобы
запустить приложение и в Алисе, и в Telegram, приходится:
- писать **две (или больше) версии логики**,
- поддерживать **разные форматы ответов**,
- дублировать **обработку состояний, кнопок, медиа**
- знать API каждой платформы.
`umbot` решает эту проблему:
**одна бизнес-логика** для всех платформ,
**единый API** для кнопок, карточек, голоса и текста,
**автоматическая адаптация** под формат каждой платформы "под капотом".
Это особенно ценно, если вы уже поддерживаете навык на Алисе и хотите быстро выйти в Марусю, Max или VK — без
переписывания или существенных доработок кода.
Даже если вы пока разрабатываете только под одну платформу, `umbot` избавляет от boilerplate, даёт единый API для работы
с состоянием, кнопками и медиа, а главное — не мешает, когда придёт время добавлять новые каналы.
## Для кого `umbot`?
`umbot` — это не просто обёртка под несколько платформ. Это архитектурное решение для проектов, где диалог инициирует
пользователь. Оно одинаково ценно как для одной платформы, так и для десятка.
Вы будете использовать `umbot`, если:
- **Вы разрабатываете под одну платформу (Алиса, Салют, Маруся, VK и др.).**
Вы получите чистое разделение логики и транспорта, избавитесь от дублирования кода внутри проекта и заложите
архитектуру, которая безболезненно масштабируется, когда потребуется вторая платформа. Инструмент не усложнит — он
упорядочит.
- **Вы поддерживаете несколько платформ одновременно.**
Вы перестанете синхронизировать изменения вручную. Новая функциональность появляется сразу везде, а поддержка разных
API сводится к единому интерфейсу.
- **Вы проектируете систему с прицелом на будущее.**
Вы не хотите переписывать ядро, когда бизнес попросит добавить Telegram, корпоративный портал или голосового
ассистента. `umbot` делает расширение предсказуемым.
- **Вы работаете в корпоративной среде с внутренними мессенджерами.**
Вы унифицируете разработку чат-ботов, упрощаете онбординг и переиспользование компонентов между командами.
- **Вы цените чистоту кода и не терпите копипасту.**
Вы устали переносить обработчики из проекта в проект или мучительно адаптировать бизнес-логику под каждый новый API.
`umbot` позволяет писать ядро один раз и забыть о boilerplate.
> **Ключевая мысль:**
> `umbot` — это не «надстройка для мультиплатформенности», а базовый слой, который делает разработку под любую платформу
> (даже одну) быстрее, чище и готовой к масштабированию.
---
## Поддерживаемые платформы
| Платформа | Идентификатор | Статус |
| :-------------------- | :------------ | -------------------- |
| Яндекс.Алиса | `alisa` | ✅ Полная поддержка |
| Маруся | `marusia` | ✅ Полная поддержка |
| Сбер Салют (SmartApp) | `smart_app` | ✅ Полная поддержка |
| Telegram | `telegram` | ✅ Полная поддержка |
| VK | `vk` | ✅ Полная поддержка |
| Max | `max_app` | ✅ Полная поддержка |
| Viber | `viber` | ✅ Полная поддержка |
| **Ваша платформа** | `...` | ✅ За счет адаптеров |
> 💡 **Нужна своя платформа?**
> Просто создайте свой адаптер согласно документации для нужной платформы и подключите его к приложению.
> Это позволяет интегрировать `umbot` в любую внутреннюю систему, корпоративный мессенджер или поддержать любую другую
> платформу, например `whatsapp`.
---
## 🚀 Быстрый старт
Установите фреймворк:
```bash
npm install umbot
```
Создайте и запустите проект за четыре команды:
```bash
npx umbot create echo
cd echo
npm i
npm run start
```
Поправьте файлы нужным вам образом.
Например:
```ts
// index.ts
import { Bot } from 'umbot';
import { EchoController } from './EchoController';
const bot = new Bot()
.setAppConfig({ json: './data', isLocalStorage: true })
.initBotController(EchoController)
.start('localhost', 3000);
```
```ts
// EchoController.ts
import { BotController, WELCOME_INTENT_NAME } from 'umbot';
export class EchoController extends BotController {
public action(intentName: string): void {
if (intentName === WELCOME_INTENT_NAME) {
this.text = 'Привет! Я повторяю за вами.';
} else {
this.text = `Вы сказали: ${this.userCommand}`;
}
}
}
```
Протестируйте приложение, и в случае необходимости опубликуйте его.
👉 [Подробное руководство по запуску](https://www.maxim-m.ru/bot/ts-doc/documents/umbot_v-3.0_.src_docs_getting-started.html)
## Производительность
В стресс-тестах на стандартном оборудовании (AMD Ryzen 5 5600G, Windows 10) фреймворк при 1003 командах показывает:
- **Пропускная способность (реалистичный сценарий)** — **41 000 RPS**
(эмуляция полного цикла: входящий запрос → нормализация → логика → ответ)
- **Пиковая пропускная способность (burst)** — **40 000 RPS**
(одновременная обработка тысяч параллельных вызовов)
- **Последовательная пропускная способность (ядро)** — **66 000 RPS**
(максимальная скорость одного потока)
**Важно:**
- Тесты проводились без сетевых вызовов и операций с базами данных, поэтому цифры показывают потенциал ядра фреймворка.
- В реальном проекте итоговый RPS будет определяться внешними факторами (сеть, БД, логика приложения).
Длительное тестирование (48 часов) не выявило утечек памяти или снижения производительности: средняя пропускная
способность в последовательном сценарии осталась на уровне **66 000 RPS**, а потребление памяти стабильно.
## 📚 Документация
Подробная документация доступна в следующих разделах:
- [Быстрый старт](https://www.maxim-m.ru/bot/ts-doc/documents/umbot_v-3.0_.src_docs_getting-started.html) - Подробное описание, для
быстрого старта проекта
- [Подробная инструкция по созданию приложений](https://www.maxim-m.ru/bot/ts-doc/documents/umbot_v-3.0_.src_docs_GUIDE.html)
- [API Reference](https://www.maxim-m.ru/bot/ts-doc/documents/umbot_v-3.0_.src_docs_api-reference.html) - Подробное описание всех классов,
методов и интерфейсов
- [Поддерживаемые платформы](https://www.maxim-m.ru/bot/ts-doc/documents/umbot_v-3.0_.src_docs_platform-integration.html) - Руководство по
интеграции с различными платформами
- [Конфигурация и безопасность](https://www.maxim-m.ru/bot/ts-doc/documents/umbot_v-3.0_.src_docs_configuration.html)
- [Кастомизация HTTP-клиента](https://www.maxim-m.ru/bot/ts-doc/documents/umbot_v-3.0_.src_docs_http-client.html)
- [Производительность и гарантии](https://www.maxim-m.ru/bot/ts-doc/documents/umbot_v-3.0_.src_docs_performance-and-guarantees.html)
- [Тестирование](https://www.maxim-m.ru/bot/ts-doc/documents/umbot_v-3.0_.src_docs_testing.html)
- [Развертывание](https://www.maxim-m.ru/bot/ts-doc/documents/umbot_v-3.0_.src_docs_deployment.html)
- [Middleware](https://www.maxim-m.ru/bot/ts-doc/documents/umbot_v-3.0_.src_docs_middleware.html)
- [FAQ](https://www.maxim-m.ru/bot/ts-doc/documents/umbot_v-3.0_.src_docs_FAQ.html)
### Полезные ссылки
- 📚 [Официальная документация](https://www.maxim-m.ru/bot/ts-doc/index.html)
- 📢 [Telegram канал](https://t.me/joinchat/AAAAAFM8AcuniLTwBLuNsw)
- 💬 [Telegram группа](https://t.me/mm_universal_bot)
- 📦 [npm package](https://www.npmjs.com/package/umbot)
- [Создание навыка "Я никогда не"](https://www.maxim-m.ru/article/sozdanie-navyika-ya-nikogda-ne)
- [Примеры проектов](https://github.com/max36895/universal_bot-ts/tree/main/examples.md)
- [Список изменений](https://github.com/max36895/universal_bot-ts/blob/main/CHANGELOG.md)
- [Что ждать в следующем релизе](https://www.maxim-m.ru/bot/ts-doc/documents/umbot_v-3.0_.src_docs_next-release.html)
## 🛠 Инструменты разработчика
- [CLI](https://www.maxim-m.ru/bot/ts-doc/documents/umbot_v-3.0_.cli_README.html) команды
## 📝 Лицензия
MIT License. См. [LICENSE](./LICENSE) для деталей.
## 🤝 Поддержка
Если у вас есть вопросы или предложения:
- 📧 Email: maximco36895@yandex.ru
- 🐛 [Issues на GitHub](https://github.com/max36895/universal_bot-ts/issues)