Aktionsverwaltung

Vollständige CRUD-Operationen zum Verwalten von Aktionen in Ihrem mindzieStudio-Projekt. Aktionen sind Workflow-Komponenten, die ausgeführt werden können, um automatisierte Aufgaben durchzuführen.


API-Endpunkte

Methode Endpunkt Beschreibung
GET /api/{tenantId}/{projectId}/action Alle Aktionen auflisten
GET /api/{tenantId}/{projectId}/action/{actionId} Aktionsdetails abrufen
POST /api/{tenantId}/{projectId}/action Aktion erstellen
PUT /api/{tenantId}/{projectId}/action/{actionId} Aktion aktualisieren
DELETE /api/{tenantId}/{projectId}/action/{actionId} Aktion löschen
POST /api/{tenantId}/{projectId}/action/{actionId}/enable Aktion aktivieren
POST /api/{tenantId}/{projectId}/action/{actionId}/disable Aktion deaktivieren

Alle Aktionen auflisten

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

Alle für ein Projekt konfigurierten Aktionen abrufen.

Pfadparameter

Parameter Typ Pflichtfeld Beschreibung
tenantId GUID Ja Ihr Mandantenbezeichner
projectId GUID Ja Ihr Projektbezeichner

Antwort (200 OK)

{
  "actions": [
    {
      "actionId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
      "projectId": "87654321-4321-4321-4321-210987654321",
      "name": "Daily Data Refresh",
      "description": "Aktualisiert täglich Daten aus Quellsystemen",
      "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
}

Aktionsdetails abrufen

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

Detaillierte Informationen zu einer bestimmten Aktion abrufen.

Pfadparameter

Parameter Typ Pflichtfeld Beschreibung
tenantId GUID Ja Ihr Mandantenbezeichner
projectId GUID Ja Ihr Projektbezeichner
actionId GUID Ja Die abzurufende Aktion

Antwort (200 OK)

{
  "actionId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
  "projectId": "87654321-4321-4321-4321-210987654321",
  "name": "Daily Data Refresh",
  "description": "Aktualisiert täglich Daten aus Quellsystemen",
  "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": "Datenaktualisierungsskript ausführen",
      "settings": "{\"script\": \"refresh_data.py\"}",
      "dateCreated": "2024-01-01T10:00:00Z"
    }
  ]
}

Antwortfelder

Feld Typ Beschreibung
actionId GUID Einzigartige Aktions-ID
projectId GUID Projekt, zu dem die Aktion gehört
name string Anzeigename
description string Aktionsbeschreibung
isEnabled boolean Ob die Aktion aktiviert ist
maxRunTime integer Maximale Laufzeit in Sekunden
actionStatus string Aktueller Status (Idle, Running, etc.)
nextRunTime datetime Nächste geplante Ausführung
lastRunTime datetime Zeit der letzten Ausführung
lastRunResult string Ergebnis der letzten Ausführung
triggers array Trigger-Konfigurationen
steps array Definitionen der Aktionsschritte

Aktion erstellen

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

Eine neue Aktion im Projekt erstellen.

Pfadparameter

Parameter Typ Pflichtfeld Beschreibung
tenantId GUID Ja Ihr Mandantenbezeichner
projectId GUID Ja Ihr Projektbezeichner

Anfragekörper

{
  "name": "Weekly Report",
  "description": "Wochenbericht erstellen",
  "isEnabled": true,
  "maxRunTime": 1800,
  "steps": [
    {
      "stepNumber": 1,
      "stepType": "Python",
      "description": "Bericht erstellen",
      "settings": "{\"script\": \"generate_report.py\"}"
    },
    {
      "stepNumber": 2,
      "stepType": "Email",
      "description": "Bericht per E-Mail senden",
      "settings": "{\"recipients\": [\"team@company.com\"]}"
    }
  ],
  "triggers": [
    {
      "triggerType": "WeeklyScheduler",
      "frequency": 1,
      "startDate": "2024-01-08"
    }
  ]
}

Anfragefelder

Feld Typ Pflichtfeld Beschreibung
name string Ja Aktionsname (muss im Projekt einzigartig sein)
description string Nein Aktionsbeschreibung
isEnabled boolean Nein Ob die Aktion aktiviert ist (Standard: true)
maxRunTime integer Nein Maximale Laufzeit in Sekunden (Standard: 3600)
steps array Ja Mindestens ein Schritt erforderlich
triggers array Nein Optionale Trigger-Konfigurationen

Schritt-Objekt

Feld Typ Pflichtfeld Beschreibung
stepNumber integer Nein Ausführungsreihenfolge (wird automatisch vergeben, wenn nicht angegeben)
stepType string Ja Typ: Python, Email, Webhook, etc.
description string Nein Schrittbeschreibung
settings string Ja JSON-Konfiguration für den Schritt

Trigger-Objekt

Feld Typ Pflichtfeld Beschreibung
triggerType string Ja Typ: HourlyScheduler, DailyScheduler, WeeklyScheduler, MonthlyScheduler, EventTrigger
frequency integer Nein Frequenzmultiplikator
startDate date Nein Startdatum für den Zeitplan
eventName string Nein Ereignisname (für EventTrigger)
settings string Nein Zusätzliche Trigger-Einstellungen

Antwort (201 Created)

Gibt die erstellte Aktion mit zugewiesenen IDs zurück.

Fehlerantworten

Konflikt (409) - Doppelte Namen

{
  "Error": "Eine Aktion mit diesem Namen existiert bereits im Projekt"
}

Aktion aktualisieren

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

Eine vorhandene Aktion aktualisieren.

Pfadparameter

Parameter Typ Pflichtfeld Beschreibung
tenantId GUID Ja Ihr Mandantenbezeichner
projectId GUID Ja Ihr Projektbezeichner
actionId GUID Ja Die zu aktualisierende Aktion

Anfragekörper

{
  "name": "Aktualisierter Wochenbericht",
  "description": "Aktualisierte Beschreibung",
  "isEnabled": true,
  "maxRunTime": 2400,
  "steps": [
    {
      "stepId": "22222222-2222-2222-2222-222222222222",
      "stepNumber": 1,
      "stepType": "Python",
      "description": "Aktualisierter Schritt",
      "settings": "{\"script\": \"updated_report.py\"}"
    }
  ],
  "triggers": [
    {
      "triggerId": "11111111-1111-1111-1111-111111111111",
      "triggerType": "DailyScheduler",
      "frequency": 1,
      "startDate": "2024-02-01"
    }
  ]
}

Alle Felder sind optional – nur angegebene Felder werden aktualisiert.

Antwort (200 OK)

Gibt die aktualisierte Aktion zurück.


Aktion löschen

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

Eine Aktion dauerhaft löschen.

Pfadparameter

Parameter Typ Pflichtfeld Beschreibung
tenantId GUID Ja Ihr Mandantenbezeichner
projectId GUID Ja Ihr Projektbezeichner
actionId GUID Ja Die zu löschende Aktion

Antwort (204 No Content)

Leere Antwort bei Erfolg.


Aktion aktivieren

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

Eine deaktivierte Aktion aktivieren.

Antwort (200 OK)

Gibt die aktualisierte Aktion mit isEnabled: true zurück.


Aktion deaktivieren

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

Eine Aktion deaktivieren.

Antwort (200 OK)

Gibt die aktualisierte Aktion mit isEnabled: false zurück.


Implementierungsbeispiele

cURL

# Alle Aktionen auflisten
curl -X GET "https://your-mindzie-instance.com/api/{tenantId}/{projectId}/action" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Aktion erstellen
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": "Daily Report",
    "description": "Erstelle täglichen Bericht",
    "isEnabled": true,
    "steps": [
      {
        "stepNumber": 1,
        "stepType": "Python",
        "description": "Berichtsskript ausführen",
        "settings": "{\"script\": \"daily_report.py\"}"
      }
    ],
    "triggers": [
      {
        "triggerType": "DailyScheduler",
        "frequency": 1,
        "startDate": "2024-01-15"
      }
    ]
  }'

# Aktion aktualisieren
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": "Aktualisierter Tagesbericht"}'

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

# Aktion aktivieren/deaktivieren
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):
        """Alle Aktionen auflisten."""
        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):
        """Aktionsdetails abrufen."""
        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):
        """Eine neue Aktion erstellen."""
        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):
        """Eine Aktion aktualisieren."""
        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):
        """Eine Aktion löschen."""
        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):
        """Eine Aktion aktivieren."""
        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):
        """Eine Aktion deaktivieren."""
        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()

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

# Aktion erstellen
action = manager.create_action(
    name='Daily Report',
    description='Erstelle täglichen Analysebericht',
    steps=[
        {
            'stepNumber': 1,
            'stepType': 'Python',
            'description': 'Bericht generieren',
            'settings': '{"script": "daily_report.py"}'
        }
    ],
    triggers=[
        {
            'triggerType': 'DailyScheduler',
            'frequency': 1,
            'startDate': '2024-01-15'
        }
    ]
)
print(f"Aktions-ID erstellt: {action['actionId']}")

# Deaktivieren und dann aktivieren
manager.disable_action(action['actionId'])
print("Aktion deaktiviert")

manager.enable_action(action['actionId'])
print("Aktion aktiviert")

# Aktion aktualisieren
updated = manager.update_action(action['actionId'], name='Aktualisierter Tagesbericht')

# Aktion löschen
manager.delete_action(action['actionId'])
print("Aktion gelöscht")

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(`Fehler: ${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(`Fehler: ${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(`Fehler: ${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(`Fehler: ${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(`Fehler: ${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(`Fehler: ${response.status}`);
    return response.json();
  }
}

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

// Aktion erstellen
const action = await manager.createAction(
  'Daily Report',
  [{ stepNumber: 1, stepType: 'Python', description: 'Skript ausführen', settings: '{}' }],
  'Täglichen Bericht generieren',
  [{ triggerType: 'DailyScheduler', frequency: 1, startDate: '2024-01-15' }]
);

// Aktivieren/Deaktivieren umschalten
await manager.disableAction(action.actionId);
await manager.enableAction(action.actionId);

// Löschen
await manager.deleteAction(action.actionId);

Beste Praxis

  1. Eindeutige Namen: Aktionsnamen müssen innerhalb eines Projekts eindeutig sein
  2. Schritt-Reihenfolge: Schritte werden in der Reihenfolge von stepNumber ausgeführt
  3. Aktivieren/Deaktivieren: Verwenden Sie die Aktivieren-/Deaktivieren-Endpunkte statt Löschen und Neuerstellen
  4. Trigger: Verwenden Sie geeignete Trigger-Typen für Ihre Zeitplanungsanforderungen
  5. MaxRunTime: Setzen Sie angemessene Zeitlimits, um unkontrollierte Aktionen zu verhindern