9.2 KiB
Telegram — описание прототипа
Концепция
Один бот, несколько чатов, две поверхности:
- базовая поверхность — личка с ботом (DM)
- опциональная advanced-поверхность — Topics в пользовательской Forum-группе
При первом запуске пользователь начинает в DM: бот создаёт первый чат и
переключает пользователя в него. Если позже пользователь подключает Forum-группу
через /forum, существующие чаты получают соответствующие темы в супергруппе.
DM и Forum используют один и тот же chat_id: пользователь может писать
либо в личке, либо в forum topic, а платформа видит единый разговор.
Аутентификация
Флоу
- Пользователь пишет боту
/start - Бот проверяет — есть ли аккаунт на платформе привязанный к этому
tg_user_id - Если нет — бот отправляет одноразовую ссылку или код для входа
- Пользователь подтверждает, платформа возвращает токен сессии
- Бот сохраняет привязку
tg_user_id → platform_user_id
В моке
- Любой пользователь проходит аутентификацию автоматически
- Кнопка «Войти» → пауза 1 сек → «Вы вошли как {имя}»
- Демонстрирует флоу без реальной платформы
Чаты в DM и Forum Topics
Как это работает
- После
/startбот создаётЧат #1в DM - В DM активный чат хранится как
active_chat_id - Ответы в личке приходят в общий поток с тегом
[Чат #N] - После
/forumпользователь привязывает свою супергруппу с Topics - Каждый чат может получить соответствующую тему (
forum_thread_id) - В forum-теме ответы приходят без тега, прямо в тему
- История forum-разговоров хранится нативно в Telegram
Управление чатами
В DM доступны команды:
| Команда | Действие |
|---|---|
/new |
Создать новый чат |
/chats |
Показать список всех чатов |
/forum |
Подключить Forum-группу |
В forum-темах поддерживается тот же разговорный контекст, а /new может
зарегистрировать текущую тему как отдельный чат.
Создание нового чата
- Пользователь пишет
/new [название]или нажимает кнопку - Бот создаёт новый чат в локальной БД:
Чат #Nили указанное название - Если Forum уже подключён, бот дополнительно создаёт новую тему в привязанной группе
- В DM бот переключает
active_chat_idна новый чат
В моке
- DM-чаты работают сразу после
/start - Если Forum подключён, темы создаются реально через Bot API
- Сообщения из DM и forum topic передаются в
MockPlatformClientс одним и тем жеchat_id
Основной диалог
Флоу сообщения
- Пользователь пишет текст в DM или в forum topic
- Бот показывает
typing... - Запрос уходит в платформу (сейчас — MockPlatformClient)
- Бот отвечает:
- в DM: с тегом
[Чат #N] - в forum topic: без тега, в ту же тему
- в DM: с тегом
Вложения
- Фото, документы, голосовые — передаются в платформу как
attachments - В моке: бот подтверждает получение файла и возвращает заглушку-ответ
- Форматы: PDF, изображения, текстовые файлы
Подтверждение действий
Если агент собирается выполнить потенциально опасное действие (отправить письмо, удалить файл, сделать запись в календарь):
Агент хочет выполнить действие:
📧 Отправить письмо на vasya@mail.ru
Тема: «Отчёт за неделю»
[✅ Подтвердить] [❌ Отменить]
Пользователь нажимает кнопку — действие выполняется или отменяется. В моке: кнопки работают, действие логируется, ответ-заглушка.
Настройки
Доступны через /settings в личке или в forum topic.
Реализованы как цепочка инлайн-кнопок.
Главное меню настроек
⚙️ Настройки
[🔗 Коннекторы] [🧩 Скиллы]
[🧠 Личность] [🔔 Уведомления]
[🔒 Безопасность] [💳 Подписка]
Коннекторы
Подключение внешних сервисов. Агент получает доступ через API Proxy, пароли пользователю вводить не нужно — только OAuth.
| Коннектор | Способ подключения |
|---|---|
| Gmail / Outlook | OAuth ссылка |
| Google Calendar | OAuth ссылка |
| GitHub | OAuth ссылка |
| Notion | OAuth ссылка |
| Telegram (читать каналы) | Уже подключён |
В моке: кнопка «Подключить» → ссылка-заглушка → «Подключено ✓»
Скиллы
Включение/выключение навыков агента.
🧩 Скиллы
✅ Поиск в интернете
✅ Чтение почты
❌ Управление браузером
❌ Генерация изображений
❌ Работа с календарём
✅ Работа с файлами
❌ Генерация видео
Каждый скилл — кнопка-переключатель. Нажал — включил/выключил. В моке: состояние хранится локально, платформа не вызывается.
Личность агента (SOUL.md)
Онбординг-анкета при первом входе, потом редактирование.
🧠 Личность агента
Как зовут твоего агента?
[_Лямбда_____________]
Что он должен делать в первую очередь?
[_Разбирать почту_____]
Стиль общения:
[Деловой] [Дружелюбный] [Краткий]
В моке: данные сохраняются, агент обращается к пользователю по имени из настроек.
Уведомления
Когда агент выполнил долгую задачу — уведомление в Telegram.
🔔 Уведомления
✅ Задача выполнена
✅ Требуется подтверждение действия
❌ Ежедневный дайджест
❌ Напоминания из календаря
В моке: уведомления отправляются через бот с задержкой (симуляция).
Безопасность
Какие действия требуют явного подтверждения.
🔒 Безопасность
Всегда спрашивать перед:
✅ Отправкой письма
✅ Удалением файлов
✅ Публикацией в соцсетях
❌ Созданием события в календаре
❌ Поиском в интернете
Подписка
Заглушка — реализует другая команда.
💳 Подписка
Текущий план: Beta (бесплатно)
Токены: ████████░░ 800/1000
[Подробнее о планах]
FSM состояния
[Start] -> ChatState.idle
↓
ForumSetupState.waiting_for_group
↓
ChatState.waiting_response -> ChatState.idle
↓
SettingsState.*
Стек
- Python 3.11+
- aiogram 3.x (Router, FSM, InlineKeyboard, Forum Topics API)
- MockPlatformClient →
sdk/mock.py - structlog для логирования
- SQLite для хранения
tg_user_id → platform_user_id, чатов и forum bindings