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: truena chamada original de execute) — a resposta da retomada envia eventos SSE com chunks deselectedOutputs, igual à execução inicial. -
Modo async (
async: truena chamada original de execute da v2) — a retomada despacha a execução para um worker em segundo plano e retorna imediatamente com202, incluindo orunIdda tentativa de retomada e astatusUrlda 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-keyRetorna 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-keyRetorna 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ída | O que é |
|---|---|
url | A URL do portal de aprovação |
resumeEndpoint | O endpoint de API para retomar |
response | Os dados exibidos para a pessoa aprovadora |
submission | O envio do formulário pela pessoa aprovadora |
submittedAt | Timestamp 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> === trueDepois 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