Skip to content

trip2g/voicebot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Voice Bot

Telegram-бот: голосовое сообщение → транскрипт (Deepgram) → Claude Code CLI → результат в чат.

Claude получает MCP-сервер tg-bridge для обратной связи с пользователем через Telegram.

Установка

uv sync
cp .env.example .env

Настройка .env

TELEGRAM_BOT_TOKEN=...       # Токен от @BotFather
DEEPGRAM_API_KEY=...         # API-ключ Deepgram
ALLOWED_CHAT_IDS=123456789   # Через запятую. Если пустой — никого не пускает, показывает chat_id
WORKDIR=/path/to/project     # Рабочая директория для Claude CLI (обязательно)
ASK_PORT=8377                # Порт HTTP-сервера для MCP (по умолчанию 8377)

Чтобы узнать свой chat_id — отправьте боту голосовое. Он ответит: Нет доступа. Ваш chat_id: XXXXX.

Подготовка проекта (WORKDIR)

Бот запускает claude -p "/handle_voice_message ..." в директории WORKDIR. Ожидается, что в этой директории:

  1. Есть команда .claude/commands/handle_voice_message.md — Claude подхватит её автоматически. Команда получает путь к файлу с транскриптом через $ARGUMENTS. Что она делает — решаете вы (создание слайдов, постов, любая логика).

  2. Есть .mcp.json — конфиг для подключения MCP-сервера tg-bridge, чтобы Claude мог общаться с пользователем через Telegram.

Создание .mcp.json

Создайте файл WORKDIR/.mcp.json:

{
  "mcpServers": {
    "tg-bridge": {
      "command": "python3",
      "args": ["/absolute/path/to/voicebot/mcp_server.py"]
    }
  }
}

args — абсолютный путь к mcp_server.py из этого репозитория. Claude CLI при запуске прочитает этот файл и подключит MCP-сервер через stdio.

Запуск

uv run python voice_bot.py

Как работает

  1. Голосовое в Telegram → бот скачивает аудио
  2. Deepgram транскрибирует (nova-2, русский)
  3. Транскрипт сохраняется в /tmp/{random}_voice_command.txt
  4. Бот запускает claude -p "/handle_voice_message /tmp/...txt" в WORKDIR
  5. Claude читает команду .claude/commands/handle_voice_message.md, определяет намерение и выполняет
  6. Результат возвращается в чат

Каждое голосовое — отдельный запуск claude -p (одноразовый, без сохранения контекста).

Архитектура

Telegram ← голосовое
    ↓
Voice Bot (voice_bot.py)
    ↓ Deepgram
Транскрипт → /tmp/{id}_voice_command.txt
    ↓
claude -p "/handle_voice_message /tmp/...txt" --add-dir /tmp
    ↓                          ↑
    ↓                     MCP (stdio)
    ↓                    mcp_server.py
    ↓                     ↓        ↓
    ↓           POST /ask|/send|/edit
    ↓                     ↓        ↓
    ↓              HTTP server (aiohttp, port 8377)
    ↓                     ↓        ↓
    ← результат ──────────┘        └─→ Telegram / open obsidian://

MCP Tools — tg-bridge

Claude CLI подключается к MCP-серверу через .mcp.json в WORKDIR.

ask_user

Задать вопрос пользователю в Telegram и дождаться ответа.

  • question (string) — текст вопроса
  • Таймаут: 5 минут
  • Возвращает текст ответа

Примеры: «Какой заголовок для слайда?», «Добавить в раздел Архитектура или Инфраструктура?»

send_message

Отправить сообщение без ожидания ответа.

  • message (string) — текст сообщения
  • Если содержит obsidian:// ссылку — бот покажет кнопку «Открыть в Obsidian», при нажатии файл откроется на маке

Примеры: статус выполнения, отчёт о результате, ссылка в Obsidian.

edit_last_message

Редактировать последнее сообщение бота в чате.

  • message (string) — новый текст
  • Если редактирование невозможно — отправит новое сообщение

Примеры: обновление статуса на месте (⏳ Читаю файл...⏳ Генерирую слайд...✅ Готово).

Файлы

  • voice_bot.py — TG-бот + HTTP-сервер для MCP
  • mcp_server.py — MCP stdio-сервер
  • .env — переменные окружения (не в git)
  • .env.example — шаблон

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages