Как мы сделали Telegram-бота для обмена стихотворениями путем голосового чтения
Всем привет! На связи Анна, и сегодня вы узнаете историю создания проекта «Поэтропия» и какие же функции можно будет увидеть в «Привет, поэт!».
В прошлом посте я рассказала о своем знакомстве с проектом, и что для меня в нем ценно. Прочитать его можно тут.
Для меня «Поэтропия» – это не чувствовать одиночество, не спешить, не читать по диагонали. Это про живого человека рядом, про умение замедлиться и услышать, что звучит в наушниках. Это про всех нас, про людей. Подробнее о проекте смотрите здесь.
Так что же такое эта загадочная Поэтропия?
Проект «Поэтропия» – это попытка найти баланс между бесконечным скроллингом и человечностью.
В рамках данного проекта под руководством Андрея Гунявина и Александра был создан Telegram-бот «Привет, поэт!», где вы можете:
Слушать живые чтения стихов (стихотворение писателей или собственного сочинения). Это помогает почувствовать рядом с собой не винтик в системе ИИ, а человека;
Оценивать не стройности слога и точности рифмы, а выразительность, эмоцию в голосе;
Делиться своими записями – даже если вы не поэт. Хотя мы считаем, что поэзия живет в каждом из нас!
Путь от идеи до работающего бота оказался сложнее, чем мы думали. Рассказываем как это сделано, и для чего.
Зачем наш Telegram-бот, если есть книги?
Мы верим, что поэзия – форма общения наших душ. Это не только текст, но и голос, вибрация. Стихотворения написаны, чтобы их произносили вслух, но в цифровую эпоху это почти исчезло. Разве что на уроках литературы в школе можно услышать родное «Мороз и солнце; день чудесный!».
Наш проект соединяет современность и жизнь, а наш бот – попытка вернуть звучащее слово через технологии.
Как работает «Привет, поэт»?
Механика бота проста и доступна всем:
Вы получаете случайное голосовое сообщение со стихом (из базы Yandex Cloud);
Оцениваете его с помощью понятной системы оценок и хэштегов (важна не правильность, а эмоция и дух);
После этого можете записать свое чтение (можно стихотворения авторов-классиков, так и собственного сочинения).
Техническая сторона:
Хранение аудио: Сначала думали о Google Drive, но выбрали Yandex Cloud (1 ТБ, быстрая загрузка, дешевле). Сейчас благодаря Yandex мы можем обработать около 10000 запросов;
Хранение и отправка видео-отзывов: Telegram → конвертация на нашем сервере (TimeWeb) → Yandex Cloud;
Хэштеги и метаданные: Хранятся отдельно, чтобы потом анализировать предпочтения пользователей. Атрибуты хэштегов позволяют отследить, когда был поставлен хэштег, кейс-контент и описание.
Проблемы, с которыми столкнулись.
Конвертация видео: Telegram отправляет их в своем формате, не принимаемом в Yandex Cloud. Написали кастомный код на собственном сервере в TimeWeb;
Способы оплаты: Не все международные сервисы по оплате доступны на территории РФ. Было принято решение создать 2 варианта подписок: для резидентов РФ, и других стран (сервис Stripe). Это позволит нам принимать способы оплаты из всех уголков планеты и объединить тысячи людей.
А вот и обещанный код.
Объявляем асинхронную функцию в которую передаем идентификатор пользователя и сообщения, словарь, который содержит путь к видео и экземпляр бота, через который идет скачивание видео: ‘async def save_video(user_id: int, message_id: int, data: dict, bot: Bot):’
Получаем путь к видео: file_path = data.get("file_path")
Скачиваем файл с сервера telegram: video_file = await bot.download_file(file_path)
Создаем временный файл: async with aiofiles.tempfile.NamedTemporaryFile('wb', delete=False, suffix='.mp4') as tmp_file:
Цикл читает видео по 1мб, важно заметить, что tmp_file._file.name - небезопасный доступ к приватному полю, но в дальнейшем это будет исправлено 🙂
Формируем ключ для загрузки в s3 (объектно облачное хранилище): s3_key = f"feedbacks/video_{user_id}_{message_id}.mp4"
Создаем асинхронный клиент s3 и загружаем видео на yandex cloud os.remove(tmp_path) - удаляем временный файл.
Создаем путь к файлу в стиле s3, но не http-ссылка, а логический: s3_url = f"s3://{YANDEX_VIDEOBACKET_NAME}/{s3_key}"
Сохраняем наш путь в бд: await rq.set_feedback_video(tg_id=user_id, way_to_video=s3_url)
Планы на будущее.
«Рюкзачок стихотворений»: анализ оценок, полученных вами от других пользователей позволит узнать о себе больше. Мы отражаемся в других людях словно зеркала, и эта функция будет аккумулировать базу данных каждого пользователя;
Возврат к лекциям: Пока бот – первый шаг в мир технологий, но мы не забыли с чего начинался наш путь. Рассказ о нем будет позже, ведь всему свое время.
Поэзия – форма общения душ. «Привет, поэт!» – способ дать душе говорить.
Поддержите наш проект и попробуйте сами в Telegram: @Poetropy_bot. Первые два прослушивания бесплатны!
ИТ-проекты пикабушников
558 постов3.4K подписчиков
Правила сообщества
0. Запрещены посты вне тематики сообщества
1. Уважайте труд людей, пишите только конструктивную критику,
2. Не выкладывайте информацию по своему проекту чаще 2ух раз в месяц