Automatización de agentes con rutinas (versión preliminar)

Importante

Los elementos marcados (versión preliminar) de este artículo se encuentran actualmente en versión preliminar pública. Esta versión preliminar se ofrece sin acuerdo de nivel de servicio y no se recomienda para las cargas de trabajo de producción. Es posible que algunas características no se admitan o que tengan funcionalidades restringidas. Para más información, consulte Términos de uso complementarios para las versiones preliminares de Microsoft Azure.

Una rutina es una regla de automatización con nombre que desencadena un agente según una programación o en un momento específico. Se define lo que desencadena la rutina (el desencadenador) y el agente que se va a invocar (la acción). Foundry pone en cola la invocación, ejecuta el agente y almacena un registro de ejecución que puede inspeccionar más adelante.

En este artículo se muestra cómo crear, administrar y supervisar rutinas mediante el portal de Foundry, la API REST y los SDK de Python y JavaScript.

Note

Las rutinas están en versión preliminar. Envíe la cabecera Foundry-Features: Routines=V1Preview en cada llamada REST. Todas las operaciones rutinarias se encuentran en el plano de datos en el punto de conexión del proyecto.

Tipos de desencadenadores admitidos

Las rutinas admiten dos tipos de desencadenadores basados en tiempo:

Tipo de desencadenador Description
schedule Desencadenador periódico definido por una expresión cron. El intervalo mínimo es de cinco minutos.
timer Disparador de una sola ejecución que se activa en una fecha y hora futuras concretas o tras un intervalo de tiempo.

Tipos de acción admitidos

Cada rutina especifica exactamente una acción que se ejecuta cuando la rutina se desencadena. Se admiten dos tipos de acción:

Tipo de acción Description
invoke_agent_responses_api Invoca al agente a través de la API de respuestas. Proporcione el nombre del agente o el identificador de punto de conexión.
invoke_agent_invocations_api Invoca al agente mediante la API de Invocations. Requiere el identificador del agente con ámbito de punto de conexión.

Para los campos obligatorios y opcionales de cada tipo de acción, consulte Campos de acción.

Prerrequisitos

  • Un proyecto Microsoft Foundry activo con al menos un agente implementado.

  • Rol de Usuario de Foundry o superior en el ámbito del proyecto.

    Importante

    Recientemente se cambió el nombre de los roles RBAC de Foundry. Foundry User, Foundry Owner, Foundry Account Owner y Foundry Project Manager se llamaban anteriormente Usuario de Azure AI, Propietario de Azure AI, Propietario de la cuenta de Azure AI y Administrador de proyectos de Azure AI. Es posible que siga viendo los nombres anteriores en algunos lugares mientras se implementa el cambio de nombre. El cambio de nombre no modifica los identificadores de rol y los permisos principales.

Note

Las rutinas están disponibles en un subconjunto de regiones en versión preliminar. Confirme que su proyecto de Foundry está aprovisionado en una de las regiones admitidas antes de crear una rutina:

  • Este de EE. UU.
  • Este de EE. UU. 2
  • Oeste de EE. UU.
  • Oeste de EE. UU. 2
  • Centro-oeste de EE. UU.
  • Centro-Norte de EE. UU
  • Centro de Suecia
  • Japón Oriental
  • Instale el azure-ai-projects SDK, versión 2.2.0 o posterior (versión preliminar):

    pip install "azure-ai-projects>=2.2.0"
    

    La versión 2.2.0 introduce la forma abreviada de la duración ("30m", "2h") para los activadores de temporizador.

  • Instalación azure-identity para la autenticación:

    pip install azure-identity
    
  • Instale el @azure/ai-projects paquete npm (versión preliminar):

    npm install @azure/ai-projects @azure/identity
    
  • Instale curl o cualquier cliente HTTP.
  • Instale el CLI de Azure para adquirir tokens de acceso.
  • Instale la CLI para desarrolladores de Azure (azd 1.23.13 o posterior).

  • Instale la extensión de rutinas (versión preliminar):

    azd extension install azure.ai.routines
    
  • Inicie sesión y configure el punto de conexión de su proyecto:

    azd auth login
    export AZURE_AI_PROJECT_ENDPOINT="https://<account>.services.ai.azure.com/api/projects/<project>"
    

Crear una rutina

Una definición de rutina especifica un desencadenador (cuándo se activa) y una acción (qué agente ejecutar y a través de qué API). Se admite exactamente una entrada de desencadenador en versión preliminar.

Activador de programación

Un desencadenador programado se activa repetidamente con una expresión cron. El servicio aplica un intervalo mínimo de cinco minutos.

  1. En Microsoft Foundry, abra el proyecto.

  2. En el panel de navegación izquierdo, seleccione Rutinas.

  3. Seleccione + Nueva rutina.

  4. Escriba un nombre para la rutina, por ejemplo daily-summary.

  5. Seleccione un agente en la lista desplegable.

  6. Introduzca un Prompt que el agente ejecutará en cada invocación.

  7. En Desencadenador, establezca Tipo en Programación periódica y, a continuación, elija una frecuencia (diaria o semanal) y una hora.

  8. Seleccione Crear e iniciar.

    Captura de pantalla del cuadro de diálogo Nueva rutina con el tipo Desencadenador programado periódico seleccionado, que muestra Frecuencia establecida en Diaria y la Hora establecida en 9:00 AM.

El portal interpreta la hora en la zona horaria local del explorador. Para anclar una rutina a una zona horaria específica independientemente del explorador, créela a través de la API REST o un SDK y proporcione el time_zone campo.

Note

Si las rutinas no están visibles en la navegación, la característica no está habilitada para su región o suscripción. Póngase en contacto con el equipo de su cuenta para solicitar acceso.

Reemplace los valores de marcador de posición y, a continuación, ejecute:

PROJECT_ENDPOINT=<your-project-endpoint>   # e.g. https://<account>.services.ai.azure.com/api/projects/<project>
AGENT_NAME=<your-agent-name>

TOKEN=$(az account get-access-token \
  --resource https://ai.azure.com \
  --query accessToken -o tsv)

# Using Responses API action
curl -sS -X PUT "$PROJECT_ENDPOINT/routines/daily-summary" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Foundry-Features: Routines=V1Preview" \
  -d '{
    "description": "Runs a daily summary agent on weekday mornings.",
    "enabled": true,
    "triggers": {
      "weekday-morning": {
        "type": "schedule",
        "cron_expression": "0 7 * * 1-5",
        "time_zone": "UTC"
      }
    },
    "action": {
      "type": "invoke_agent_responses_api",
      "agent_name": "'"$AGENT_NAME"'"
    }
  }'

Para usar la acción Invocations API en su lugar, reemplace el action objeto por lo siguiente. agent_name es obligatorio; session_id es opcional.

# Using Invocations API action
curl -sS -X PUT "$PROJECT_ENDPOINT/routines/daily-summary" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Foundry-Features: Routines=V1Preview" \
  -d '{
    "description": "Runs a daily summary agent on weekday mornings.",
    "enabled": true,
    "triggers": {
      "weekday-morning": {
        "type": "schedule",
        "cron_expression": "0 7 * * 1-5",
        "time_zone": "UTC"
      }
    },
    "action": {
      "type": "invoke_agent_invocations_api",
      "agent_name": "'"$AGENT_NAME"'"
    }
  }'

Una respuesta satisfactoria devuelve HTTP 200 o 201 con el objeto de rutina, incluidas las marcas de tiempo created_at y updated_at.

import os
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient

endpoint = os.environ["PROJECT_ENDPOINT"]
agent_name = os.environ["AGENT_NAME"]

client = AIProjectClient(endpoint=endpoint, credential=DefaultAzureCredential())

# Using Responses API action
routine = client.beta.routines.create_or_update(
    routine_name="daily-summary",
    description="Runs a daily summary agent on weekday mornings.",
    enabled=True,
    triggers={
        "weekday-morning": {
            "type": "schedule",
            "cron_expression": "0 7 * * 1-5",  # required
            "time_zone": "UTC",                 # required
        }
    },
    action={
        "type": "invoke_agent_responses_api",
        "agent_name": agent_name,  # required
        # "conversation_id": "...",  # optional
    },
)

print(f"Routine created: {routine.name}, enabled={routine.enabled}")

# To use the Invocations API action instead:
# action={
#     "type": "invoke_agent_invocations_api",
#     "agent_name": agent_name,  # required
#     # "session_id": "...",      # optional
# }
const { AIProjectClient } = require("@azure/ai-projects");
const { DefaultAzureCredential } = require("@azure/identity");

const endpoint = process.env.PROJECT_ENDPOINT;
const agentName = process.env.AGENT_NAME;

const client = new AIProjectClient(endpoint, new DefaultAzureCredential());

// Using Responses API action
const routine = await client.beta.routines.createOrUpdate("daily-summary", {
  description: "Runs a daily summary agent on weekday mornings.",
  enabled: true,
  triggers: {
    "weekday-morning": {
      type: "schedule",
      cron_expression: "0 7 * * 1-5",  // required
      time_zone: "UTC",                 // required
    },
  },
  action: {
    type: "invoke_agent_responses_api",
    agent_name: agentName,  // required
    // conversation_id: "...",  // optional
  },
});

console.log(`Routine created: ${routine.name}, enabled=${routine.enabled}`);

// To use the Invocations API action instead:
// action: {
//   type: "invoke_agent_invocations_api",
//   agent_name: agentName,  // required
//   // session_id: "...",    // optional
// }

azd ai routine create --trigger schedule insertada no se admite en versión preliminar. Cree la rutina a partir de un manifiesto YAML en su lugar:

# routine.yaml
name: daily-summary
description: Runs a daily summary agent on weekday mornings.
enabled: true
triggers:
  weekday-morning:
    type: schedule
    cron: "0 7 * * 1-5"
    time_zone: UTC
action:
  type: invoke_agent_responses_api
  agent_name: <your-agent-name>
azd ai routine create --file routine.yaml

El intervalo mínimo entre los incendios es de cinco minutos. Establezca time_zone en una zona IANA cualquiera (por ejemplo, America/Los_Angeles); omítalo para interpretar cron en UTC.

Note

El agente al que hace agent_name referencia debe tener una identidad de agente configurada. El servicio rechaza los agentes de solo solicitud cuando se enlaza a una acción rutinaria.

Activador del temporizador

Un desencadenador de temporizador se activa una vez en una fecha y hora futuras concretas, o tras un intervalo de tiempo contado desde ahora.

  1. Siga los pasos 1 a 6 del procedimiento anterior para abrir el cuadro de diálogo Nueva rutina y rellenar Nombre, Agente y Prompt. Use un nombre como once-on-release-day.

  2. En Desencadenador, configure Tipo como Programación de una sola vez.

  3. En Ejecutar en, elija la fecha y hora en que debe activarse la rutina.

  4. Seleccione Crear e iniciar.

    Captura de pantalla del cuadro de diálogo Nueva rutina con el tipo de desencadenador programado Una sola vez seleccionado, muestra un selector de fecha y un selector de hora en Ejecutar a las.

El valor de Ejecutar a las se interpreta en la zona horaria local del explorador. Una programación de una sola vez se activa exactamente una vez, en el momento que se elija.

# Using Responses API action
curl -sS -X PUT "$PROJECT_ENDPOINT/routines/once-on-release-day" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Foundry-Features: Routines=V1Preview" \
  -d '{
    "description": "Runs the agent once on release day.",
    "enabled": true,
    "triggers": {
      "release-day": {
        "type": "timer",
        "at": "2026-09-01T09:00:00Z"
      }
    },
    "action": {
      "type": "invoke_agent_responses_api",
      "agent_name": "'"$AGENT_NAME"'"
    }
  }'

El at campo acepta:

  • Una marca de tiempo ISO 8601 con un desfase UTC explícito, por ejemplo "2026-06-01T09:00:00Z".
  • Marca de tiempo local emparejada con time_zone, por ejemplo "at": "2026-09-01T09:00:00", "time_zone": "America/Los_Angeles".
  • Duración positiva de la hora actual, por ejemplo "30m" (30 minutos desde ahora) o "2h" (dos horas desde ahora).
routine = client.beta.routines.create_or_update(
    routine_name="once-on-release-day",
    description="Runs the agent once on release day.",
    enabled=True,
    triggers={
        "release-day": {
            "type": "timer",
            "at": "2026-09-01T09:00:00Z",  # required
            # "time_zone": "UTC",           # optional; required when 'at' has no UTC offset
        }
    },
    action={
        "type": "invoke_agent_responses_api",
        "agent_name": agent_name,
    },
)
const routine = await client.beta.routines.createOrUpdate("once-on-release-day", {
  description: "Runs the agent once on release day.",
  enabled: true,
  triggers: {
    "release-day": {
      type: "timer",
      at: "2026-09-01T09:00:00Z",  // required
      // time_zone: "UTC",          // optional; required when 'at' has no UTC offset
    },
  },
  action: {
    type: "invoke_agent_responses_api",
    agent_name: agentName,
  },
});

Cree en línea una rutina de temporizador de una sola vez en línea:

azd ai routine create once-on-release-day \
  --trigger timer \
  --at 2026-09-01T09:00:00Z \
  --action agent-response \
  --agent-name <your-agent-name>

O bien, cree a partir de un manifiesto YAML:

# routine.yaml
name: once-on-release-day
description: Runs the agent once on release day.
enabled: true
triggers:
  release-day:
    type: timer
    time_zone: UTC
    at: 2026-09-01T09:00:00Z
action:
  type: invoke_agent_responses_api
  agent_name: <your-agent-name>
azd ai routine create --file routine.yaml

Note

El agente al que hace agent_name referencia debe tener una identidad de agente configurada. El servicio rechaza los agentes de solo solicitud cuando se enlaza a una acción rutinaria.

Campos de acción

Cada rutina especifica exactamente una acción. Los dos tipos de acción admitidos tienen campos obligatorios y opcionales diferentes.

Acción de la API Responses (invoke_agent_responses_api)

Invoca al agente a través de la API de respuestas.

Campo Tipo Obligatorio Description
type string Debe ser "invoke_agent_responses_api".
agent_name string Nombre del agente con ámbito de proyecto. Máximo de 256 caracteres.
conversation_id string No Una conversación existente para continuar durante la distribución. Máximo de 256 caracteres.

Acción de la API de invocaciones (invoke_agent_invocations_api)

Invoca al agente mediante la API de Invocations.

Campo Tipo Obligatorio Description
type string Debe ser "invoke_agent_invocations_api".
agent_name string Nombre del agente con ámbito de proyecto. Máximo de 256 caracteres.
session_id string No Sesión de agente hospedado existente para continuar durante la distribución. Máximo de 256 caracteres.

Habilitar y deshabilitar una rutina

Las rutinas se inician habilitadas si se establece "enabled": true en la creación. Puede pausar una rutina sin eliminarla.

  1. En Microsoft Foundry, abra el proyecto.

  2. Seleccione Rutinas en el panel de navegación izquierdo.

  3. Busque la rutina y selecciónela.

  4. Seleccione Pausar en la parte superior derecha para pausar la rutina o seleccione Reanudar para volver a habilitar una rutina en pausa.

    Captura de pantalla de una página de detalles de una rutina que muestra el botón Pausar en la esquina superior derecha, el menú de opciones con las opciones Ejecución de prueba, Editar y Eliminar, y la tabla de ejecuciones anteriores debajo.

Desde la misma página, también puede:

  • Seleccione Ejecutar prueba (el botón de la derecha o la entrada del menú de desbordamiento) para ejecutar la rutina inmediatamente con su indicación y agente actuales, sin esperar al siguiente desencadenador programado.
  • Revisa las ejecuciones anteriores en la tabla situada debajo de los detalles de la rutina. Cada fila muestra el identificador de respuesta, cuando se desencadenó la ejecución, su duración y su estado. Use los filtros Last day, 7D, 1M o Custom para definir el ámbito del intervalo de tiempo. Seleccione un identificador de respuesta para abrir la ejecución completa.

Deshabilitar una rutina:

curl -sS -X POST "$PROJECT_ENDPOINT/routines/daily-summary:disable" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Foundry-Features: Routines=V1Preview"

Habilite una rutina:

curl -sS -X POST "$PROJECT_ENDPOINT/routines/daily-summary:enable" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Foundry-Features: Routines=V1Preview"

Ambas operaciones devuelven el objeto de rutina actualizado.

# Disable
disabled_routine = client.beta.routines.disable("daily-summary")
print(f"Enabled: {disabled_routine.enabled}")   # False

# Enable
enabled_routine = client.beta.routines.enable("daily-summary")
print(f"Enabled: {enabled_routine.enabled}")    # True
// Disable
const disabled = await client.beta.routines.disable("daily-summary");
console.log(`Enabled: ${disabled.enabled}`);   // false

// Enable
const enabled = await client.beta.routines.enable("daily-summary");
console.log(`Enabled: ${enabled.enabled}`);    // true
# Disable
azd ai routine disable once-on-release-day

# Enable
azd ai routine enable once-on-release-day

Prueba manual de una rutina

Ponga en cola una ejecución de una sola vez sin esperar a que se active el desencadenador. Esto te permite comprobar que la rutina llega correctamente a tu agente.

  1. Abra la rutina en Microsoft Foundry.
  2. Seleccione Ejecutar prueba (el botón de la derecha o la entrada en el menú de desbordamiento junto a Pausa).

Foundry pone en cola la ejecución inmediatamente con el agente y la indicación actuales de la rutina. La nueva ejecución aparece en la tabla de ejecuciones anteriores debajo de los detalles de rutina y avanza de Queued a Completed o Failed.

Utilice la operación dispatch_async para poner en cola la ejecución. El tipo de carga útil del despacho debe coincidir con el tipo de acción de la rutina: utilice invoke_agent_responses_api para las rutinas de Responses API y invoke_agent_invocations_api para las rutinas de Invocations API.

Campo de carga Tipo Obligatorio Description
type string Debe coincidir con el tipo de acción de la rutina: "invoke_agent_responses_api" o "invoke_agent_invocations_api".
input string No Sobrescriba la entrada enviada al destino descendente con fines de prueba. Máximo de 32 768 caracteres.

Rutina de la API Responses — con anulación opcional de la entrada:

curl -sS -X POST "$PROJECT_ENDPOINT/routines/daily-summary:dispatch_async" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Foundry-Features: Routines=V1Preview" \
  -d '{
    "payload": {
      "type": "invoke_agent_responses_api",
      "input": "Run the daily summary for testing."
    }
  }'

Rutina de la API de invocaciones, con anulación opcional de la entrada:

curl -sS -X POST "$PROJECT_ENDPOINT/routines/my-invocations-routine:dispatch_async" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Foundry-Features: Routines=V1Preview" \
  -d '{
    "payload": {
      "type": "invoke_agent_invocations_api",
      "input": "Run the agent for testing."
    }
  }'

Respuesta:

{
  "dispatch_id": "disp-abc123",
  "action_correlation_id": "resp-xyz456",
  "task_id": "task-def789"
}

Usa el dispatch_id para encontrar la ejecución en el historial de ejecución.

Sin una anulación de la entrada:

curl -sS -X POST "$PROJECT_ENDPOINT/routines/daily-summary:dispatch_async" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Foundry-Features: Routines=V1Preview" \
  -d '{}'
# Responses API routine
result = client.beta.routines.dispatch(
    routine_name="daily-summary",
    payload={
        "type": "invoke_agent_responses_api",
        "input": "Run the daily summary for testing.",  # optional
    },
)
print(f"dispatch_id: {result.dispatch_id}")
print(f"task_id:     {result.task_id}")

# Invocations API routine
result2 = client.beta.routines.dispatch(
    routine_name="my-invocations-routine",
    payload={
        "type": "invoke_agent_invocations_api",
        "input": "Run the agent for testing.",  # optional
    },
)
// Responses API routine
const result = await client.beta.routines.dispatch("daily-summary", {
  payload: {
    type: "invoke_agent_responses_api",
    input: "Run the daily summary for testing.",  // optional
  },
});
console.log(`dispatch_id: ${result.dispatch_id}`);

// Invocations API routine
const result2 = await client.beta.routines.dispatch("my-invocations-routine", {
  payload: {
    type: "invoke_agent_invocations_api",
    input: "Run the agent for testing.",  // optional
  },
});

Ponga en cola una ejecución manual para una rutina de la API de Respuestas:

azd ai routine dispatch once-on-release-day \
  --input "Run the routine for testing."

El comando imprime el dispatch_id y el task_id. Usa el dispatch_id para encontrar la ejecución en el historial de ejecución.

Visualización del historial de ejecución

El historial de ejecución registra cada ocasión en que se activa una rutina y el resultado de cada intento.

  1. Abra la rutina en Microsoft Foundry.
  2. Las ejecuciones anteriores se muestran en la tabla de la página de detalles de la rutina. Cada fila muestra el identificador de respuesta, cuando se desencadenó la ejecución, su duración y su estado (por ejemplo , Completado o Erróneo).
  3. Use los controles De último día, 7D, 1M o Intervalo personalizado encima de la tabla para filtrar la ventana de tiempo.
  4. Seleccione un identificador de respuesta para abrir la ejecución completa, incluida la respuesta y los detalles del error.

Enumerar todas las ejecuciones de una rutina:

curl -sS "$PROJECT_ENDPOINT/routines/daily-summary/runs" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Foundry-Features: Routines=V1Preview"

Respuesta de ejemplo:

{
  "value": [
    {
      "id": "run-abc123",
      "status": "FINISHED",
      "phase": "completed",
      "trigger_type": "schedule",
      "attempt_source": "schedule_delivery",
      "started_at": "2026-06-02T07:00:05Z",
      "ended_at": "2026-06-02T07:00:42Z",
      "dispatch_id": "disp-abc123",
      "response_id": "resp-xyz456"
    }
  ]
}
runs = client.beta.routines.list_runs("daily-summary")

for run in runs:
    print(
        f"{run.id}  phase={run.phase}  "
        f"source={run.attempt_source}  "
        f"started={run.started_at}  ended={run.ended_at}"
    )
    if run.phase == "failed":
        print(f"  error: {run.error_type} — {run.error_message}")
for await (const run of client.beta.routines.listRuns("daily-summary")) {
  console.log(`${run.id}  phase=${run.phase}  source=${run.attempt_source}`);
  if (run.phase === "failed") {
    console.log(`  error: ${run.error_type} — ${run.error_message}`);
  }
}

No se admite la enumeración del historial de ejecuciones a través de azd ai routine en la versión preliminar. Use el portal de Foundry, la API REST o un SDK para recuperar ejecuciones.

Enumerar y recuperar rutinas

Todas las rutinas del proyecto se muestran en la página Rutinas . Seleccione cualquier rutina para ver su configuración y el historial de ejecución.

Enumerar todas las rutinas del proyecto:

curl -sS "$PROJECT_ENDPOINT/routines" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Foundry-Features: Routines=V1Preview"

Recuperar una rutina específica:

curl -sS "$PROJECT_ENDPOINT/routines/daily-summary" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Foundry-Features: Routines=V1Preview"
# List all routines
for r in client.beta.routines.list():
    print(f"{r.name}  enabled={r.enabled}  triggers={list(r.triggers.keys())}")

# Get a single routine
routine = client.beta.routines.get("daily-summary")
print(routine)
// List all routines
for await (const r of client.beta.routines.list()) {
  console.log(`${r.name}  enabled=${r.enabled}`);
}

// Get a single routine
const routine = await client.beta.routines.get("daily-summary");
console.log(routine);

Obtener una única rutina:

azd ai routine show once-on-release-day

No se admite listar todas las rutinas mediante azd ai routine en la versión preliminar. Use el portal de Foundry, la API REST o un SDK.

Actualizar una rutina

Para cambiar el desencadenador o la acción de una rutina, emita una nueva solicitud de creación o actualización con el mismo nombre. La operación reemplaza la definición almacenada.

  1. Abra la rutina en Microsoft Foundry.
  2. Seleccione Editar.
  3. Cambie la configuración del desencadenador o de la acción.
  4. Haga clic en Guardar.

Vuelva a enviar la solicitud PUT con el cuerpo actualizado. Incluir todos los campos; los campos omitidos se restablecen a los valores predeterminados.

curl -sS -X PUT "$PROJECT_ENDPOINT/routines/daily-summary" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Foundry-Features: Routines=V1Preview" \
  -d '{
    "description": "Updated: runs at 08:00 UTC on weekdays.",
    "enabled": true,
    "triggers": {
      "weekday-morning": {
        "type": "schedule",
        "cron_expression": "0 8 * * 1-5",
        "time_zone": "UTC"
      }
    },
    "action": {
      "type": "invoke_agent_responses_api",
      "agent_name": "'"$AGENT_NAME"'"
    }
  }'
updated = client.beta.routines.create_or_update(
    routine_name="daily-summary",
    description="Updated: runs at 08:00 UTC on weekdays.",
    enabled=True,
    triggers={
        "weekday-morning": {
            "type": "schedule",
            "cron_expression": "0 8 * * 1-5",
            "time_zone": "UTC",
        }
    },
    action={
        "type": "invoke_agent_responses_api",
        "agent_name": agent_name,
    },
)
print(f"Updated at: {updated.updated_at}")
const updated = await client.beta.routines.createOrUpdate("daily-summary", {
  description: "Updated: runs at 08:00 UTC on weekdays.",
  enabled: true,
  triggers: {
    "weekday-morning": {
      type: "schedule",
      cron_expression: "0 8 * * 1-5",
      time_zone: "UTC",
    },
  },
  action: {
    type: "invoke_agent_responses_api",
    agent_name: agentName,
  },
});
console.log(`Updated at: ${updated.updated_at}`);

Aplicar cambios desde un manifiesto YAML:

azd ai routine update once-on-release-day --file routine.yaml

El indicador --description no se admite para las rutinas de temporizador en la versión preliminar; edite el manifiesto y vuelva a aplicarlo con --file en su lugar.

Eliminar una rutina

Eliminar una rutina la elimina y detiene todas las activaciones futuras del desencadenador. Se conservan los registros de ejecución existentes.

  1. Abra la rutina en Microsoft Foundry.
  2. Seleccione Eliminar y confirme.
curl -sS -X DELETE "$PROJECT_ENDPOINT/routines/daily-summary" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Foundry-Features: Routines=V1Preview"

Una respuesta correcta devuelve HTTP 204 Sin contenido.

client.beta.routines.delete("daily-summary")
print("Routine deleted.")
await client.beta.routines.delete("daily-summary");
console.log("Routine deleted.");
azd ai routine delete once-on-release-day

Campos desencadenantes

Programar campos de desencadenador

Campo Tipo Obligatorio Description
type string Debe ser "schedule".
cron_expression string Una expresión cron de 5 campos. El servicio aplica un intervalo mínimo de cinco minutos.
time_zone string Un identificador de zona horaria de IANA o Windows, por ejemplo, "UTC" o "America/Los_Angeles".

Campos de desencadenador del temporizador

Campo Tipo Obligatorio Description
type string Debe ser "timer".
at string Expresión de temporizador futura. Acepta una marca de tiempo ISO 8601 con un desplazamiento UTC explícito (por ejemplo, "2026-06-01T09:00:00Z"), una marca de tiempo local emparejada con time_zoneo una duración positiva desde ahora (por ejemplo, "30m" o "2h").
time_zone string No Identificador de zona horaria de IANA o Windows. Obligatorio cuando at es una marca temporal local sin un desfase respecto a UTC.

Comportamiento del envío y política de reintentos

Cuando se activa un desencadenador o se llama a :dispatch_async manualmente, Foundry confirma que la ejecución se ha puesto en cola. La confirmación no significa que la llamada al agente de nivel inferior haya finalizado. Utilice el estado de ejecución, la telemetría o el valor devuelto dispatch_id para confirmar la finalización.

Resultados de llamadas descendentes

El trabajo de entrega espera a que finalice la llamada HTTP invoke_agent_responses_api o invoke_agent_invocations_api descendente antes de marcar la ejecución.

Resultado HTTP descendente Comportamiento de ejecución de rutina
2xx La ejecución se marca como completada y se registran los identificadores de envío posteriores.
408, 429 o 5xx Se considera reintentable mientras queden intentos.
Otros 4xx (por ejemplo, 400) Se considera un estado terminal y la ejecución se marca como fallida.
Error de tiempo de espera de solicitud o invocación de servicio transitoria Se considera reintentable mientras queden intentos.

Si se agotan los reintentos, la ejecución se marca como fallida con el último error de distribución.

Una ejecución correcta significa que la API de bajada aceptó la solicitud de envío. No garantiza que se haya completado el trabajo asíncrono iniciado por el agente.

Valores predeterminados de reintento y tiempo de espera

  • La política de entrega predeterminada es de 3 intentos en total, con retroceso exponencial a partir de 1 segundo y un máximo de 5 segundos.
  • La solicitud HTTP de bajada tiene un tiempo de espera por intento de 30 segundos. El tiempo de puesta en cola, el retroceso de reintento y los límites de simultaneidad de trabajo no se incluyen en ese tiempo de espera por indicación.

Problemas y limitaciones conocidos

La versión preliminar tiene los siguientes problemas conocidos y limitaciones:

  • Un activador y una acción en cada rutina. Cada rutina admite exactamente una entrada en el triggers mapa y una acción. Para ejecutar varios agentes o varias programaciones, cree rutinas independientes.
  • Tipos de desencadenador. Solo se admiten los desencadenadores timer (de una sola ejecución) y schedule (recurrentes basados en cron). Los desencadenadores basados en eventos no están disponibles en versión preliminar.
  • Tipos de acción. La única acción consiste en invocar un agente foundry a través de la API de respuestas o la API de invocaciones.
  • Programe el intervalo mínimo. Un schedule desencadenador se activa como máximo una vez cada cinco minutos. Se rechazan las expresiones Cron que se resuelven en un intervalo más corto.
  • Disponibilidad regional. Las rutinas solo están disponibles en las regiones enumeradas en Requisitos previos. Si Las rutinas no están visibles en la navegación del portal de Foundry, la característica no está habilitada para su región o suscripción.
  • Se usa :dispatch_async para el envío manual. Solo la POST .../routines/{routineName}:dispatch_async ruta forma parte del contrato público. La ruta heredada :dispatch no es compatible con el uso del cliente.
  • El acuse de recibo no es la finalización. Una respuesta :dispatch_async confirma que la ejecución se ha puesto en cola, y no que la llamada al agente descendente haya finalizado. Utilice el estado de ejecución, la telemetría o el valor devuelto dispatch_id para comprobar la entrega final.
  • Tiempo de espera por intento. La solicitud HTTP posterior al agente tiene un tiempo de espera de 30 segundos en cada intento. El tiempo de puesta en cola, el retroceso de reintento, el tiempo de entrega del bus de mensajes y los límites de simultaneidad de trabajo no están incluidos en ese tiempo de espera. Las solicitudes que superan el tiempo de espera por intento se vuelven a intentar según los valores predeterminados de reintento y de tiempo de espera, y la ejecución de la rutina se marca como fallida si se agota el tiempo de espera en todos los intentos.
  • Una entrega satisfactoria no garantiza la finalización integral. Una ejecución de rutina completada significa que la API de bajada devolvió correctamente la solicitud de envío. No garantiza que haya finalizado el trabajo asincrónico iniciado por el agente.