Pular para conteúdo

ZENDESK TICKET UPDATE - Atualizar Ticket Existente

O que é este Node?

O ZENDESK TICKET UPDATE é o node responsável por modificar tickets existentes no Zendesk, permitindo atualizar status, prioridade, adicionar comentários e alterar outros campos.

Por que este Node existe?

Durante o atendimento ao cliente, é essencial poder atualizar informações do ticket conforme o caso evolui. O ZENDESK TICKET UPDATE existe para:

  1. Adicionar Comentários: Registrar atualizações e comunicação com o cliente
  2. Mudar Status: Atualizar status conforme o ticket progride (new → open → solved)
  3. Ajustar Prioridade: Aumentar ou diminuir prioridade baseado em novas informações
  4. Automatizar Workflow: Atualizar tickets automaticamente baseado em eventos ou condições

Como funciona internamente?

Quando o ZENDESK TICKET UPDATE é executado, o sistema:

  1. Valida Credenciais: Verifica subdomain, email e API token
  2. Substitui Variáveis: Processa ticketId e valores em updates
  3. Prepara Objeto Updates: Monta objeto com campos a atualizar
  4. Cria Cliente HTTP: Configura autenticação Basic Auth
  5. Envia Request PUT: Atualiza ticket em /api/v2/tickets/{id}.json
  6. Se ticket não existe: Retorna erro 404
  7. Se sucesso: Retorna ticket atualizado completo

Código interno (zendesk.executor.ts:107-111):

case 'update':
  const updateTicketId = this.replaceVariables(data.ticketId, context.variables);
  const updates = this.replaceObjectVariables(data.updates, context.variables);
  const { data: updateResponse } = await client.put(`/tickets/${updateTicketId}.json`, { ticket: updates });
  return updateResponse.ticket;

Quando você DEVE usar este Node?

Use ZENDESK TICKET UPDATE sempre que precisar modificar um ticket existente:

Casos de uso

  1. Adicionar Comentário: "Cliente forneceu informações adicionais → adicionar ao ticket"
  2. Mudar Status: "Problema resolvido → marcar ticket como solved"
  3. Ajustar Prioridade: "Situação se agravou → aumentar prioridade para urgent"

Quando NÃO usar ZENDESK TICKET UPDATE

  • Criar Ticket Novo: Use ZENDESK TICKET CREATE ao invés
  • Apenas Consultar: Use ZENDESK TICKET GET para ler sem modificar
  • Deletar Ticket: Use ZENDESK TICKET DELETE

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 - Update Config",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 250, "y": 100 },
      "data": {
        "label": "ID do Ticket",
        "parameters": {
          "variableName": "ticket_id",
          "value": "12345"
        }
      }
    },
    {
      "id": "zendesk_1",
      "type": "zendesk",
      "position": { "x": 400, "y": 100 },
      "data": {
        "label": "Atualizar Ticket",
        "resource": "ticket",
        "operation": "update",
        "config": {
          "subdomain": "sua-empresa",
          "email": "admin@empresa.com",
          "apiToken": "seu_token_api"
        },
        "ticketId": "{{ticket_id}}",
        "updates": {
          "status": "open"
        },
        "responseVariable": "ticket_atualizado"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 550, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Ticket atualizado! Status: {{ticket_atualizado.status}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_1" },
    { "source": "variable_1", "target": "zendesk_1" },
    { "source": "zendesk_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Execute → veja ticket sendo atualizado

ticketId (string, obrigatório)

O que é: ID do ticket a ser atualizado.

Suporta variáveis: Sim, use {{variavel}}.

Flow completo para testar:

{
  "name": "Teste Zendesk - Ticket ID Dinâmico",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 250, "y": 100 },
      "data": {
        "label": "Perguntar ID",
        "parameters": {
          "message": "Digite o ID do ticket:",
          "variable": "id_ticket"
        }
      }
    },
    {
      "id": "zendesk_1",
      "type": "zendesk",
      "position": { "x": 400, "y": 100 },
      "data": {
        "label": "Atualizar Status",
        "resource": "ticket",
        "operation": "update",
        "config": {
          "subdomain": "sua-empresa",
          "email": "admin@empresa.com",
          "apiToken": "seu_token_api"
        },
        "ticketId": "{{id_ticket}}",
        "updates": {
          "status": "solved",
          "comment": {
            "body": "Ticket resolvido automaticamente"
          }
        },
        "responseVariable": "resultado"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 550, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "✅ Ticket #{{id_ticket}} marcado como resolvido!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "zendesk_1" },
    { "source": "zendesk_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Digite ID de ticket válido → veja confirmação de atualização

updates (object, obrigatório)

O que é: Objeto contendo os campos a serem atualizados.

Campos atualizáveis: - status: new, open, pending, hold, solved, closed - priority: low, normal, high, urgent - subject: novo título do ticket - comment: { body: "texto do comentário" } - type: problem, incident, question, task

Suporta variáveis: Sim, valores podem usar {{variavel}}.

Flow completo para testar:

{
  "name": "Teste Zendesk - Updates Múltiplos",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "variable_id",
      "type": "variable",
      "position": { "x": 250, "y": 100 },
      "data": {
        "label": "Definir ID",
        "parameters": {
          "variableName": "ticket_id",
          "value": "12345"
        }
      }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 400, "y": 100 },
      "data": {
        "label": "Comentário",
        "parameters": {
          "message": "Digite um comentário para adicionar:",
          "variable": "novo_comentario"
        }
      }
    },
    {
      "id": "zendesk_1",
      "type": "zendesk",
      "position": { "x": 550, "y": 100 },
      "data": {
        "label": "Atualizar Múltiplos Campos",
        "resource": "ticket",
        "operation": "update",
        "config": {
          "subdomain": "sua-empresa",
          "email": "admin@empresa.com",
          "apiToken": "seu_token_api"
        },
        "ticketId": "{{ticket_id}}",
        "updates": {
          "status": "open",
          "priority": "high",
          "comment": {
            "body": "{{novo_comentario}}"
          }
        },
        "responseVariable": "ticket"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Ticket atualizado!\n\nStatus: {{ticket.status}}\nPrioridade: {{ticket.priority}}\nComentário adicionado!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 850, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_id" },
    { "source": "variable_id", "target": "input_1" },
    { "source": "input_1", "target": "zendesk_1" },
    { "source": "zendesk_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Digite comentário → veja ticket com status, prioridade e comentário atualizados

responseVariable (string, opcional)

O que é: Nome da variável onde o ticket atualizado 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": "variable_1",
      "type": "variable",
      "position": { "x": 250, "y": 100 },
      "data": {
        "label": "ID",
        "parameters": {
          "variableName": "id",
          "value": "12345"
        }
      }
    },
    {
      "id": "zendesk_1",
      "type": "zendesk",
      "position": { "x": 400, "y": 100 },
      "data": {
        "label": "Atualizar",
        "resource": "ticket",
        "operation": "update",
        "config": {
          "subdomain": "sua-empresa",
          "email": "admin@empresa.com",
          "apiToken": "seu_token_api"
        },
        "ticketId": "{{id}}",
        "updates": {
          "status": "pending"
        },
        "responseVariable": "ticket_modificado"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 550, "y": 100 },
      "data": {
        "label": "Mostrar Dados",
        "parameters": {
          "message": "Dados do ticket atualizado:\n\nID: {{ticket_modificado.id}}\nSubject: {{ticket_modificado.subject}}\nStatus: {{ticket_modificado.status}}\nUpdated: {{ticket_modificado.updated_at}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_1" },
    { "source": "variable_1", "target": "zendesk_1" },
    { "source": "zendesk_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Execute → veja todos os dados do ticket atualizado

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
ticketId string Sim ID do ticket a atualizar (suporta {{variáveis}})
updates object Sim Objeto com campos a atualizar
updates.status string Não Novo status (new, open, pending, hold, solved, closed)
updates.priority string Não Nova prioridade (low, normal, high, urgent)
updates.subject string Não Novo título
updates.comment object Não { body: "texto" } para adicionar comentário
updates.type string Não Novo tipo (problem, incident, question, task)
responseVariable string Não Nome da variável para armazenar resposta

Exemplo 1: Adicionar Comentário do Cliente

Objetivo: Cliente fornece informações adicionais e sistema adiciona ao ticket

JSON para Importar

{
  "name": "Adicionar Comentário ao Ticket",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "input_id",
      "type": "input",
      "position": { "x": 250, "y": 100 },
      "data": {
        "label": "Número do Ticket",
        "parameters": {
          "message": "Digite o número do seu ticket:",
          "variable": "numero_ticket"
        }
      }
    },
    {
      "id": "input_info",
      "type": "input",
      "position": { "x": 400, "y": 100 },
      "data": {
        "label": "Informações Adicionais",
        "parameters": {
          "message": "Quais informações gostaria de adicionar?",
          "variable": "informacoes"
        }
      }
    },
    {
      "id": "zendesk_1",
      "type": "zendesk",
      "position": { "x": 550, "y": 100 },
      "data": {
        "label": "Adicionar Comentário",
        "resource": "ticket",
        "operation": "update",
        "config": {
          "subdomain": "sua-empresa",
          "email": "admin@empresa.com",
          "apiToken": "seu_token_api"
        },
        "ticketId": "{{numero_ticket}}",
        "updates": {
          "comment": {
            "body": "Cliente adicionou via WhatsApp:\n\n{{informacoes}}\n\nTelefone: {{user_phone}}"
          }
        },
        "responseVariable": "ticket"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "✅ Informações adicionadas ao ticket #{{numero_ticket}}!\n\nNossa equipe receberá a atualização."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 850, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_id" },
    { "source": "input_id", "target": "input_info" },
    { "source": "input_info", "target": "zendesk_1" },
    { "source": "zendesk_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Digite o número do seu ticket:
Usuário: 12345
Sistema: Quais informações gostaria de adicionar?
Usuário: Descobri que o problema só ocorre no navegador Chrome
Sistema: ✅ Informações adicionadas ao ticket #12345!

Nossa equipe receberá a atualização.

Exemplo 2: Resolver Ticket Automaticamente

Objetivo: Cliente confirma que problema foi resolvido e sistema fecha o ticket

JSON para Importar

{
  "name": "Resolver Ticket Automaticamente",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 250, "y": 100 },
      "data": {
        "label": "ID do Ticket",
        "parameters": {
          "variableName": "ticket_id",
          "value": "{{ultimo_ticket_id}}"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 400, "y": 100 },
      "data": {
        "label": "Perguntar Resolução",
        "parameters": {
          "message": "Seu problema foi resolvido?\n\n1 - Sim, resolvido\n2 - Não, ainda tenho problemas"
        }
      }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 550, "y": 100 },
      "data": {
        "label": "Resposta",
        "parameters": {
          "message": "Digite 1 ou 2:",
          "variable": "resposta"
        }
      }
    },
    {
      "id": "condition_1",
      "type": "condition",
      "position": { "x": 700, "y": 50 },
      "data": {
        "label": "Verificar Resposta",
        "parameters": {
          "conditions": [
            {
              "variable": "resposta",
              "operator": "equals",
              "value": "1"
            }
          ]
        }
      }
    },
    {
      "id": "zendesk_solved",
      "type": "zendesk",
      "position": { "x": 850, "y": 50 },
      "data": {
        "label": "Marcar como Resolvido",
        "resource": "ticket",
        "operation": "update",
        "config": {
          "subdomain": "sua-empresa",
          "email": "admin@empresa.com",
          "apiToken": "seu_token_api"
        },
        "ticketId": "{{ticket_id}}",
        "updates": {
          "status": "solved",
          "comment": {
            "body": "Cliente confirmou resolução via WhatsApp"
          }
        },
        "responseVariable": "ticket"
      }
    },
    {
      "id": "message_solved",
      "type": "message",
      "position": { "x": 1000, "y": 50 },
      "data": {
        "label": "Confirmar Fechamento",
        "parameters": {
          "message": "🎉 Que ótimo!\n\nTicket #{{ticket_id}} marcado como resolvido.\n\nSe precisar de ajuda novamente, é só chamar!"
        }
      }
    },
    {
      "id": "zendesk_reopen",
      "type": "zendesk",
      "position": { "x": 850, "y": 150 },
      "data": {
        "label": "Manter Aberto",
        "resource": "ticket",
        "operation": "update",
        "config": {
          "subdomain": "sua-empresa",
          "email": "admin@empresa.com",
          "apiToken": "seu_token_api"
        },
        "ticketId": "{{ticket_id}}",
        "updates": {
          "status": "open",
          "priority": "high",
          "comment": {
            "body": "Cliente informou que problema persiste via WhatsApp"
          }
        },
        "responseVariable": "ticket"
      }
    },
    {
      "id": "message_reopen",
      "type": "message",
      "position": { "x": 1000, "y": 150 },
      "data": {
        "label": "Escalar Suporte",
        "parameters": {
          "message": "Entendo. Vou priorizar seu ticket #{{ticket_id}} e nossa equipe entrará em contato em breve."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1150, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_1" },
    { "source": "variable_1", "target": "message_1" },
    { "source": "message_1", "target": "input_1" },
    { "source": "input_1", "target": "condition_1" },
    { "source": "condition_1", "target": "zendesk_solved", "label": "true" },
    { "source": "condition_1", "target": "zendesk_reopen", "label": "false" },
    { "source": "zendesk_solved", "target": "message_solved" },
    { "source": "zendesk_reopen", "target": "message_reopen" },
    { "source": "message_solved", "target": "end_1" },
    { "source": "message_reopen", "target": "end_1" }
  ]
}

Saída esperada (resolvido):

Sistema: Seu problema foi resolvido?

1 - Sim, resolvido
2 - Não, ainda tenho problemas
Sistema: Digite 1 ou 2:
Usuário: 1
Sistema: 🎉 Que ótimo!

Ticket #12345 marcado como resolvido.

Se precisar de ajuda novamente, é só chamar!

Exemplo 3: Escalar Prioridade Baseado em Tempo

Objetivo: Aumentar automaticamente a prioridade de tickets antigos

JSON para Importar

{
  "name": "Escalar Prioridade de Tickets Antigos",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "zendesk_getall",
      "type": "zendesk",
      "position": { "x": 250, "y": 100 },
      "data": {
        "label": "Buscar Tickets Abertos",
        "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 Antigos",
        "parameters": {
          "operation": "custom",
          "expression": "todos_tickets.tickets.filter(t => t.status === 'open' && t.priority === 'normal' && new Date() - new Date(t.created_at) > 86400000)",
          "resultVariable": "tickets_antigos"
        }
      }
    },
    {
      "id": "loop_1",
      "type": "loop",
      "position": { "x": 550, "y": 100 },
      "data": {
        "label": "Para Cada Ticket",
        "parameters": {
          "array": "{{tickets_antigos}}",
          "itemVariable": "ticket",
          "indexVariable": "i"
        }
      }
    },
    {
      "id": "zendesk_update",
      "type": "zendesk",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Aumentar Prioridade",
        "resource": "ticket",
        "operation": "update",
        "config": {
          "subdomain": "sua-empresa",
          "email": "admin@empresa.com",
          "apiToken": "seu_token_api"
        },
        "ticketId": "{{ticket.id}}",
        "updates": {
          "priority": "high",
          "comment": {
            "body": "Prioridade aumentada automaticamente - ticket aberto há mais de 24h"
          }
        },
        "responseVariable": "updated"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 850, "y": 100 },
      "data": {
        "label": "Log",
        "parameters": {
          "message": "✅ Ticket #{{ticket.id}} escalado para HIGH"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1000, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "zendesk_getall" },
    { "source": "zendesk_getall", "target": "calculator_1" },
    { "source": "calculator_1", "target": "loop_1" },
    { "source": "loop_1", "target": "zendesk_update" },
    { "source": "zendesk_update", "target": "message_1" },
    { "source": "message_1", "target": "loop_1" },
    { "source": "loop_1", "target": "end_1", "label": "done" }
  ]
}

Saída esperada:

Sistema: ✅ Ticket #12340 escalado para HIGH
Sistema: ✅ Ticket #12342 escalado para HIGH
Sistema: ✅ Ticket #12345 escalado para HIGH

Resposta do Node

{
  "id": 12345,
  "subject": "Problema no checkout",
  "description": "Ao finalizar compra, recebo erro",
  "priority": "high",
  "status": "open",
  "type": "problem",
  "created_at": "2025-01-15T10:30:00Z",
  "updated_at": "2025-01-15T16:45:00Z",
  "url": "https://sua-empresa.zendesk.com/api/v2/tickets/12345.json"
}

Boas Práticas

SIM:

  • Sempre adicione comentário explicando mudanças de status/prioridade
  • Use updates para múltiplos campos de uma vez (evita múltiplas chamadas)
  • Valide que o ticket existe antes de tentar atualizar
  • Armazene resposta em variável para verificar sucesso
  • Use status "pending" quando aguardando resposta do cliente

NÃO:

  • Não atualize tickets para status "closed" diretamente - use "solved" primeiro
  • Não faça múltiplas atualizações seguidas - agrupe mudanças em uma chamada
  • Não mude prioridade sem justificativa no comentário
  • Não assuma que update sempre funciona - trate erros

Dicas

💡 Dica 1: Use comment.body para adicionar contexto sobre mudanças automáticas (muito útil para auditoria)

💡 Dica 2: Combine UPDATE com GET para verificar estado atual antes de modificar

💡 Dica 3: Use LOOP + UPDATE para atualizar múltiplos tickets em lote (útil para operações administrativas)

💡 Dica 4: Status "pending" é ideal para aguardar resposta do cliente - use com comment perguntando informações

💡 Dica 5: Sempre adicione identificação do canal (WhatsApp) nos comentários para rastreabilidade

Próximo Node

ZENDESK TICKET GET - Buscar ticket antes de atualizar → ZENDESK TICKET DELETE - Deletar ticket → ZENDESK TICKET CREATE - Criar novo ticket