Você pode testar esta rota diretamente em nossa documentação interativa.

Cria um novo fluxo ou atualiza um existente. Envie id para editar; omita para criar.

Endpoint

POST /api/externalAPIs/public/tolkyReasoning/decisions/save

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)
instructionsstringInstruções para direcionar e contextualizar a escolha da IA (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
typestringNome da etapa no fluxo (obrigatório)
agentsarrayLista de agentes utilizados nesta etapa (opcional)
contentstringInstrução injetada na IA conversacional quando a etapa dispara. Deve ser autocontida; não dependa do texto de description.
canRepeatbooleanSe a etapa pode disparar de novo na mesma conversa. Use false para ações irreversíveis (ticket, CRM, cobrança).
descriptionstringQUANDO — critério de ativação. Só condição observável; nunca comando para o avatar (“responda”, “peça”, “abra ticket”).

description responde quando disparar. content responde o que o avatar deve fazer depois do disparo. Comando em description não chega à conversa. Guia: Como escrever o QUANDO.

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)

Use a rota decisions/generateAgent para obter a estrutura do payload de cada agente.

Exemplo: Do generateAgent para o saveDecisionChainHelper

1. Resposta do generateAgent 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/decisions/save' \
  -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",
      "instructions": "Priorize respostas objetivas e contextualizar com o histórico do usuário"
    }
  }'

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,
    "instructions": "Priorize respostas objetivas e contextualizar com o histórico do usuário",
    "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