{
 "format": "hinow.agent",
 "version": 1,
 "exported_at": "2026-09-01T00:00:00Z",
 "credentials_included": false,
 "agent": {
  "name": "Identificação sem senha",
  "description": "O agente descobre quem é o cliente por vínculo de canal com código de uso único — nenhuma senha passa pela conversa — e só então consulta plano e faturas.",
  "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": "channel",
        "type": "input",
        "required": true,
        "description": "Canal em que a conversa chegou: whatsapp, webchat ou email."
       },
       {
        "name": "identifier",
        "type": "input",
        "required": true,
        "description": "Identificador da pessoa neste canal (telefone, id de sessão). Não é segredo: é só o endereço do canal."
       }
      ]
     }
    },
    {
     "id": "guard-1",
     "type": "guardrails",
     "position": {
      "x": 288,
      "y": 150
     },
     "data": {
      "name": "Porteiro",
      "config": {
       "target": "input",
       "checks": {
        "pii": true
       },
       "fail_message": "A mensagem parece conter um dado sensível (documento, cartão ou telefone completo)."
      }
     }
    },
    {
     "id": "agent-1",
     "type": "agent",
     "position": {
      "x": 295,
      "y": 330
     },
     "data": {
      "name": "conta",
      "model": "hinow/himax",
      "system_prompt": "Você é o assistente da conta do cliente na Vega Telecom, atendendo pelo canal em que a pessoa escreveu.\n\nDADOS DESTE CANAL — use exatamente estes valores nas ferramentas, sem perguntar e sem inventar:\n- channel: {{channel}}\n- identifier: {{identifier}}\n\nIDENTIDADE — LEIA ANTES DE QUALQUER COISA\nVocê NÃO sabe quem é a pessoa até o sistema dizer. E você NUNCA pede senha, token, número de cartão ou documento — nem para \"confirmar identidade\". Se a pessoa mandar algo assim por conta própria, peça para não repetir e siga sem usar o valor.\n\nO caminho correto é sempre este:\n1. verificar_canal — descobre se este canal já está ligado a uma conta. Faça isso ANTES de qualquer consulta de dado pessoal.\n2. Se já estiver ligado: siga normalmente, chamando a pessoa pelo nome.\n3. Se não estiver: peça só o E-MAIL da conta e chame solicitar_codigo. Explique que vai chegar um código de 6 dígitos no e-mail.\n4. Quando a pessoa disser o código, chame confirmar_codigo. Se der certo, o canal fica ligado para sempre — nunca mais peça código.\n5. Se o código falhar, diga o motivo (errado, expirado) e ofereça pedir outro. Depois de 3 tentativas sem sucesso, ofereça atendimento humano.\n\nRepare: você nunca informa o id da conta para as ferramentas de dado pessoal. É o sistema que resolve a conta a partir do canal ligado — e é por isso que este desenho é seguro.\n\nO QUE VOCÊ RESPONDE\n- Fatura, consumo, plano e status do serviço: sempre pelas ferramentas, com o valor exato.\n- Como funciona o serviço, prazos, regras e procedimentos: pela base de conhecimento.\n- Quando não souber: diga que não sabe e ofereça abrir atendimento humano.\n\nTOM\nCurto, claro, sem jargão. Uma pergunta de cada vez.",
      "config": {
       "temperature": 0.3,
       "max_tool_loops": 12
      }
     }
    },
    {
     "id": "agent-pii",
     "type": "agent",
     "position": {
      "x": 55,
      "y": 330
     },
     "data": {
      "name": "aviso",
      "model": "hinow/himax",
      "system_prompt": "A mensagem do cliente traz um dado sensível (documento, cartão ou telefone completo). Peça, com gentileza e em uma frase, que ele não envie esse tipo de dado por aqui, explique que não é necessário para o atendimento, e convide a continuar com a dúvida em palavras. Não repita o valor recebido.",
      "config": {
       "temperature": 0.4,
       "tools_filter": []
      }
     }
    },
    {
     "id": "rag-1",
     "type": "rag_search",
     "position": {
      "x": 575,
      "y": 260
     },
     "data": {
      "label": "Base da operadora",
      "config": {
       "rag_ids": [],
       "top_k": 4,
       "min_score": 0.35
      }
     }
    },
    {
     "id": "hook-1",
     "type": "webhook",
     "position": {
      "x": 575,
      "y": 405
     },
     "data": {
      "label": "API de contas",
      "config": {
       "name": "Contas Vega",
       "baseUrl": "https://api.suaempresa.com/accounts/v1",
       "timeout": 15000,
       "auth": {
        "type": "bearer",
        "token": "COLE_SEU_TOKEN_AQUI"
       },
       "retryOnError": true,
       "maxRetries": 2,
       "routes": [
        {
         "id": "r-verificar_canal",
         "name": "verificar_canal",
         "method": "GET",
         "path": "/identity/channel",
         "description": "Diz se este canal (WhatsApp, e-mail, chat) já está ligado a uma conta e, se estiver, o primeiro nome do titular.",
         "whenToUse": "SEMPRE no início da conversa, antes de qualquer consulta de dado pessoal.",
         "responseDescription": "Se está ligado, o primeiro nome do titular; se não, a indicação de que precisa vincular.",
         "parameters": [
          {
           "name": "channel",
           "type": "string",
           "required": true,
           "description": "Canal desta conversa: whatsapp, webchat ou email",
           "howToObtain": "É o canal em que a mensagem chegou",
           "example": "whatsapp"
          },
          {
           "name": "identifier",
           "type": "string",
           "required": true,
           "description": "Identificador da pessoa neste canal",
           "howToObtain": "No WhatsApp é o telefone de quem escreve; no webchat é o id da sessão",
           "example": "5511987654321"
          }
         ],
         "enabled": true,
         "queryParams": {
          "channel": "{{channel}}",
          "identifier": "{{identifier}}"
         }
        },
        {
         "id": "r-solicitar_codigo",
         "name": "solicitar_codigo",
         "method": "POST",
         "path": "/identity/link/request",
         "description": "Envia um código de 6 dígitos para o e-mail cadastrado na conta, para ligar este canal a ela.",
         "whenToUse": "Quando verificar_canal disser que o canal não está ligado e a pessoa informar o e-mail da conta. Nunca peça senha no lugar disso.",
         "responseDescription": "Confirmação de envio (sem revelar o e-mail completo) ou aviso de que o e-mail não corresponde a nenhuma conta.",
         "parameters": [
          {
           "name": "email",
           "type": "string",
           "required": true,
           "description": "E-mail cadastrado na conta",
           "howToObtain": "Pergunte à pessoa qual o e-mail da conta",
           "example": "cliente@exemplo.com"
          },
          {
           "name": "channel",
           "type": "string",
           "required": true,
           "description": "Canal desta conversa",
           "howToObtain": "O mesmo de verificar_canal",
           "example": "whatsapp"
          },
          {
           "name": "identifier",
           "type": "string",
           "required": true,
           "description": "Identificador neste canal",
           "howToObtain": "O mesmo de verificar_canal",
           "example": "5511987654321"
          }
         ],
         "enabled": true,
         "bodyTemplate": "{\"email\": \"{{email}}\", \"channel\": \"{{channel}}\", \"identifier\": \"{{identifier}}\"}"
        },
        {
         "id": "r-confirmar_codigo",
         "name": "confirmar_codigo",
         "method": "POST",
         "path": "/identity/link/confirm",
         "description": "Confere o código recebido por e-mail e liga este canal à conta em definitivo.",
         "whenToUse": "Logo depois que a pessoa disser o código. Se der certo, nunca mais peça código neste canal.",
         "responseDescription": "Se o canal foi ligado e o nome do titular, ou o motivo da recusa (código errado, expirado, sem pedido).",
         "parameters": [
          {
           "name": "code",
           "type": "string",
           "required": true,
           "description": "Código de 6 dígitos",
           "howToObtain": "A pessoa dita na conversa",
           "example": "482913"
          },
          {
           "name": "channel",
           "type": "string",
           "required": true,
           "description": "Canal desta conversa",
           "howToObtain": "O mesmo de solicitar_codigo",
           "example": "whatsapp"
          },
          {
           "name": "identifier",
           "type": "string",
           "required": true,
           "description": "Identificador neste canal",
           "howToObtain": "O mesmo de solicitar_codigo",
           "example": "5511987654321"
          }
         ],
         "enabled": true,
         "bodyTemplate": "{\"code\": \"{{code}}\", \"channel\": \"{{channel}}\", \"identifier\": \"{{identifier}}\"}"
        },
        {
         "id": "r-meu_plano",
         "name": "meu_plano",
         "method": "GET",
         "path": "/account/plan",
         "description": "Plano contratado, velocidade, franquia e valor mensal do titular deste canal.",
         "whenToUse": "Depois que o canal estiver ligado, quando a pergunta for sobre plano, pacote ou mensalidade.",
         "responseDescription": "Nome do plano, valor, benefícios e data de renovação.",
         "parameters": [
          {
           "name": "channel",
           "type": "string",
           "required": true,
           "description": "Canal desta conversa",
           "howToObtain": "O mesmo de verificar_canal",
           "example": "whatsapp"
          },
          {
           "name": "identifier",
           "type": "string",
           "required": true,
           "description": "Identificador neste canal",
           "howToObtain": "O mesmo de verificar_canal",
           "example": "5511987654321"
          }
         ],
         "enabled": true,
         "queryParams": {
          "channel": "{{channel}}",
          "identifier": "{{identifier}}"
         }
        },
        {
         "id": "r-minhas_faturas",
         "name": "minhas_faturas",
         "method": "GET",
         "path": "/account/invoices",
         "description": "Últimas faturas do titular deste canal, com status de pagamento.",
         "whenToUse": "Depois que o canal estiver ligado, quando a pergunta for sobre fatura, boleto, vencimento ou pagamento.",
         "responseDescription": "Lista com competência, valor, vencimento, status e link da segunda via.",
         "parameters": [
          {
           "name": "channel",
           "type": "string",
           "required": true,
           "description": "Canal desta conversa",
           "howToObtain": "O mesmo de verificar_canal",
           "example": "whatsapp"
          },
          {
           "name": "identifier",
           "type": "string",
           "required": true,
           "description": "Identificador neste canal",
           "howToObtain": "O mesmo de verificar_canal",
           "example": "5511987654321"
          },
          {
           "name": "limite",
           "type": "number",
           "required": true,
           "description": "Quantas faturas trazer. Use 3 quando a pessoa não especificar — nunca deixe em branco",
           "example": "3"
          }
         ],
         "enabled": true,
         "queryParams": {
          "channel": "{{channel}}",
          "identifier": "{{identifier}}",
          "limite": "{{limite}}"
         }
        }
       ]
      }
     }
    },
    {
     "id": "end-1",
     "type": "end",
     "position": {
      "x": 305,
      "y": 510
     },
     "data": {
      "label": "Fim",
      "status": "success"
     }
    }
   ],
   "edges": [
    {
     "id": "e-start-guard-1-d",
     "source": "start",
     "target": "guard-1"
    },
    {
     "id": "e-guard-1-agent-1-pass",
     "source": "guard-1",
     "target": "agent-1",
     "sourceHandle": "pass"
    },
    {
     "id": "e-guard-1-agent-pii-fail",
     "source": "guard-1",
     "target": "agent-pii",
     "sourceHandle": "fail"
    },
    {
     "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"
    },
    {
     "id": "e-agent-pii-end-1-d",
     "source": "agent-pii",
     "target": "end-1"
    }
   ]
  }
 }
}
