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:
- Progressão no Pipeline: Mover deals entre estágios conforme avançam
- Atualização de Valores: Ajustar valores quando orçamento ou proposta mudam
- Mudança de Status: Marcar deals como ganhos, perdidos ou reabertos
- Atribuição: Transferir deals entre vendedores
- Dados Atualizados: Manter informações sincronizadas com realidade
Como funciona internamente?
Quando o PIPEDRIVE_DEAL_UPDATE é executado, o sistema:
- Recebe ID e dados: Coleta ID do deal e campos a atualizar
- Processa variáveis: Substitui variáveis pelos valores reais
- Monta payload: Cria objeto apenas com campos que serão modificados
- Autentica no Pipedrive: Usa apiToken e companyDomain
- Faz requisição PUT: Envia atualização para
/api/v1/deals/{id} - Retorna deal atualizado: Pipedrive responde com dados atualizados
- Salva na variável: Armazena resposta completa
- 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
- Avançar no funil: Cliente confirma interesse e deal avança para próximo estágio
- Ajustar valor: Cliente negocia e valor do deal precisa ser atualizado
- Fechar negócio: Deal é ganho ou perdido e status precisa mudar
- Reatribuir vendedor: Deal transferido para outro responsável
- 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