Image

No-code разработка: telegram-бот для анализа эмоций без программирования

Когда вокруг постоянно говорят про искусственный интеллект, трудно остаться в стороне. Куда ни посмотри — везде нейросети: от фильтров в соцсетях до сложных аналитических систем. Мне как начинающему специалисту эта тема особенно близка — не просто наблюдаю за трендами, а пробую их на практике.

Недавно я решил создать небольшой, но полезный проект — Telegram-бота, который умеет определять эмоциональный окрас сообщений. Не суперсложное приложение, а скорее практика: проверить, как можно быстро собрать рабочее AI-решение, не погружаясь в тонны серверных настроек и не тратя недели на разработку.

До этого я уже сталкивался с задачами по работе с облачными сервисами, но именно этот эксперимент стал для меня наглядным примером, как много сегодня можно сделать «из коробки». Нужно было лишь придумать задачу (в моем случае — анализ эмоций в тексте), выбрать инструменты и собрать все в единый рабочий процесс.

Дальше началось самое интересное — подготовка среды, развертывание и настройка бота. Ниже расскажу, как именно это происходило.

2c1e07b479d02f27eaa69074113cce9d

Настраиваем и запускаем бота

Начнем с подготовки среды:

1. Регистрируемся на платформе Cloud.ru Evolution.

2. Активируем Evolution Foundation Models и создаем реестр в Evolution Artifact Registry.

3. Получаем API-ключи — один обычный для доступа к реестру, второй специальный для ML-сервисов с параметром ml_inference_ai_marketplace.

4. Дальше нужно подготовить Docker-образ с n8n. Проходим аутентификацию в реестре и загружаем образ:

docker login <registry_name>.cr.cloud.ru -u <key_id> -p <key_secret>

docker pull docker.n8n.io/n8nio/n8n:1.86.0 —platform linux/amd64

docker tag docker.n8n.io/n8nio/n8n:1.86.0 <registry_name>.cr.cloud.ru/n8n:1.86.0

docker push <registry_name>.cr.cloud.ru/n8n:1.86.0

795560ea86075d9c3fd39ec10c8be9cf

5. Теперь создаем бакет в Evolution Object Storage — он нам понадобится для постоянного хранения данных n8n. После этого запускаем Evolution Container Apps, выбираем наш образ из реестра, указываем порт 5678 и настраиваем несколько переменных окружения:

N8N_PROTOCOL=https

N8N_HOST=<container_app_name>.containerapps.ru

WEBHOOK_URL=https://<container_app_name>.containerapps.ru

GENERIC_TIMEZONE=Europe/Moscow

Выглядит это следующим образом:

c602d718fb28c52cce75180104582187

6. Создаем постоянный том, привязываем к нашему бакету и указываем путь /home/node/.n8n. Минимум экземпляров ставим 1, чтобы бот был всегда доступен:

12cd024a871c70971b253e512b79b26b

7. Пока контейнер разворачивается, регистрируем бота через @BotFather — тут все стандартно.

Настройка workflow в n8n

Сразу прикрепляю ссылку на json workflow, кому лень повторять инструкцию и уже сильно хочется посмотреть:)

Когда Evolution Container Apps покажет статус «Выполняется», переходим по публичному URL, регистрируемся в n8n и создаем первый workflow.

Начинаем с создания Telegram API credentials — просто указываем токен бота. Затем добавляем триггер Telegram — On message, который будет ловить входящие сообщения. Нажимаем test step. Слева появится всплывающее уведомление о том, что n8n отслеживает сообщения, отправленные в Telegram-бота:

4c9d799f92c52cd223d84c180093ee7d

Следующий узел — OpenAI. Здесь создаем новые credentials: API-ключ от Evolution Foundation Models и базовый URL https://foundation-models.api.cloud.ru/v1. Я выбрал модель OPENAI/GPT-OSS-120B.

В настройках промпта делаем две части. Первая берет текст сообщения:

{{ $(‘Telegram Trigger’).item.json.message.text }}

Вторая — системная инструкция, которая учит модель анализировать эмоции:

You are an expert in text sentiment analysis. When solving a task, FIRST think step-by-step in private to reach your answer. Do NOT reveal these private thoughts. Instead, output ONLY a JSON object with three keys: 1. «result» – one of: «positive», «negative», «neutral» 2. «confidence» – number between 0 and 1 (e.g. 0.87). Calibrate it so the three classes are equally likely a priori. 3. «explanation» – a brief, public rationale (1-3 sentences) that cites the pivotal phrases. Use Russian language to provide explanation. Follow the format of the few-shot examples exactly:

Пользователь: «Я очень рад, что сегодня такой отличный день!»
{«result»: «positive», «confidence»: 0.93, «explanation»: «Фразы ‘рад’ и ‘отличный день’ явно выражают положительные эмоции.»}

Пользователь: «Меня сильно расстроило поведение коллеги, сегодня был тяжелый день.»
{«result»: «negative», «confidence»: 0.88, «explanation»: «Слова ‘расстроило’ и ‘тяжелый день’ указывают на негативный эмоциональный окрас.»}

Пользователь: «Сегодня ничего особенного не произошло, обычный день.»
{«result»: «neutral», «confidence»: 0.85, «explanation»: «Отсутствуют ярко выраженные эмоциональные слова, текст нейтральный.»}.

Nothing before or after the JSON. Don’t mark or label your answer as ‘json’, just output the object.

Немного разберем наш запрос. В его основе лежит требование о структуре ответа «output ONLY a JSON object with three keys:» — три ключа (result, confidence, explanation) все в одном и том же формате. И ничего более.

Техника «think-step-by-step in private to reach your answer, do NOT reveal these private thoughts» — это Chain of Thought. Она вдохновляет модель на более глубокие рассуждения, но при этом оставляет ответ лаконичным.

Инструкция «Follow the format of the few-shot examples exactly:» относится к технике few-shot prompting — т. е. дается несколько примеров в самом начале промпта либо, как в нашем случае, внутри системного промпта. После чего модель понимает, какой формат вывода требуется и подстраивается под него для генерации ответа. Это повышает точность и стабильность формата.

fef0aae1d72ed1a889e88e0e1bc7cd84

«Don’t mark or label your answer as ‘json’, just output the object.». Эта инструкция нужна для корректного вывода ответа модели, без всяких кавычек и скобок как в json.

Включаем Output Content as JSON, чтобы n8n правильно парсил ответ:

c32a62dacbe444699a65e739fbb1aaa1

Последний узел — Telegram Send a text message. В Chat ID указываем {{ $(‘Telegram Trigger’).item.json.message.chat.id }}, а в тексте сообщения формируем читаемый ответ:

Эмоциональный окрас сообщения — {{ $json.message.content.result }}

Уверенность в ответе — {{ $json.message.content.confidence }}

Объяснение решения — {{ $json.message.content.explanation }}

Добавляем Reply To Message ID, перетаскивая message id из триггера — так бот будет отвечать на конкретное сообщение.

ea3dfb2c94198024225698b9d11927cd

Активируем workflow, переключателем в Active, и всё готово:

91720edecd956b159fc262b7d4a4698a

На скрине добавлены еще несколько блоков, не описанных в инструкции. Их я добавил в процессе написания самой статьи, поэтому решил оставить. Блок if проверяет входящее сообщение. Если оно является /start, то бот выдает описание своего функционала пользователю. Это полезно, так как многие, заходя первый раз в бота, сразу жмут кнопку /start, еще не понимая, для чего этот бот создан.

8d7e802d3fdec66cde4af94f76ea3e8c

Сервисы Cloud.ru Evolution в работе как они на фоне «старого» метода

Когда начал собирать проект, заметил, что почти все инфраструктурные задачи берет на себя платформа. Evolution Container Apps — это, по сути, умное облако для контейнеров, где не нужно лезть в администрирование. Приложение живет в своем контейнере, а платформа позволяет выбрать, сколько экземпляров держать в онлайне. Если нагрузка падает — все сворачивается до нуля, а если растет — довольно быстро  масштабируется. С точки зрения затрат это спасение: нет бессмысленных трат на простаивающие серверы.

Evolution Artifact registry пригодился как аккуратное хранилище образов. Да, можно было бы выгрузить все в сторонний публичный сервис, но приватный реестр внутри Cloud.ru удобнее — быстрее загружается, есть контроль версий и автоматическая проверка на уязвимости. Плюс все в одной экосистеме, без лишних интеграций.

Отдельно стоит сказать про Evolution Foundation Models. Они дают доступ к крупным языковым моделям сразу из облака, и можно общаться с ними через API, полностью совместимый с OpenAI. Это избавляет от мороки с отдельными аккаунтами и ключами на сторонних сервисах. Модель понимает контекст на русском, корректно выделяет эмоции и вполне уверенно классифицирует сообщения.

Если бы я делал всё по классической схеме, пришлось бы арендовать VPS, настраивать окружение с нуля, устанавливать Docker или Python, настраивать вебхуки и мониторинг, писать и отлаживать код бота — обрабатывать сообщения, взаимодействовать с OpenAI, устранять ошибки. Всё это требовало бы времени и внимания, а каждый сбой ложился бы на меня.

Сейчас же всё намного проще: контейнер разворачивается за минуты, обновления выкатываются из реестра одной кнопкой, масштабирование и перезапуск при ошибках проходят автоматически. Почти не нужно писать код — n8n позволяет собрать логику визуально, добавляя скрипты только при необходимости.

В итоге, вместо длинного списка рутинных задач я работаю только над тем, что реально важно — логикой бота и взаимодействием с моделью.

Как можно улучшить бота

Сам бот — это только база. При желании можно настроить алерты о негативных сообщениях в корпоративный чат, расширить анализ с помощью других AI-моделей или интегрировать с внешними системами через webhook’и. Для хранения данных можно использовать Evolution Object Storage или внешние базы данных.

Для более сложных production-сценариев стоит обратить внимание на Evolution AI Agents — новый сервис Cloud.ru Evolution, который находится в публичном превью. Он позволяет создавать мультиагентные системы с автономными AI-агентами, способными принимать решения и выполнять сложные задачи без постоянного вмешательства разработчика.

Заключение

Этот проект показал, что при правильном подборе инструментов можно собрать рабочее AI-решение буквально за вечер, без погружения в серверную рутину. Для экспериментов и быстрых MVP это идеальный вариант: все под рукой, нет лишней возни с инфраструктурой, а результат — уже завтра в рабочем виде.

Если же вы совсем новичок, то рекомендую начать с лабораторных работ на Cloud.ru — там есть пошаговые инструкции по интеграции различных сервисов платформы (включая лабу по созданию Telegram-бота с AI-функциональностью).

Источник: habr.com

✅ Найденные теги: No-code, новости
Каталог бесплатных опенсорс-решений, которые можно развернуть локально и забыть о подписках

галерея

Фото сгенерированных лиц: исследование показывает, что люди не могут отличить настоящие лица от сгенерированных
Нейросети построили капитализм за трое суток: 100 агентов Claude заперли…
Скетч: цифровой осьминог и виртуальный мир внутри компьютера с человечком.
Сцена с жестами пальцами, где один жест символизирует "VPN", а другой "KHP".
‼️Paramount купила Warner Bros. Discovery — сумма сделки составила безумные…
Скриншот репозитория GitHub "Claude Scientific Skills" AI для научных исследований.
Структура эффективного запроса Claude с элементами задачи, контекста и референса.
Эскиз и готовая веб-страница платформы для AI-дизайна в современном темном режиме.
ideipro logotyp
Image Not Found
Звёздное небо с галактиками и туманностями, космос, Вселенная, астрофотография.

Система оповещения обсерватории Рубина отправила 800 000 сигналов в первую ночь наблюдений.

Астрономы будут получать оповещения о небесных явлениях в течение нескольких минут после их обнаружения. Теренс О'Брайен, редактор раздела «Выходные». Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной…

Мар 2, 2026
Женщина с длинными тёмными волосами в синем свете, нейтральный фон.

Расследование в отношении 61-фунтовой машины, которая «пожирает» пластик и выплевывает кирпичи.

Обзор компактного пресса для мягкого пластика Clear Drop — и что будет дальше. Шон Холлистер, старший редактор Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной странице вашего…

Мар 2, 2026
Черный углеродное волокно с текстурой плетения, отражающий свет.

Материал будущего: как работает «бессмертный» композит

Учёные из Университета штата Северная Каролина представили композит нового поколения, способный самостоятельно восстанавливаться после серьёзных повреждений.  Речь идёт о модифицированном армированном волокном полимере (FRP), который не просто сохраняет прочность при малом весе, но и способен «залечивать» внутренние…

Мар 2, 2026
Круглый экран с изображением замка и горы, рядом электронная плата.

Круглый дисплей Waveshare для креативных проектов

Круглый 7-дюймовый сенсорный дисплей от Waveshare создан для разработчиков и дизайнеров, которым нужен нестандартный экран.  Это IPS-панель с разрешением 1 080×1 080 пикселей, поддержкой 10-точечного ёмкостного сенсора, оптической склейкой и защитным закалённым стеклом, выполненная в круглом форм-факторе.…

Мар 2, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых