Перейти к содержанию

Telegram: market-motion videos из чата

Бот превращает короткое сообщение в MP4 с анимированным рыночным графиком. Он не использует LLM: разбирает команду, тикеры, период и параметры, ставит задачу в очередь, рендерит видео и отправляет результат обратно в Telegram.

Главная идея первого продуктового релиза Telegram UX - не набор готовых пресетов. Бот нужен как универсальный конструктор красивых market-motion videos под любые тикеры, категории и инвестиционные сценарии. Готовые варианты в меню можно использовать как примеры формулировок.

1. Что это дает

  • Mini App с формой параметров: тикеры, рынок, период, валюта, инвестиции, тема, длительность и FPS.
  • Быстрый ролик по своим тикерам: акции, сырье, валюта, крипто или MOEX-инструменты.
  • Случайный ролик из тикерной вселенной, если нужен готовый повод для публикации.
  • Категорийный ролик, например по металлам, драматичным историям или смешанному рынку.
  • Серия выпусков или контент-план на несколько дней.
  • Очередь рендера, чтобы видеть активную задачу и ожидание.

Основные входы:

Задача Команда
Открыть меню /start или /menu
Открыть Mini App кнопка Mini App в Telegram или /app
Посмотреть короткую справку /help
Посмотреть все параметры /params
Проверить очередь /queue

2. Mini App

Mini App доступен по команде:

/app

Команда /app пришлет Telegram-кнопку "Открыть Mini App". Открывайте Mini App именно этой кнопкой из чата: Telegram передает данные в бота через sendData только для reply keyboard Web App. Внутри можно выбрать тикеры, рынок, период, валюту, режим ролика, тему, инвестиционный сценарий, duration, fps, gradient и legend. После отправки приложение передает готовую строку запроса в бота, а бот ставит задачу в очередь.

Статический entrypoint для продакшена после релиза:

https://karnaksp.github.io/stock-prices/miniapp/

URL можно переопределить через переменную окружения STOCK_PRICES_MINI_APP_URL. Постоянная Web App кнопка меню отключена по умолчанию: при открытии из нее Telegram не гарантирует отправку sendData обратно в бота. Для экспериментов ее можно включить через STOCK_PRICES_MINI_APP_MENU_BUTTON=true или CLI-флаг --mini_app_menu_button, но рабочий production-вход для генерации - /app.

3. Как запросить свой ролик

Отправьте тикеры и период обычным текстом. Для короткого ролика используйте /shorts:

/shorts SBER LKOH за год

Можно добавлять годы, валюту, источник, тему и инвестиционный сценарий:

SBER LKOH 2020 2024
AAPL global USD shorts
gold silver palladium 2018-2026 RUB capital invest initial=0 monthly=30000 gradient

Формат запроса:

TICKER [TICKER...] [period] [market/source] [currency] [metric] [options]

Полезные параметры:

Параметр Что задает
2020 2024, 2018-2026, за год период ролика
RUB, USD, EUR валюту подписей и инвестиций
global, stock, shares, futures, selt источник и рынок
capital invest initial=0 monthly=30000 график регулярных вложений
gradient, theme=studio, duration=12 fps=24 визуальный стиль и длительность

Несколько роликов можно отправить одним сообщением: каждая непустая строка станет отдельной задачей.

4. Как попросить случайный или категорийный ролик

Случайные ролики собираются из тикерной вселенной: у тикеров есть категории, даты доступной истории и признаки для комбинирования. Бот выбирает совместимые тикеры, проверяет пересечение истории и собирает обычный запрос на видео.

random mixed 2
random metals 1

mixed означает широкий случайный набор без узкой категории. metals ограничивает выбор металлами. Число в конце задает количество линий на графике.

5. Как сделать серию или план

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

plan drama 5 days 2 tickers

Такой запрос покажет сетку из 5 выпусков в категории drama, по 2 тикера в каждом. Чтобы сразу поставить серию shorts в очередь:

plan shorts metals count=1 days=5

days задает количество выпусков, count - количество тикеров в выпуске. Категорию можно заменить на mixed, если нужен широкий случайный набор.

6. Как смотреть очередь

/queue

Очередь показывает активный job, ожидающие задачи и ошибки. После постановки задачи бот присылает промежуточные статусы, готовый MP4 и текстовый блок для публикации.