Reference

Human in the Loop

O bloco Human in the Loop pausa uma execução e espera uma pessoa antes de continuar. Use para gates de aprovação, coletar feedback ou reunir entrada num ponto de decisão. A execução fica pausada — sem timeout — até alguém responder pelo portal de aprovação, pela API ou por um webhook.

Configuração

Display Data

O que o aprovador vê — o contexto mostrado no portal para ajudar a decidir. Monte campo a 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 os aprovadores são alertados de que uma decisão está esperando. Inclua a URL de aprovação (<blockId.url>) na mensagem para abrirem 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 de texto via Twilio
  • Webhook — uma request para o seu próprio sistema de notificação

Resume Form

Os campos que o aprovador preenche ao responder. Cada um fica disponível para blocos downstream quando a execução retoma.

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

Acesse dados de resume em blocos downstream com <blockId.fieldName>.

Métodos de aprovação

Approval Portal

Todo bloco gera uma URL única de portal (<blockId.url>) com uma interface visual mostrando todos os dados de saída pausados e campos de formulário para a entrada de resume. Responsivo para mobile e seguro.

Compartilhe esta URL nas notificações para os aprovadores revisarem e responderem.

REST API

Retome workflows programaticamente usando o endpoint de resume. O contextId está disponível na saída resumeEndpoint do bloco ou no objeto _resume da resposta da execução pausada.

POST /api/resume/{workflowId}/{executionId}/{contextId}
Content-Type: application/json
X-API-Key: your-api-key

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

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

  • Sync mode (padrão) — A resposta espera o restante do workflow concluir e retorna o resultado completo:
{
  "success": true,
  "status": "completed",
  "executionId": "<resumeExecutionId>",
  "output": { ... },
  "metadata": { "duration": 1234, "startTime": "...", "endTime": "..." }
}

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

  • Stream mode (stream: true na chamada execute original) — A resposta de resume faz stream de eventos SSE com chunks selectedOutputs, como a execução inicial.

  • Async mode (X-Execution-Mode: async na chamada execute original) — O resume despacha a execução para um worker em background e retorna imediatamente com 202, incluindo um jobId e statusUrl para polling:

{
  "success": true,
  "async": true,
  "jobId": "<jobId>",
  "executionId": "<resumeExecutionId>",
  "message": "Resume execution queued",
  "statusUrl": "/api/jobs/<jobId>"
}

Polling do status da execução

Faça poll do statusUrl da resposta async para checar quando o resume conclui:

GET /api/jobs/{jobId}
X-API-Key: your-api-key

Retorna o status do job e, quando concluído, a saída completa do workflow.

Para checar os pause points e links de resume 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 pause points, seus status e links de resume. Retorna 404 quando a execução concluiu e não está mais pausada.

Webhook

Adicione uma tool de webhook na seção Notification para enviar pedidos de aprovação a sistemas externos. Integre com sistemas de ticketing como Jira ou ServiceNow.

Comportamento do API Execute

Ao disparar um workflow via API execute (POST /api/workflows/{id}/execute), blocos HITL fazem a execução pausar e retornar os dados _resume na resposta:

A resposta inclui os dados completos de pause com URLs de resume:

{
  "success": true,
  "executionId": "<executionId>",
  "output": {
    "data": {
      "operation": "human",
      "_resume": {
        "apiUrl": "/api/resume/{workflowId}/{executionId}/{contextId}",
        "uiUrl": "/resume/{workflowId}/{executionId}",
        "contextId": "<contextId>",
        "executionId": "<executionId>",
        "workflowId": "<workflowId>"
      }
    }
  }
}

Blocos antes do HITL fazem stream dos selectedOutputs normalmente. Quando a execução pausa, o evento SSE final inclui status: "paused" e os dados _resume:

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

No resume, blocos depois do HITL fazem stream dos selectedOutputs da mesma forma.

Blocos HITL são automaticamente excluídos do dropdown selectedOutputs, já que seus dados sempre entram na resposta de pause.

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

Exemplos

Aprovar conteúdo antes de publicar

A execução pausa no bloco Human in the Loop até alguém aprovar; no resume, a API publica. O mesmo gate funciona antes de qualquer ação, como enviar um e-mail ao cliente.

Encadear várias aprovações

Para uma mudança de alto risco, encadeie dois passos de aprovação — um manager e depois um director — antes do workflow executar.

Verificar dados extraídos

Um revisor checa os dados que um Agent extraiu antes de um Function processá-los.

Saídas

SaídaO que é
urlA URL do portal de aprovação
resumeEndpointO endpoint da API de resume
responseOs dados de display mostrados ao aprovador
submissionO envio do formulário do aprovador
submittedAtTimestamp ISO de quando a execução retomou
<fieldName>Cada campo do Resume Form, pelo nome, depois que a execução retoma

Leia-as downstream como <blockName.output> — para um bloco chamado approval, isso é <approval.approved>.

O portal de aprovação

Paused Output:

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

Resume Input:

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

Uso downstream:

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

O exemplo abaixo mostra um portal de aprovação como visto por um aprovador depois que o workflow é pausado. Aprovadores 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>.

Blocos relacionados

  • Condition - Ramifique com base em decisões de aprovação
  • Variables - Armazene histórico de aprovação e metadados
  • Response - Retorne resultados do workflow a callers de API

Common Questions

O workflow pausa indefinidamente até um humano fornecer entrada pelo portal de aprovação, pela REST API ou por um webhook. Não há timeout automático — ele espera até alguém responder.
Você pode configurar notificações por Slack, Gmail, Microsoft Teams, SMS (via Twilio) ou webhooks customizados. Inclua a URL de aprovação na mensagem de notificação para os aprovadores acessarem o portal diretamente.
Use a sintaxe <blockId.fieldName> para referenciar campos específicos do resume form. Por exemplo, se o nome do seu bloco é 'approval1' e o formulário tem um campo 'approved', use <approval1.approved>.
Sim. Você pode colocar vários blocos Human in the Loop em sequência para criar workflows de aprovação em múltiplos estágios. Cada bloco pausa de forma independente e pode ter sua própria configuração de notificação e campos de resume form.
Sim. Cada bloco expõe um endpoint de API de resume que você pode chamar com um POST contendo os dados do formulário como JSON. Isso permite construir UIs de aprovação customizadas ou integrar com sistemas existentes como Jira ou ServiceNow.
As saídas do bloco incluem a URL do portal de aprovação, a URL do endpoint da API de resume, os dados de display mostrados ao aprovador, os dados do envio do formulário, a entrada crua de resume e um timestamp ISO de quando o workflow foi retomado.

On this page