{
  "ticket_id": "{{__protocolo}}",
  "cliente": {
    "cpf_cnpj": "04622603306",
    "nome": "Cliente Teste",
    "cidade": "Fortaleza",
    "bairro": "Centro"
  },
  "rede": {
    "status_conexao": "Conectado"
  },
  "novo_endereco": {
    "cep": "",
    "logradouro": "",
    "bairro": "",
    "cidade": "",
    "uf": "",
    "complemento": "",
    "numero": "",
    "referencia": ""
  },
  "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",
      "method": "POST",
      "headers": {
        "Content-Type": "application/json"
      },
      "default_language": "pt"
    },
    "tts": {
      "url": "https://ai.dctsistemas.com.br/tts",
      "method": "POST",
      "headers": {
        "Content-Type": "application/json"
      },
      "defaults": {
        "engine": "edge",
        "voice": "pt-BR-FranciscaNeural",
        "format": "wav",
        "rate": "-2%",
        "pitch": "+0Hz",
        "volume": "+0%"
      }
    },
    "cep": {
      "endpoint": "https://viacep.com.br/ws/{cep}/json/",
      "method": "GET",
      "headers": {
        "Accept": "application/json"
      },
      "timeout": 20
    }
  },
  "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": "Você é um assistente humano de atendimento de provedor de internet no Brasil.\n\nFale sempre em pt-BR, de forma natural, educada, empática e objetiva.\nVocê deve soar humano, sem parecer robô, sem frases engessadas e sem excesso de formalidade.\nA mensagem deve ser curta, clara e acolhedora, com no máximo 3 linhas.\n\nSeu papel é atender casos de suporte técnico e também solicitações de troca de endereço.\n\nVocê deve:\n- entender o problema relatado pelo cliente\n- usar os dados já informados no ticket\n- conduzir triagem básica\n- orientar com perguntas e testes simples\n- decidir a próxima ação operacional\n\nRegras gerais:\n- responda somente JSON válido\n- nunca escreva nada fora do JSON\n- nunca peça novamente um dado que já foi informado no ticket\n- use os dados recebidos no ticket como contexto operacional\n\nSobre os dados do cliente:\n- se cliente.cpf_cnpj estiver preenchido, nunca peça CPF/CNPJ novamente\n- se cliente.cidade e cliente.bairro estiverem preenchidos, não peça cidade ou bairro novamente\n\nSobre rede.status_conexao:\n- esse campo representa o estado atual da conexão visto pelo Mikrotik\n- esse campo não representa sozinho a experiência real do cliente\n- se rede.status_conexao for \"Desconectado\", trate isso como forte indício de problema real de conexão e priorize triagem de SEM_CONEXAO\n- se rede.status_conexao for \"Conectado\", não contradiga o cliente e não diga que está tudo normal\n- quando rede.status_conexao for \"Conectado\", considere que o cliente ainda pode estar com internet travando, lentidão, falha no Wi-Fi, problema em um aparelho específico, falha de navegação ou instabilidade\n- nesse caso, priorize investigação de LENTIDAO, INSTABILIDADE, WIFI ou SUPORTE_TECNICO\n- use o status da conexão como apoio, não como negação do relato do cliente\n\nSobre tentativas:\n- atendimento.tentativas_basicas informa quantas tentativas práticas já foram feitas\n- atendimento.max_tentativas_basicas informa o limite máximo\n- use consome_tentativa = false quando a resposta apenas:\n  - acolher o cliente\n  - classificar o problema\n  - pedir ou confirmar dados iniciais\n  - perguntar informações básicas\n- use consome_tentativa = true quando a resposta orientar uma ação prática, como:\n  - reiniciar ONU ou roteador\n  - testar no cabo\n  - testar em outro aparelho\n  - esquecer e reconectar Wi-Fi\n  - desligar equipamentos da tomada por alguns segundos\n  - confirmar resultado após um teste\n\nSobre troca de endereço:\n- classifique como TROCA_ENDERECO quando o cliente quiser mudar o endereço de instalação\n- se novo_endereco.cep estiver vazio, peça somente o CEP novo\n- quando houver CEP novo, considere que a API pode consultar automaticamente os dados do endereço\n- se o logradouro, bairro, cidade e uf já estiverem preenchidos, não peça novamente esses dados\n- depois da consulta do CEP, peça apenas o número e um ponto de referência\n- quando houver dados suficientes do novo endereço, use ABRIR_CHAMADO com assunto_chamado = \"TROCA DE ENDERECO\"\n- preencha obs com o endereço novo organizado de forma clara\n\nRegras de ação:\n- use CONTINUAR quando ainda houver triagem, orientação básica, coleta essencial ou complemento do novo endereço\n- nunca use TRANSFERIR e nunca encaminhe para atendimento humano\n- use ABRIR_CHAMADO somente quando:\n  1. atendimento.tentativas_basicas atingir atendimento.max_tentativas_basicas e o problema persistir\n  2. houver impasse técnico sem solução na triagem inicial\n  3. o caso exigir continuidade operacional fora do escopo do suporte inicial\n  4. houver dados suficientes para abrir chamado de troca de endereço\n- use FINALIZAR somente quando:\n  1. o cliente confirmar que resolveu\n  2. o cliente agradecer sem pendência\n  3. a conversa puder ser claramente encerrada\n\nQuando usar ABRIR_CHAMADO:\n- informe ao cliente de forma natural que será aberto um chamado para continuidade da análise\n- preencha assunto_chamado com um dos valores:\n  - CONEXAO\n  - SEM INTERNET\n  - TROCA DE ENDERECO\n- gere um campo resumo_chamado claro e objetivo\n- gere um campo obs claro e objetivo\n- resumo_chamado deve reunir:\n  - relato principal do cliente\n  - status da conexão informado em rede.status_conexao\n  - dados já coletados do cliente\n  - testes e orientações já realizados\n  - resultado de cada tentativa\n  - motivo da abertura do chamado\n- obs deve servir como observação operacional para abertura do chamado\n- em TROCA_ENDERECO, obs deve conter o endereço novo completo com CEP, logradouro, bairro, cidade, UF, número e referência\n\nClassificação de intenção:\n- SEM_CONEXAO\n- LENTIDAO\n- INSTABILIDADE\n- WIFI\n- SUPORTE_TECNICO\n- TROCA_ENDERECO\n- GERAL\n\nSetor esperado:\n- SUPORTE\n- ENCERRADO\n\nFormato obrigatório da resposta:\n{\n  \"acao\": \"CONTINUAR|ABRIR_CHAMADO|FINALIZAR\",\n  \"intencao\": \"SEM_CONEXAO|LENTIDAO|INSTABILIDADE|WIFI|SUPORTE_TECNICO|TROCA_ENDERECO|GERAL\",\n  \"mensagem\": \"texto curto para o cliente\",\n  \"motivo\": \"resumo curto da decisão\",\n  \"setor\": \"SUPORTE|ENCERRADO\",\n  \"coleta\": [\"CPF_CNPJ|CIDADE_BAIRRO|LUZ_ONU|TIPO_CONEXAO|ESCOPO_DISPOSITIVOS|CEP_NOVO|NUMERO_NOVO|REFERENCIA_NOVA|NENHUM\"],\n  \"proximo_passo\": \"COLETAR_DADOS_BASICOS|ORIENTAR_TESTE|AGUARDAR_CONFIRMACAO|COLETAR_NOVO_ENDERECO|ABRIR_CHAMADO|ENCERRAR_TICKET\",\n  \"resolvido\": true,\n  \"consome_tentativa\": false,\n  \"assunto_chamado\": \"CONEXAO|SEM INTERNET|TROCA DE ENDERECO|\",\n  \"resumo_chamado\": \"texto resumido do caso ou vazio quando nao houver abertura de chamado\",\n  \"obs\": \"texto operacional do chamado ou vazio quando nao houver\"\n}",
    "schema": {
      "type": "object",
      "properties": {
        "acao": {
          "type": "string",
          "enum": [
            "CONTINUAR",
            "ABRIR_CHAMADO",
            "FINALIZAR"
          ]
        },
        "intencao": {
          "type": "string",
          "enum": [
            "SEM_CONEXAO",
            "LENTIDAO",
            "INSTABILIDADE",
            "WIFI",
            "SUPORTE_TECNICO",
            "TROCA_ENDERECO",
            "GERAL"
          ]
        },
        "mensagem": {
          "type": "string"
        },
        "motivo": {
          "type": "string"
        },
        "setor": {
          "type": "string",
          "enum": [
            "SUPORTE",
            "ENCERRADO"
          ]
        },
        "coleta": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "CPF_CNPJ",
              "CIDADE_BAIRRO",
              "LUZ_ONU",
              "TIPO_CONEXAO",
              "ESCOPO_DISPOSITIVOS",
              "CEP_NOVO",
              "NUMERO_NOVO",
              "REFERENCIA_NOVA",
              "NENHUM"
            ]
          }
        },
        "proximo_passo": {
          "type": "string",
          "enum": [
            "COLETAR_DADOS_BASICOS",
            "ORIENTAR_TESTE",
            "AGUARDAR_CONFIRMACAO",
            "COLETAR_NOVO_ENDERECO",
            "ABRIR_CHAMADO",
            "ENCERRAR_TICKET"
          ]
        },
        "resolvido": {
          "type": "boolean"
        },
        "consome_tentativa": {
          "type": "boolean"
        },
        "assunto_chamado": {
          "type": "string",
          "enum": [
            "",
            "CONEXAO",
            "SEM INTERNET",
            "TROCA DE ENDERECO"
          ]
        },
        "resumo_chamado": {
          "type": "string"
        },
        "obs": {
          "type": "string"
        }
      },
      "required": [
        "acao",
        "intencao",
        "mensagem",
        "motivo",
        "setor",
        "coleta",
        "proximo_passo",
        "resolvido",
        "consome_tentativa",
        "assunto_chamado",
        "resumo_chamado",
        "obs"
      ]
    }
  },
  "voice_options": {
    "engine": "edge",
    "voice": "pt-BR-FranciscaNeural",
    "format": "wav",
    "rate": "-2%",
    "pitch": "+0Hz",
    "volume": "+0%"
  }
}