Human in the Loop

O bloco Human in the Loop pausa uma execução e espera por uma pessoa antes de continuar. Use-o para portões de aprovação, para coletar feedback ou para reunir informações em um ponto de decisão. A execução fica pausada — sem tempo limite — até alguém responder pelo portal de aprovação, pela API ou por um webhook.

Configuração

Display Data

O que a pessoa aprovadora vê — o contexto exibido no portal para ajudá-la a decidir. Monte campo por campo ou como JSON, referenciando saídas anteriores com <blockName.output>.

{
  "customerName": "<agent1.content.name>",
  "proposedAction": "<router1.selectedPath>",
  "confidenceScore": "<evaluator1.score>",
  "generatedEmail": "<agent2.content>"
}

Notification

Como as pessoas aprovadoras são avisadas de que existe uma decisão esperando. Inclua a URL de aprovação (<blockId.url>) na mensagem para que elas possam abrir o portal. Canais disponíveis:

  • Slack — uma mensagem para um canal ou DM
  • Gmail — um e-mail com o link de aprovação
  • Microsoft Teams — uma notificação de canal
  • SMS — um alerta por texto via Twilio
  • Webhook — uma requisição para o seu próprio sistema de notificação

Resume Form

Os campos que a pessoa aprovadora preenche ao responder. Cada um fica disponível para os blocks seguintes quando a execução é retomada.

{
  "approved": {
    "type": "boolean",
    "description": "Approve or reject this request"
  },
  "comments": {
    "type": "string",
    "description": "Optional feedback or explanation"
  }
}

Acesse os dados da retomada nos blocks seguintes usando <blockId.fieldName>.

Métodos de aprovação

Portal de aprovação

Cada block gera uma URL de portal única (<blockId.url>) com uma interface visual que mostra todos os dados de saída pausados e os campos do formulário de retomada. É responsivo em dispositivos móveis e seguro.

Compartilhe essa URL nas notificações para que as pessoas aprovadoras revisem e respondam.

API REST

Retome workflows programaticamente pelo recurso de run da v2. O contextId está disponível na saída resumeEndpoint do block ou no objeto _resume da resposta da execução pausada.

POST /api/v2/workflows/{workflowId}/runs/{runId}/resume
Content-Type: application/json
X-API-Key: your-api-key

{
  "contextId": "<contextId>",
  "input": {
    "approved": true,
    "comments": "Looks good to proceed"
  }
}

O endpoint de retomada respeita automaticamente o modo de execução usado na chamada original de execute:

  • Modo sync (padrão) — a resposta espera o restante do workflow terminar e retorna o resultado completo:
{
  "data": {
    "runId": "<resumeRunId>",
    "workflowId": "<workflowId>",
    "status": "completed",
    "output": { ... },
    "error": null,
    "startedAt": "...",
    "endedAt": "...",
    "durationMs": 1234
  }
}

Se o workflow retomado encontrar outro block HITL, a resposta retorna "status": "paused" com novas URLs _resume na saída.

  • Modo stream (stream: true na chamada original de execute) — a resposta da retomada envia eventos SSE com chunks de selectedOutputs, igual à execução inicial.

  • Modo async (async: true na chamada original de execute da v2) — a retomada despacha a execução para um worker em segundo plano e retorna imediatamente com 202, incluindo o runId da tentativa de retomada e a statusUrl da v2 para polling:

{
  "data": {
    "runId": "<resumeRunId>",
    "statusUrl": "/api/v2/workflows/<workflowId>/runs/<resumeRunId>"
  }
}

Consultar o status da execução

Faça polling na statusUrl da resposta async para saber quando a retomada termina:

GET /api/v2/workflows/{workflowId}/runs/{resumeRunId}?includeOutput=true
X-API-Key: your-api-key

Retorna o status da execução e, quando concluída, a saída completa do workflow.

O endpoint legado continua disponível sem mudanças de comportamento para integrações existentes:

POST /api/resume/{workflowId}/{executionId}/{contextId}

A resposta async dele continua expondo jobId e a URL legada de polling /api/jobs/{jobId}.

Para verificar os pontos de pausa e os links de retomada de uma execução pausada:

GET /api/resume/{workflowId}/{executionId}
X-API-Key: your-api-key

Retorna o detalhe da execução pausada com todos os pontos de pausa, seus status e os links de retomada. Retorna 404 quando a execução já terminou e não está mais pausada.

Webhook

Adicione uma ferramenta de webhook à seção Notification para enviar pedidos de aprovação a sistemas externos. Integre com sistemas de tickets como Jira ou ServiceNow.

Comportamento do execute da API

Quando você dispara um workflow por POST /api/v2/workflows/{id}/execute, os blocks HITL fazem a execução pausar e retornam os dados de _resume no envelope de resposta da v2. O endpoint legado POST /api/workflows/{id}/execute continua disponível para integrações existentes.

A resposta inclui todos os dados da pausa, com as URLs de retomada:

{
  "data": {
    "runId": "<runId>",
    "workflowId": "<workflowId>",
    "status": "paused",
    "output": {
      "data": {
        "operation": "human",
        "_resume": {
          "apiUrl": "/api/resume/{workflowId}/{executionId}/{contextId}",
          "uiUrl": "/resume/{workflowId}/{executionId}",
          "contextId": "<contextId>",
          "executionId": "<executionId>",
          "workflowId": "<workflowId>"
        }
      }
    },
    "error": null
  }
}

Os blocks antes do HITL enviam seus selectedOutputs normalmente. Quando a execução pausa, o evento SSE final inclui status: "paused" e os dados de _resume:

data: {"blockId":"agent1","chunk":"streamed content..."}
data: {"event":"final","data":{"success":true,"output":{...,"_resume":{...}},"status":"paused"}}
data: "[DONE]"

Na retomada, os blocks depois do HITL enviam seus selectedOutputs da mesma forma.

Os blocks HITL são excluídos automaticamente do menu selectedOutputs, já que os dados deles sempre são incluídos na resposta da pausa.

Retorna 202 imediatamente. Use o endpoint de polling para saber quando a execução pausa.

Exemplos

Aprovar conteúdo antes de ele sair

A execução pausa no block Human in the Loop até alguém aprovar; na retomada, o block API publica. O mesmo portão funciona antes de qualquer ação, como enviar um e-mail para um cliente.

Encadear várias aprovações

Para uma mudança de alto risco, encadeie duas etapas de aprovação — um gerente e depois um diretor — antes de o workflow executar.

Conferir dados extraídos

Uma pessoa revisora confere os dados que um Agent extraiu antes de uma Function processá-los.

Saídas

SaídaO que é
urlA URL do portal de aprovação
resumeEndpointO endpoint de API para retomar
responseOs dados exibidos para a pessoa aprovadora
submissionO envio do formulário pela pessoa aprovadora
submittedAtTimestamp ISO de quando a execução foi retomada
<fieldName>Cada campo do Resume Form, por nome, depois de a execução ser retomada

Leia essas saídas adiante como <blockName.output> — para um block chamado approval, isso é <approval.approved>.

O portal de aprovação

Saída pausada:

{
  "title": "<agent1.content.title>",
  "body": "<agent1.content.body>",
  "qualityScore": "<evaluator1.score>"
}

Entrada da retomada:

{
  "approved": { "type": "boolean" },
  "feedback": { "type": "string" }
}

Uso nos blocks seguintes:

// Condition block
<approval1.approved> === true

Depois de o workflow ser pausado, as pessoas aprovadoras podem revisar os dados e fornecer entradas como parte da retomada do workflow. O portal de aprovação pode ser acessado diretamente pela URL única, <blockId.url>.

Blocks relacionados

  • Condition - Ramifica com base nas decisões de aprovação
  • Variables - Armazena histórico e metadados de aprovação
  • Response - Retorna os resultados do workflow para quem chamou a API

Common Questions

O workflow pausa indefinidamente até uma pessoa fornecer a entrada pelo portal de aprovação, pela API REST ou por um webhook. Não há tempo limite automático — ele espera até alguém responder.
Você pode configurar notificações por Slack, Gmail, Microsoft Teams, SMS (via Twilio) ou webhooks personalizados. Inclua a URL de aprovação na mensagem de notificação para que as pessoas aprovadoras acessem o portal diretamente.
Use a sintaxe <blockId.fieldName> para referenciar campos específicos do formulário de retomada. Por exemplo, se o nome do seu block é 'approval1' e o formulário tem um campo 'approved', use <approval1.approved>.
Sim. Você pode colocar vários blocks Human in the Loop em sequência para criar workflows de aprovação em múltiplas etapas. Cada block pausa de forma independente e pode ter sua própria configuração de notificação e seus próprios campos de formulário de retomada.
Sim. Cada block expõe um endpoint de API de retomada que você pode chamar com uma requisição POST contendo os dados do formulário em JSON. Isso permite construir interfaces de aprovação próprias ou integrar com sistemas existentes, como Jira ou ServiceNow.
As saídas do block incluem a URL do portal de aprovação, a URL do endpoint de API de retomada, os dados exibidos para a pessoa aprovadora, os dados enviados no formulário, a entrada bruta da retomada e um timestamp ISO de quando o workflow foi retomado.