Gerenciamento de Fluxos de Automação
Salvar Fluxo
Endpoint para salvar ou editar um fluxo existente.
Este endpoint permite salvar um novo fluxo ou editar um fluxo existente.
Funcionamento
A rota saveDecisionChainHelper
possui um comportamento dual:
- Quando um
id
é enviado na requisição: A rota funciona como um endpoint de edição, atualizando o fluxo existente que corresponde ao ID fornecido. - Quando nenhum
id
é enviado ou o ID não existe: A rota funciona como um endpoint de criação, gerando um novo fluxo com os dados fornecidos.
Endpoint
POST /api/externalAPIs/public/tolkyReasoning/saveDecisionChainHelper
Parâmetros
Propriedade | Tipo | Descrição |
---|---|---|
id | string (UUID) | UUID do fluxo (opcional para criação, obrigatório para edição) |
createdAt | string (date-time) | Data de criação do fluxo (gerado automaticamente) |
updatedAt | string (date-time) | Data da última atualização do fluxo (gerado automaticamente) |
createdBy | string (UUID) | UUID do usuário que criou o fluxo (opcional) |
chainJson | array | Array com a configuração do fluxo (obrigatório) |
decisionName | string | Nome do fluxo (obrigatório) |
hostId | string (UUID) | UUID do host (obrigatório) |
avatarId | string (UUID) | UUID do avatar (obrigatório) |
active | boolean | Indica se o fluxo está ativo (obrigatório) |
promptTemplateName | string | Nome do template de prompt (opcional) |
lastUpdateBy | string (UUID) | UUID do último usuário a atualizar o fluxo (gerado automaticamente) |
decisionType | string | Tipo do decidor (obrigatório) |
model | string | Modelo utilizado (obrigatório) |
templateRef | string | Referência ao template (opcional) |
deleted | boolean | Indica se o fluxo foi excluído (gerado automaticamente) |
Estrutura do array chainJson
Cada objeto no array chainJson
representa uma etapa do fluxo e possui a seguinte estrutura:
Propriedade | Tipo | Descrição |
---|---|---|
type | string | Tipo da automação (obrigatório) |
agents | array | Lista de agentes utilizados nesta etapa (opcional) |
content | string | Conteúdo da etapa (opcional) |
canRepeat | boolean | Indica se a etapa pode ser repetida (opcional) |
description | string | Descrição da condição ou ação da etapa (obrigatório) |
Estrutura de cada objeto no array agents
Propriedade | Tipo | Descrição |
---|---|---|
schemaName | string | Nome do schema do agente (obrigatório) |
agentName | string | Nome do agente (obrigatório) |
payload | objeto | Configurações específicas do agente (obrigatório) |
O objeto payload
deve ser construído de acordo com o retorno da rota generateAgentHelper
. Utilize essa rota para obter a estrutura correta do payload para cada tipo de agente. Por exemplo, para um agente do tipo “newTicket”, o payload pode conter propriedades como testBlock
e generalInstructions
.
Exemplo: Do generateAgentHelper para o saveDecisionChainHelper
1. Resposta do generateAgentHelper para um agente “newTicket”
{
"code": 200,
"data": {
"id": "http://exemplo.com/schemas/ticket-config.json",
"type": "object",
"title": "New Ticket Config",
"schema": "http://json-schema.org/draft-07/schema",
"required": [],
"properties": {
"testBlock": {
"type": "boolean",
"default": false,
"description": "Valor para determinar se o agente deve ser bloqueado nos testes automatizados."
},
"generalInstructions": {
"type": "string",
"default": "",
"description": "Instruções gerais do gestor para contextualizar sobre a finalidade do ticket a ser criado."
}
},
"description": "Configuração para criação de tickets."
},
"message": "OK"
}
2. Payload correspondente no saveDecisionChainHelper
{
"schemaName": "tickets",
"agentName": "newTicket",
"payload": {
"testBlock": true,
"generalInstructions": "Instruções para o ticket"
}
}
Exemplo de Requisição
curl -X POST \
'{BASE_URL}/api/externalAPIs/public/tolkyReasoning/saveDecisionChainHelper' \
-H 'Content-Type: application/json' \
-d '{
"decisionChain": {
"id": "uuid-do-fluxo",
"decisionName": "Nome do Fluxo",
"hostId": "uuid-do-host",
"avatarId": "uuid-do-avatar",
"chainJson": [
{
"type": "Automação 1",
"agents": [
{
"schemaName": "tickets",
"agentName": "newTicket",
"payload": {
"testBlock": true,
"generalInstructions": ""
}
},
{
"schemaName": "public",
"agentName": "setHumanHelp",
"payload": {
"testBlock": true
}
}
],
"content": "",
"canRepeat": true,
"description": "QUANDO o usuário mostrar interesse em determinada ação"
}
],
"active": true,
"decisionType": "orchestrator",
"model": "gpt-4.1-nano"
}
}'
Exemplo de Resposta
{
"code": 200,
"message": "Success",
"data": {
"id": "uuid-do-fluxo",
"createdAt": "2025-04-04T18:53:14.144175+00:00",
"updatedAt": "2025-05-07T19:38:10.660556+00:00",
"createdBy": null,
"chainJson": [
{
"type": "Automação 1",
"agents": [
{
"schemaName": "tickets",
"agentName": "newTicket",
"payload": {
"testBlock": true,
"generalInstructions": ""
}
},
{
"schemaName": "public",
"agentName": "setHumanHelp",
"payload": {
"testBlock": true
}
}
],
"content": "",
"canRepeat": true,
"description": "QUANDO o usuário mostrar interesse em determinada ação"
}
],
"decisionName": "Nome do Fluxo",
"hostId": "uuid-do-host",
"avatarId": "uuid-do-avatar",
"active": true,
"promptTemplateName": null,
"lastUpdateBy": "uuid-do-ultimo-usuario",
"decisionType": "orchestrator",
"model": "gpt-4.1-nano",
"templateRef": null,
"deleted": false
}
}
Códigos de Erro
400
: Campos obrigatórios ausentes ou inválidos401
: Token de autenticação inválido ou ausente500
: Erro interno do servidor