Задача и предварительные условия
Найдите заказы с отрицательной суммой и отправьте краткий отчёт контрольной группе по двум каналам.
В примере используются демонстрационные данные и настройки. Проверьте ожидаемый результат в своей среде до подключения рабочих получателей. Идентификаторы demo_* условны: выберите собственные учебные подключения или источники в редакторе. JSON ниже показывает структуру блоков и связей, а не готовый архив потока для переноса.
Используйте тестовых получателей для проверки текста и вложений перед включением потока для целевых получателей.
Учебные входные данные
orders.csv
Order;Amount
O1;100
O2;-15
O3;50
Блоки, связи и точные настройки
Схема примера 20: блоков — 6, связей — 5. Идентификаторы узлов и порты настроенной схемы сохранены.
Добавьте перечисленные блоки в конструкторе, откройте свойства каждого и задайте эти значения. Имена demo_* обозначают учебные источники и подключения.
| Блок | Настройка |
|---|---|
| 1 Файл src |
|
| 2 Маршрутизация router |
|
| 3 Разветвление split |
|
| 4 Электронная почта email |
|
| 5 Сообщение Telegram telegram |
|
| 6 Экспорт данных valid |
|
Связи портов
- src
out→ routerin - router
invalid→ splitin - router
else→ validin - split
mail→ emailin - split
chat→ telegramin
Полная конфигурация схемы в 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. Фактическая доставка на показанные условные адреса не ожидается.
Запуск и проверка
- Создайте собственные тестовые подключения SMTP и Telegram; замените адрес и ID чата только согласованными тестовыми получателями.
- Сначала проверьте маршрутизацию и таблицы в предпросмотре; оба канала должны получить только O2.
- Выполните учебный запуск с реальными тестовыми учётными данными и проверьте журнал каждого получателя и доставку по обоим каналам.
- Повторите проверку без отрицательных сумм: ветка invalid должна остаться неактивной и сообщения не должны создаваться.
Частые ошибки
- [email protected] и -1000000000000 — условные значения, а не настроенные получатели.
- {{Order}} или {{$row}} делает шаблон зависимым от строки; показанный шаблон использует общее количество и таблицу.
- Некорректные или отсутствующие имена полей в тегах останавливают подготовку сообщения.
- silent=true отключает звук Telegram; он не отменяет отправку.
- Неудачная доставка по одному каналу не доказывает, что другой ничего не отправил: перед повтором проверьте отдельные статусы.