Suporte com base de ajuda e chamados
Responde pela base de conhecimento e, quando não resolve, abre e acompanha chamados na sua API — sem duplicar chamado e sem inventar prazo.
Atualizado em 01 de set. de 2026
O suporte de qualquer empresa faz duas coisas o dia inteiro: repetir o que já está documentado e registrar o que é novo. A primeira não deveria consumir uma pessoa; a segunda não deveria depender de o cliente preencher um formulário direito.
Este fluxo faz as duas. Procura na base antes de tudo; e quando o problema é real, abre o chamado com uma descrição que o time técnico consegue usar — depois de conferir que não existe chamado igual aberto e que não é um incidente geral em andamento.
A ordem importa mais que as ferramentas
Base → chamado aberto → incidente geral → só então abrir. Essa sequência está escrita no system_prompt e nos whenToUse das rotas. É ela que evita a montanha de chamados duplicados que todo suporte conhece.
Como importar
Na plataforma: Agents → Importar, escolha o arquivo baixado. Ele entra como um rascunho novo (nada existente é alterado), com ids de observabilidade renovados. Depois preencha o que é do seu ambiente — credenciais, URLs e bases de conhecimento — e publique.
{
"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"
}
]
}
}
}| Card | Por que está aqui | O que faz |
|---|---|---|
| **Início** | Traz quem é o cliente. | A variável customer_id chega no variables do run — a sua aplicação já autenticou a pessoa, o agente só recebe o identificador. |
**Agent suporte** | Decide o caminho. | temperature: 0.3 (suporte não é lugar para criatividade) e max_tool_loops: 12, porque uma triagem completa encadeia várias consultas. |
| **Conhecimento (RAG)** | Responde o que já está escrito. | top_k: 5, min_score: 0.35 — corta o ruído de trecho pouco relevante. |
| **Webhook** (5 rotas) | Faz o que só o seu sistema faz. | Consultar chamados, ver detalhe, abrir, comentar e checar incidentes. Autenticação bearer no card, uma vez, para todas as rotas. |
| Rota | Método | Papel |
|---|---|---|
status_servico | GET | Existe incidente geral? Se existe, não se abre chamado — explica-se. |
consultar_chamados | GET + query | O que o cliente já tem aberto. Roda antes de abrir qualquer coisa. |
detalhe_chamado | GET + path | Histórico completo de um chamado, para responder "e o meu chamado?". |
abrir_chamado | POST + body | A escrita. Só depois das três checagens acima. |
comentar_chamado | POST + path + body | Informação nova sobre algo já aberto — melhor que abrir outro. |
O customer_id chega pelo variables do run, aparece no system_prompt como {{customer_id}} e é dali que o modelo o copia para a rota. Sem essa linha no prompt, o modelo inventa um valor — é o erro mais comum de quem monta o primeiro fluxo com identidade. Detalhes em Credenciais e identidade.
curl -X POST https://agents.hinow.ai/v1/agents/SEU_AGENT_ID/run \
-H "Authorization: Bearer hi_SUA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"message": "minha exportação de relatório dá erro 500 desde ontem",
"variables": {"customer_id": "acct_1042"},
"stream": true}'- Troque a
baseUrlpela do seu sistema de chamados (Zendesk, Freshdesk, Jira, o seu próprio) e cole o token emauth.token. - Ajuste os nomes dos campos no
bodyTemplatepara os do seu sistema — e lembre que parâmetro usado em template precisa serrequired. - Base de ajuda: aponte
rag_idspara a sua base. É o que dá o retorno mais rápido: cada dúvida respondida ali é um chamado que não nasce. - Escalar para humano: acrescente uma rota
transferir_para_humanoe um card Aprovação do Usuário se a transferência tiver custo.
Todos os fluxos prontos
Outros agents completos para importar e adaptar.

