Evolution
Тема интерфейса
Практические руководства Evolution

No-code автоматизация рассылки курса валют в Telegram с помощью n8n

Эта статья полезна?

С помощью этого руководства вы научитесь разворачивать no-code платформу n8n на виртуальной машине, настраивать процессы автоматизации и создавать Telegram-бота.

Вы будете использовать следующие сервисы:

  • Виртуальная машина free tier — сервис, в рамках которого предоставляется бесплатная виртуальная машина с готовой конфигурацией.

  • Публичный IP-адрес для доступа к машине из интернета и организации работы с Telegram.

  • Docker — система контейнеризации.

  • Docker Compose — инструмент для запуска и управления Docker-контейнерами.

  • n8n — платформа с открытым кодом для автоматизации рабочих процессов и интеграции сервисов. Подходит для экспериментов и пет-проектов.

  • BotFather — Telegram-бот для создания ботов.

Шаги:

Перед началом работы

Если вы уже зарегистрированы, войдите под своей учетной записью.

1. Разверните ресурсы в облаке

На этом шаге вы создадите бесплатную виртуальную машину и назначите ей публичный IP-адрес с заданными настройками трафика.

  1. Создайте бесплатную виртуальную машину со следующими параметрами:

    • Название — например currenсу-bot-server.

    • Публичный образ с Ubuntu 22.04.

    • Публичный IP — оставьте Арендовать новый или выберите IP-адрес из списка арендованных.

    • Логин — оставьте значение по умолчанию или укажите новый.

    • Метод аутентификацииПубличный ключ и Пароль.

    • Публичный ключ — укажите ключ, созданный ранее.

    • Пароль — задайте пароль пользователя.

    • Имя хостаcurrenсуbot.

    • Остальные параметры оставьте по умолчанию или выберите на свое усмотрение.

    Убедитесь, что в личном кабинете на странице Инфраструктура → Виртуальные машины отображается виртуальная машина со статусом «Запущена» и назначенным публичным IP-адресом.

  2. Уточните зону доступности, в которой была создана виртуальная машина.

  3. Создайте группу безопасности с названием currency-bot в той же зоне доступности и добавьте в нее правила:

    • Правила входящего трафика:

      Протокол

      Порт

      Тип источника

      Источник

      TCP

      22

      IP-адрес

      0.0.0.0/0

      TCP

      5678

      IP-адрес

      0.0.0.0/0

    • Правила исходящего трафика:

      Протокол

      Порт

      Тип адресата

      Адресат

      TCP

      80

      IP-адрес

      0.0.0.0/0

      TCP

      443

      IP-адрес

      0.0.0.0/0

2. Настройте окружение виртуальной машины

На этом шаге вы установите необходимые пакеты и подготовите среду для n8n.

  1. Обновите систему и установите утилиты:

    sudo apt update && sudo apt upgrade -y
    sudo apt install curl wget unzip software-properties-common -y
  2. Добавьте настройки DNS для разрешения доменных имен:

    1. Откройте файл /etc/resolv.conf для редактирования:

      sudo nano /etc/resolv.conf
    2. Добавьте следующие настройки и сохраните файл:

      nameserver 8.8.8.8
      nameserver 8.8.4.4
    3. Перезагрузите виртуальную машину и подключитесь к ней по SSH.

  3. Подготовьте систему к безопасной установке Docker, добавив официальный репозиторий и настроив механизмы проверки подлинности пакетов:

    sudo apt-get install ca-certificates curl -y
    sudo install -m 0755 -d /etc/apt/keyrings
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
    sudo chmod a+r /etc/apt/keyrings/docker.asc
  4. Добавьте ключ репозитория:

    echo \
    "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
    $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
    sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt-get update
  5. Установите Docker, Docker Compose и сопутствующее ПО:

    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
  6. Добавьте текущего пользователя виртуальной машины в группу Docker:

    1. Выполните команду:

      sudo usermod -aG docker $USER
      newgrp docker
    2. Перезагрузите систему.

    3. Проверьте работоспособность Docker:

      docker run hello-world

      Появится сообщение, подтверждающее успешность установки и настройки.

    Примечание

    В некоторых случаях права на использование Docker без префикса sudo не сохраняются и командная строка возвращает ошибку permission denied. В этом случае вы можете продолжить работу с Docker, добавляя в начало каждой команды префикс sudo.

3. Разверните Docker-контейнер с n8n для проекта

На этом шаге вы развернете n8n.

  1. Создайте папку проекта и перейдите в нее:

    mkdir ~/n8n && cd ~/n8n
  2. Создайте файл манифеста для Docker-контейнера:

    nano docker-compose.yml
  3. Вставьте следующую конфигурацию:

    services:
    n8n:
    image: n8nio/n8n:latest
    restart: unless-stopped
    ports:
    - "5678:5678"
    environment:
    - N8N_BASIC_AUTH_ACTIVE=true
    - N8N_BASIC_AUTH_USER=admin
    - N8N_BASIC_AUTH_PASSWORD=adminpass
    - N8N_SECURE_COOKIE=false
    volumes:
    - n8n_data:/home/node/.n8n
    volumes:
    n8n_data:
  4. Запустите n8n, выполнив команду:

    docker compose up -d
  5. Проверьте работу n8n.

    1. В браузере перейдите по ссылке http://<IP_address>:5678, где <IP_address> — это публичный IP-адрес вашей виртуальной машины.

    2. Создайте учетную запись n8n или войдите под уже существующей.

    После создания учетной записи откроется портал n8n.

4. Зарегистрируйте бота в Telegram

На этом шаге вы зарегистрируете в Telegram нового бота и получите его токен.

  1. В Telegram найдите бота BotFather.

  2. Выполните команду /newbot.

  3. Задайте имя (name) и имя пользователя (username) для бота.

    Имя пользователя должно заканчиваться на Bot или _bot.

    В результате регистрации BotFather сообщит токен бота. Сохраните его, он понадобится далее.

  4. Убедитесь, что созданный бот отображается в Telegram при поиске по имени.

  5. Откройте диалог с созданным ботом и нажмите Start или напишите в диалог сообщение /start, чтобы запустить его.

  6. В диалог с ботом отправьте любое сообщение, например привет. Если бот не возвращает ответ, отправьте еще несколько сообщений.

  7. В терминале вашей виртуальной машины выполните запрос:

    curl https://api.telegram.org/bot<your_token>/getUpdates

    Полученный ответ должен выглядеть следующим образом:

    {"ok":true,"result":[{"update_id":654369611,
    "message":{"message_id":2,"from":{"id":989698711,"is_bot":false
  8. Скопируйте и сохраните числовой идентификатор с признаком is_bot — в примере это 989698711.

5. Создайте поток для отправки сообщения на портале n8n

На этом шаге вы создадите рабочий сценарий, в результате которого сервер n8n будет получать актуальный курс валют с сайта ЦБ РФ и отправлять в Telegram.

  1. В браузере перейдите по ссылке http://<IP_address>:5678.

  2. Нажмите Create Workflow.

  3. Добавьте узел, который будет определять расписание отправки сообщений.

    1. Нажмите Add First Step и выберите On a schedule.

    2. В поле Trigger Interval выберите Custom (Cron).

    3. В открывшемся поле введите значение 0 9 * * * для запуска каждый день в 09:00.

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

    5. В левом верхнем углу нажмите Back to canvas.

  4. Добавьте узел, который будет получать информацию с сайта ЦБ РФ.

    1. Справа от предыдущего элемента нажмите + и выберите HTTP Request.

    2. В поле URL введите значение: https://www.cbr-xml-daily.ru/daily_json.js. Выполнение этого запроса возвращает данные от ЦБ РФ о курсах валют в формате JSON.

    3. Нажмите Add option и выберите Response.

    4. В поле Response Format выберите JSON.

    5. В левом верхнем углу нажмите Back to canvas.

  5. Добавьте узел, который будет обрабатывать и форматировать полученные данные.

    1. Справа от предыдущего элемента нажмите + и выберите Code → Code in JavaScript.

    2. В поле Code вставьте код:

      // Receive data from the previous node
      const response = $input.all()[0].json;
      // Extract exchange rates
      const usdRate = response.Valute.USD.Value;
      const eurRate = response.Valute.EUR.Value;
      // Format the result
      return {
      text: `💱 Курс валют от ЦБ РФ:
      🇺🇸 USD: ${usdRate.toFixed(2)}
      🇪🇺 EUR: ${eurRate.toFixed(2)}`
      };
    3. В левом верхнем углу нажмите Back to canvas.

  6. Добавьте узел, который будет отправлять сообщение в Telegram.

    1. Справа от предыдущего элемента нажмите + и выберите Telegram → Send a text message.

    2. В поле Credential to connect with выберите Create new credentials.

    3. В поле Access Token вставьте API-токен вашего бота, полученный от BotFather.

    4. В правом верхем углу нажмите Save и закройте окно добавления токена.

    5. В поле Resource выберите Message.

    6. В поле Operation выберите Send Message.

    7. В поле Chat ID укажите числовой идентификатор чата, полученный на предыдущем шаге. В примере это 989698711.

    8. В поле Text выберите режим Expression и введите {{ $json["text"] }}.

    9. В левом верхнем углу нажмите Back to canvas.

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

../_images/img__currency_n8n_workflow.png

6. Протестируйте работу бота

Чтобы протестировать работу потока, в нижней части рабочей области n8n нажмите Execute workflow. В бот придет сообщение с курсом валют от ЦБ РФ:

../_images/img__currency_tg_results.png

Результат

Вы развернули и настроили платформу для автоматизации n8n на виртуальной машине, создали Telegram-бот для отправки сообщений и рабочий сценарий, в результате которого сервер n8n получает курсы валют с сайта ЦБ РФ и отправляет их в Telegram.

В дальнейшем вы можете развить этот проект, добавив возможность запрашивать через Telegram-бот курс Bitcoin, который нужно будет получать из другого источника.