tg-assistant
Личный ассистент в Telegram на Claude
Пишешь боту в Telegram → Claude раз в 15 минут разбирает входящие, отвечает и запоминает.
Ставится из браузера за 30 минут. Терминал, Node и Git не нужны.
Как это работает
Telegram ──POST──▶ /api/telegram ──▶ Supabase.inbox (status = new)
│
каждые 15 мин, по расписанию
▼
Claude (Cowork)
│ через MCP-коннектор
▼
/api/mcp/<секрет> ──▶ Supabase.items
│ (память)
▼
sendMessage ──▶ TelegramСервер не думает. Он только принимает сообщения, хранит их и умеет писать в Telegram. Всё мышление — на стороне Claude, по расписанию. Поэтому нет ни одного платного API-ключа модели.
Что нужно
Сервис | План | Зачем |
бесплатно | сам бот | |
Free | база: входящие + память | |
Free | копия этого репозитория | |
Hobby | хостинг вебхука и MCP | |
Claude Pro или Max | платно | Cowork + расписание + коннекторы |
Установка
1. Бот в Telegram
Открой @BotFather → /newbot → имя → username (обязан кончаться на bot).
Скопируй токен вида 8123456789:AAH... — это TELEGRAM_BOT_TOKEN.
2. База в Supabase
supabase.com → New project (регион — Southeast Asia · Singapore) → придумай пароль, запиши его. Пока проект поднимается (~2 мин), возьми ключи в Project Settings → API Keys:
Project URL→ этоSUPABASE_URLSecret key
sb_secret_…(нажми Reveal; если ключей нет — Create new API keys) → этоSUPABASE_SECRET_KEY
В старых проектах вместо него legacy-ключ
service_role— тоже подойдёт, но Supabase выводит его из оборота до конца 2026.
Затем SQL Editor → New query → вставь целиком файл schema.sql → Run.
Secret key обходит все ограничения доступа (RLS). Он живёт только в переменных Vercel. В браузер, в чат и в скриншоты — никогда.
3. Деплой на Vercel
Нажми кнопку Deploy выше. Vercel попросит:
подключить GitHub (Create Git Repository) — репозиторий скопируется тебе;
заполнить 4 переменные (см. таблицу ниже).
Через ~40 секунд получишь адрес вида https://my-assistant-xxxx.vercel.app.
4. Самонастройка
Открой в браузере:
https://ТВОЙ-АДРЕС.vercel.app/api/setup?secret=ТВОЙ_APP_SECRETСтраница сама проверит ключи, проверит базу, зарегистрирует webhook в Telegram и выдаст готовый MCP-адрес для Claude.
5. Коннектор в Claude
Claude → Settings → Connectors → Add custom connector.
Имя: assistant. URL: тот, что выдала страница настройки.
Проверь в чате: «покажи мои новые сообщения» — Claude должен дёрнуть get_new_messages.
6. Расписание
В Cowork напиши /schedule и вставь промт из PROMPTS.md.
Раз в 15 минут — */15 * * * *.
Переменные окружения
Переменная | Откуда |
| @BotFather, шаг 1 |
| придумай сам: 20+ случайных символов, латиница и цифры |
| Supabase → Project Settings → API Keys → Project URL |
| там же → Secret key ( |
APP_SECRET служит двум целям сразу: им подписан webhook Telegram и им закрыт MCP-эндпоинт.
Кто знает секрет — управляет ботом. Меняется в Vercel → Settings → Environment Variables → Redeploy,
после чего надо заново открыть /api/setup и обновить URL коннектора.
Что умеет ассистент
Инструменты, которые видит Claude:
Инструмент | Что делает |
| забрать необработанные сообщения |
| закрыть сообщение (иначе обработает повторно) |
| написать в Telegram |
| сохранить task / reminder / idea / note |
| найти в памяти по типу, статусу, подстроке |
| закрыть задачу |
Если что-то не работает
Симптом | Причина |
| не прогнал |
| опечатка в токене бота |
Бот молчит на сообщение | не открыл |
Claude не видит инструменты | опечатка в MCP-URL; секрет в адресе должен совпадать с |
Claude отвечает дважды | пропущен |
Всё умерло через неделю | Supabase Free ставит проект на паузу после 7 дней тишины. Разбуди в дашборде |
Диагностический промт — в PROMPTS.md, раздел «Спасатель».
Куда расти
Голос. Ловить
msg.voiceв webhook, гнать file_id в распознавание, класть текст в тот жеinbox.Проактивность. Отдельное расписание в 8:00:
list_items(kind=reminder, status=open)→ сводка дня.Кто угодно не напишет. Проверять
msg.from.idпротив своего Telegram ID вapi/telegram.ts.Векторный поиск.
pgvectorв Supabase поверхitems— семантический поиск вместоilike.
Лицензия
MIT. Форкай, ломай, переделывай под себя.