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
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.
| Bloc | Paramètre |
|---|---|
| 1 Fichier src |
|
| 2 Routage router |
|
| 3 Répartiteur split |
|
| 4 Courriel email |
|
| 5 Message Telegram telegram |
|
| 6 Exportation de données valid |
|
Connexions des ports
- src
out→ routerin - router
invalid→ splitin - router
else→ validin - split
mail→ emailin - split
chat→ telegramin
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
- 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.
- Vérifiez d’abord le routage et le contenu des tableaux dans l’aperçu ; les deux canaux doivent recevoir uniquement O2.
- 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.
- 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.