Gurren API

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"
    }
  ]
}

selfHealEvents n'est présent que si enableSelfHealing é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.

recoveryEvents trace les reconnexions déclenchées par un sentinel : started / succeeded / failed avec 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 un sessionId a é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érez savedSession (aussi émis dans les webhooks automation.completed et job.completed) et repassez-le comme sessionId du run suivant.

Statuts

StatutDescription
pendingCréée, en attente de démarrage
runningEn cours d'exécution
completedTerminée avec succès
failedTerminée en erreur

Phases

Chaque exécution contient une phase par action de l'automation. Les phases ont leurs propres statuts et timestamps :

ChampTypeDescription
actionstringID de l'action
statusstringpending, running, completed, failed
startedAtDateDébut de la phase
endedAtDateFin de la phase
screenshotUrlstringURL du screenshot (si captureAllSteps)
errorstringMessage d'erreur (si échouée)
inputstring | objectValeur consommée par l'action (ex: texte saisi, URL naviguée)
outputstring | objectValeur produite par l'action (ex: texte extrait)
storageKeystringClé 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

  1. Configurez une action extractText avec un storageKey (ex: email)
  2. Déclenchez l'automation via POST /api/v1/automations/:id/trigger
  3. Récupérez l'exécution via GET /api/v1/executions/:id
  4. 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 action navigate peut utiliser https://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.

On this page