Objectif et prérequis

Repérez les commandes au montant négatif et envoyez un rapport concis à un groupe de contrôle par deux canaux.

Cet exemple utilise des données et paramètres de démonstration. Validez le résultat attendu dans votre propre environnement avant de connecter des destinations de production. Les identifiants demo_* sont illustratifs : sélectionnez vos propres connexions ou sources pédagogiques dans l’éditeur. Le JSON ci-dessous présente la structure des blocs et connexions, pas une archive de flux prête à transférer.

Utilisez des destinataires de test pour vérifier le contenu des messages et les pièces jointes avant d’activer le flux pour les destinataires prévus.

Données d’entrée pédagogiques

orders.csv

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

Blocs, connexions et paramètres exacts

Schéma explicatifAgrandir ↗20. Notifications d’anomalies par courriel et Telegram. Topologie de l’exemple 20 : 6 blocs, 5 connexions. Les identifiants de nœuds et les ports du graphe configuré sont conservés.
Schéma du flux 20

Topologie de l’exemple 20 : 6 blocs, 5 connexions. Les identifiants de nœuds et les ports du graphe configuré sont conservés.

Ajoutez les blocs listés dans le concepteur, ouvrez les propriétés de chacun et définissez ces valeurs. Les noms demo_* désignent les sources et connexions pédagogiques.

BlocParamètre
1
Fichier
src
  • Rôle: source
  • Source: demo_notify_orders
  • Paramètres de lecture:
    • Feuille: CSV
    • Plage: A1:B4
    • La première ligne contient les en-têtes: так
    • Séparateur: ;
2
Routage
router
  • Mode: first
  • Route par défaut: так
  • Routes:
      • Identifiant: invalid
      • Libellé: Від’ємна сума
      • Conditions de sélection:
          • column: Amount
          • Exploitation: lt
          • Valeur: 0
          • Comparaison numérique: так
          • value_mode: constant
3
Répartiteur
split
  • Branches:
      • Identifiant: mail
      • Libellé: Пошта
      • Identifiant: chat
      • Libellé: Telegram
4
Courriel
email
  • Connexion: demo_smtp
  • À: [email protected]
  • Objet: UBC Data Bridge: винятки {{$date}}
  • Texte: Потік {{$flow}}. Кількість винятків: {{$rows}}. {{$table}}
  • Format: text
  • time_zone: Europe/Kyiv
5
Message Telegram
telegram
  • Connexion: demo_telegram
  • recipient_type: auto
  • Conversations: -1000000000000
  • Texte: Потік {{$flow}}: винятків {{$rows}}. {{$table}}
  • parse_mode: none
  • silent: так
  • time_zone: Europe/Kyiv
6
Exportation de données
valid
  • Format: csv
  • Nom du fichier: valid_orders
  • Rôle: download
  • Séparateur: ;
  • Fuseau horaire: Europe/Kyiv

Connexions des ports

  • src out → router in
  • router invalid → split in
  • router else → valid in
  • split mail → email in
  • split chat → telegram in
Configuration complète du graphe en 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"
    }
  ]
}

Résultat attendu

Les lignes pédagogiques produisent 1 anomalie, O2=-15. La branche invalid crée un courriel et un message contenant le nombre 1 et un tableau de cette ligne. valid_orders.csv contient O1=100 et O3=50. Aucune livraison réelle n’est attendue avec les adresses fictives indiquées.

Exécuter et vérifier

  1. Créez vos propres connexions SMTP et Telegram de test ; remplacez l’adresse et l’identifiant de conversation uniquement par des destinataires de test approuvés.
  2. Vérifiez d’abord le routage et le contenu des tableaux dans l’aperçu ; les deux canaux doivent recevoir uniquement O2.
  3. Effectuez une exécution pédagogique avec de vrais identifiants de test et vérifiez le journal de chaque destination et la livraison par les deux canaux.
  4. Répétez la vérification sans montants négatifs : la branche invalid doit rester inactive et aucun message ne doit être créé.

Erreurs courantes

  • [email protected] et -1000000000000 sont des valeurs fictives, pas des destinataires configurés.
  • {{Order}} ou {{$row}} rend un modèle dépendant de la ligne ; le modèle illustré utilise le nombre total et le tableau.
  • Des noms de champs invalides ou absents dans les balises arrêtent la préparation du message.
  • silent=true désactive le son Telegram ; il n’annule pas l’envoi.
  • L’échec d’une livraison par un canal ne prouve pas que l’autre n’a rien envoyé : vérifiez les états individuels avant de réessayer.