Задача и предварительные условия

Найдите заказы с отрицательной суммой и отправьте краткий отчёт контрольной группе по двум каналам.

В примере используются демонстрационные данные и настройки. Проверьте ожидаемый результат в своей среде до подключения рабочих получателей. Идентификаторы demo_* условны: выберите собственные учебные подключения или источники в редакторе. JSON ниже показывает структуру блоков и связей, а не готовый архив потока для переноса.

Используйте тестовых получателей для проверки текста и вложений перед включением потока для целевых получателей.

Учебные входные данные

orders.csv

Order;Amount
O1;100
O2;-15
O3;50

Блоки, связи и точные настройки

Поясняющая схемаУвеличить ↗20. Уведомления об исключениях по почте и в Telegram. Схема примера 20: 6 блоков, 5 связей. Идентификаторы узлов и порты настроенной схемы сохранены.
Схема потока 20

Схема примера 20: блоков — 6, связей — 5. Идентификаторы узлов и порты настроенной схемы сохранены.

Добавьте перечисленные блоки в конструкторе, откройте свойства каждого и задайте эти значения. Имена demo_* обозначают учебные источники и подключения.

БлокНастройка
1
Файл
src
  • Роль: source
  • Источник: demo_notify_orders
  • Настройки чтения:
    • Лист: CSV
    • Диапазон: A1:B4
    • Первая строка — заголовок: так
    • Разделитель: ;
2
Маршрутизация
router
  • Режим: first
  • Маршрут по умолчанию: так
  • Маршруты:
      • Идентификатор: invalid
      • Подпись: Від’ємна сума
      • Условия отбора:
          • column: Amount
          • Эксплуатация: lt
          • Значение: 0
          • Числовое сравнение: так
          • value_mode: constant
3
Разветвление
split
  • Ветки:
      • Идентификатор: mail
      • Подпись: Пошта
      • Идентификатор: chat
      • Подпись: Telegram
4
Электронная почта
email
  • Подключение: demo_smtp
  • Кому: [email protected]
  • Тема: UBC Data Bridge: винятки {{$date}}
  • Текст: Потік {{$flow}}. Кількість винятків: {{$rows}}. {{$table}}
  • Формат: text
  • time_zone: Europe/Kyiv
5
Сообщение Telegram
telegram
  • Подключение: demo_telegram
  • recipient_type: auto
  • Чаты: -1000000000000
  • Текст: Потік {{$flow}}: винятків {{$rows}}. {{$table}}
  • parse_mode: none
  • silent: так
  • time_zone: Europe/Kyiv
6
Экспорт данных
valid
  • Формат: csv
  • Имя файла: valid_orders
  • Назначение: download
  • Разделитель: ;
  • Часовой пояс: Europe/Kyiv

Связи портов

  • src out → router in
  • router invalid → split in
  • router else → valid in
  • split mail → email in
  • split chat → telegram in
Полная конфигурация схемы в JSON
{
  "version": 3,
  "nodes": [
    {
      "id": "src",
      "type": "file",
      "label": "src",
      "config": {
        "role": "source",
        "source_id": "demo_notify_orders",
        "options": {
          "sheet": "CSV",
          "range": "A1:B4",
          "header": true,
          "delimiter": ";"
        }
      }
    },
    {
      "id": "router",
      "type": "router",
      "label": "router",
      "config": {
        "mode": "first",
        "default_route": true,
        "routes": [
          {
            "id": "invalid",
            "label": "Від’ємна сума",
            "predicates": [
              {
                "column": "Amount",
                "op": "lt",
                "value": 0,
                "numeric": true,
                "value_mode": "constant"
              }
            ]
          }
        ]
      }
    },
    {
      "id": "split",
      "type": "splitter",
      "label": "split",
      "config": {
        "branches": [
          {
            "id": "mail",
            "label": "Пошта"
          },
          {
            "id": "chat",
            "label": "Telegram"
          }
        ]
      }
    },
    {
      "id": "email",
      "type": "email",
      "label": "email",
      "config": {
        "connection_id": "demo_smtp",
        "to": "[email protected]",
        "subject": "UBC Data Bridge: винятки {{$date}}",
        "body": "Потік {{$flow}}. Кількість винятків: {{$rows}}.\n{{$table}}",
        "format": "text",
        "time_zone": "Europe/Kyiv"
      }
    },
    {
      "id": "telegram",
      "type": "telegram",
      "label": "telegram",
      "config": {
        "connection_id": "demo_telegram",
        "recipient_type": "auto",
        "chats": "-1000000000000",
        "text": "Потік {{$flow}}: винятків {{$rows}}.\n{{$table}}",
        "parse_mode": "none",
        "silent": true,
        "time_zone": "Europe/Kyiv"
      }
    },
    {
      "id": "valid",
      "type": "export",
      "label": "valid",
      "config": {
        "format": "csv",
        "filename": "valid_orders",
        "destination": "download",
        "delimiter": ";",
        "timezone": "Europe/Kyiv"
      }
    }
  ],
  "edges": [
    {
      "source": "src",
      "target": "router",
      "source_port": "out",
      "target_port": "in"
    },
    {
      "source": "router",
      "target": "split",
      "source_port": "invalid",
      "target_port": "in"
    },
    {
      "source": "router",
      "target": "valid",
      "source_port": "else",
      "target_port": "in"
    },
    {
      "source": "split",
      "target": "email",
      "source_port": "mail",
      "target_port": "in"
    },
    {
      "source": "split",
      "target": "telegram",
      "source_port": "chat",
      "target_port": "in"
    }
  ]
}

Ожидаемый результат

Учебные строки дают 1 исключение, O2=-15. Ветка invalid создаёт письмо и сообщение с количеством 1 и таблицей этой строки. valid_orders.csv содержит O1=100 и O3=50. Фактическая доставка на показанные условные адреса не ожидается.

Запуск и проверка

  1. Создайте собственные тестовые подключения SMTP и Telegram; замените адрес и ID чата только согласованными тестовыми получателями.
  2. Сначала проверьте маршрутизацию и таблицы в предпросмотре; оба канала должны получить только O2.
  3. Выполните учебный запуск с реальными тестовыми учётными данными и проверьте журнал каждого получателя и доставку по обоим каналам.
  4. Повторите проверку без отрицательных сумм: ветка invalid должна остаться неактивной и сообщения не должны создаваться.

Частые ошибки

  • [email protected] и -1000000000000 — условные значения, а не настроенные получатели.
  • {{Order}} или {{$row}} делает шаблон зависимым от строки; показанный шаблон использует общее количество и таблицу.
  • Некорректные или отсутствующие имена полей в тегах останавливают подготовку сообщения.
  • silent=true отключает звук Telegram; он не отменяет отправку.
  • Неудачная доставка по одному каналу не доказывает, что другой ничего не отправил: перед повтором проверьте отдельные статусы.