Gestion des Actions

Opérations CRUD complètes pour gérer les actions dans votre projet mindzieStudio. Les actions sont des composants de workflow pouvant être exécutés pour réaliser des tâches automatisées.


Points de terminaison API

Méthode Point de terminaison Description
GET /api/{tenantId}/{projectId}/action Lister toutes les actions
GET /api/{tenantId}/{projectId}/action/{actionId} Obtenir les détails d'une action
POST /api/{tenantId}/{projectId}/action Créer une action
PUT /api/{tenantId}/{projectId}/action/{actionId} Mettre à jour une action
DELETE /api/{tenantId}/{projectId}/action/{actionId} Supprimer une action
POST /api/{tenantId}/{projectId}/action/{actionId}/enable Activer une action
POST /api/{tenantId}/{projectId}/action/{actionId}/disable Désactiver une action

Lister toutes les actions

GET /api/{tenantId}/{projectId}/action

Récupère toutes les actions configurées pour un projet.

Paramètres de chemin

Paramètre Type Obligatoire Description
tenantId GUID Oui Identifiant de votre locataire
projectId GUID Oui Identifiant de votre projet

Réponse (200 OK)

{
  "actions": [
    {
      "actionId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
      "projectId": "87654321-4321-4321-4321-210987654321",
      "name": "Actualisation quotidienne des données",
      "description": "Actualise les données des systèmes sources quotidiennement",
      "isEnabled": true,
      "maxRunTime": 3600,
      "actionStatus": "Idle",
      "nextRunTime": "2024-01-16T06:00:00Z",
      "lastRunTime": "2024-01-15T06:00:00Z",
      "lastRunResult": "Success",
      "dateCreated": "2024-01-01T10:00:00Z",
      "dateModified": "2024-01-15T14:30:00Z",
      "createdBy": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "modifiedBy": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "triggers": [...],
      "steps": [...]
    }
  ],
  "totalCount": 1
}

Obtenir les détails d'une action

GET /api/{tenantId}/{projectId}/action/{actionId}

Récupère les informations détaillées d'une action spécifique.

Paramètres de chemin

Paramètre Type Obligatoire Description
tenantId GUID Oui Identifiant de votre locataire
projectId GUID Oui Identifiant de votre projet
actionId GUID Oui L'action à récupérer

Réponse (200 OK)

{
  "actionId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
  "projectId": "87654321-4321-4321-4321-210987654321",
  "name": "Actualisation quotidienne des données",
  "description": "Actualise les données des systèmes sources quotidiennement",
  "isEnabled": true,
  "maxRunTime": 3600,
  "actionStatus": "Idle",
  "nextRunTime": "2024-01-16T06:00:00Z",
  "lastRunTime": "2024-01-15T06:00:00Z",
  "lastRunResult": "Success",
  "dateCreated": "2024-01-01T10:00:00Z",
  "dateModified": "2024-01-15T14:30:00Z",
  "createdBy": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "modifiedBy": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "triggers": [
    {
      "triggerId": "11111111-1111-1111-1111-111111111111",
      "actionId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
      "triggerType": "DailyScheduler",
      "settings": "{}",
      "frequency": 1,
      "eventName": null,
      "startDate": "2024-01-01",
      "dateCreated": "2024-01-01T10:00:00Z"
    }
  ],
  "steps": [
    {
      "stepId": "22222222-2222-2222-2222-222222222222",
      "actionId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
      "stepNumber": 1,
      "stepType": "Python",
      "description": "Exécuter le script d'actualisation des données",
      "settings": "{\"script\": \"refresh_data.py\"}",
      "dateCreated": "2024-01-01T10:00:00Z"
    }
  ]
}

Champs de réponse

Champ Type Description
actionId GUID Identifiant unique de l'action
projectId GUID Projet auquel appartient cette action
name string Nom affiché
description string Description de l'action
isEnabled boolean Indique si l'action est activée
maxRunTime entier Durée maximale d'exécution en secondes
actionStatus string Statut actuel (Idle, Running, etc.)
nextRunTime datetime Prochaine planification d'exécution
lastRunTime datetime Dernière exécution
lastRunResult string Résultat de la dernière exécution
triggers tableau Configurations des déclencheurs
steps tableau Définitions des étapes de l'action

Créer une action

POST /api/{tenantId}/{projectId}/action

Créer une nouvelle action dans le projet.

Paramètres de chemin

Paramètre Type Obligatoire Description
tenantId GUID Oui Identifiant de votre locataire
projectId GUID Oui Identifiant de votre projet

Corps de la requête

{
  "name": "Rapport hebdomadaire",
  "description": "Générer le rapport d'analyse hebdomadaire",
  "isEnabled": true,
  "maxRunTime": 1800,
  "steps": [
    {
      "stepNumber": 1,
      "stepType": "Python",
      "description": "Générer le rapport",
      "settings": "{\"script\": \"generate_report.py\"}"
    },
    {
      "stepNumber": 2,
      "stepType": "Email",
      "description": "Envoyer le rapport par email",
      "settings": "{\"recipients\": [\"team@company.com\"]}"
    }
  ],
  "triggers": [
    {
      "triggerType": "WeeklyScheduler",
      "frequency": 1,
      "startDate": "2024-01-08"
    }
  ]
}

Champs de la requête

Champ Type Obligatoire Description
name string Oui Nom de l'action (doit être unique dans le projet)
description string Non Description de l'action
isEnabled boolean Non Indique si l'action est activée (par défaut : true)
maxRunTime integer Non Durée maximale d'exécution en secondes (par défaut : 3600)
steps tableau Oui Au moins une étape est requise
triggers tableau Non Configurations optionnelles des déclencheurs

Objet Étape

Champ Type Obligatoire Description
stepNumber integer Non Ordre d'exécution (attribué automatiquement si non spécifié)
stepType string Oui Type : Python, Email, Webhook, etc.
description string Non Description de l'étape
settings string Oui Configuration JSON de l'étape

Objet Déclencheur

Champ Type Obligatoire Description
triggerType string Oui Type : HourlyScheduler, DailyScheduler, WeeklyScheduler, MonthlyScheduler, EventTrigger
frequency integer Non Multiplicateur de fréquence
startDate date Non Date de démarrage du planning
eventName string Non Nom de l'événement (pour EventTrigger)
settings string Non Paramètres supplémentaires du déclencheur

Réponse (201 Created)

Retourne l'action créée avec les ID assignés.

Réponses d'erreur

Conflit (409) - Nom en double

{
  "Error": "Une action avec ce nom existe déjà dans le projet"
}

Mettre à jour une action

PUT /api/{tenantId}/{projectId}/action/{actionId}

Mettre à jour une action existante.

Paramètres de chemin

Paramètre Type Obligatoire Description
tenantId GUID Oui Identifiant de votre locataire
projectId GUID Oui Identifiant de votre projet
actionId GUID Oui L'action à mettre à jour

Corps de la requête

{
  "name": "Rapport hebdomadaire mis à jour",
  "description": "Description mise à jour",
  "isEnabled": true,
  "maxRunTime": 2400,
  "steps": [
    {
      "stepId": "22222222-2222-2222-2222-222222222222",
      "stepNumber": 1,
      "stepType": "Python",
      "description": "Étape mise à jour",
      "settings": "{\"script\": \"updated_report.py\"}"
    }
  ],
  "triggers": [
    {
      "triggerId": "11111111-1111-1111-1111-111111111111",
      "triggerType": "DailyScheduler",
      "frequency": 1,
      "startDate": "2024-02-01"
    }
  ]
}

Tous les champs sont optionnels - seules les valeurs fournies seront mises à jour.

Réponse (200 OK)

Retourne l'action mise à jour.


Supprimer une action

DELETE /api/{tenantId}/{projectId}/action/{actionId}

Supprimer définitivement une action.

Paramètres de chemin

Paramètre Type Obligatoire Description
tenantId GUID Oui Identifiant de votre locataire
projectId GUID Oui Identifiant de votre projet
actionId GUID Oui L'action à supprimer

Réponse (204 No Content)

Réponse vide en cas de succès.


Activer une action

POST /api/{tenantId}/{projectId}/action/{actionId}/enable

Activer une action désactivée.

Réponse (200 OK)

Retourne l'action mise à jour avec isEnabled: true.


Désactiver une action

POST /api/{tenantId}/{projectId}/action/{actionId}/disable

Désactiver une action.

Réponse (200 OK)

Retourne l'action mise à jour avec isEnabled: false.


Exemples d'implémentation

cURL

# Lister toutes les actions
curl -X GET "https://your-mindzie-instance.com/api/{tenantId}/{projectId}/action" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Créer une action
curl -X POST "https://your-mindzie-instance.com/api/{tenantId}/{projectId}/action" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Rapport quotidien",
    "description": "Générer le rapport quotidien",
    "isEnabled": true,
    "steps": [
      {
        "stepNumber": 1,
        "stepType": "Python",
        "description": "Exécuter le script de rapport",
        "settings": "{\"script\": \"daily_report.py\"}"
      }
    ],
    "triggers": [
      {
        "triggerType": "DailyScheduler",
        "frequency": 1,
        "startDate": "2024-01-15"
      }
    ]
  }'

# Mettre à jour une action
curl -X PUT "https://your-mindzie-instance.com/api/{tenantId}/{projectId}/action/{actionId}" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Rapport quotidien mis à jour"}'

# Supprimer une action
curl -X DELETE "https://your-mindzie-instance.com/api/{tenantId}/{projectId}/action/{actionId}" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Activer / désactiver une action
curl -X POST "https://your-mindzie-instance.com/api/{tenantId}/{projectId}/action/{actionId}/enable" \
  -H "Authorization: Bearer YOUR_API_KEY"

curl -X POST "https://your-mindzie-instance.com/api/{tenantId}/{projectId}/action/{actionId}/disable" \
  -H "Authorization: Bearer YOUR_API_KEY"

Python

import requests

BASE_URL = 'https://your-mindzie-instance.com'
TENANT_ID = '12345678-1234-1234-1234-123456789012'
PROJECT_ID = '87654321-4321-4321-4321-210987654321'

class ActionManager:
    def __init__(self, api_key):
        self.headers = {
            'Authorization': f'Bearer {api_key}',
            'Content-Type': 'application/json'
        }

    def list_actions(self):
        """Lister toutes les actions."""
        url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/action'
        response = requests.get(url, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def get_action(self, action_id):
        """Obtenir les détails d'une action."""
        url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/action/{action_id}'
        response = requests.get(url, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def create_action(self, name, steps, description=None, triggers=None):
        """Créer une nouvelle action."""
        url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/action'
        data = {
            'name': name,
            'description': description,
            'isEnabled': True,
            'steps': steps,
            'triggers': triggers or []
        }
        response = requests.post(url, json=data, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def update_action(self, action_id, **kwargs):
        """Mettre à jour une action."""
        url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/action/{action_id}'
        response = requests.put(url, json=kwargs, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def delete_action(self, action_id):
        """Supprimer une action."""
        url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/action/{action_id}'
        response = requests.delete(url, headers=self.headers)
        response.raise_for_status()

    def enable_action(self, action_id):
        """Activer une action."""
        url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/action/{action_id}/enable'
        response = requests.post(url, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def disable_action(self, action_id):
        """Désactiver une action."""
        url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/action/{action_id}/disable'
        response = requests.post(url, headers=self.headers)
        response.raise_for_status()
        return response.json()

# Utilisation
manager = ActionManager('your-api-key')

# Créer une action
action = manager.create_action(
    name='Rapport quotidien',
    description='Générer un rapport d\'analyse quotidien',
    steps=[
        {
            'stepNumber': 1,
            'stepType': 'Python',
            'description': 'Générer le rapport',
            'settings': '{"script": "daily_report.py"}'
        }
    ],
    triggers=[
        {
            'triggerType': 'DailyScheduler',
            'frequency': 1,
            'startDate': '2024-01-15'
        }
    ]
)
print(f"Action créée : {action['actionId']}")

# Désactiver puis activer
manager.disable_action(action['actionId'])
print("Action désactivée")

manager.enable_action(action['actionId'])
print("Action activée")

# Mettre à jour l'action
updated = manager.update_action(action['actionId'], name='Rapport quotidien mis à jour')

# Supprimer l'action
manager.delete_action(action['actionId'])
print("Action supprimée")

JavaScript/Node.js

const BASE_URL = 'https://your-mindzie-instance.com';
const TENANT_ID = '12345678-1234-1234-1234-123456789012';
const PROJECT_ID = '87654321-4321-4321-4321-210987654321';

class ActionManager {
  constructor(apiKey) {
    this.headers = {
      'Authorization': `Bearer ${apiKey}`,
      'Content-Type': 'application/json'
    };
  }

  async listActions() {
    const url = `${BASE_URL}/api/${TENANT_ID}/${PROJECT_ID}/action`;
    const response = await fetch(url, { headers: this.headers });
    if (!response.ok) throw new Error(`Échec : ${response.status}`);
    return response.json();
  }

  async createAction(name, steps, description = null, triggers = []) {
    const url = `${BASE_URL}/api/${TENANT_ID}/${PROJECT_ID}/action`;
    const response = await fetch(url, {
      method: 'POST',
      headers: this.headers,
      body: JSON.stringify({ name, description, isEnabled: true, steps, triggers })
    });
    if (!response.ok) throw new Error(`Échec : ${response.status}`);
    return response.json();
  }

  async updateAction(actionId, updates) {
    const url = `${BASE_URL}/api/${TENANT_ID}/${PROJECT_ID}/action/${actionId}`;
    const response = await fetch(url, {
      method: 'PUT',
      headers: this.headers,
      body: JSON.stringify(updates)
    });
    if (!response.ok) throw new Error(`Échec : ${response.status}`);
    return response.json();
  }

  async deleteAction(actionId) {
    const url = `${BASE_URL}/api/${TENANT_ID}/${PROJECT_ID}/action/${actionId}`;
    const response = await fetch(url, {
      method: 'DELETE',
      headers: this.headers
    });
    if (!response.ok) throw new Error(`Échec : ${response.status}`);
  }

  async enableAction(actionId) {
    const url = `${BASE_URL}/api/${TENANT_ID}/${PROJECT_ID}/action/${actionId}/enable`;
    const response = await fetch(url, { method: 'POST', headers: this.headers });
    if (!response.ok) throw new Error(`Échec : ${response.status}`);
    return response.json();
  }

  async disableAction(actionId) {
    const url = `${BASE_URL}/api/${TENANT_ID}/${PROJECT_ID}/action/${actionId}/disable`;
    const response = await fetch(url, { method: 'POST', headers: this.headers });
    if (!response.ok) throw new Error(`Échec : ${response.status}`);
    return response.json();
  }
}

// Utilisation
const manager = new ActionManager('your-api-key');

// Créer une action
const action = await manager.createAction(
  'Rapport quotidien',
  [{ stepNumber: 1, stepType: 'Python', description: 'Exécuter le script', settings: '{}' }],
  'Générer un rapport quotidien',
  [{ triggerType: 'DailyScheduler', frequency: 1, startDate: '2024-01-15' }]
);

// Activer/désactiver
await manager.disableAction(action.actionId);
await manager.enableAction(action.actionId);

// Supprimer
await manager.deleteAction(action.actionId);

Bonnes pratiques

  1. Noms uniques : Les noms d'action doivent être uniques dans un projet
  2. Ordre des étapes : Les étapes s'exécutent dans l'ordre de stepNumber
  3. Activer/Désactiver : Utilisez les points de terminaison pour activer/désactiver plutôt que supprimer et recréer
  4. Déclencheurs : Choisissez les types de déclencheurs adaptés à vos besoins de planification
  5. MaxRunTime : Définissez des délais raisonnables pour éviter les actions incontrôlées