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
- Définissez l’outil : Nom, description, schéma d’entrée JSON et URL de l’endpoint
- Configurez la requête : Méthode (GET/POST), en-têtes personnalisés (chiffrés), modèle de requête Handlebars optionnel
- Mappez la réponse : Expression JSONPath pour extraire la sortie pertinente
- 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()ouimport: 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 :
| API | Ce qu’elle fournit |
|---|---|
http | Fetch HTTP proxié (respecte les limites de taux) |
llm | Invocation LLM (utilise la config BYOK du compte, suivi pour la facturation) |
firestore_read | Accè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énement | Quand il se déclenche |
|---|---|
workflow:start | L’exécution du workflow commence |
workflow:complete | Le workflow se termine avec succès |
workflow:error | Le workflow échoue |
step:start | Une étape individuelle commence |
step:complete | Une étape individuelle se termine |
step:error | Une étape individuelle échoue |
recipe:start | L’exécution de la recette commence |
recipe:complete | La recette se termine |
approval:requested | Porte d’approbation déclenchée |
approval:granted | Approbation donnée |
approval:rejected | Approbation 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 :
- Un outil personnalisé vérifie votre API d’inventaire interne
- Une étape personnalisée exécute une logique métier spécialisée dans un sandbox V8
- 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.