BotVa

April 8, 2026 · View on GitHub

License: MIT Node.js 20+ TypeScript

🇬🇧 English

Мульти-бот Telegram-платформа на базі Claude AI. Один сервер -- багато ботів, кожен зі своєю роллю, пам'яттю, знаннями та інтеграціями.

BotVa Dashboard

Чим BotVa відрізняється

  • Пам'ять як першокласна сутність. Факти в SQLite (topic, tags, access_count) + щоденні diary-логи розмов + щотижневі консолідації через Claude. Консолідація запускається автоматично щоночі
  • Команда ботів. Боти спілкуються через Unix-сокети (Colleague MCP), менеджер розподіляє задачі паралельно через Promise.allSettled()
  • Повна ізоляція. Кожен бот -- окремий процес, .env, база, знання, пам'ять, голос, роль. Керуються з однієї адмін-панелі
  • Живе управління. Веб-панель для створення ботів, галереї зображень, cron-задач, бекапів, діагностики. Модель чату, фонова модель (для сервісних викликів) та reasoning effort змінюються без рестарту, зміни .env потребують рестарту через UI
  • Динамічні інтеграції. MCP-сервери підключаються за наявності env-змінних -- додав BITRIX24_WEBHOOK_URL, перезапустив бота і він отримав CRM. Без зміни коду
  • Філософія. Базова роль (_soul.md) -- маніфест: як думати, як спілкуватись, коли мовчати. Не "certainly!", а людська розмова

Ключові можливості

Бот в дії — паралельні інструменти

Паралельне виконання: веб-пошук, генерація зображення, Python-графік, курси валют — одним запитом

  • Кілька ботів з одного інстансу Node.js
  • 14 готових ролей -- від персонального асистента до автономного агента
  • Пам'ять -- факти з dedup по content-hash, FTS5-пошуком та usefulness-трекінгом, щоденні diary-логи з консолідацією
  • Workspace files -- 8-шарова збірка CLAUDE.md (SOUL/TOOLS глобальні, BOT_SOUL/BOT_TOOLS/IDENTITY/ROLE/USER/MEMORY per-bot) з feature-flag блоками
  • Голос -- голосові повідомлення та відповіді (Groq STT + Edge TTS / ElevenLabs з ротацією ключів)
  • Зображення -- генерація та редагування через Gemini з авто-галереєю
  • Gemini AI -- друга думка (AskGemini) та пошук з цитатами (GeminiSearch)
  • Команда ботів -- спілкування через Unix-сокети, делегування задач, каталог агентів-спеціалістів з keyword matcher
  • Планувальник -- cron-задачі та нагадування з режимом runAgent (виконати як повноцінний запит з інструментами)
  • Утиліти -- курси валют, час, Python sandbox, email, Telegraph
  • Інтеграції -- Google Workspace, розумний дім, будь-які MCP-сервери
  • Веб-пошук -- пошук, скрапінг, AI-браузер (Stagehand)
  • Адмін-панель -- повний веб-інтерфейс для управління
  • Аудіо-рекордер -- фоновий запис з мікрофона (Orange Pi / Mac), VAD-фільтр тиші, транскрипція Whisper
  • Бекапи -- повні та per-bot, з SHA256-верифікацією

Швидкий старт

Встановлення на VPS (найшвидший спосіб)

Відкрий https://botva-installer.onrender.com/, введи IP сервера, Telegram-токен -- і через 3-5 хвилин бот працює. Детальніше: DEPLOY.md

Локальне встановлення

# 1. Клонувати
git clone https://github.com/cohe4ko/BotVa.git BotVa
cd BotVa

# 2. Встановити залежності та зібрати
./scripts/deploy.sh setup

# 3. Створити першого бота (варіант A: CLI)
npm run new-bot -- my-bot personal-assistant --emoji 🧑‍💼 --name "Мій Бот"

# 3. Створити першого бота (варіант B: веб-інтерфейс)
./scripts/deploy.sh admin  # Запустити адмін-панель
#    Відкрий http://localhost:3000 → Create Bot
#    Токен та chat ID вводяться у формі створення

# 4. Налаштувати токени (якщо CLI)
#    Відкрий bots/my-bot/.env:
#    - TELEGRAM_BOT_TOKEN  (отримати у @BotFather в Telegram)
#    - ALLOWED_CHAT_ID     (надіслати /chatid боту після запуску)

# 5. Залогінитись в Claude CLI
#    Запустити адмін-панель → Термінал (/terminal)
#    та пройти логін через підписку (не API key)

# 6. Запустити
./scripts/deploy.sh start

Після запуску напиши боту в Telegram -- він відповість.

Створення бота через веб-інтерфейс Створення бота

Обери роль, введи Telegram-токен від @BotFather та chat ID. API-ключі можна додати пізніше.

Бот створено

Після створення — структура файлів та наступні кроки.

Ролі ботів

При створенні бота обираєш роль -- вона визначає спеціалізацію, інструменти та стиль.

РольSlugОпис
Персональний асистентpersonal-assistantПовсякденні задачі, розклад, CRM, розумний дім
ДослідникresearcherГлибокий аналіз, верифікація фактів, звіти
Здоров'яhealth-advisorМоніторинг показників, аналізи, рекомендації
АкадемічнийacademicНаукові статті, методологія, PhD, викладання
КреативнийcreativeДизайн, зображення, презентації, копірайтинг
ПродажіsalesЛіди, угоди, аналіз продажів, пропозиції
ПланувальникplannerЗадачі, дедлайни, пріоритизація
База знаньknowledge-baseДокументація, FAQ, пошук знань
МенеджерmanagerКоординація команди ботів, делегування
Продукт/Ринокproduct-marketCRM-аналітика, позиціонування, конкуренти
ВебмайстерwebmasterСайт, контент, деплой, SEO
Дебати та дослідженняdebate-researcherАналіз з протилежних позицій
Автономний агентautonomousДовготривалі задачі без участі користувача, власний _soul_autonomous.md
Dome Engineerdome-engineerІнженерні задачі, діагностика, оркестрація технічних workflow
npm run new-bot -- <slug> <роль> [--emoji 🤖] [--name "Назва"]

Можливості

Telegram

Перша взаємодія з ботом — привітання, налаштування профілю, нагадування та пошук з уточнюючими питаннями:

Перша взаємодія AskUser — уточнюючі питання

Голос

Бот розуміє голосові повідомлення та може відповідати голосом. STT через Groq Whisper (потрібен GROQ_API_KEY). Два TTS-провайдери: Edge-TTS (безкоштовно, дефолт) та ElevenLabs (вища якість, локальний JSON-стор ключів з ручною ротацією, відстеженням ліміту/помилок, fallback на Edge при вичерпанні квоти). Провайдери конфігуруються окремо для автовідповідей (TTS_PROVIDER_REPLY) та tool-синтезу (TTS_PROVIDER_TOOL). Sentence-aware чанкування довгих текстів (до 20 фрагментів) з надсиланням послідовних voice-повідомлень. Голоси, швидкість, stability/similarity — через вкладку /audio в адмінці. Команда /voice вмикає/вимикає голосові відповіді, /usage показує статус ключів ElevenLabs.

Зображення

Генерація та редагування через Gemini (GOOGLE_API_KEY). Команда /img опис або просто попроси в чаті. Всі зображення зберігаються в галереї.

Пам'ять

Трирівнева система: факти (постійне сховище з topic та tags), щоденні markdown-логи, workspace-файли (USER.md, MEMORY.md). Консолідація о NIGHT_OWL_HOUR.

Збереження фактів у пам'ять Профіль користувача через AskUser

Ліворуч: збереження фактів через SaveFact/SearchMemory. Праворуч: заповнення профілю через AskUser

Планувальник

Cron-задачі: /schedule 0 9 * * * Що в мене на сьогодні?. Стандартний 5-полевий cron.

Команда ботів

Менеджер координує роботу, боти спілкуються через Colleague MCP (Unix-сокети). Кожен бот може звернутись до менеджера через ask_manager().

Telegram

SendMedia (фото, документи, альбоми), ForwardMessage, SetReaction, PinMessage, OpenWebApp (Mini App), AskUser (кнопки, poll).

Утиліти

CurrencyRates (готівкові курси), GetCurrentTime, RunPython (sandbox), SendEmail (SMTP), PublishTelegraph.

Workspace Files

Бот читає та оновлює свої файли між сесіями: USER.md (профіль), MEMORY.md (пам'ять) через ReadWorkspaceFile / WriteWorkspaceFile.

Детальний посібник: MANUAL.md

Інтеграції

Будь-який MCP-сервер можна підключити через mcp-servers.json.

Вбудовані (в комплекті):

ІнтеграціяMCP-серверПотрібні змінні
Playwright (headless Chrome)playwright-remote--
Stagehand (AI-браузер)stagehandGOOGLE_API_KEY
Google Calendar, Gmail, Drivegoogle-workspaceGOOGLE_OAUTH_CLIENT_ID, GOOGLE_OAUTH_CLIENT_SECRET
Home Assistanthome-assistantHA_URL, HA_TOKEN

Інші MCP-сервери (CRM, реклама, наукові бази тощо) додаються як запис в mcp-servers.json та увімкнюються в адмінці System → MCP Servers.

Аудіо-рекордер (Listener)

Система фонового запису аудіо з мікрофонів, автоматична транскрипція (Groq Whisper) та аналіз через Claude.

Компоненти:

КомпонентОписРозташування
ReceiverHTTP-сервер, приймає WAV, транскрибує, аналізуєscripts/orange-pi-listener/receive-transcript.ts
Orange Pi ListenerPython-демон для SBC з мікрофономscripts/orange-pi-listener/listener.py
Mac ListenerElectron tray app для macOSscripts/mac-listener/

Як працює:

  1. Пристрій записує аудіо чанками (за замовчуванням 5 хв)
  2. VAD (Voice Activity Detection) фільтрує тишу — чанки з < 15% мовлення пропускаються
  3. Чанки з голосом відправляються на Receiver (POST /audio, multipart WAV)
  4. Receiver транскрибує через Groq Whisper та зберігає щоденні конспекти

Mac Listener (tray app):

cd scripts/mac-listener && npm install && npm start

Env: UPLOAD_URL=http://host:3847/audio, DEVICE_ID=mac-1. Два режими: Toggle (ручний старт/стоп) та Continuous (автоматичні чанки). Вимагає ffmpeg.

Receiver:

npx tsx scripts/orange-pi-listener/receive-transcript.ts

Env: GROQ_API_KEY (або GROQ_API_KEYS), LISTENER_PORT=3847, ANTHROPIC_API_KEY (для аналізу).

Пристрої відображаються в адмін-панелі System → Recorder.

Адмін-панель

Dashboard — 5 ботів

Веб-інтерфейс для управління ботами. Два способи запуску:

# 1. З Telegram (on-demand, автостоп через 20 хв)
/admin

# 2. Як окремий сервіс (постійний)
./scripts/deploy.sh admin
РозділЩо робить
DashboardСтатус ботів, запити, витрати, сервіси
ConfigМодель чату, фонова модель, reasoning effort, env-змінні, workspace files (8 шарів)
KnowledgeФайли знань бота
FactsПам'ять: перегляд, пошук, редагування, FTS5-пошук
TasksНагадування та cron-задачі з повним редагуванням (текст, розклад, runAgent)
SettingsНалаштування чатів, сесії
UsageАналітика токенів та витрат
AudioTTS-провайдери (Edge / ElevenLabs), вибір голосів, параметри швидкості/якості, ключі ElevenLabs з лічильниками
SystemBuiltin tools, MCP servers, skills on/off
ImagesГалерея згенерованих зображень
LogsАудит подій
DiagnosticsAI-діагностика системи
BackupСтворення та відновлення бекапів
TeamУправління командою ботів
TemplatesШаблони ролей
TerminalБраузерний shell
Create BotМайстер створення нового бота

Детальний посібник: MANUAL.md

Telegram-команди

Telegram-команди Налаштування бота

Команди /usage, /model, /facts, /settings — управління ботом з Telegram

КомандаОпис
/startПривітання та chat ID
/chatidПоказати chat ID
/newchat, /forgetОчистити сесію (пам'ять залишається)
/voiceУвімкнути/вимкнути голосові відповіді
/img <опис>Згенерувати зображення
/modelПеремкнути модель чату та reasoning effort
/schedule <cron> <текст>Створити задачу
/usageСтатистика токенів, статус Claude-логіну, ліміти підписки та ключі ElevenLabs
/statsInline-статистика on/off
/langМова інтерфейсу
/adminАдмін-панель
/sessionПерегляд CLI-сесій
/cancelСкасувати запит

Структура проекту

BotVa/
├── src/                    # Код платформи (TypeScript)
│   ├── index.ts            # Точка входу
│   ├── bot.ts              # Telegram бот
│   ├── agent.ts            # Claude agent з MCP
│   ├── builtin-tools.ts    # Вбудовані інструменти
│   ├── memory.ts           # Система пам'яті
│   ├── db.ts               # SQLite
│   ├── voice.ts            # STT/TTS
│   ├── imagen.ts           # Генерація зображень
│   ├── scheduler.ts        # Планувальник
│   └── admin/              # Веб адмін-панель
├── roles/                  # Шаблони ролей
│   ├── _soul.md            # Базовий характер (для всіх ботів)
│   ├── _tools.md           # Базовий routing інструментів
│   └── *.md                # Ролі (personal-assistant, researcher, ...)
├── mcp-servers/            # MCP сервери
│   ├── colleague/          # Міжботова комунікація
│   └── manager/            # Координація менеджером
├── scripts/                # Скрипти управління
├── installer/              # Веб-інсталятор
├── bots/                   # Дані ботів (gitignored)
├── workspace/              # Runtime дані (gitignored)
├── .env.example            # Шаблон конфігурації
└── package.json

Управління

./scripts/deploy.sh setup      # Встановити залежності, зібрати
./scripts/deploy.sh start      # Запустити всі боти
./scripts/deploy.sh stop       # Зупинити
./scripts/deploy.sh restart    # Перезапустити
./scripts/deploy.sh build      # Перезібрати TypeScript + MCP
./scripts/deploy.sh status     # Статус
./scripts/deploy.sh backup     # Бекап
./scripts/deploy.sh restore    # Відновлення

Деплой

Детальний гайд з конфігурацією та всіма варіантами: DEPLOY.md

Технічний стек

  • Runtime: Node.js 20+, TypeScript (strict)
  • Telegram: Grammy
  • AI: Anthropic Claude Agent SDK
  • Database: SQLite (вбудований в Node.js)
  • Web: Hono
  • Voice: Edge-TTS / ElevenLabs (синтез), Groq Whisper (розпізнавання)
  • Images: Google Gemini
  • Browser: Stagehand / Playwright
  • Тести: Vitest 4.x

Як долучитись

Дивись CONTRIBUTING.md.

FAQ

Як дізнатись свій chat ID? Запусти бота та надішли /start або /chatid.

Як додати знання боту? Поклади .md або .txt файли в bots/<name>/knowledge/. Також через адмін-панель (Knowledge).

Як підключити інтеграцію? Додай відповідні змінні в .env бота. Після перезапуску бот автоматично отримає інструменти.

Як переїхати на інший сервер? Дивись розділ "Міграція" в DEPLOY.md.

Ліцензія

MIT