Telegram-бот: голосовое сообщение → транскрипт (Deepgram) → Claude Code CLI → результат в чат.
Claude получает MCP-сервер tg-bridge для обратной связи с пользователем через Telegram.
uv sync
cp .env.example .envTELEGRAM_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.
Бот запускает claude -p "/handle_voice_message ..." в директории WORKDIR. Ожидается, что в этой директории:
-
Есть команда
.claude/commands/handle_voice_message.md— Claude подхватит её автоматически. Команда получает путь к файлу с транскриптом через$ARGUMENTS. Что она делает — решаете вы (создание слайдов, постов, любая логика). -
Есть
.mcp.json— конфиг для подключения MCP-сервераtg-bridge, чтобы Claude мог общаться с пользователем через Telegram.
Создайте файл 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- Голосовое в Telegram → бот скачивает аудио
- Deepgram транскрибирует (nova-2, русский)
- Транскрипт сохраняется в
/tmp/{random}_voice_command.txt - Бот запускает
claude -p "/handle_voice_message /tmp/...txt"вWORKDIR - Claude читает команду
.claude/commands/handle_voice_message.md, определяет намерение и выполняет - Результат возвращается в чат
Каждое голосовое — отдельный запуск 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://
Claude CLI подключается к MCP-серверу через .mcp.json в WORKDIR.
Задать вопрос пользователю в Telegram и дождаться ответа.
- question (string) — текст вопроса
- Таймаут: 5 минут
- Возвращает текст ответа
Примеры: «Какой заголовок для слайда?», «Добавить в раздел Архитектура или Инфраструктура?»
Отправить сообщение без ожидания ответа.
- message (string) — текст сообщения
- Если содержит
obsidian://ссылку — бот покажет кнопку «Открыть в Obsidian», при нажатии файл откроется на маке
Примеры: статус выполнения, отчёт о результате, ссылка в Obsidian.
Редактировать последнее сообщение бота в чате.
- message (string) — новый текст
- Если редактирование невозможно — отправит новое сообщение
Примеры: обновление статуса на месте (⏳ Читаю файл... → ⏳ Генерирую слайд... → ✅ Готово).
voice_bot.py— TG-бот + HTTP-сервер для MCPmcp_server.py— MCP stdio-сервер.env— переменные окружения (не в git).env.example— шаблон