Техническое задание: AI Task Manager Bot

Версия для заказчика

AI-агент для управления задачами сотрудников через Telegram с обработкой голосовых сообщений


1. Общее описание продукта

Telegram-бот, который:

  1. Принимает голосовые сообщения от руководителя
  2. Транскрибирует голос в текст (OpenAI Whisper API)
  3. Анализирует текст и формулирует структурированные задачи (GPT-4o)
  4. Отправляет задачи сотрудникам в личные Telegram-аккаунты
  5. Предоставляет интерфейс управления задачами (статусы, дедлайны, прогресс)
  6. Напоминает сотрудникам о задачах с настраиваемой периодичностью
  7. Трекает результаты выполнения

1.1. Расширенный роудмап: тонкости и подводные камни по каждому пункту

🎤 Пункт 1. Приём голосовых сообщений

Что реализуем: Бот принимает голосовые сообщения только от руководителя (фильтр по Telegram ID). Аудио скачивается через Telegram Bot API и передаётся далее на транскрипцию.

Тонкости:

Подводные камни:

Проблема Описание Решение
🔴 Таймаут скачивания Большие файлы могут скачиваться медленно Добавить retry-логику с таймаутом 30 сек
🟡 Фоновый шум Голосовое на улице / в машине → плохое распознавание Предупреждать руководителя при низком качестве, Whisper prompt помогает
🟡 Не голосовое Пользователь может отправить аудио-файл вместо голосового Обрабатывать оба типа: filters.VOICE и filters.AUDIO

📝 Пункт 2. Транскрипция голоса в текст

Что реализуем: Отправка OGG-аудио в OpenAI Whisper API (model="whisper-1", language="ru"), получение текста.

Тонкости:

Подводные камни:

Проблема Описание Решение
🔴 Имена искажаются Whisper может транскрибировать «Серёга» как «Серёга», «Серега», «Сирёга» Передать имена сотрудников в поле prompt Whisper
🟡 Длинные голосовые >5 минут — качество падает, модель «забывает» начало Разбить файл на чанки по 3 мин, транскрибировать отдельно, склеить
🟡 Технические термины Специфические слова бизнеса распознаются неточно Добавить словарь терминов в prompt
🟢 Стоимость $0.006/мин — контролируемая, но нужен мониторинг Логировать длительность каждого голосового

🧠 Пункт 3. Анализ текста и формулировка задач

Что реализуем: GPT-4o с Structured Outputs получает транскрипцию + список сотрудников и возвращает типизированный список задач (Pydantic-модель).

Тонкости:

Подводные камни:

Проблема Описание Решение
🔴 Неверное сопоставление имён «Серёга» может не сопоставиться с «Сергей Иванов» Поле name_aliases в документе сотрудника + передать все варианты в промпт
🔴 Галлюцинации в дедлайнах GPT может «придумать» дедлайн, который не был озвучен Валидация: если дедлайн в прошлом — отвергнуть, показать руководителю для подтверждения
🟡 Одна задача на несколько человек «Серёга и Вася, подготовьте отчёт» → нужны 2 задачи В промпте явно указать: «если задача для нескольких — создай отдельную для каждого»
🟡 Нечёткие задачи «Ну вы там разберитесь» → GPT не знает кому и что GPT ставит assignee_name="Не указан", руководитель выбирает вручную
🟢 Refusal (отказ GPT) GPT может отказаться парсить — например, нецензурная лексика Обработка message.refusal — вежливое уведомление руководителю

📩 Пункт 4. Отправка задач сотрудникам

Что реализуем: После подтверждения руководителем каждая задача отправляется сотруднику в личный чат с ботом, с inline-кнопками для управления статусом.

Тонкости:

Подводные камни:

Проблема Описание Решение
🔴 Сотрудник не писал боту Telegram API вернёт ошибку Forbidden: bot was blocked by the user Обработать исключение, уведомить руководителя: «Сотрудник не активировал бот»
🔴 Сотрудник заблокировал бота Аналогичная ошибка Пометить сотрудника как is_active=false, уведомить руководителя
🟡 Markdown-спецсимволы Если в задаче есть _, *, ` — Markdown сломается Экранировать спецсимволы или использовать parse_mode="HTML"
🟡 Длинное описание Telegram ограничивает сообщения до 4096 символов Разбивать длинные задачи на несколько сообщений

📊 Пункт 5. Интерфейс управления задачами

Что реализуем: Команды для просмотра задач (/tasks, /my_tasks, /task <id>), фильтрация по статусу и сотруднику, inline-клавиатуры для обновления статусов.

Тонкости:

Подводные камни:

Проблема Описание Решение
🟡 ID задач в Firestore Автоматические ID в Firestore — длинные строки (20 символов) Показывать пользователю короткий номер, хранить task_number — auto-increment счётчик
🟡 Callback data limit Telegram ограничивает callback_data до 64 байт Использовать короткие префиксы: ack_, wip_, done_ + короткий ID
🟡 Устаревшие кнопки Сотрудник нажимает кнопку на старом сообщении, статус уже другой Проверять текущий статус перед обновлением, показать ошибку если устарел
🟢 Пагинация Если >20 задач — список не помещается в одно сообщение Реализовать постраничную навигацию inline-кнопками (« Назад / Вперёд »)

⏰ Пункт 6. Напоминания с настраиваемой периодичностью

Что реализуем: JobQueue проверяет каждый час все активные задачи. Если с момента последнего напоминания прошло reminder_interval_days дней — отправляем напоминание. Интервал настраивается для каждой задачи.

Тонкости:

Подводные камни:

Проблема Описание Решение
🔴 JobQueue in-memory При перезапуске бота все запланированные джобы теряются Не хранить конкретные джобы — запускать один повторяющийся джоб-чекер, данные в Firestore
🟡 Назойливость Слишком частые напоминания раздражают сотрудников Минимальный интервал — 1 день, возможность сотруднику «отложить» напоминание
🟡 Часовые пояса Напоминание в 3 ночи — плохо Добавить timezone в профиль сотрудника, отправлять только в рабочие часы (9:00-18:00)
🟡 Дублирование Два инстанса бота → двойные напоминания Гарантировать один инстанс (Docker restart: unless-stopped, без масштабирования)
🟢 Эскалация Задача просрочена на 3+ дня — руководитель не знает Автоматическое уведомление руководителю при просрочке дедлайна

📈 Пункт 7. Трекинг результатов

Что реализуем: История всех изменений статусов (кто, когда, из какого в какой статус, с каким комментарием). Команда /stats для руководителя со сводной статистикой.

Тонкости:

Подводные камни:

Проблема Описание Решение
🟡 Рост данных task_updates растёт быстро при активном использовании Firestore бесплатно хранит 1 ГБ (~500K документов), этого хватит на годы
🟡 Нет файловых вложений Сотрудник не может приложить скриншот к отчёту Фаза 2: принимать фото/документы, хранить file_id от Telegram
🟢 Аналитика Руководитель хочет видеть тренды (ускоряется ли команда?) Считать на лету: среднее время от sent до completed за неделю/месяц
🟢 Экспорт Нужно выгрузить данные в Excel для отчёта Фаза 2: команда /export → CSV-файл через bot.send_document

1.2. Интеграция с таск-трекером: визуальная доска задач

Сравнение вариантов

Критерий YouGile Trello Jira Notion
Язык интерфейса ✅ Русский ⚠️ English ⚠️ English ⚠️ English
Telegram-интеграция ✅ Встроенная ⚠️ Power-Up ❌ Нет ❌ Нет
Бесплатный план ✅ 10 юзеров, полный функционал ✅ 10 досок, безлимит карточек ✅ 10 юзеров ✅ Безлимит блоков (1 чел)
Python API ✅ REST + yougile-api (PyPI) ✅ REST + py-trello ✅ REST + jira (PyPI) ⚠️ REST, нет офиц. SDK
Простота API 🟢 Простой REST 🟢 Простой REST 🟡 Сложный 🟡 Средний
Kanban-доска ⚠️ Поверх базы данных
Rate limit 50 req/мин 100 req/10сек Tier-based 3 req/сек
Стоимость $0 (до 10 чел) $0 (до 10 досок) $0 (до 10 чел) $0 (1 чел)

✅ Рекомендация: YouGile

Почему YouGile — лучший выбор для данного проекта:

  1. Русскоязычный интерфейс — руководитель и сотрудники видят доску на русском
  2. Встроенная Telegram-интеграция — уведомления о задачах и дедлайнах прямо в Telegram, без доп. настроек
  3. Бесплатно для 10 человек — полный функционал, без ограничений по доскам
  4. Простой REST API — создание задач, перемещение по колонкам, комментарии через requests
  5. Python-библиотекаyougile-api на PyPI, поддерживает pydantic
  6. Kanban-доска — визуальное представление задач по статусам (колонки)

Архитектура интеграции

[Diagram]

Стратегия синхронизации

Событие Firestore → YouGile YouGile → Firestore
Создание задачи ✅ Бот создаёт карточку ❌ Не нужно
Смена статуса ✅ Бот перемещает карточку в колонку ⚠️ Фаза 2: webhook
Дедлайн ✅ Бот устанавливает дату ❌ Не нужно
Комментарий сотрудника ✅ Бот добавляет комментарий ❌ Не нужно

[!IMPORTANT] Firestore остаётся «единственным источником правды» (source of truth). YouGile — визуальная витрина. Все изменения идут через бота → Firestore → YouGile. Обратная синхронизация (YouGile → Firestore) — опциональна, в Фазе 2.

Маппинг колонок YouGile на статусы

Колонка YouGile Статус Firestore Цвет
📥 Новые new, sent Серый
👀 В работе acknowledged, in_progress Синий
📝 На проверке on_review Жёлтый
✅ Готово completed Зелёный
❌ Отменено cancelled Красный

Подводные камни интеграции

Проблема Описание Решение
🔴 Rate limit 50 req/мин При массовом создании задач из длинного голосового Батчить запросы, использовать очередь
🟡 Двухсторонняя синхронизация Если кто-то переместит карточку в YouGile — Firestore не узнает Фаза 1: только Firestore → YouGile. Фаза 2: webhook YouGile → бот
🟡 YouGile ID → Firestore Нужно хранить ID карточки YouGile в документе задачи Добавить поле yougile_card_id в коллекцию tasks
🟢 Доступ сотрудников к доске Сотрудники должны быть добавлены в YouGile-проект Автоматическое приглашение через API при /add_employee

2. Роли пользователей

Роль Описание Возможности
Руководитель Единственный пользователь с полными правами Голосовые, создание/удаление задач, просмотр всех задач и статистики
Сотрудник Зарегистрированный в системе Просмотр своих задач, обновление статусов, отправка отчётов

3. Выбор хранилища данных

Сравнительная таблица

Критерий Google Firestore Supabase Airtable
Нужен SQL ❌ Нет ⚠️ Частично ❌ Нет
Python SDK ✅ Отличный (async) ✅ Хороший ⚠️ Базовый
Бесплатный план ✅ 50K чтений/день ✅ 500 МБ, 50K MAU ⚠️ 1000 строк
Визуальная консоль ✅ Firebase Console ✅ Dashboard ✅ Spreadsheet UI
Сложность интеграции 🟢 Простая 🟡 Средняя 🟡 Средняя
Реальное время ✅ Real-time listeners ✅ Real-time ❌ Нет
Rate limits 🟢 Щедрые 🟢 Щедрые 🔴 5 req/sec

✅ Рекомендация: Google Firestore

  1. Не нужен SQL — данные хранятся как JSON-документы
  2. Нативная async-поддержка — идеально работает с Telegram-ботом
  3. Firebase Console — визуальный интерфейс для просмотра данных в браузере
  4. Щедрый бесплатный план — 50K чтений, 20K записей, 20K удалений в день
  5. Managed-сервис — не нужен свой сервер БД
  6. Автоматическое масштабирование

4. Стек технологий

Компонент Технология Назначение
Язык Python 3.11+ Основной язык разработки
Telegram Bot python-telegram-bot 22.5 Обёртка над Telegram Bot API (async, встроенный JobQueue)
AI: Транскрипция OpenAI Whisper API Распознавание русской речи
AI: Анализ текста OpenAI GPT-4o Structured Outputs — типизированный разбор задач
Хранилище Google Firestore NoSQL документная БД (без SQL)
Конфигурация pydantic-settings Валидация переменных окружения

5. Архитектура системы

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

ai-task-manager/
├── bot/
│   ├── main.py                 # Точка входа
│   ├── config.py               # Конфигурация
│   ├── handlers/               # Обработчики команд бота
│   │   ├── admin.py            # Хэндлеры руководителя
│   │   ├── employee.py         # Хэндлеры сотрудников
│   │   └── common.py           # Общие хэндлеры
│   ├── services/               # Бизнес-логика
│   │   ├── transcription.py    # Whisper API
│   │   ├── task_parser.py      # GPT-4o
│   │   ├── task_manager.py     # Управление задачами
│   │   └── reminder.py         # Напоминания
│   ├── firestore/              # Работа с БД
│   │   ├── client.py           # Инициализация Firestore
│   │   └── repositories.py     # CRUD-операции
│   └── utils/
│       └── formatters.py       # Форматирование сообщений
├── .env                        # Секреты (не коммитить)
├── requirements.txt
├── Dockerfile
└── docker-compose.yml

Диаграмма взаимодействия

[Diagram]

6. Структура данных в Firestore

Firestore хранит данные в виде коллекций (аналог таблиц) и документов (аналог строк). Каждый документ — JSON-объект.

Коллекция employees

Поле Тип Описание
telegram_id number Уникальный Telegram ID
telegram_username string @username
full_name string Полное имя
name_aliases array Варианты имени (для распознавания из голосового)
is_active boolean Активен ли сотрудник
created_at timestamp Дата добавления

Коллекция tasks

Поле Тип Описание
title string Заголовок задачи
description string Подробное описание
status string newsentacknowledgedin_progresson_reviewcompleted / cancelled
priority string low, medium, high, urgent
assignee_id string ID документа сотрудника
assignee_name string Имя сотрудника
assignee_telegram_id number Telegram ID сотрудника
deadline timestamp Дедлайн (опционально)
reminder_interval_days number Интервал напоминаний (дни)
last_reminder_at timestamp Когда последний раз напоминали
original_voice_text string Оригинальный текст из голосового
created_at / updated_at timestamp Даты создания/обновления

Коллекция task_updates (история)

Поле Тип Описание
task_id string ID задачи
author_type string admin, employee, system
old_status / new_status string Старый/новый статус
comment string Комментарий (опционально)
created_at timestamp Дата изменения

Схема связей

[Diagram]

7. Настройка Google Firestore (одноразово)

  1. Перейти на Firebase Console
  2. Создать новый проект (бесплатный план Spark)
  3. Firestore DatabaseCreate database → регион eur3 (Europe)
  4. Project settingsService accountsGenerate new private key
  5. Скачать JSON-файл ключа сервисного аккаунта

[!TIP] Все данные можно просматривать и редактировать прямо в Firebase Console → Firestore Database. Это визуальный интерфейс — никакого SQL не нужно.


8. Обработка голосовых сообщений

Процесс:

  1. Руководитель отправляет голосовое сообщение боту
  2. Бот скачивает аудиофайл (формат OGG/Opus)
  3. Аудио отправляется в Whisper API с параметром language="ru" для распознавания русской речи
  4. Полученный текст передаётся в GPT-4o для структуризации

Технические ограничения:


9. Парсинг задач через GPT-4o

GPT-4o с технологией Structured Outputs гарантирует ответ строго по заданной схеме:

Что извлекается из голосового:

Поле Описание
Имя исполнителя Сопоставляется со списком сотрудников в БД
Заголовок задачи Краткая формулировка (до 100 символов)
Описание Подробное описание задачи
Дедлайн Если упомянут (относительные даты преобразуются в абсолютные)
Приоритет urgent при «срочно»/«немедленно», иначе по контексту

Поведение:


10. Команды Telegram-бота

Руководитель

Команда Описание
/start Приветствие + регистрация как админ
/add_employee <имя> <@username> Добавить сотрудника
/remove_employee <@username> Удалить сотрудника
/employees Список сотрудников
/tasks Все задачи (фильтрация по статусу/сотруднику)
/task <id> Детали конкретной задачи
/cancel_task <id> Отменить задачу
/stats Статистика по задачам
🎤 Голосовое сообщение Создание задач из голосового

Сотрудник

Команда Описание
/start Регистрация в системе
/my_tasks Мои текущие задачи
/done <id> Отметить задачу выполненной
/progress <id> <текст> Отправить отчёт о прогрессе

11. Inline-клавиатуры

Подтверждение задачи (руководитель)

После распознавания голосового руководитель получает карточку каждой задачи с кнопками:

Кнопка Действие
✅ Отправить Сохранить задачу и отправить сотруднику
✏️ Редактировать Изменить формулировку задачи
❌ Отменить Не создавать задачу
📅 Дедлайн Изменить/установить дедлайн

Управление статусом (сотрудник)

При получении задачи или напоминания сотрудник видит кнопки:

Кнопка Новый статус
👀 Принял acknowledged
🔄 В работе in_progress
📝 На проверке on_review
✅ Готово completed

12. Система напоминаний


13. Пайплайн обработки голосового

[Diagram]

14. Разграничение доступа

Механизм Описание
Admin-only Команды руководителя проверяют Telegram ID отправителя по ADMIN_TELEGRAM_ID
Registered employee Команды сотрудников проверяют наличие записи в коллекции employees
Голосовые Принимаются только от руководителя (фильтр по Telegram ID)

15. Конфигурация

Переменные окружения

Переменная Описание Пример
TELEGRAM_BOT_TOKEN Токен бота от @BotFather 123456:ABC-DEF...
ADMIN_TELEGRAM_ID Ваш Telegram ID 123456789
OPENAI_API_KEY Ключ OpenAI API sk-...
GOOGLE_APPLICATION_CREDENTIALS Путь к файлу ключа Firebase firebase-service-account.json
DEFAULT_REMINDER_INTERVAL_DAYS Интервал напоминаний (дни) 2
REMINDER_CHECK_INTERVAL_HOURS Частота проверки напоминаний (часы) 1

16. Деплой

Локальный запуск

  1. Установить Python 3.11+
  2. Создать виртуальное окружение и установить зависимости
  3. Заполнить .env файл своими ключами
  4. Запустить python -m bot.main

Docker (рекомендуется для продакшена)

Проект включает Dockerfile и docker-compose.yml для контейнеризации. Единственный внешний volume — файл ключа Firebase.

Варианты хостинга

Вариант Стоимость/мес Рекомендация
🏠 Локально $0 Для тестирования
☁️ Timeweb Cloud 300-500 ₽ ✅ Лучший для начала
🟡 Oracle Cloud Free $0 Бесплатный VPS навсегда
🚂 Railway.app $0-5 Простой деплой

17. Экономика затрат на реализацию и поддержку

17.1. Единоразовые затраты на разработку

Статья расходов Оценка Комментарий
AI-агент для разработки (см. таблицу ниже) $0-250 Подписка на 1 месяц
Ваше время 8-13 дней Основная «стоимость»
Telegram Bot (через @BotFather) $0 Бесплатно
Firebase проект $0 Бесплатный план Spark
OpenAI API (регистрация) $5 Минимальное пополнение
Итого единоразово $5-255 В зависимости от выбора AI-агента

Сравнение AI-агентов для разработки

AI-агент Бесплатно Базовый план Продвинутый план Рекомендация
OpenAI Codex $20/мес (ChatGPT Plus) $200/мес (Pro) 🟡 Хорош для генерации кода, лимиты 30-150 сообщ/5ч
Claude Code $20/мес (Pro) $100-200/мес (Max 5x-20x) ✅ Лучший для сложной архитектуры, терминальный доступ
Antigravity ✅ (Gemini 3 Pro, лимиты) $20/мес (Pro) $250/мес (Ultra) ✅ Есть бесплатный план, мультимодельный доступ
OpenClaw ✅ (open-source) $0 + API-расходы $0 + API-расходы 🟡 Бесплатный, но нужна настройка, расходы на API моделей

[!TIP] Рекомендация для данного проекта:

17.2. Бесплатные квоты сервисов

Сервис Бесплатная квота Хватает для
Firestore 50K чтений + 20K записей / день Команда до 50 человек
Firestore хранилище 1 ГБ ~500K документов задач
Telegram Bot API Без ограничений Любой объём

17.3. Ежемесячные расходы по сценариям

Whisper API ($0.006 / минута):

Сценарий Голосовых/день Минут/мес Стоимость/мес
🟢 Малая команда (3-5 чел.) 2-3 ~75 $0.45
🟡 Средняя команда (5-15 чел.) 5-8 ~300 $1.80
🔴 Большая команда (15-30 чел.) 10-15 ~750 $4.50

GPT-4o ($2.50/1M input, $10/1M output):

Сценарий Запросов/мес Стоимость/мес
🟢 Малая ~30 $0.23
🟡 Средняя ~100 $0.75
🔴 Большая ~300 $2.25

17.4. Сводная таблица

🟢 Малая 🟡 Средняя 🔴 Большая
Whisper API $0.45 $1.80 $4.50
GPT-4o API $0.23 $0.75 $2.25
Firestore $0 $0 $0
VPS (Timeweb) $3 $3 $5
Итого/мес ~$3.70 ~$5.55 ~$11.75
Итого/год ~$44 ~$67 ~$141

[!TIP]

Оптимизация затрат

17.5. Когда Firestore станет платным?

Firestore остаётся бесплатным на плане Spark. Переход на платный Blaze — только вручную.

Лимит Бесплатно/день Когда будет превышен
50K чтений ~2K/час Маловероятно (~1000 просмотров/час)
20K записей ~830/час Маловероятно (~400 задач/час)
1 ГБ хранилище ~500 000 задач, на годы вперёд

Вывод: для данного use-case Firestore остаётся бесплатным на неопределённое время.


18. Этапы разработки и план-график

18.1. Оценка трудозатрат по задачам

# Задача Оптим. Реалист. Пессим. Зависимости
1 Инициализация проекта, структура, конфигурация 0.5 дн 1 дн 1 дн
2 Настройка Firebase проекта + Firestore клиент 0.5 дн 0.5 дн 1 дн
3 CRUD-операции Firestore (employees, tasks) 0.5 дн 1 дн 1.5 дн #1, #2
4 Интеграция Whisper API (транскрипция) 0.5 дн 1 дн 1.5 дн #1
5 Интеграция GPT-4o (парсинг задач) 0.5 дн 1 дн 2 дн #1
6 Хэндлеры бота: /start, /help, /add_employee 0.5 дн 1 дн 1.5 дн #3
7 Обработка голосового → создание задач 1 дн 1.5 дн 2 дн #3, #4, #5
8 Inline-клавиатуры подтверждения задач 0.5 дн 1 дн 1.5 дн #7
9 Отправка задач сотрудникам 0.5 дн 0.5 дн 1 дн #8
10 Обновление статусов (inline-кнопки сотрудника) 0.5 дн 1 дн 1.5 дн #9
11 История обновлений задач (task_updates) 0.5 дн 0.5 дн 1 дн #10
12 Команды /tasks, /my_tasks, /stats + фильтрация 0.5 дн 1 дн 1.5 дн #3
13 Система напоминаний (JobQueue) 0.5 дн 1 дн 2 дн #3, #9
14 Уведомления о просроченных дедлайнах 0.5 дн 0.5 дн 1 дн #13
15 Docker + docker-compose 0.5 дн 0.5 дн 1 дн #1-14
16 Деплой на VPS + тестирование 0.5 дн 1 дн 2 дн #15
17 README, обработка ошибок, финальная шлифовка 0.5 дн 1 дн 1.5 дн #16
ИТОГО 8 дн 13 дн 22 дн

18.2. Диаграмма Ганта

[Diagram]

18.3. Сводка по фазам

Фаза Задачи Оптим. Реалист. Даты (реалист.)
1. MVP #1-7 3 дн 5 дн 24.03 – 28.03
2. Управление #8-12 2 дн 3 дн 31.03 – 02.04
3. Напоминания #13-14 1 дн 2 дн 03.04 – 04.04
4. Шлифовка #15-17 2 дн 3 дн 07.04 – 09.04
Итого 17 задач 8 дн 13 дн 24.03 – 09.04

19. Подводные камни и решения

[!CAUTION]

Сотрудник должен первым написать боту

Telegram Bot API запрещает отправку сообщений пользователям, которые не начали диалог с ботом. Каждый сотрудник обязан написать /start.

Решение: При добавлении сотрудника генерируется ссылка-приглашение, которую руководитель пересылает.

[!WARNING]

Нечёткое сопоставление имён

В голосовом руководитель может назвать «Серёга», «Сергей», «Иванов». GPT-4o может ошибиться.

Решение: Хранение вариантов имени (name_aliases) + передача полного списка имён в контекст GPT.

[!WARNING]

Длинные голосовые (5+ минут)

GPT-4o может «потерять» часть задач из длинной транскрипции.

Решение: Для длинных голосовых — разбивка текста. Всегда — подтверждение руководителем.

[!NOTE]

Firestore: составные индексы

Запросы с несколькими фильтрами требуют создания индекса. Firebase Console предложит ссылку — нужно просто кликнуть.


20. Ссылки на документацию

Ресурс URL
python-telegram-bot v22.5 https://docs.python-telegram-bot.org/en/v22.5/
Telegram Bot API https://core.telegram.org/bots/api
OpenAI Whisper API https://platform.openai.com/docs/api-reference/audio/createTranscription
OpenAI Structured Outputs https://platform.openai.com/docs/guides/structured-outputs
Google Firestore https://cloud.google.com/python/docs/reference/firestore/latest
Firebase Console https://console.firebase.google.com/