Завдання та передумови

Знайти замовлення з від’ємною сумою та надіслати контрольній групі стислий звіт двома каналами.

Приклад містить навчальні дані та налаштування. Виберіть власні тестові джерела й підключення замість ідентифікаторів demo_*, відтворіть очікуваний результат і лише потім використовуйте робочі об’єкти.

Приклад описує налаштування, а не надає дозвіл надсилати повідомлення реальним людям. Жодних листів чи повідомлень під час підготовки документації не надсилалося.

Навчальні вхідні дані

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; воно не скасовує надсилання.
  • Невдала доставка одного каналу не доводить, що другий не відправив повідомлення: перевіряйте окремі статуси перед повтором.