Pular para conteúdo

PIPEDRIVE_DEAL_UPDATE - Atualizar Deal no Pipedrive

O que é este Node?

O PIPEDRIVE_DEAL_UPDATE é o node responsável por atualizar informações de um negócio existente no Pipedrive CRM, permitindo modificar valor, estágio, status e outros campos do deal.

Por que este Node existe?

Deals evoluem ao longo do processo de vendas e precisam refletir mudanças. O PIPEDRIVE_DEAL_UPDATE existe para:

  1. Progressão no Pipeline: Mover deals entre estágios conforme avançam
  2. Atualização de Valores: Ajustar valores quando orçamento ou proposta mudam
  3. Mudança de Status: Marcar deals como ganhos, perdidos ou reabertos
  4. Atribuição: Transferir deals entre vendedores
  5. Dados Atualizados: Manter informações sincronizadas com realidade

Como funciona internamente?

Quando o PIPEDRIVE_DEAL_UPDATE é executado, o sistema:

  1. Recebe ID e dados: Coleta ID do deal e campos a atualizar
  2. Processa variáveis: Substitui variáveis pelos valores reais
  3. Monta payload: Cria objeto apenas com campos que serão modificados
  4. Autentica no Pipedrive: Usa apiToken e companyDomain
  5. Faz requisição PUT: Envia atualização para /api/v1/deals/{id}
  6. Retorna deal atualizado: Pipedrive responde com dados atualizados
  7. Salva na variável: Armazena resposta completa
  8. Em caso de erro: Retorna erro se deal não existir ou dados inválidos

Código interno (pipedrive.executor.ts:33-37):

else if (operation === 'update') {
  const dealId = this.replaceVariables(node.data.dealId, context.variables);
  const deal = JSON.parse(this.replaceVariables(JSON.stringify(node.data.deal), context.variables));
  const response = await axios.put(`${endpoint}/${dealId}?${authParam}`, deal, { headers });
  result = response.data;
}

Quando você DEVE usar este Node?

Use PIPEDRIVE_DEAL_UPDATE sempre que precisar modificar deal existente:

Casos de uso

  1. Avançar no funil: Cliente confirma interesse e deal avança para próximo estágio
  2. Ajustar valor: Cliente negocia e valor do deal precisa ser atualizado
  3. Fechar negócio: Deal é ganho ou perdido e status precisa mudar
  4. Reatribuir vendedor: Deal transferido para outro responsável
  5. Adicionar informações: Atualizar descrição, data esperada, etc.

Quando NÃO usar PIPEDRIVE_DEAL_UPDATE

  • Deal não existe: Use PIPEDRIVE_DEAL_CREATE para criar novo
  • Não sabe o ID: Busque com PIPEDRIVE_DEAL_LIST ou PIPEDRIVE_DEAL_GET primeiro
  • Criar novo deal: Use CREATE ao invés de UPDATE

Parâmetros Detalhados

dealId (string/number, obrigatório)

O que é: ID do deal que será atualizado.

Exemplo: 123, "{{deal_id}}"

deal (object, obrigatório)

O que é: Objeto contendo campos a serem atualizados. Envie apenas campos que deseja modificar.

Campos disponíveis: - title: Novo título - value: Novo valor - stage_id: Novo estágio - status: Novo status (open, won, lost) - person_id: Novo ID de pessoa - org_id: Novo ID de organização - user_id: Novo vendedor responsável - expected_close_date: Nova data esperada - E qualquer campo customizado

Flow completo para testar:

{
  "name": "Teste Pipedrive - Atualizar Deal",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "ID Deal",
        "parameters": {
          "message": "ID do deal:",
          "variableName": "deal_id"
        }
      }
    },
    {
      "id": "number_1",
      "type": "number",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Novo Valor",
        "parameters": {
          "message": "Novo valor (R$):",
          "variableName": "novo_valor",
          "decimals": 2
        }
      }
    },
    {
      "id": "pipedrive_1",
      "type": "pipedrive",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Atualizar",
        "resource": "deals",
        "operation": "update",
        "config": {
          "apiToken": "{{pipedrive_token}}",
          "companyDomain": "sua-empresa"
        },
        "dealId": "{{deal_id}}",
        "deal": {
          "value": "{{novo_valor}}"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "✅ Deal atualizado! Novo valor: R$ {{novo_valor}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "number_1" },
    { "source": "number_1", "target": "pipedrive_1" },
    { "source": "pipedrive_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Digite ID válido e novo valor. Deal será atualizado.

Parâmetros

Campo Tipo Obrigatório Descrição
resource string Sim Deve ser "deals"
operation string Sim Deve ser "update"
config.apiToken string Sim Token API Pipedrive
config.companyDomain string Sim Subdomínio empresa
dealId string/number Sim ID do deal
deal object Sim Campos a atualizar
responseVariable string Não Variável resposta

Exemplo 1: Avançar Deal no Pipeline

Objetivo: Mover deal para próximo estágio quando cliente avança

JSON para Importar

{
  "name": "Pipedrive - Avançar no Pipeline",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Pergunta",
        "parameters": {
          "message": "Você gostaria de receber uma proposta comercial?"
        }
      }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Resposta",
        "parameters": {
          "message": "Digite: SIM ou NÃO",
          "variableName": "resposta"
        }
      }
    },
    {
      "id": "condition_1",
      "type": "condition",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Aceita Proposta?",
        "parameters": {
          "variable": "resposta",
          "operator": "equals",
          "value": "SIM"
        }
      }
    },
    {
      "id": "pipedrive_1",
      "type": "pipedrive",
      "position": { "x": 900, "y": 0 },
      "data": {
        "label": "Avançar para Proposta",
        "resource": "deals",
        "operation": "update",
        "config": {
          "apiToken": "{{pipedrive_token}}",
          "companyDomain": "sua-empresa"
        },
        "dealId": "{{current_deal_id}}",
        "deal": {
          "stage_id": 3,
          "probability": 60
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 1100, "y": 0 },
      "data": {
        "label": "Sucesso",
        "parameters": {
          "message": "Ótimo! Vou preparar uma proposta personalizada e enviar em até 24h."
        }
      }
    },
    {
      "id": "message_3",
      "type": "message",
      "position": { "x": 900, "y": 200 },
      "data": {
        "label": "Não Interessado",
        "parameters": {
          "message": "Entendo. Fico à disposição caso mude de ideia!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1300, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_1" },
    { "source": "message_1", "target": "input_1" },
    { "source": "input_1", "target": "condition_1" },
    { "source": "condition_1", "target": "pipedrive_1", "label": "true" },
    { "source": "condition_1", "target": "message_3", "label": "false" },
    { "source": "pipedrive_1", "target": "message_2" },
    { "source": "message_2", "target": "end_1" },
    { "source": "message_3", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Você gostaria de receber uma proposta comercial?
Sistema: Digite: SIM ou NÃO
Usuário: SIM
Sistema: Ótimo! Vou preparar uma proposta personalizada e enviar em até 24h.

Exemplo 2: Fechar Deal como Ganho

Objetivo: Marcar deal como ganho quando venda é fechada

JSON para Importar

{
  "name": "Pipedrive - Fechar Venda",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Confirmação",
        "parameters": {
          "message": "Parabéns! Vou registrar sua compra no sistema."
        }
      }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "ID Deal",
        "parameters": {
          "message": "ID do pedido:",
          "variableName": "deal_id"
        }
      }
    },
    {
      "id": "pipedrive_1",
      "type": "pipedrive",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Marcar como Ganho",
        "resource": "deals",
        "operation": "update",
        "config": {
          "apiToken": "{{pipedrive_token}}",
          "companyDomain": "sua-empresa"
        },
        "dealId": "{{deal_id}}",
        "deal": {
          "status": "won",
          "won_time": "{{current_timestamp}}"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Sucesso",
        "parameters": {
          "message": "🎉 Venda confirmada! Você receberá os próximos passos por email."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_1" },
    { "source": "message_1", "target": "input_1" },
    { "source": "input_1", "target": "pipedrive_1" },
    { "source": "pipedrive_1", "target": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Resposta do Node

{
  "success": true,
  "data": {
    "id": 456,
    "title": "Venda Sistema - Cliente ABC",
    "value": 15000,
    "stage_id": 5,
    "status": "won",
    "won_time": "2025-01-15 15:30:00",
    "update_time": "2025-01-15 15:30:00"
  }
}

Boas Práticas

SIM:

  • Busque deal com GET antes de atualizar para validar existência
  • Envie apenas campos que precisa modificar
  • Use status "won" quando fechar venda
  • Use status "lost" com lost_reason quando perder
  • Atualize probability conforme deal avança
  • Defina expected_close_date para previsões

NÃO:

  • Atualizar sem verificar se deal existe
  • Enviar objeto completo quando só precisa mudar 1 campo
  • Mudar status sem motivo claro
  • Ignorar erros de atualização

Dicas

💡 Dica 1: Combine com SWITCH para atualizar diferentes campos baseado em respostas do cliente.

💡 Dica 2: Use DELAY antes de atualizar para permitir processamento de pagamento.

💡 Dica 3: Crie webhook para notificar vendedor quando deal é atualizado pelo bot.

Próximos Nodes

PIPEDRIVE_DEAL_GET - Buscar deal antes de atualizar → PIPEDRIVE_DEAL_CREATE - Criar novo deal → PIPEDRIVE_DEAL_LIST - Listar deals