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

PropriedadeTipoDescrição
idstring (UUID)UUID do fluxo (opcional para criação, obrigatório para edição)
createdAtstring (date-time)Data de criação do fluxo (gerado automaticamente)
updatedAtstring (date-time)Data da última atualização do fluxo (gerado automaticamente)
createdBystring (UUID)UUID do usuário que criou o fluxo (opcional)
chainJsonarrayArray com a configuração do fluxo (obrigatório)
decisionNamestringNome do fluxo (obrigatório)
hostIdstring (UUID)UUID do host (obrigatório)
avatarIdstring (UUID)UUID do avatar (obrigatório)
activebooleanIndica se o fluxo está ativo (obrigatório)
promptTemplateNamestringNome do template de prompt (opcional)
lastUpdateBystring (UUID)UUID do último usuário a atualizar o fluxo (gerado automaticamente)
decisionTypestringTipo do decidor (obrigatório)
modelstringModelo utilizado (obrigatório)
templateRefstringReferência ao template (opcional)
deletedbooleanIndica 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:

PropriedadeTipoDescrição
typestringTipo da automação (obrigatório)
agentsarrayLista de agentes utilizados nesta etapa (opcional)
contentstringConteúdo da etapa (opcional)
canRepeatbooleanIndica se a etapa pode ser repetida (opcional)
descriptionstringDescrição da condição ou ação da etapa (obrigatório)

Estrutura de cada objeto no array agents

PropriedadeTipoDescrição
schemaNamestringNome do schema do agente (obrigatório)
agentNamestringNome do agente (obrigatório)
payloadobjetoConfiguraçõ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álidos
  • 401: Token de autenticação inválido ou ausente
  • 500: Erro interno do servidor