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:
- Listagem em Massa: Buscar múltiplos tickets em uma única operação
- Dashboards e Relatórios: Obter dados para criar visualizações e métricas
- Monitoramento de Fila: Verificar quantos tickets estão pendentes ou abertos
- Análise de Dados: Processar informações de múltiplos tickets para insights
Como funciona internamente?
Quando o ZENDESK TICKET GETALL é executado, o sistema:
- Valida Credenciais: Verifica subdomain, email e API token do Zendesk
- Define Limite: Usa limit fornecido ou padrão de 100 tickets
- Cria Cliente HTTP: Configura autenticação Basic Auth
- Faz Request GET: Busca tickets em /api/v2/tickets.json?per_page={limit}
- Processa Resposta: Extrai array de tickets
- Calcula Total: Conta quantos tickets foram retornados
- 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
- Dashboard de Tickets: "Mostrar quantidade de tickets abertos vs fechados"
- Relatórios Automatizados: "Enviar relatório diário de tickets criados"
- 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