Gestión de Acciones
Operaciones CRUD completas para gestionar acciones en tu proyecto mindzieStudio. Las acciones son componentes del flujo de trabajo que se pueden ejecutar para realizar tareas automatizadas.
Endpoints de API
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /api/{tenantId}/{projectId}/action |
Listar todas las acciones |
| GET | /api/{tenantId}/{projectId}/action/{actionId} |
Obtener detalles de una acción |
| POST | /api/{tenantId}/{projectId}/action |
Crear acción |
| PUT | /api/{tenantId}/{projectId}/action/{actionId} |
Actualizar acción |
| DELETE | /api/{tenantId}/{projectId}/action/{actionId} |
Eliminar acción |
| POST | /api/{tenantId}/{projectId}/action/{actionId}/enable |
Habilitar acción |
| POST | /api/{tenantId}/{projectId}/action/{actionId}/disable |
Deshabilitar acción |
Listar Todas las Acciones
GET /api/{tenantId}/{projectId}/action
Recuperar todas las acciones configuradas para un proyecto.
Parámetros de Ruta
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
tenantId |
GUID | Sí | Identificador de tu tenant |
projectId |
GUID | Sí | Identificador de tu proyecto |
Respuesta (200 OK)
{
"actions": [
{
"actionId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"projectId": "87654321-4321-4321-4321-210987654321",
"name": "Daily Data Refresh",
"description": "Refreshes data from source systems daily",
"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
}
Obtener Detalles de una Acción
GET /api/{tenantId}/{projectId}/action/{actionId}
Recuperar información detallada sobre una acción específica.
Parámetros de Ruta
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
tenantId |
GUID | Sí | Identificador de tu tenant |
projectId |
GUID | Sí | Identificador de tu proyecto |
actionId |
GUID | Sí | Acción a recuperar |
Respuesta (200 OK)
{
"actionId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"projectId": "87654321-4321-4321-4321-210987654321",
"name": "Daily Data Refresh",
"description": "Refreshes data from source systems daily",
"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": "Execute data refresh script",
"settings": "{\"script\": \"refresh_data.py\"}",
"dateCreated": "2024-01-01T10:00:00Z"
}
]
}
Campos de la Respuesta
| Campo | Tipo | Descripción |
|---|---|---|
actionId |
GUID | Identificador único de la acción |
projectId |
GUID | Proyecto al que pertenece la acción |
name |
string | Nombre para mostrar |
description |
string | Descripción de la acción |
isEnabled |
boolean | Si la acción está habilitada |
maxRunTime |
integer | Tiempo máximo de ejecución en segundos |
actionStatus |
string | Estado actual (Idle, Running, etc.) |
nextRunTime |
datetime | Próxima ejecución programada |
lastRunTime |
datetime | Última hora de ejecución |
lastRunResult |
string | Resultado de la última ejecución |
triggers |
array | Configuraciones de disparadores |
steps |
array | Definiciones de los pasos de la acción |
Crear Acción
POST /api/{tenantId}/{projectId}/action
Crear una nueva acción en el proyecto.
Parámetros de Ruta
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
tenantId |
GUID | Sí | Identificador de tu tenant |
projectId |
GUID | Sí | Identificador de tu proyecto |
Cuerpo de la Solicitud
{
"name": "Weekly Report",
"description": "Generate weekly analysis report",
"isEnabled": true,
"maxRunTime": 1800,
"steps": [
{
"stepNumber": 1,
"stepType": "Python",
"description": "Generate report",
"settings": "{\"script\": \"generate_report.py\"}"
},
{
"stepNumber": 2,
"stepType": "Email",
"description": "Send report via email",
"settings": "{\"recipients\": [\"team@company.com\"]}"
}
],
"triggers": [
{
"triggerType": "WeeklyScheduler",
"frequency": 1,
"startDate": "2024-01-08"
}
]
}
Campos de la Solicitud
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
name |
string | Sí | Nombre de la acción (debe ser único en el proyecto) |
description |
string | No | Descripción de la acción |
isEnabled |
boolean | No | Si la acción está habilitada (por defecto: true) |
maxRunTime |
integer | No | Tiempo máximo de ejecución en segundos (por defecto: 3600) |
steps |
array | Sí | Se requiere al menos un paso |
triggers |
array | No | Configuraciones opcionales de disparadores |
Objeto Paso
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
stepNumber |
integer | No | Orden de ejecución (se asigna automáticamente si no se proporciona) |
stepType |
string | Sí | Tipo: Python, Email, Webhook, etc. |
description |
string | No | Descripción del paso |
settings |
string | Sí | Configuración JSON para el paso |
Objeto Disparador
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
triggerType |
string | Sí | Tipo: HourlyScheduler, DailyScheduler, WeeklyScheduler, MonthlyScheduler, EventTrigger |
frequency |
integer | No | Multiplicador de frecuencia |
startDate |
date | No | Cuándo iniciar la programación |
eventName |
string | No | Nombre del evento (para EventTrigger) |
settings |
string | No | Configuraciones adicionales del disparador |
Respuesta (201 Created)
Devuelve la acción creada con los IDs asignados.
Respuestas de Error
Conflicto (409) - Nombre duplicado
{
"Error": "An action with this name already exists in the project"
}
Actualizar Acción
PUT /api/{tenantId}/{projectId}/action/{actionId}
Actualizar una acción existente.
Parámetros de Ruta
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
tenantId |
GUID | Sí | Identificador de tu tenant |
projectId |
GUID | Sí | Identificador de tu proyecto |
actionId |
GUID | Sí | Acción a actualizar |
Cuerpo de la Solicitud
{
"name": "Updated Weekly Report",
"description": "Updated description",
"isEnabled": true,
"maxRunTime": 2400,
"steps": [
{
"stepId": "22222222-2222-2222-2222-222222222222",
"stepNumber": 1,
"stepType": "Python",
"description": "Updated step",
"settings": "{\"script\": \"updated_report.py\"}"
}
],
"triggers": [
{
"triggerId": "11111111-1111-1111-1111-111111111111",
"triggerType": "DailyScheduler",
"frequency": 1,
"startDate": "2024-02-01"
}
]
}
Todos los campos son opcionales - solo se actualizarán los campos proporcionados.
Respuesta (200 OK)
Devuelve la acción actualizada.
Eliminar Acción
DELETE /api/{tenantId}/{projectId}/action/{actionId}
Eliminar una acción permanentemente.
Parámetros de Ruta
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
tenantId |
GUID | Sí | Identificador de tu tenant |
projectId |
GUID | Sí | Identificador de tu proyecto |
actionId |
GUID | Sí | Acción a eliminar |
Respuesta (204 No Content)
Respuesta vacía en caso de éxito.
Habilitar Acción
POST /api/{tenantId}/{projectId}/action/{actionId}/enable
Habilitar una acción deshabilitada.
Respuesta (200 OK)
Devuelve la acción actualizada con isEnabled: true.
Deshabilitar Acción
POST /api/{tenantId}/{projectId}/action/{actionId}/disable
Deshabilitar una acción.
Respuesta (200 OK)
Devuelve la acción actualizada con isEnabled: false.
Ejemplos de Implementación
cURL
# Listar todas las acciones
curl -X GET "https://your-mindzie-instance.com/api/{tenantId}/{projectId}/action" \
-H "Authorization: Bearer YOUR_API_KEY"
# Crear una acción
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": "Generate daily report",
"isEnabled": true,
"steps": [
{
"stepNumber": 1,
"stepType": "Python",
"description": "Run report script",
"settings": "{\"script\": \"daily_report.py\"}"
}
],
"triggers": [
{
"triggerType": "DailyScheduler",
"frequency": 1,
"startDate": "2024-01-15"
}
]
}'
# Actualizar una acción
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": "Updated Daily Report"}'
# Eliminar una acción
curl -X DELETE "https://your-mindzie-instance.com/api/{tenantId}/{projectId}/action/{actionId}" \
-H "Authorization: Bearer YOUR_API_KEY"
# Habilitar/Deshabilitar acción
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):
"""Listar todas las acciones."""
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):
"""Obtener detalles de una acción."""
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):
"""Crear una nueva acción."""
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):
"""Actualizar una acción."""
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):
"""Eliminar una acción."""
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):
"""Habilitar una acción."""
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):
"""Deshabilitar una acción."""
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()
# Uso
manager = ActionManager('your-api-key')
# Crear una acción
action = manager.create_action(
name='Daily Report',
description='Generate daily analysis report',
steps=[
{
'stepNumber': 1,
'stepType': 'Python',
'description': 'Generate report',
'settings': '{"script": "daily_report.py"}'
}
],
triggers=[
{
'triggerType': 'DailyScheduler',
'frequency': 1,
'startDate': '2024-01-15'
}
]
)
print(f"Acción creada: {action['actionId']}")
# Deshabilitar y luego habilitar
manager.disable_action(action['actionId'])
print("Acción deshabilitada")
manager.enable_action(action['actionId'])
print("Acción habilitada")
# Actualizar la acción
updated = manager.update_action(action['actionId'], name='Updated Daily Report')
# Eliminar la acción
manager.delete_action(action['actionId'])
print("Acción eliminada")
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(`Falló: ${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(`Falló: ${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(`Falló: ${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(`Falló: ${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(`Falló: ${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(`Falló: ${response.status}`);
return response.json();
}
}
// Uso
const manager = new ActionManager('your-api-key');
// Crear acción
const action = await manager.createAction(
'Daily Report',
[{ stepNumber: 1, stepType: 'Python', description: 'Run script', settings: '{}' }],
'Generate daily report',
[{ triggerType: 'DailyScheduler', frequency: 1, startDate: '2024-01-15' }]
);
// Alternar habilitar/deshabilitar
await manager.disableAction(action.actionId);
await manager.enableAction(action.actionId);
// Eliminar
await manager.deleteAction(action.actionId);
Mejores Prácticas
- Nombres Únicos: Los nombres de las acciones deben ser únicos dentro de un proyecto.
- Orden de Pasos: Los pasos se ejecutan en el orden de stepNumber.
- Habilitar/Deshabilitar: Usa los endpoints de habilitar/deshabilitar en lugar de eliminar y recrear.
- Disparadores: Usa tipos de disparadores apropiados para tus necesidades de programación.
- MaxRunTime: Establece tiempos límite razonables para evitar que las acciones se ejecuten sin control.