ORCHESTRATE . DCT SISTEMAS

Documentação completa da API

Esta aplicação orquestra texto, áudio, TTS, transcrição, decisão com Gemini, abertura de chamado e fluxo de troca de endereço com confirmação. Use esta página como referência operacional e de integração no Flowbuilder.

Base: https://orchestrate.dctsistemas.com.br/api/

Visão geral

A API recebe uma mensagem do cliente por texto ou áudio, mantém contexto por ticket_id, consulta a Gemini para decidir a ação, pode sintetizar a resposta em áudio e devolve um JSON pronto para o Flowbuilder.

CONTINUAR ABRIR_CHAMADO FINALIZAR SEM_CONEXAO LENTIDAO TROCA_ENDERECO
Use o root do domínio só para documentação. O consumo operacional deve sempre apontar para /api/.

Endpoints

GET https://orchestrate.dctsistemas.com.br/api/health
Health check rápido da API.
POST https://orchestrate.dctsistemas.com.br/api/
Endpoint principal de orquestração. Aceita texto ou áudio, chama Gemini, TTS, CEP e devolve o JSON final.
POST https://orchestrate.dctsistemas.com.br/api/orchestrate
Alias compatível do endpoint principal.
POST https://skynetfibra.net.br/apidct/chamado.php
Endpoint externo usado pelo Flowbuilder quando a decisão vier como ABRIR_CHAMADO.
POST https://ai.dctsistemas.com.br/tts
Serviço externo de TTS usado pela API para gerar o áudio de resposta.
POST https://ai.dctsistemas.com.br/transcribe
Serviço externo de transcrição usado quando a entrada vier em áudio.

JSONs de entrada

1) Texto simples

{
  "ticket_id": "{{__protocolo}}",
  "cliente": {
    "login": "alexandro8281",
    "cpf_cnpj": "04622603306",
    "nome": "ALEXANDRO SOARES DO NASCIMENTO",
    "cidade": "Fortaleza",
    "bairro": "Centro"
  },
  "rede": {
    "status_conexao": "Conectado"
  },
  "message": {
    "text": "{{__pergunta}}"
  }
}

2) Áudio de entrada

{
  "ticket_id": "{{__protocolo}}",
  "cliente": {
    "login": "alexandro8281",
    "cpf_cnpj": "04622603306",
    "nome": "ALEXANDRO SOARES DO NASCIMENTO"
  },
  "message": {
    "audio_url": "https://seu-dominio.com/audio-cliente.ogg"
  },
  "voice_options": {
    "engine": "edge",
    "voice": "pt-BR-FranciscaNeural",
    "format": "wav",
    "rate": "-2%",
    "pitch": "+0Hz",
    "volume": "+0%"
  }
}

3) Body completo sugerido para o Flowbuilder

{
  "ticket_id": "{{__protocolo}}",
  "cliente": {
    "login": "alexandro8281",
    "cpf_cnpj": "04622603306",
    "nome": "Cliente Teste",
    "cidade": "Fortaleza",
    "bairro": "Centro"
  },
  "rede": {
    "status_conexao": "Conectado"
  },
  "message": {
    "text": "{{__pergunta}}"
  },
  "context": {
    "status_ticket": "EM_ATENDIMENTO",
    "ultimo_setor": "SUPORTE",
    "ultima_acao": "CONTINUAR",
    "historico_resumido": "Cliente em atendimento inicial de suporte."
  },
  "providers": {
    "transcribe": {
      "url": "https://ai.dctsistemas.com.br/transcribe",
      "headers": {
        "Content-Type": "application/json"
      },
      "default_language": "pt"
    },
    "tts": {
      "url": "https://ai.dctsistemas.com.br/tts",
      "headers": {
        "Content-Type": "application/json"
      },
      "defaults": {
        "engine": "edge",
        "voice": "pt-BR-FranciscaNeural",
        "format": "wav",
        "rate": "-2%",
        "pitch": "+0Hz",
        "volume": "+0%"
      }
    }
  },
  "gemini": {
    "api_key": "SUA_CHAVE_GEMINI_AQUI",
    "model": "gemini-2.5-flash",
    "endpoint": "https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent",
    "temperature": 0.2,
    "system_instruction": "COLE AQUI O PROMPT COMPLETO USADO NO FLOWBUILDER",
    "schema": {
      "type": "object"
    }
  },
  "voice_options": {
    "engine": "edge",
    "voice": "pt-BR-FranciscaNeural",
    "format": "wav",
    "rate": "-2%",
    "pitch": "+0Hz",
    "volume": "+0%"
  }
}

JSONs de saída

Resposta de texto

{
  "ok": true,
  "ticket_id": "123321",
  "decision": {
    "acao": "CONTINUAR",
    "intencao": "SEM_CONEXAO",
    "mensagem": "Entendi. Me diga as luzes do modem/ONU e as cores.",
    "motivo": "triagem inicial",
    "setor": "SUPORTE",
    "coleta": ["LUZ_ONU"],
    "proximo_passo": "COLETAR_DADOS_BASICOS",
    "resolvido": false,
    "consome_tentativa": false,
    "assunto_chamado": "",
    "resumo_chamado": "",
    "obs": ""
  },
  "reply": {
    "type": "text",
    "text": "Entendi. Me diga as luzes do modem/ONU e as cores."
  }
}

Resposta de áudio

{
  "reply": {
    "type": "audio",
    "text": "Entendi. Me diga as luzes do modem/ONU e as cores.",
    "audio_url": "https://orchestrate.dctsistemas.com.br/storage/tts/tts_20260416_201500_ab12cd34.wav",
    "audio": {
      "mime_type": "audio/wav",
      "url": "https://orchestrate.dctsistemas.com.br/storage/tts/tts_20260416_201500_ab12cd34.wav",
      "base64": "UklGR..."
    }
  },
  "input": {
    "metadata": {
      "original_audio_url": "https://dominio.com/audio-cliente.ogg"
    }
  }
}

Variáveis do Flowbuilder

Texto da resposta
{{response.data.reply.text}}
Tipo da resposta
{{response.data.reply.type}}
URL do áudio gerado
{{response.data.reply.audio_url}}
Ação
{{response.data.decision.acao}}
Próximo passo
{{response.data.decision.proximo_passo}}
Assunto do chamado
{{response.data.decision.assunto_chamado}}
Resumo do chamado
{{response.data.decision.resumo_chamado}}
Observação operacional
{{response.data.decision.obs}}
Se reply.type = audio, use a URL em reply.audio_url. Essa URL é do áudio da resposta gerado pelo TTS, não do áudio original do cliente.

Fluxo de troca de endereço

Quando o cliente pedir mudança de endereço, a API deve conduzir a coleta e confirmação antes de abrir o chamado.

  • Se não houver CEP novo, pedir apenas o CEP.
  • Ao receber o CEP, consultar automaticamente o endereço.
  • Depois pedir apenas número e ponto de referência.
  • Montar o endereço completo e pedir confirmação final com SIM ou NÃO.
  • Se o cliente responder NÃO, reiniciar a coleta do CEP.
  • Se o cliente responder SIM, retornar ABRIR_CHAMADO com assunto_chamado = TROCA DE ENDERECO.

Exemplo de mensagem de confirmação

Confirma pra mim se o novo endereço está certo:
Rua Exemplo, Centro, Fortaleza-CE, número 123, referência próximo à praça.
Responda só SIM ou NÃO.

Abertura de chamado

Quando a API retornar ABRIR_CHAMADO, o Flowbuilder deve fazer um segundo HTTP Request para o endpoint externo.

Endpoint

POST https://skynetfibra.net.br/apidct/chamado.php

Body sugerido

{
  "acao": "abrir_chamado",
  "login": "{{response.data.ticket_state.cliente.login}}",
  "nome": "{{response.data.ticket_state.cliente.nome}}",
  "assunto": "{{response.data.decision.assunto_chamado}}",
  "prioridade": "normal",
  "obs": "{{response.data.decision.obs}}",
  "atendente": "CHATBOT",
  "reply": "nao",
  "ramal": "todos",
  "tecnico": 0
}

Padronização do assunto

  • SEM INTERNET para falta de conexão.
  • CONEXAO para lentidão, Wi-Fi, instabilidade e suporte técnico.
  • TROCA DE ENDERECO para mudança de endereço confirmada.

Áudio de saída

Se a entrada vier por áudio, a API transcreve, gera a resposta em texto com Gemini, sintetiza um novo áudio no TTS e devolve a URL pública do áudio gerado.

TTS usado
POST https://ai.dctsistemas.com.br/tts
Formato recomendado
wav
Campo de uso no Flowbuilder
{{response.data.reply.audio_url}}

Dicas práticas

  • Use sempre ticket_id único por conversa.
  • Passe cliente.login quando quiser abrir chamado externo sem precisar buscar o login em outro lugar.
  • Passe rede.status_conexao como Conectado ou Desconectado para orientar melhor a triagem.
  • Use reply.audio_url no canal que espera uma URL pública de mídia.
  • O histórico operacional salvo pela API fica em https://orchestrate.dctsistemas.com.br/storage/tickets.json.
  • Troque a chave Gemini antes de produção e prefira mantê-la no servidor, não no Flowbuilder, quando possível.