Workflow n8n

Automatisation Pipedrive avec n8n : rafraîchissement des tokens

  • Ce workflow n8n a pour objectif de gérer le rafraîchissement des tokens d'accès pour Pipedrive, un outil essentiel pour les équipes commerciales. Dans un contexte où la gestion des accès API est cruciale, ce workflow permet d'automatiser la récupération et la mise à jour des tokens, garantissant ainsi un accès continu aux données nécessaires pour les opérations commerciales. En intégrant des services comme Supabase et des requêtes HTTP, ce processus réduit les risques d'interruption de service liés à des tokens expirés.
  • Le workflow débute par un déclencheur Webhook qui reçoit une demande pour initier le processus. Ensuite, il utilise des noeuds HTTP pour récupérer le token d'accès actuel de Pipedrive. Si le token est invalide, le workflow génère un nouveau token d'accès en utilisant les informations d'authentification stockées dans Supabase. Les étapes suivantes incluent la mise à jour des tokens dans la base de données Supabase, garantissant que les informations sont toujours à jour. En cas d'échec à récupérer ou à rafraîchir le token, des messages d'erreur sont gérés pour assurer une transparence dans le processus.
  • Les bénéfices business de ce workflow sont significatifs : il élimine les interruptions de service dues à des tokens expirés, améliore l'efficacité des équipes commerciales en garantissant un accès ininterrompu aux données de Pipedrive, et réduit le risque d'erreurs humaines dans la gestion des tokens. En automatisant ce processus, les entreprises peuvent se concentrer sur leurs activités principales sans se soucier de la gestion des accès API.
Tags clés :automatisationPipedriven8nAPISupabase
Catégorie: Webhook · Tags: automatisation, Pipedrive, n8n, API, Supabase0

Workflow n8n Pipedrive, Supabase : vue d'ensemble

Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.

Workflow n8n Pipedrive, Supabase : détail des nœuds

  • Stop and Error

    Ce noeud arrête le workflow et renvoie un message d'erreur.

  • Sticky Note

    Ce noeud crée une note autocollante avec des paramètres de couleur, de taille et de contenu.

  • Sticky Note1

    Ce noeud crée une note autocollante avec une hauteur spécifiée et un contenu.

  • Sticky Note2

    Ce noeud crée une note autocollante avec uniquement du contenu.

  • Sticky Note3

    Ce noeud crée une note autocollante avec des paramètres de couleur, de taille et de contenu.

  • Insert

    Ce noeud insère des données dans une table spécifiée de Supabase.

  • Sticky Note4

    Ce noeud crée une note autocollante avec du contenu.

  • Sticky Note5

    Ce noeud crée une note autocollante avec des paramètres de couleur, de taille et de contenu.

  • Get Pipedrive Token

    Ce noeud récupère un token Pipedrive à partir de Supabase.

  • Get contact from Pipedrive

    Ce noeud effectue une requête HTTP pour obtenir un contact depuis Pipedrive.

  • Access Token Invalid

    Ce noeud vérifie si le token d'accès est invalide en fonction de conditions spécifiées.

  • Success

    Ce noeud répond à un webhook avec un message de succès.

  • Refresh Access Token

    Ce noeud effectue une requête HTTP pour rafraîchir un token d'accès.

  • Sticky Note6

    Ce noeud crée une note autocollante avec une largeur spécifiée et du contenu.

  • Sticky Note7

    Ce noeud crée une note autocollante avec une largeur spécifiée et du contenu.

  • Sticky Note8

    Ce noeud crée une note autocollante avec une hauteur spécifiée et du contenu.

  • convert clientId and secret to base64

    Ce noeud convertit un clientId et un secret en base64 à l'aide d'un code JavaScript.

  • Generate Refresh Token from authcode

    Ce noeud effectue une requête HTTP pour générer un token de rafraîchissement à partir d'un code d'authentification.

  • Look for the related record in Supabase

    Ce noeud recherche un enregistrement lié dans Supabase en fonction de filtres spécifiés.

  • IF rec not found

    Ce noeud vérifie si un enregistrement n'a pas été trouvé en fonction de conditions spécifiées.

  • Update tokns in the record

    Ce noeud met à jour les tokens dans un enregistrement dans Supabase.

  • Supabase- look for the record

    Ce noeud recherche un enregistrement dans Supabase en fonction de filtres spécifiés.

  • combine client id and secret

    Ce noeud combine un client ID et un secret en utilisant des options et des affectations.

  • Get Pipedrive acess token

    Ce noeud effectue une requête HTTP pour obtenir un token d'accès Pipedrive.

  • IF success

    Ce noeud vérifie si l'opération a réussi en fonction de conditions spécifiées.

  • Update thr row with new access token

    Ce noeud met à jour une ligne avec un nouveau token d'accès dans Supabase.

  • Webhook

    Ce noeud reçoit des requêtes via un webhook avec des paramètres spécifiés.

  • Receive request

    Ce noeud reçoit une requête via un webhook avec des paramètres spécifiés.

  • catch Auth code

    Ce noeud capture un code d'authentification via un webhook.

Inscris-toi pour voir l'intégralité du workflow

Inscription gratuite

S'inscrire gratuitementBesoin d'aide ?
{
  "id": "IYgbtNpyB4E6Jbxo",
  "meta": {
    "instanceId": "35ae520798f87e479496aa54e1a1f89ffdf43eee77986511d08258a12b1edc98",
    "templateCredsSetupCompleted": true
  },
  "name": "2. Refresh Pipedrive tokens",
  "tags": [],
  "nodes": [
    {
      "id": "2b66edcd-c71a-4dac-971f-deb1b09ef85b",
      "name": "Stop and Error",
      "type": "n8n-nodes-base.stopAndError",
      "position": [
        1460,
        -80
      ],
      "parameters": {
        "errorMessage": "Token refresh failed"
      },
      "typeVersion": 1,
      "alwaysOutputData": false
    },
    {
      "id": "b48d6760-766e-4b39-be35-89de7dc3ab5e",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        60,
        -300
      ],
      "parameters": {
        "color": 5,
        "width": 872,
        "height": 97,
        "content": "## Step 2:\nCreate a workflow to refresh your access token when the access token requires a refresh."
      },
      "typeVersion": 1
    },
    {
      "id": "6119eef3-9ffa-45a1-b238-412738e7529e",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        280,
        -80
      ],
      "parameters": {
        "height": 211,
        "content": "\n\n\n\n\n\n\n\nPost unique data to identify your row in Database and be able to fetch the existing access and refresh token"
      },
      "typeVersion": 1
    },
    {
      "id": "2d76be21-95e1-4747-b761-126b133e8264",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        980,
        -220
      ],
      "parameters": {
        "content": "## Get token from pipedrive"
      },
      "typeVersion": 1
    },
    {
      "id": "9a44eb63-9d31-4b24-9171-1f9a828a5c52",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        100,
        -740
      ],
      "parameters": {
        "color": 5,
        "width": 995,
        "height": 82,
        "content": "## Step 1:\nSave Refresh token and Access token to DB when authenticated by user and installed.  "
      },
      "typeVersion": 1
    },
    {
      "id": "f3247e6a-7c1c-4479-9f83-f3bc4146f254",
      "name": "Insert",
      "type": "n8n-nodes-base.supabase",
      "position": [
        1600,
        -660
      ],
      "parameters": {
        "tableId": "App_tok",
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": "ref_token",
              "fieldValue": "={{ $node[\"Generate Refresh Token from authcode\"].json[\"body\"][\"refresh_token\"] }}"
            },
            {
              "fieldId": "acc_token",
              "fieldValue": "={{ $node[\"Generate Refresh Token from authcode\"].json[\"body\"][\"access_token\"] }}"
            },
            {
              "fieldId": "Platform",
              "fieldValue": "Pipedrive"
            },
            {
              "fieldId": "created_at",
              "fieldValue": "={{$now.toUTC().toString()}}"
            },
            {
              "fieldId": "updated_at",
              "fieldValue": "={{$now.toUTC().toString()}}"
            }
          ]
        }
      },
      "credentials": {
        "supabaseApi": {
          "id": "tlmP1CXY3ExzjJDs",
          "name": "Supabase Automation"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "f7ad45d0-7055-45f4-9971-031ffebfdbda",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        500,
        -640
      ],
      "parameters": {
        "content": "You can also use SET NODE + tobase64 function as done in step 2"
      },
      "typeVersion": 1
    },
    {
      "id": "e14e2dac-e84b-475f-a01b-14bb723eedc8",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        100,
        200
      ],
      "parameters": {
        "color": 5,
        "width": 1644,
        "height": 80,
        "content": "## Step 3:\nMake an actual API call. In this example, we are using search person API. Please refer to Pipedrive API documentation for your specific use case. "
      },
      "typeVersion": 1
    },
    {
      "id": "b450c928-e0e4-4f49-829e-03b61828d4d9",
      "name": "Get Pipedrive Token",
      "type": "n8n-nodes-base.supabase",
      "position": [
        600,
        660
      ],
      "parameters": {
        "filters": {
          "conditions": [
            {
              "keyName": "Platform",
              "keyValue": "Pipedrive"
            },
            {
              "keyName": "AppId",
              "keyValue": "57db0bab2932f657"
            }
          ]
        },
        "tableId": "App_tok",
        "operation": "get"
      },
      "credentials": {
        "supabaseApi": {
          "id": "tlmP1CXY3ExzjJDs",
          "name": "Supabase Automation"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "f92a957a-d0ef-4037-8657-74e7fe74fe6d",
      "name": "Get contact from Pipedrive",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        900,
        660
      ],
      "parameters": {
        "url": "=https://priyajain-sandbox.pipedrive.com/api/v2/persons/search?fields=email&term={{ $node[\"Receive request\"].json[\"body\"][\"person\"][\"email\"] }}",
        "options": {
          "response": {
            "response": {
              "fullResponse": true
            }
          }
        },
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Accept",
              "value": "application/json"
            },
            {
              "name": "Authorization",
              "value": "=Bearer {{ $node[\"Get Pipedrive Token\"].json[\"acc_token\"] }}"
            }
          ]
        }
      },
      "typeVersion": 4,
      "continueOnFail": true,
      "alwaysOutputData": false
    },
    {
      "id": "bff21156-3da0-4cf3-b3de-c24d8abe7577",
      "name": "Access Token Invalid",
      "type": "n8n-nodes-base.if",
      "position": [
        1160,
        700
      ],
      "parameters": {
        "conditions": {
          "boolean": [
            {
              "value1": "={{ $json[\"error\"][\"message\"].includes(\"Invalid token: access token is invalid\") }}",
              "value2": "={{ true }}"
            }
          ]
        },
        "combineOperation": "any"
      },
      "typeVersion": 1
    },
    {
      "id": "9fd832b1-2af9-48c2-9d57-86a9f34bdd78",
      "name": "Success",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1440,
        720
      ],
      "parameters": {
        "options": {
          "responseCode": 200
        },
        "respondWith": "json",
        "responseBody": "={{ $node[\"Get contact from Pipedrive\"].json[\"body\"][\"data\"][\"items\"][\"0\"][\"item\"][\"name\"] }}"
      },
      "typeVersion": 1
    },
    {
      "id": "daf33b32-ff7b-4d7e-8fd0-d54dfaddf405",
      "name": "Refresh Access Token",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1360,
        320
      ],
      "parameters": {
        "url": "http://localhost:5678/webhook/937a8843-a28a-400a-b473-bdc598366fa0",
        "method": "POST",
        "options": {},
        "jsonBody": "{\n\n  \"appId\":\"57db0bab2932f657\"\n\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBasicAuth"
      },
      "credentials": {
        "httpBasicAuth": {
          "id": "E2RYFiR9PotuglZv",
          "name": "PJ demo"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "6759a890-6c2a-4bb1-aae9-9b8723b9e143",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        580,
        420
      ],
      "parameters": {
        "width": 668,
        "content": "## Loop back to fecth the  refreshed Access Token\n### Note:\nYou can add further conditions and use Switch  statemen tinstead of IF to validate API response based on your use case."
      },
      "typeVersion": 1
    },
    {
      "id": "d975ce9f-2ef2-46b1-9d30-4f6e06e19b7e",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        120,
        -960
      ],
      "parameters": {
        "width": 1413,
        "content": "## 1. This workflow helps you create your own Oauth 2.0 token refresh system. It helps you have better control of your oauth 2.0 auth process.\n## 2. I am using Pipedrive API here. However, you can re-use this for other similar applications. "
      },
      "typeVersion": 1
    },
    {
      "id": "40d59a94-563d-459c-91d0-4206c2a19704",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        180,
        580
      ],
      "parameters": {
        "height": 248,
        "content": "A 3rd partyapplication posting the request to the webhook"
      },
      "typeVersion": 1
    },
    {
      "id": "03945766-570c-47db-82c6-2c973e45106d",
      "name": "convert clientId and secret to base64",
      "type": "n8n-nodes-base.code",
      "position": [
        560,
        -560
      ],
      "parameters": {
        "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nconst client_id = \"57db0bab2932f657\";\nconst client_secret = \"edfaba095e9e7ddefe2e960ce2e98345230a016d\";\n\n// Combine client_id and client_secret with a colon\nconst combinedString = client_id+\":\"+client_secret;\n\n// Encode the combined string in Base64\nconst encodedString = Buffer.from(combinedString).toString('base64');\n\n// Create the Authorization header value\nconst authorizationHeader = `Basic ${encodedString}`;\n\nreturn {\"authheader\":authorizationHeader};"
      },
      "typeVersion": 2
    },
    {
      "id": "8ca6eb93-6994-4536-b61e-d884c8515929",
      "name": "Generate Refresh Token from authcode",
      "type": "n8n-nodes-base.httpRequest",
      "maxTries": 2,
      "position": [
        820,
        -560
      ],
      "parameters": {
        "url": "https://oauth.pipedrive.com/oauth/token",
        "method": "POST",
        "options": {
          "response": {
            "response": {
              "fullResponse": true
            }
          }
        },
        "sendBody": true,
        "contentType": "form-urlencoded",
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "grant_type",
              "value": "authorization_code"
            },
            {
              "name": "code",
              "value": "={{$node[\"catch Auth code\"].json[\"query\"][\"code\"]}}"
            },
            {
              "name": "redirect_uri",
              "value": "={{ $node[\"catch Auth code\"].json[\"webhookUrl\"] }}"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "={{$node[\"convert clientId and secret to base64\"].json[\"authheader\"]}}"
            }
          ]
        }
      },
      "retryOnFail": false,
      "typeVersion": 4,
      "alwaysOutputData": false
    },
    {
      "id": "9c1b22e1-fd50-4c70-91cf-f4ea8cc7d3ac",
      "name": "Look for the related record in Supabase",
      "type": "n8n-nodes-base.supabase",
      "position": [
        1060,
        -540
      ],
      "parameters": {
        "filters": {
          "conditions": [
            {
              "keyName": "Platform",
              "keyValue": "Pipedrive"
            }
          ]
        },
        "tableId": "App_tok",
        "operation": "get"
      },
      "credentials": {
        "supabaseApi": {
          "id": "tlmP1CXY3ExzjJDs",
          "name": "Supabase Automation"
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "id": "53602a58-d47a-4133-b9ec-4ea421a75eea",
      "name": "IF rec not found",
      "type": "n8n-nodes-base.if",
      "position": [
        1260,
        -540
      ],
      "parameters": {
        "conditions": {
          "number": [
            {
              "value1": "={{ $json.values().length }}",
              "operation": "equal"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "38e5d91c-1bea-4f7a-8336-98748005d02e",
      "name": "Update tokns in the record",
      "type": "n8n-nodes-base.supabase",
      "position": [
        1600,
        -460
      ],
      "parameters": {
        "filters": {
          "conditions": [
            {
              "keyName": "Platform",
              "keyValue": "Pipedrive",
              "condition": "eq"
            }
          ]
        },
        "tableId": "App_tok",
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": "acc_token",
              "fieldValue": "={{ $node[\"Generate Refresh Token from authcode\"].json[\"body\"][\"access_token\"] }}"
            },
            {
              "fieldId": "ref_token",
              "fieldValue": "={{ $node[\"Generate Refresh Token from authcode\"].json[\"body\"][\"refresh_token\"] }}"
            },
            {
              "fieldId": "updated_at",
              "fieldValue": "={{$now.toUTC().toString()}}"
            }
          ]
        },
        "matchType": "allFilters",
        "operation": "update"
      },
      "credentials": {
        "supabaseApi": {
          "id": "tlmP1CXY3ExzjJDs",
          "name": "Supabase Automation"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "43a2613d-7793-48c9-8934-57d9b713f5fe",
      "name": "Supabase- look for the record",
      "type": "n8n-nodes-base.supabase",
      "position": [
        600,
        -140
      ],
      "parameters": {
        "filters": {
          "conditions": [
            {
              "keyName": "Platform",
              "keyValue": "Pipedrive"
            },
            {
              "keyName": "AppId",
              "keyValue": "={{ $node[\"Webhook\"].json[\"body\"][\"appId\"] }}"
            }
          ]
        },
        "tableId": "App_tok",
        "operation": "get"
      },
      "credentials": {
        "supabaseApi": {
          "id": "tlmP1CXY3ExzjJDs",
          "name": "Supabase Automation"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "366bd343-419c-4a77-b2ce-e6124a6cc291",
      "name": "combine client id and secret",
      "type": "n8n-nodes-base.set",
      "position": [
        840,
        -140
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "4330b857-6184-4ad8-82dc-a8b806ab8077",
              "name": "authheader",
              "type": "string",
              "value": "57db0bab2932f657:edfaba095e9e7ddefe2e960ce2e98345230a016d"
            }
          ]
        }
      },
      "typeVersion": 3.3
    },
    {
      "id": "156acb8f-3a23-40ec-b011-9db8bfa6d98b",
      "name": "Get Pipedrive acess token",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1060,
        -140
      ],
      "parameters": {
        "url": "https://oauth.pipedrive.com/oauth/token",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "form-urlencoded",
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "grant_type",
              "value": "refresh_token"
            },
            {
              "name": "refresh_token",
              "value": "={{ $node[\"Supabase- look for the record\"].json[\"ref_token\"] }}"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Basic {{ $json[\"authheader\"].base64Encode() }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "3e20309e-6d50-444c-b9e1-cf6d6982e546",
      "name": "IF success",
      "type": "n8n-nodes-base.if",
      "position": [
        1240,
        -140
      ],
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ Object.keys($input.first().json)[0]}}",
              "value2": "access_token"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "1e991aa7-9888-404d-8f80-bb6ce0a3b777",
      "name": "Update thr row with new access token",
      "type": "n8n-nodes-base.supabase",
      "position": [
        1420,
        -280
      ],
      "parameters": {
        "filters": {
          "conditions": [
            {
              "keyName": "Platform",
              "keyValue": "Pipedrive",
              "condition": "eq"
            }
          ]
        },
        "tableId": "App_tok",
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": "acc_token",
              "fieldValue": "={{ $node[\"Get Pipedrive acess token\"].json[\"access_token\"] }}"
            },
            {
              "fieldId": "ref_token",
              "fieldValue": "={{ $node[\"Get Pipedrive acess token\"].json[\"refresh_token\"] }}"
            }
          ]
        },
        "matchType": "allFilters",
        "operation": "update"
      },
      "credentials": {
        "supabaseApi": {
          "id": "tlmP1CXY3ExzjJDs",
          "name": "Supabase Automation"
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "id": "d0989bad-9176-44a2-86ce-db07a5e8a34c",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        340,
        -140
      ],
      "webhookId": "937a8843-a28a-400a-b473-bdc598366fa0",
      "parameters": {
        "path": "937a8843-a28a-400a-b473-bdc598366fa0",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "lastNode",
        "authentication": "basicAuth"
      },
      "credentials": {
        "httpBasicAuth": {
          "id": "E2RYFiR9PotuglZv",
          "name": "PJ demo"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "108a2ea1-de2a-4df3-9d9f-0ce1b27a52e9",
      "name": "Receive request",
      "type": "n8n-nodes-base.webhook",
      "position": [
        280,
        680
      ],
      "webhookId": "47704458-bfa6-4d95-adf1-97fc78e35d8a",
      "parameters": {
        "path": "47704458-bfa6-4d95-adf1-97fc78e35d8a",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "responseNode",
        "authentication": "basicAuth"
      },
      "credentials": {
        "httpBasicAuth": {
          "id": "E2RYFiR9PotuglZv",
          "name": "PJ demo"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "f983cfd1-52db-4839-88af-6386ec7c7256",
      "name": "catch Auth code",
      "type": "n8n-nodes-base.webhook",
      "position": [
        300,
        -560
      ],
      "webhookId": "aae545fb-a69d-4e20-91ce-65f105d0ea2f",
      "parameters": {
        "path": "aae545fb-a69d-4e20-91ce-65f105d0ea2f",
        "options": {}
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {
    "Receive request": [
      {
        "json": {
          "body": {
            "person": {
              "email": "priya+solar@psw.com"
            }
          },
          "query": {},
          "params": {},
          "headers": {
            "host": "http://localhost:5678",
            "accept": "*/*",
            "user-agent": "PostmanRuntime/7.39.0",
            "content-type": "application/json",
            "authorization": "Basic xxxxxxx==",
            "cache-control": "no-cache",
            "postman-token": "41b79257-xxxx-xxxx-xxxx-9e004cae4e9e",
            "content-length": "52",
            "accept-encoding": "gzip, deflate, br",
            "x-forwarded-for": "54.86.50.139",
            "x-forwarded-host": "localhost:5678",
            "x-forwarded-proto": "https"
          },
          "webhookUrl": "http://localhost:5678/webhook-test/47704458-bfa6-4d95-adf1-97fc78e35d8a",
          "executionMode": "test"
        }
      }
    ]
  },
  "settings": {
    "callerPolicy": "workflowsFromSameOwner",
    "executionOrder": "v1",
    "saveManualExecutions": true
  },
  "versionId": "54499ed8-4677-400a-9e03-d0d84f8a97b5",
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Supabase- look for the record",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF success": {
      "main": [
        [
          {
            "node": "Update thr row with new access token",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Stop and Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Receive request": {
      "main": [
        [
          {
            "node": "Get Pipedrive Token",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "catch Auth code": {
      "main": [
        [
          {
            "node": "convert clientId and secret to base64",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF rec not found": {
      "main": [
        [
          {
            "node": "Insert",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Update tokns in the record",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Pipedrive Token": {
      "main": [
        [
          {
            "node": "Get contact from Pipedrive",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Access Token Invalid": {
      "main": [
        [
          {
            "node": "Refresh Access Token",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Success",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Refresh Access Token": {
      "main": [
        [
          {
            "node": "Get Pipedrive Token",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Pipedrive acess token": {
      "main": [
        [
          {
            "node": "IF success",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get contact from Pipedrive": {
      "main": [
        [
          {
            "node": "Access Token Invalid",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "combine client id and secret": {
      "main": [
        [
          {
            "node": "Get Pipedrive acess token",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Supabase- look for the record": {
      "main": [
        [
          {
            "node": "combine client id and secret",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Refresh Token from authcode": {
      "main": [
        [
          {
            "node": "Look for the related record in Supabase",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "convert clientId and secret to base64": {
      "main": [
        [
          {
            "node": "Generate Refresh Token from authcode",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Look for the related record in Supabase": {
      "main": [
        [
          {
            "node": "IF rec not found",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Workflow n8n Pipedrive, Supabase : pour qui est ce workflow ?

Ce workflow s'adresse aux équipes commerciales et aux développeurs qui utilisent Pipedrive pour la gestion des ventes. Il est particulièrement utile pour les entreprises de taille moyenne à grande qui cherchent à automatiser la gestion des tokens d'accès API. Un niveau technique intermédiaire est recommandé pour personnaliser le workflow selon les besoins spécifiques.

Workflow n8n Pipedrive, Supabase : problème résolu

Ce workflow résout le problème de la gestion des tokens d'accès pour Pipedrive, qui peut souvent entraîner des interruptions de service si les tokens expirent. En automatisant le processus de rafraîchissement des tokens, les utilisateurs évitent les frustrations liées à des accès bloqués et réduisent le temps passé à gérer manuellement ces tokens. Le résultat est un accès continu et fiable aux données de Pipedrive, ce qui améliore la productivité des équipes commerciales.

Workflow n8n Pipedrive, Supabase : étapes du workflow

Étape 1 : Le workflow est déclenché par un Webhook qui reçoit une demande.

  • Étape 1 : Il récupère le token d'accès actuel de Pipedrive via une requête HTTP.
  • Étape 2 : Si le token est invalide, il génère un nouveau token en utilisant les informations d'authentification stockées dans Supabase.
  • Étape 3 : Le workflow met à jour les tokens dans la base de données Supabase pour garantir que les informations sont à jour.
  • Étape 4 : En cas d'échec, des messages d'erreur sont gérés pour assurer la transparence du processus.

Workflow n8n Pipedrive, Supabase : guide de personnalisation

Pour personnaliser ce workflow, commencez par modifier l'URL du Webhook pour l'adapter à votre environnement. Assurez-vous que les identifiants de Pipedrive et les paramètres d'authentification sont correctement configurés dans les noeuds HTTP. Vous pouvez également ajuster les filtres dans les noeuds Supabase pour cibler les enregistrements spécifiques que vous souhaitez mettre à jour. Pensez à sécuriser le flux en utilisant des méthodes d'authentification appropriées pour les requêtes HTTP. Enfin, surveillez le workflow pour détecter toute anomalie dans le rafraîchissement des tokens.