{
 "format": "hinow.agent",
 "version": 1,
 "exported_at": "2026-09-01T00:00:00Z",
 "credentials_included": false,
 "agent": {
  "name": "Suporte com base de ajuda e chamados",
  "description": "Responde pela base de conhecimento e, quando não resolve, abre e acompanha chamados na sua API — sem duplicar e sem inventar prazo.",
  "avatar": null,
  "model": null,
  "system_prompt": null,
  "config": {},
  "tools": null,
  "workflow": {
   "nodes": [
    {
     "id": "start",
     "type": "start",
     "position": {
      "x": 300,
      "y": 0
     },
     "data": {
      "label": "Início",
      "variables": [
       {
        "name": "customer_id",
        "type": "input",
        "required": true,
        "description": "Identificador da conta do cliente, vindo da sua aplicação (que já autenticou a pessoa)."
       }
      ]
     }
    },
    {
     "id": "agent-1",
     "type": "agent",
     "position": {
      "x": 285,
      "y": 160
     },
     "data": {
      "name": "suporte",
      "model": "hinow/himax",
      "system_prompt": "Você é o suporte da Acme Software. Atende clientes por chat, em português.\n\nCOMO VOCÊ TRABALHA\n1. Primeiro entenda o problema. Uma pergunta de cada vez.\n2. Procure a resposta na base de ajuda antes de qualquer outra coisa: a maioria das dúvidas já está documentada.\n3. Se a base resolve, responda em passos curtos e numerados e ofereça ajuda para o próximo passo.\n4. Se a base não resolve, ou se o cliente relata algo quebrado, aí sim use o sistema de chamados.\n\nO CLIENTE DESTA CONVERSA\nO identificador da conta é {{customer_id}} — use sempre esse valor nas ferramentas, nunca peça ao cliente e nunca invente outro.\n\nANTES DE ABRIR UM CHAMADO\n- Verifique se já existe chamado aberto para o mesmo assunto (consultar_chamados). Cliente detesta abrir duplicado.\n- Verifique se não é um incidente geral em andamento (status_servico). Se for, explique e não abra chamado.\n- Só então abra, com um assunto específico e uma descrição que um técnico consiga reproduzir.\n\nO QUE VOCÊ NUNCA FAZ\n- Nunca invente número de chamado, prazo ou status: tudo vem das ferramentas.\n- Nunca peça senha, token, número de cartão ou documento. Se o cliente mandar, peça para não mandar e não repita o valor.\n- Nunca prometa correção com data se o chamado não trouxer prazo.",
      "config": {
       "temperature": 0.3,
       "max_tool_loops": 12
      }
     }
    },
    {
     "id": "rag-1",
     "type": "rag_search",
     "position": {
      "x": 575,
      "y": 90
     },
     "data": {
      "label": "Base de ajuda",
      "config": {
       "rag_ids": [],
       "top_k": 5,
       "min_score": 0.35
      }
     }
    },
    {
     "id": "hook-1",
     "type": "webhook",
     "position": {
      "x": 575,
      "y": 245
     },
     "data": {
      "label": "Sistema de chamados",
      "config": {
       "name": "API de suporte",
       "baseUrl": "https://api.suaempresa.com/support/v1",
       "timeout": 20000,
       "auth": {
        "type": "bearer",
        "token": "COLE_SEU_TOKEN_AQUI"
       },
       "retryOnError": true,
       "maxRetries": 2,
       "routes": [
        {
         "id": "r-status_servico",
         "name": "status_servico",
         "method": "GET",
         "path": "/status",
         "description": "Diz se há incidente em andamento nos serviços da Acme.",
         "whenToUse": "Antes de abrir chamado de indisponibilidade ou lentidão. Se houver incidente aberto, explique e não abra chamado novo.",
         "responseDescription": "Lista de serviços com status (ok/degradado/fora) e o incidente em andamento, se houver.",
         "parameters": [],
         "enabled": true
        },
        {
         "id": "r-consultar_chamados",
         "name": "consultar_chamados",
         "method": "GET",
         "path": "/tickets",
         "description": "Lista os chamados do cliente, do mais recente para o mais antigo.",
         "whenToUse": "No começo do atendimento e sempre antes de abrir um chamado novo — para não duplicar e para dar andamento ao que já existe.",
         "responseDescription": "Lista com número, assunto, status e data de cada chamado.",
         "parameters": [
          {
           "name": "customer_id",
           "type": "string",
           "required": true,
           "description": "Identificador da conta do cliente",
           "howToObtain": "É o {{customer_id}} desta conversa",
           "example": "acct_1042"
          },
          {
           "name": "status",
           "type": "string",
           "required": true,
           "description": "Filtro: aberto, em_andamento, resolvido ou todos",
           "howToObtain": "Use 'aberto' para o que está pendente e 'todos' quando não quiser filtrar — nunca deixe em branco",
           "example": "aberto"
          }
         ],
         "enabled": true,
         "queryParams": {
          "customer_id": "{{customer_id}}",
          "status": "{{status}}"
         }
        },
        {
         "id": "r-detalhe_chamado",
         "name": "detalhe_chamado",
         "method": "GET",
         "path": "/tickets/{{ticket_id}}",
         "description": "Traz o histórico completo de um chamado: descrição, comentários e status.",
         "whenToUse": "Quando o cliente pergunta 'e o meu chamado?' ou cita um número.",
         "responseDescription": "Assunto, status, prazo quando houver, e todos os comentários em ordem.",
         "parameters": [
          {
           "name": "ticket_id",
           "type": "string",
           "required": true,
           "description": "Número do chamado",
           "howToObtain": "Vem de consultar_chamados ou o cliente informa",
           "example": "TCK-8891"
          }
         ],
         "enabled": true
        },
        {
         "id": "r-abrir_chamado",
         "name": "abrir_chamado",
         "method": "POST",
         "path": "/tickets",
         "description": "Abre um chamado novo para o time técnico.",
         "whenToUse": "Só depois de a base de ajuda não resolver, de conferir que não há chamado igual aberto e de descartar incidente geral.",
         "responseDescription": "O número do chamado criado e o prazo previsto de primeira resposta.",
         "parameters": [
          {
           "name": "customer_id",
           "type": "string",
           "required": true,
           "description": "Identificador da conta",
           "howToObtain": "É o {{customer_id}} desta conversa",
           "example": "acct_1042"
          },
          {
           "name": "assunto",
           "type": "string",
           "required": true,
           "description": "Uma linha específica: o que está acontecendo",
           "howToObtain": "Resuma o problema do cliente",
           "example": "Exportação de relatório falha com erro 500"
          },
          {
           "name": "descricao",
           "type": "string",
           "required": true,
           "description": "Passos para reproduzir, o que era esperado e o que aconteceu",
           "howToObtain": "Monte a partir da conversa; pergunte o que faltar"
          },
          {
           "name": "prioridade",
           "type": "number",
           "required": true,
           "description": "1 (baixa) a 4 (crítica). Use 2 quando o cliente não indicar urgência",
           "howToObtain": "4 só quando o cliente está sem operar; nunca deixe em branco",
           "example": "2"
          }
         ],
         "enabled": true,
         "bodyTemplate": "{\"customer_id\": \"{{customer_id}}\", \"assunto\": \"{{assunto}}\", \"descricao\": \"{{descricao}}\", \"prioridade\": {{prioridade}}}"
        },
        {
         "id": "r-comentar_chamado",
         "name": "comentar_chamado",
         "method": "POST",
         "path": "/tickets/{{ticket_id}}/comments",
         "description": "Adiciona um comentário do cliente a um chamado existente.",
         "whenToUse": "Quando o cliente traz informação nova sobre algo já aberto — print, horário, mensagem de erro. Melhor que abrir outro chamado.",
         "responseDescription": "Confirmação de que o comentário entrou e o status atual do chamado.",
         "parameters": [
          {
           "name": "ticket_id",
           "type": "string",
           "required": true,
           "description": "Número do chamado",
           "howToObtain": "Vem de consultar_chamados",
           "example": "TCK-8891"
          },
          {
           "name": "mensagem",
           "type": "string",
           "required": true,
           "description": "O que o cliente acrescentou, em texto corrido"
          }
         ],
         "enabled": true,
         "bodyTemplate": "{\"mensagem\": \"{{mensagem}}\"}"
        }
       ]
      }
     }
    },
    {
     "id": "end-1",
     "type": "end",
     "position": {
      "x": 305,
      "y": 330
     },
     "data": {
      "label": "Fim",
      "status": "success"
     }
    }
   ],
   "edges": [
    {
     "id": "e-start-agent-1-d",
     "source": "start",
     "target": "agent-1"
    },
    {
     "id": "e-rag-1-agent-1-slot-1",
     "source": "rag-1",
     "target": "agent-1",
     "targetHandle": "slot-1"
    },
    {
     "id": "e-hook-1-agent-1-tool",
     "source": "hook-1",
     "target": "agent-1",
     "sourceHandle": "tool",
     "targetHandle": "slot-2"
    },
    {
     "id": "e-agent-1-end-1-d",
     "source": "agent-1",
     "target": "end-1"
    }
   ]
  }
 }
}
