Pular para conteúdo

ZENDESK TICKET GETALL - Listar Todos os Tickets

O que é este Node?

O ZENDESK TICKET GETALL é o node responsável por buscar uma lista de tickets no Zendesk, permitindo visualizar múltiplos tickets de uma vez com filtros e paginação.

Por que este Node existe?

Quando precisamos visualizar múltiplos tickets, gerar relatórios ou fazer análises em lote, buscar um por um é ineficiente. O ZENDESK TICKET GETALL existe para:

  1. Listagem em Massa: Buscar múltiplos tickets em uma única operação
  2. Dashboards e Relatórios: Obter dados para criar visualizações e métricas
  3. Monitoramento de Fila: Verificar quantos tickets estão pendentes ou abertos
  4. Análise de Dados: Processar informações de múltiplos tickets para insights

Como funciona internamente?

Quando o ZENDESK TICKET GETALL é executado, o sistema:

  1. Valida Credenciais: Verifica subdomain, email e API token do Zendesk
  2. Define Limite: Usa limit fornecido ou padrão de 100 tickets
  3. Cria Cliente HTTP: Configura autenticação Basic Auth
  4. Faz Request GET: Busca tickets em /api/v2/tickets.json?per_page={limit}
  5. Processa Resposta: Extrai array de tickets
  6. Calcula Total: Conta quantos tickets foram retornados
  7. Armazena em Variável: Salva objeto com tickets e count

Código interno (zendesk.executor.ts:99-105):

case 'getAll':
  const limit = data.limit || 100;
  const { data: ticketsResponse } = await client.get(`/tickets.json?per_page=${limit}`);
  return {
    tickets: ticketsResponse.tickets,
    count: ticketsResponse.tickets.length,
  };

Quando você DEVE usar este Node?

Use ZENDESK TICKET GETALL sempre que precisar trabalhar com múltiplos tickets:

Casos de uso

  1. Dashboard de Tickets: "Mostrar quantidade de tickets abertos vs fechados"
  2. Relatórios Automatizados: "Enviar relatório diário de tickets criados"
  3. Análise de SLA: "Verificar quais tickets estão próximos do prazo"

Quando NÃO usar ZENDESK TICKET GETALL

  • Buscar Ticket Específico: Use ZENDESK TICKET GET com ID
  • Criar Ticket: Use ZENDESK TICKET CREATE
  • Atualizar Ticket: Use ZENDESK TICKET UPDATE

Parâmetros Detalhados

config (object, obrigatório)

O que é: Objeto com credenciais de autenticação do Zendesk.

Estrutura:

{
  "subdomain": "sua-empresa",
  "email": "admin@empresa.com",
  "apiToken": "seu_token_aqui"
}

Flow completo para testar:

{
  "name": "Teste Zendesk - GetAll Config",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "zendesk_1",
      "type": "zendesk",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Listar Tickets",
        "resource": "ticket",
        "operation": "getAll",
        "config": {
          "subdomain": "sua-empresa",
          "email": "admin@empresa.com",
          "apiToken": "seu_token_api"
        },
        "limit": 10,
        "responseVariable": "lista_tickets"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Mostrar Total",
        "parameters": {
          "message": "Total de tickets encontrados: {{lista_tickets.count}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "zendesk_1" },
    { "source": "zendesk_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Configure credenciais → veja total de tickets sendo exibido

limit (number, opcional)

O que é: Quantidade máxima de tickets a retornar por página.

Padrão: 100

Valor máximo: 100 (limitação da API do Zendesk)

Flow completo para testar:

{
  "name": "Teste Zendesk - Limit Customizado",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "number_1",
      "type": "number",
      "position": { "x": 250, "y": 100 },
      "data": {
        "label": "Perguntar Limite",
        "parameters": {
          "message": "Quantos tickets deseja ver? (máx 100)",
          "variable": "quantidade"
        }
      }
    },
    {
      "id": "zendesk_1",
      "type": "zendesk",
      "position": { "x": 400, "y": 100 },
      "data": {
        "label": "Buscar Tickets",
        "resource": "ticket",
        "operation": "getAll",
        "config": {
          "subdomain": "sua-empresa",
          "email": "admin@empresa.com",
          "apiToken": "seu_token_api"
        },
        "limit": "{{quantidade}}",
        "responseVariable": "tickets"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 550, "y": 100 },
      "data": {
        "label": "Mostrar Resultado",
        "parameters": {
          "message": "Retornei {{tickets.count}} tickets conforme solicitado."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "number_1" },
    { "source": "number_1", "target": "zendesk_1" },
    { "source": "zendesk_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Digite "25" → veja até 25 tickets sendo retornados

responseVariable (string, opcional)

O que é: Nome da variável onde o objeto com tickets e count será armazenado.

Flow completo para testar:

{
  "name": "Teste Zendesk - Response Variable",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "zendesk_1",
      "type": "zendesk",
      "position": { "x": 250, "y": 100 },
      "data": {
        "label": "Listar Tickets",
        "resource": "ticket",
        "operation": "getAll",
        "config": {
          "subdomain": "sua-empresa",
          "email": "admin@empresa.com",
          "apiToken": "seu_token_api"
        },
        "limit": 50,
        "responseVariable": "todos_tickets"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 400, "y": 100 },
      "data": {
        "label": "Exibir Informações",
        "parameters": {
          "message": "📊 Estatísticas de Tickets:\n\nTotal retornado: {{todos_tickets.count}}\n\nPrimeiro ticket:\nID: {{todos_tickets.tickets[0].id}}\nAssunto: {{todos_tickets.tickets[0].subject}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 550, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "zendesk_1" },
    { "source": "zendesk_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Execute → veja array de tickets acessível via variável

Parâmetros

Campo Tipo Obrigatório Descrição
config.subdomain string Sim Subdomínio do Zendesk
config.email string Sim Email da conta Zendesk
config.apiToken string Sim Token de API
limit number Não Quantidade máxima de tickets (padrão: 100, máx: 100)
responseVariable string Não Nome da variável para armazenar resposta

Exemplo 1: Dashboard Simples de Tickets

Objetivo: Exibir estatísticas básicas dos tickets atuais

JSON para Importar

{
  "name": "Dashboard de Tickets",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 250, "y": 100 },
      "data": {
        "label": "Aguarde",
        "parameters": {
          "message": "📊 Buscando estatísticas de tickets..."
        }
      }
    },
    {
      "id": "zendesk_1",
      "type": "zendesk",
      "position": { "x": 400, "y": 100 },
      "data": {
        "label": "Buscar Todos",
        "resource": "ticket",
        "operation": "getAll",
        "config": {
          "subdomain": "sua-empresa",
          "email": "admin@empresa.com",
          "apiToken": "seu_token_api"
        },
        "limit": 100,
        "responseVariable": "todos_tickets"
      }
    },
    {
      "id": "calculator_1",
      "type": "calculator",
      "position": { "x": 550, "y": 100 },
      "data": {
        "label": "Contar Status",
        "parameters": {
          "operation": "custom",
          "expression": "todos_tickets.tickets.filter(t => t.status === 'open').length",
          "resultVariable": "tickets_abertos"
        }
      }
    },
    {
      "id": "calculator_2",
      "type": "calculator",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Contar Pendentes",
        "parameters": {
          "operation": "custom",
          "expression": "todos_tickets.tickets.filter(t => t.status === 'pending').length",
          "resultVariable": "tickets_pendentes"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 850, "y": 100 },
      "data": {
        "label": "Exibir Dashboard",
        "parameters": {
          "message": "📊 DASHBOARD DE TICKETS\n\n📈 Total: {{todos_tickets.count}}\n✅ Abertos: {{tickets_abertos}}\n⏳ Pendentes: {{tickets_pendentes}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1000, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_1" },
    { "source": "message_1", "target": "zendesk_1" },
    { "source": "zendesk_1", "target": "calculator_1" },
    { "source": "calculator_1", "target": "calculator_2" },
    { "source": "calculator_2", "target": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: 📊 Buscando estatísticas de tickets...
Sistema: 📊 DASHBOARD DE TICKETS

📈 Total: 47
✅ Abertos: 12
⏳ Pendentes: 8

Exemplo 2: Listar Tickets com Prioridade Alta

Objetivo: Filtrar e mostrar apenas tickets com prioridade alta

JSON para Importar

{
  "name": "Tickets de Alta Prioridade",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "zendesk_1",
      "type": "zendesk",
      "position": { "x": 250, "y": 100 },
      "data": {
        "label": "Buscar Tickets",
        "resource": "ticket",
        "operation": "getAll",
        "config": {
          "subdomain": "sua-empresa",
          "email": "admin@empresa.com",
          "apiToken": "seu_token_api"
        },
        "limit": 100,
        "responseVariable": "todos_tickets"
      }
    },
    {
      "id": "calculator_1",
      "type": "calculator",
      "position": { "x": 400, "y": 100 },
      "data": {
        "label": "Filtrar High Priority",
        "parameters": {
          "operation": "custom",
          "expression": "todos_tickets.tickets.filter(t => t.priority === 'high' || t.priority === 'urgent')",
          "resultVariable": "tickets_urgentes"
        }
      }
    },
    {
      "id": "condition_1",
      "type": "condition",
      "position": { "x": 550, "y": 50 },
      "data": {
        "label": "Tem Tickets Urgentes?",
        "parameters": {
          "conditions": [
            {
              "variable": "tickets_urgentes",
              "operator": "greater_than",
              "value": "0"
            }
          ]
        }
      }
    },
    {
      "id": "loop_1",
      "type": "loop",
      "position": { "x": 700, "y": 50 },
      "data": {
        "label": "Iterar Tickets",
        "parameters": {
          "array": "{{tickets_urgentes}}",
          "itemVariable": "ticket",
          "indexVariable": "index"
        }
      }
    },
    {
      "id": "message_ticket",
      "type": "message",
      "position": { "x": 850, "y": 50 },
      "data": {
        "label": "Exibir Ticket",
        "parameters": {
          "message": "🚨 Ticket #{{ticket.id}}\n⚡ {{ticket.priority}}\n✉️ {{ticket.subject}}"
        }
      }
    },
    {
      "id": "message_nenhum",
      "type": "message",
      "position": { "x": 700, "y": 150 },
      "data": {
        "label": "Nenhum Urgente",
        "parameters": {
          "message": "✅ Não há tickets urgentes no momento!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1000, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "zendesk_1" },
    { "source": "zendesk_1", "target": "calculator_1" },
    { "source": "calculator_1", "target": "condition_1" },
    { "source": "condition_1", "target": "loop_1", "label": "true" },
    { "source": "condition_1", "target": "message_nenhum", "label": "false" },
    { "source": "loop_1", "target": "message_ticket" },
    { "source": "message_ticket", "target": "loop_1" },
    { "source": "loop_1", "target": "end_1", "label": "done" },
    { "source": "message_nenhum", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: 🚨 Ticket #12345
⚡ high
✉️ Sistema não carrega páginas

Sistema: 🚨 Ticket #12346
⚡ urgent
✉️ Servidor fora do ar

Exemplo 3: Relatório Diário por Email

Objetivo: Gerar relatório de tickets e enviar por email (simulado)

JSON para Importar

{
  "name": "Relatório Diário de Tickets",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "zendesk_1",
      "type": "zendesk",
      "position": { "x": 250, "y": 100 },
      "data": {
        "label": "Buscar Tickets",
        "resource": "ticket",
        "operation": "getAll",
        "config": {
          "subdomain": "sua-empresa",
          "email": "admin@empresa.com",
          "apiToken": "seu_token_api"
        },
        "limit": 100,
        "responseVariable": "tickets"
      }
    },
    {
      "id": "calculator_new",
      "type": "calculator",
      "position": { "x": 400, "y": 50 },
      "data": {
        "label": "Contar Novos",
        "parameters": {
          "operation": "custom",
          "expression": "tickets.tickets.filter(t => t.status === 'new').length",
          "resultVariable": "count_new"
        }
      }
    },
    {
      "id": "calculator_open",
      "type": "calculator",
      "position": { "x": 400, "y": 100 },
      "data": {
        "label": "Contar Abertos",
        "parameters": {
          "operation": "custom",
          "expression": "tickets.tickets.filter(t => t.status === 'open').length",
          "resultVariable": "count_open"
        }
      }
    },
    {
      "id": "calculator_solved",
      "type": "calculator",
      "position": { "x": 400, "y": 150 },
      "data": {
        "label": "Contar Resolvidos",
        "parameters": {
          "operation": "custom",
          "expression": "tickets.tickets.filter(t => t.status === 'solved').length",
          "resultVariable": "count_solved"
        }
      }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 550, "y": 100 },
      "data": {
        "label": "Montar Relatório",
        "parameters": {
          "variableName": "relatorio",
          "value": "📊 RELATÓRIO DIÁRIO DE TICKETS\n\n🆕 Novos: {{count_new}}\n📂 Em atendimento: {{count_open}}\n✅ Resolvidos: {{count_solved}}\n\n📈 Total: {{tickets.count}}"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Exibir Relatório",
        "parameters": {
          "message": "{{relatorio}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 850, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "zendesk_1" },
    { "source": "zendesk_1", "target": "calculator_new" },
    { "source": "calculator_new", "target": "calculator_open" },
    { "source": "calculator_open", "target": "calculator_solved" },
    { "source": "calculator_solved", "target": "variable_1" },
    { "source": "variable_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: 📊 RELATÓRIO DIÁRIO DE TICKETS

🆕 Novos: 15
📂 Em atendimento: 23
✅ Resolvidos: 45

📈 Total: 100

Resposta do Node

{
  "tickets": [
    {
      "id": 12345,
      "subject": "Problema no login",
      "priority": "high",
      "status": "open",
      "type": "problem",
      "created_at": "2025-01-15T10:30:00Z"
    },
    {
      "id": 12346,
      "subject": "Dúvida sobre faturamento",
      "priority": "normal",
      "status": "pending",
      "type": "question",
      "created_at": "2025-01-15T11:00:00Z"
    }
  ],
  "count": 2
}

Boas Práticas

SIM:

  • Use limit razoável para evitar sobrecarga (máx 100 por request)
  • Filtre tickets em memória após buscar para análises específicas
  • Combine com CALCULATOR para gerar estatísticas
  • Use LOOP para processar cada ticket individualmente
  • Cache resultados se for usar múltiplas vezes

NÃO:

  • Não busque todos os tickets se só precisa de alguns específicos
  • Não faça múltiplas chamadas getAll seguidas - use uma e filtre
  • Não assuma que todos os tickets cabem em uma página (max 100)
  • Não exponha dados sensíveis de todos os tickets ao cliente final

Dicas

💡 Dica 1: Use CALCULATOR com array.filter() para criar filtros customizados após buscar os tickets

💡 Dica 2: Combine getAll com LOOP para processar cada ticket (enviar notificações, atualizar, etc)

💡 Dica 3: A API do Zendesk tem paginação - se precisar de mais de 100 tickets, você precisará implementar múltiplas chamadas

💡 Dica 4: Use SCHEDULE para executar getAll periodicamente e monitorar tickets automaticamente

💡 Dica 5: Combine com nodes de analytics para gerar dashboards e relatórios automáticos

Próximo Node

ZENDESK TICKET GET - Buscar ticket específico → ZENDESK TICKET CREATE - Criar novo ticket → ZENDESK TICKET UPDATE - Atualizar ticket