Что нужно, чтобы запустить бота
Три вещи. Бот, созданный через BotFather, — это две минуты. Небольшой бэкенд на любом языке, который умеет принимать сообщения от Telegram и делать HTTP-запросы: подойдёт то, на чём вы уже пишете. И аккаунт massbots с токеном API — вход через Telegram, без паролей.
Не нужно: сервер с большим диском под видео, обновления загрузчика, мониторинг блокировок площадки. Всё это уже работает на нашей стороне и оплачивается по факту запросов.
Как проходит запрос пользователя
Пользователь присылает боту ссылку. Бот вынимает из неё идентификатор видео и запрашивает GET /video/{id}/formats — в ответе доступные качества и отметка cached у тех, что уже скачаны; у остальных есть размер файла. По этому списку удобно нарисовать кнопки выбора качества и сразу показать, что придёт быстро.
Пользователь нажимает кнопку, бот вызывает GET /video/{id}/download/{format}. Если файл в кэше, в ответе сразу status: ready и file_id. Если нет — status: queued, и бот повторяет запрос раз в пять-семь секунд, пока файл не будет готов. В это время пользователю можно показать «загружаю» и обновлять сообщение.
Получив file_id, бот отправляет его методом sendVideo или sendAudio — как любой другой файл, который уже есть в Telegram. Ничего не скачивается на ваш сервер и не загружается с него.
Почему именно file_id
Telegram не даёт боту отправить чужой file_id, поэтому мы доставляем файл вашему боту внутри Telegram и возвращаем идентификатор, который принадлежит именно ему. Для вашего кода это выглядит просто: пришёл file_id — отправили пользователю.
Практическое следствие: ваш бэкенд не гоняет через себя гигабайты видео. Ему достаточно самого дешёвого хостинга — он обменивается с нами короткими JSON-ответами и вызывает Bot API.
Экономика бота
Скачивание стоит 10 поинтов — 0,01 $. Повторная отдача ролика, который ваш бот уже получал, — 2 поинта. Тысяча запросов от ваших пользователей обойдётся от 2 $, если они снова и снова просят одни и те же ролики, до 10 $, если каждый ролик для вашего бота новый. Реальная цифра будет между ними и зависит от того, что смотрит ваша аудитория.
Данные о видео для карточки — 1 поинт, список форматов бесплатен, запросы статуса загрузки тоже. Ошибки не тарифицируются: если ролик удалён или приватный, вы получите понятную причину в ответе и ничего не заплатите.
Стартовать можно без вложений: 200 поинтов выдаются при регистрации, пополнение начинается с 5 $. Для проверки идеи и первых пользователей этого достаточно.
Несколько ботов и общий баланс
К одному аккаунту можно подключить несколько ботов — например, основной и тестовый, или ботов под разные языки аудитории. Баланс общий, статистика списаний ведётся по каждому запросу. В запросах указывается заголовок X-Bot-Id, чтобы файл доставлялся нужному боту.
На каком масштабе это работает
Через API проходит 4,4 млн скачиваний в месяц, к нему подключено 56 ботов. Загрузку мы доводим до конца сами: ваш бот получает либо готовый file_id, либо понятную причину отказа — и за ошибку поинты не списываются.
Кэш из 95 миллионов файлов общий для всех, кто работает через API. Поэтому ваши пользователи с первого дня получают популярные ролики быстро: скачивать их с YouTube заново не нужно, file_id приходит в первом же ответе. Цена при этом обычная — 2 поинта стоит повторная отдача ролика, который ваш бот уже получал.
Вопросы по теме
Нужно ли уметь программировать?
Да, минимально: принять сообщение от Telegram, сделать несколько HTTP-запросов и отправить file_id. Это делается на любом языке; готового бота «без кода» мы не предоставляем.
Можно ли подключить уже работающего бота?
Да. Добавьте его @username в кабинете и начните вызывать API из существующего кода. Для пользователей бота ничего не меняется, токен BotFather остаётся у вас.
Что видит пользователь, пока идёт загрузка?
То, что покажет ваш бот. API возвращает статусы queued и downloading, а вы решаете, как их отобразить — сообщением «загружаю», прогрессом или просто ожиданием. Опрашивать статус стоит раз в пять-семь секунд.
Как ограничить расходы?
Баланс — естественный предохранитель: когда поинты заканчиваются, платные запросы возвращают 403, а не уходят в минус. Расходы по дням и типам запросов видны в кабинете и по GET /me/stats.