Fonction
Exécuter du code JavaScript ou TypeScript personnalisé dans vos workflows
Le bloc Fonction vous permet d'exécuter du code JavaScript ou TypeScript personnalisé dans votre workflow. Utilisez-le pour transformer des données, effectuer des calculs ou implémenter une logique métier non disponible dans d'autres blocs.

Vue d'ensemble
Le bloc Fonction vous permet de :
Transformer des données : convertir des formats, analyser du texte, manipuler des tableaux et des objets
Effectuer des calculs : opérations mathématiques, statistiques, calculs financiers
Implémenter une logique personnalisée : conditions complexes, boucles et algorithmes
Traiter des données externes : analyser des réponses, formater des requêtes, gérer l'authentification
Fonctionnement
Le bloc Fonction exécute votre code dans un environnement sécurisé et isolé :
- Réception des entrées : accédez aux données des blocs précédents via l'objet
input - Exécution du code : exécutez votre code JavaScript/TypeScript
- Renvoi des résultats : utilisez
returnpour transmettre les données au bloc suivant - Gestion des erreurs : gestion des erreurs et journalisation intégrées
Options de configuration
Éditeur de code
Rédigez votre code JavaScript/TypeScript dans un éditeur complet proposant :
- Coloration syntaxique et vérification des erreurs
- Numéros de ligne et correspondance des accolades
- Prise en charge des fonctionnalités JavaScript modernes
- Support natif de
fetch
Accès aux données d'entrée
Utilisez l'objet input pour accéder aux données des blocs précédents :
// Accès aux données des blocs connectés
const userData = <agent.userData>;
const orderData = <agent.orderData>;
// Accès à des champs spécifiques
const customerName = <agent.customer.name>;
const total = <agent.order.total>;Exemples courants
Transformation de données :
// Conversion et mise en forme des données
const formatted = {
name: <agent.user.firstName> + ' ' + <agent.user.lastName>,
email: <agent.user.email>.toLowerCase(),
joinDate: new Date(<agent.user.created>).toLocaleDateString()
};
return formatted;Calculs :
// Calcul de remises et totaux
const subtotal = <agent.items>.reduce((sum, item) => sum + item.price, 0);
const discount = subtotal > 100 ? 0.1 : 0;
const total = subtotal * (1 - discount);
return { subtotal, discount, total };Validation des données :
// Validation du format d'un e-mail
const email = <agent.email>;
const isValid = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
if (!isValid) {
throw new Error('Invalid email format');
}
return { email, isValid };Accès aux résultats
Après l'exécution d'une fonction, vous pouvez accéder à ses sorties :
<function.result>: la valeur retournée par votre fonction<function.stdout>: la sortie de toute instructionconsole.log()de votre code
Fonctionnalités avancées
Support de l'async/await
Utilisez des fonctions asynchrones pour les opérations complexes :
// Exemple de fonction asynchrone
const processData = async () => {
const data = <api.response>;
// Traitement des données avec des opérations asynchrones
const processed = await Promise.all(
data.map(async (item) => {
return {
id: item.id,
processed: true,
timestamp: new Date().toISOString()
};
})
);
return processed;
};
return await processData();Gestion des erreurs
Implémentez une gestion robuste des erreurs :
try {
const result = <api.data>;
if (!result || !result.length) {
throw new Error('No data received');
}
return result.map(item => ({
id: item.id,
name: item.name.trim(),
valid: true
}));
} catch (error) {
console.error('Processing failed:', error.message);
return { error: error.message, valid: false };
}Optimisation des performances
Optimisez le traitement pour les grands ensembles de données :
// Traitement efficace des données
const data = <api.large_dataset>;
// Utilisation de méthodes de tableau efficaces
const processed = data
.filter(item => item.status === 'active')
.map(item => ({
id: item.id,
summary: item.description.substring(0, 100)
}))
.slice(0, 1000); // Limiter les résultats
return processed;Sécurité et limitations
Les fonctions s'exécutent dans un environnement sécurisé soumis aux restrictions suivantes :
- Délai d'exécution : 30 secondes maximum pour éviter les boucles infinies
- Limites de mémoire : mémoire limitée pour prévenir l'épuisement des ressources
- Pas d'accès réseau : les requêtes HTTP ne sont pas autorisées (utilisez des blocs API à la place)
- API limitées : seules les API JavaScript sûres sont disponibles
Entrées et sorties
Code : votre code JavaScript/TypeScript à exécuter
Timeout : durée maximale d'exécution (30 secondes par défaut)
Données d'entrée : toutes les sorties des blocs connectés disponibles via les variables
function.result : la valeur retournée par votre fonction
function.stdout : sortie des instructions
Console.log()de votre codefunction.error : détails de l'erreur si la fonction a échoué
function.execution_time : durée d'exécution
Résultat de la fonction : sortie principale de votre code
Informations de débogage : journaux et détails d'exécution
Accès : disponible dans les blocs suivant la fonction
Exemples d'utilisation
Pipeline de traitement de données
Scénario : transformer une réponse API en données structurées
- Le bloc API récupère les données brutes des clients
- Le bloc Fonction traite et valide les données
- Le bloc Fonction calcule les métriques dérivées
- Le bloc de réponse renvoie les résultats mis en forme
Implémentation de logique métier
Scénario : calculer les scores et niveaux de fidélité
- L'agent récupère l'historique d'achats du client
- Le bloc Fonction calcule les métriques de fidélité
- Le bloc Fonction détermine le niveau du client
- Le bloc Condition route en fonction du niveau
Validation et assainissement des données
Scénario : valider et nettoyer les saisies utilisateur
- Saisie utilisateur reçue depuis un formulaire
- Le bloc Fonction valide le format de l'e-mail et des numéros de téléphone
- Le bloc Fonction assainit et normalise les données
- Le bloc API enregistre les données validées en base
Exemple : calculateur de score de fidélité
// Traitement des données client et calcul du score de fidélité
const { purchaseHistory, accountAge, supportTickets } = <agent>;
// Calcul des métriques
const totalSpent = purchaseHistory.reduce((sum, purchase) => sum + purchase.amount, 0);
const purchaseFrequency = purchaseHistory.length / (accountAge / 365);
const ticketRatio = supportTickets.resolved / supportTickets.total;
// Calcul du score de fidélité (0-100)
const spendScore = Math.min(totalSpent / 1000 * 30, 30);
const frequencyScore = Math.min(purchaseFrequency * 20, 40);
const supportScore = ticketRatio * 30;
const loyaltyScore = Math.round(spendScore + frequencyScore + supportScore);
return {
customer: <agent.name>,
loyaltyScore,
loyaltyTier: loyaltyScore >= 80 ? "Platinum" : loyaltyScore >= 60 ? "Gold" : "Silver",
metrics: { spendScore, frequencyScore, supportScore }
};Bonnes pratiques
- Garder les fonctions focalisées : écrivez des fonctions qui font une seule chose pour faciliter la maintenabilité et le débogage
- Gérer les erreurs de façon élégante : utilisez des blocs try/catch pour gérer les erreurs potentielles et fournir des messages d'erreur explicites
- Tester les cas limites : assurez-vous que votre code gère correctement les entrées inhabituelles, les valeurs null et les cas aux limites
- Optimiser les performances : soyez attentif à la complexité calculatoire et à l'utilisation mémoire pour les grands ensembles de données
- Utiliser
console.log()pour le débogage : exploitez la sortie stdout pour déboguer et surveiller l'exécution de la fonction
