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:
- Adicionar Comentários: Registrar atualizações e comunicação com o cliente
- Mudar Status: Atualizar status conforme o ticket progride (new → open → solved)
- Ajustar Prioridade: Aumentar ou diminuir prioridade baseado em novas informações
- Automatizar Workflow: Atualizar tickets automaticamente baseado em eventos ou condições
Como funciona internamente?
Quando o ZENDESK TICKET UPDATE é executado, o sistema:
- Valida Credenciais: Verifica subdomain, email e API token
- Substitui Variáveis: Processa ticketId e valores em updates
- Prepara Objeto Updates: Monta objeto com campos a atualizar
- Cria Cliente HTTP: Configura autenticação Basic Auth
- Envia Request PUT: Atualiza ticket em /api/v2/tickets/{id}.json
- Se ticket não existe: Retorna erro 404
- 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
- Adicionar Comentário: "Cliente forneceu informações adicionais → adicionar ao ticket"
- Mudar Status: "Problema resolvido → marcar ticket como solved"
- 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