Exécutions
Suivre le résultat d'une automation déclenchée via l'API.
Exécutions
Quand vous déclenchez une automation, elle s'exécute en arrière-plan. La réponse contient un executionId que vous pouvez utiliser pour suivre le résultat.
Lister les exécutions
GET /api/v1/executions # toutes vos exécutions (récentes)
GET /api/v1/executions?automationId=<id> # d'une automation précise
GET /api/v1/executions?workspaceId=<id> # des automations d'un workspace
Scope requis : automation:read. Détail d'une exécution : GET /api/v1/executions/:id.
Structure d'une exécution
{
"_id": "777b2c3d4e5f6a7b8c9d0eee",
"automation": "665a1b2c3d4e5f6a7b8c9d0e",
"status": "completed",
"phases": [
{
"action": "aaa...",
"status": "completed",
"startedAt": "2024-06-01T10:00:01.000Z",
"endedAt": "2024-06-01T10:00:03.000Z"
},
{
"action": "bbb...",
"status": "completed",
"startedAt": "2024-06-01T10:00:03.000Z",
"endedAt": "2024-06-01T10:00:05.000Z"
}
],
"startedAt": "2024-06-01T10:00:00.000Z",
"endedAt": "2024-06-01T10:00:05.000Z",
"error": null,
"captureAllSteps": false,
"usedSession": "888b2c3d4e5f6a7b8c9d0fff",
"savedSession": "999c3d4e5f6a7b8c9d0e1fff",
"extractedData": {
"email": "john@example.com",
"prix": "29.99€"
},
"selfHealEvents": [
{
"type": "success",
"message": "Self-heal réussi : « Accepter les cookies »",
"timestamp": "2024-06-01T10:00:02.000Z"
}
],
"recoveryEvents": [
{
"type": "started",
"sentinel": "Déconnexion WTTJ",
"message": "Trap « Déconnexion WTTJ » détecté → recovery (attempt 1/2)",
"timestamp": "2024-06-01T10:00:04.000Z"
},
{
"type": "succeeded",
"sentinel": "Déconnexion WTTJ",
"message": "Recovery réussi — session restaurée",
"timestamp": "2024-06-01T10:00:09.000Z"
}
]
}
selfHealEventsn'est présent que sienableSelfHealingétait actif et qu'une réparation a eu lieu : c'est la trace de ce que l'IA a fait (observe/act, sélecteur récupéré, succès/échec). Voir Options de déclenchement.
recoveryEventstrace les reconnexions déclenchées par un sentinel :started/succeeded/failedavec le nom de la sentinelle. Présent seulement si une déconnexion/blocage a été détecté en cours de run.
Sessions :
usedSession= la session restaurée au démarrage (si unsessionIda été fourni) ;savedSession= la session sauvegardée à la fin du run (état final, ex. connecté). Pour chaîner une session connectée d'un run au suivant, récupérezsavedSession(aussi émis dans les webhooksautomation.completedetjob.completed) et repassez-le commesessionIddu run suivant.
Statuts
| Statut | Description |
|---|---|
pending | Créée, en attente de démarrage |
running | En cours d'exécution |
completed | Terminée avec succès |
failed | Terminée en erreur |
Phases
Chaque exécution contient une phase par action de l'automation. Les phases ont leurs propres statuts et timestamps :
| Champ | Type | Description |
|---|---|---|
action | string | ID de l'action |
status | string | pending, running, completed, failed |
startedAt | Date | Début de la phase |
endedAt | Date | Fin de la phase |
screenshotUrl | string | URL du screenshot (si captureAllSteps) |
error | string | Message d'erreur (si échouée) |
input | string | object | Valeur consommée par l'action (ex: texte saisi, URL naviguée) |
output | string | object | Valeur produite par l'action (ex: texte extrait) |
storageKey | string | Clé de stockage de l'output (pour {{extract:key}}) |
Données extraites
Quand votre automation contient des actions extractText, les données extraites sont disponibles à deux niveaux :
Au niveau de l'exécution : extractedData
Le champ extractedData agrège tous les outputs nommés de l'exécution dans un objet clé-valeur :
{
"extractedData": {
"email": "john@example.com",
"prix": "29.99€"
}
}
Les clés correspondent au storageKey configuré sur chaque action extractText. Si aucun storageKey n'est défini, la clé par défaut est action_N (N = index de l'action).
Au niveau de chaque phase
Chaque phase contient aussi ses données individuelles :
{
"action": "aaa...",
"status": "completed",
"output": "john@example.com",
"storageKey": "email",
"input": "https://example.com/profile"
}
Workflow complet
- Configurez une action
extractTextavec unstorageKey(ex:email) - Déclenchez l'automation via
POST /api/v1/automations/:id/trigger - Récupérez l'exécution via
GET /api/v1/executions/:id - Lisez les données dans
execution.extractedData.email
# Déclencher
curl -X POST https://api.gurren.leandre.io/api/v1/automations/665a.../trigger \
-H "x-api-key: gfac_votre_cle"
# Récupérer les données extraites
curl https://api.gurren.leandre.io/api/v1/executions/777b.../ \
-H "x-api-key: gfac_votre_cle" \
| jq '.extractedData'
# Résultat
# { "email": "john@example.com", "prix": "29.99€" }
Les données extraites peuvent aussi être réutilisées entre actions au sein d'une même automation via la syntaxe
{{extract:storageKey}}. Par exemple, une actionnavigatepeut utiliserhttps://example.com/{{extract:email}}comme URL.
Notifications
Quand une exécution atteint un statut final (completed ou failed), une notification est automatiquement envoyée (email et/ou in-app selon vos préférences dans le dashboard).
Pour une intégration programmatique, vous pouvez configurer des webhooks pour recevoir des callbacks HTTP sur les événements automation.completed, automation.failed, etc.