Skip to content
Produit

Étendez JieGou à votre façon : outils personnalisés, types d'étapes et hooks de cycle de vie

Définissez des outils webhook, des types d'étapes de workflow sandboxés V8 et des hooks de cycle de vie pour intégrer JieGou à votre infrastructure existante — sans fork requis.

JT
JieGou Team
· · 5 min de lecture

JieGou est livré avec plus de 260 intégrations MCP, 9 fournisseurs LLM et un constructeur de workflows visuel. Mais chaque organisation a des outils uniques, des API internes et des processus qu’une plateforme généraliste ne peut pas anticiper.

Aujourd’hui nous lançons trois fonctionnalités d’extensibilité qui vous permettent d’apporter vos propres capacités dans JieGou — sans forker la base de code ni attendre que nous construisions une intégration.

Outils webhook personnalisés

Définissez un outil supporté par n’importe quel endpoint HTTP. Votre outil devient disponible dans les recettes, workflows et l’agent conversationnel — exactement comme les outils intégrés.

Comment ça fonctionne

  1. Définissez l’outil : Nom, description, schéma d’entrée JSON et URL de l’endpoint
  2. Configurez la requête : Méthode (GET/POST), en-têtes personnalisés (chiffrés), modèle de requête Handlebars optionnel
  3. Mappez la réponse : Expression JSONPath pour extraire la sortie pertinente
  4. Définissez le périmètre : Assignez à des départements spécifiques ou rendez-le disponible pour tout le compte

Exemple : outil de vérification d’inventaire

{
  "name": "check_inventory",
  "description": "Check current inventory levels for a product SKU",
  "inputSchema": {
    "type": "object",
    "properties": {
      "sku": { "type": "string", "description": "Product SKU" }
    },
    "required": ["sku"]
  },
  "endpoint": {
    "url": "https://api.internal.example.com/inventory/{{sku}}",
    "method": "GET",
    "headers": { "Authorization": "Bearer {{env.INVENTORY_API_KEY}}" },
    "timeoutMs": 10000
  },
  "responseMapping": "$.data.quantity"
}

Maintenant n’importe quelle recette ou étape de workflow peut utiliser check_inventory comme outil. Le LLM le voit aux côtés des outils intégrés et l’appelle quand c’est pertinent.

Sécurité

  • HTTPS requis en production
  • Les en-têtes personnalisés sont chiffrés au repos (même AES-256-GCM que les clés BYOK)
  • Toutes les requêtes sortantes passent par l’infrastructure de timeout, retry et limitation de taux de la plateforme
  • Taille de réponse plafonnée à 100 Ko
  • L’exécution d’outils compte dans les limites de taux de votre compte

Les outils webhook personnalisés sont disponibles sur les plans Team et supérieurs.

Types d’étapes de workflow personnalisés

Pour une logique qui va au-delà d’un appel webhook, définissez des types d’étapes personnalisés comme des modules TypeScript qui s’exécutent dans des isolats V8 — entièrement sandboxés sans accès au système de fichiers, au réseau ou au processus hôte.

Le sandbox

Les étapes personnalisées s’exécutent dans des isolats V8 isolated-vm avec des contraintes strictes :

  • Limite mémoire : 128 Mo par exécution
  • Limite de temps CPU : Configurable par étape
  • Pas de require() ou import : Les dépendances sont explicitement injectées
  • Pas de système de fichiers ou réseau : Seules les API fournies par la plateforme sont disponibles

API injectées

Les étapes personnalisées peuvent utiliser un sous-ensemble de capacités de la plateforme, déclarées au moment de la définition :

APICe qu’elle fournit
httpFetch HTTP proxié (respecte les limites de taux)
llmInvocation LLM (utilise la config BYOK du compte, suivi pour la facturation)
firestore_readAccès Firestore en lecture seule (scopé au compte)

Exemple : étape d’agrégation de sentiment

// Custom step: aggregate-sentiment
// Allowed APIs: llm

export async function execute(input: { reviews: string[] }, context: any) {
  const results = await Promise.all(
    input.reviews.map(review =>
      context.llm.invoke(`Rate this review's sentiment from 1-5: "${review}". Reply with just the number.`, { model: 'haiku' })
    )
  );

  const scores = results.map(r => parseInt(r.trim())).filter(n => !isNaN(n));
  const average = scores.reduce((a, b) => a + b, 0) / scores.length;

  return {
    averageSentiment: Math.round(average * 10) / 10,
    totalReviews: scores.length,
    distribution: {
      positive: scores.filter(s => s >= 4).length,
      neutral: scores.filter(s => s === 3).length,
      negative: scores.filter(s => s <= 2).length,
    },
  };
}

Éditez le code dans l’éditeur Monaco intégré, définissez les schémas d’entrée/sortie et testez avec des données d’échantillon avant le déploiement.

Les types d’étapes personnalisés sont disponibles sur les plans Enterprise.

Hooks de cycle de vie

Enregistrez des endpoints webhook qui se déclenchent sur les événements d’exécution de workflows et recettes. Utilisez-les pour intégrer avec Slack, PagerDuty, des tableaux de bord personnalisés ou tout service HTTP.

Événements supportés

ÉvénementQuand il se déclenche
workflow:startL’exécution du workflow commence
workflow:completeLe workflow se termine avec succès
workflow:errorLe workflow échoue
step:startUne étape individuelle commence
step:completeUne étape individuelle se termine
step:errorUne étape individuelle échoue
recipe:startL’exécution de la recette commence
recipe:completeLa recette se termine
approval:requestedPorte d’approbation déclenchée
approval:grantedApprobation donnée
approval:rejectedApprobation refusée

Non-bloquant vs. bloquant

Les hooks non-bloquants (par défaut) sont de type envoi et oubli. La plateforme envoie le webhook et continue l’exécution sans attendre de réponse. Utilisez-les pour les notifications et la journalisation.

Les hooks bloquants mettent l’exécution en pause jusqu’à ce que le webhook réponde (timeout de 10 secondes). La réponse peut modifier le contexte d’exécution. Utilisez-les pour les vérifications préalables ou l’injection de configuration dynamique. Les hooks bloquants ont un disjoncteur — s’ils échouent de manière répétée, ils sont automatiquement désactivés.

Exemple : notification Slack à la fin du workflow

{
  "name": "Slack notify on completion",
  "events": ["workflow:complete", "workflow:error"],
  "webhookUrl": "https://hooks.slack.com/services/T.../B.../xxx",
  "blocking": false
}

Les hooks de cycle de vie sont disponibles sur les plans Team et supérieurs.

Comment ils fonctionnent ensemble

Les trois fonctionnalités d’extensibilité se composent naturellement :

  1. Un outil personnalisé vérifie votre API d’inventaire interne
  2. Une étape personnalisée exécute une logique métier spécialisée dans un sandbox V8
  3. Un hook de cycle de vie notifie votre canal Slack quand le workflow se termine

Les trois respectent le modèle de sécurité existant de la plateforme — RBAC, journalisation d’audit, limitation de taux et périmètre départemental s’appliquent uniformément.

Explorez les fonctionnalités d’extensibilité dans les paramètres de votre compte.

custom-tools lifecycle-hooks extensibility webhooks v8-sandbox enterprise
Partager cet article

Vous avez aime cet article ?

Recevez des astuces workflows, des mises a jour produit et des guides d'automatisation dans votre boite de reception.

No spam. Unsubscribe anytime.