Workflow n8n

Automatisation Google Sheets avec n8n : synchronisation des tickets

  • Ce workflow n8n a pour objectif d'automatiser la gestion des tickets entre Dialpad et Google Sheets, facilitant ainsi le suivi des clients et l'organisation des données. Dans un contexte où la gestion efficace des tickets est cruciale pour les équipes de support client, cette automatisation permet de réduire les erreurs manuelles et d'optimiser le temps de traitement. Les cas d'usage incluent la création, la mise à jour et la synchronisation des tickets en temps réel, ce qui est essentiel pour les entreprises qui souhaitent améliorer leur réactivité et leur service client.
  • Le workflow débute avec un déclencheur de type Webhook qui reçoit les données des tickets. Ensuite, le noeud 'GetCustomer' permet de récupérer les informations du client à partir de Dialpad. Si plusieurs tickets sont détectés, le noeud 'IFMoreThanOne' gère cette condition pour traiter chaque ticket individuellement. Les tickets sont ensuite créés ou mis à jour via les noeuds 'CreateTicket' et 'UpdateTicket'. Pour chaque ticket, des données sont également envoyées vers Google Sheets grâce aux noeuds 'Google Sheets' qui permettent de maintenir un tableau de bord à jour avec les informations pertinentes. Enfin, des fonctions personnalisées comme 'Contacts' et 'Customers' sont utilisées pour enrichir les données avant leur envoi, garantissant ainsi une gestion complète et efficace des informations.
  • Les bénéfices business de cette automatisation n8n sont multiples : elle réduit les risques d'erreurs humaines, améliore la traçabilité des tickets et permet un accès rapide aux données clients, ce qui se traduit par une meilleure satisfaction client et une efficacité opérationnelle accrue.
Tags clés :automatisationGoogle Sheetsticketsn8nDialpad
Catégorie: Webhook · Tags: automatisation, Google Sheets, tickets, n8n, Dialpad0

Workflow n8n Google Sheets, tickets, Dialpad : vue d'ensemble

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

Workflow n8n Google Sheets, tickets, Dialpad : détail des nœuds

  • GetCustomer

    Ce noeud effectue une requête HTTP pour obtenir des informations sur un client.

  • Webhook

    Ce noeud agit comme un déclencheur en écoutant les requêtes HTTP entrantes sur un chemin spécifié.

  • CreateTicket

    Ce noeud envoie une requête HTTP pour créer un ticket avec les paramètres spécifiés.

  • GetTicket

    Ce noeud effectue une requête HTTP pour récupérer les informations d'un ticket.

  • IFMoreThanOne

    Ce noeud évalue une condition pour déterminer si le nombre d'éléments est supérieur à un.

  • Google Sheets

    Ce noeud interagit avec Google Sheets pour effectuer des opérations sur une plage de données.

  • ForGoogle

    Ce noeud définit des valeurs à utiliser dans le workflow pour un traitement ultérieur.

  • UpdateTicket

    Ce noeud envoie une requête HTTP pour mettre à jour un ticket existant avec de nouveaux paramètres.

  • ForGoogle1

    Ce noeud définit des valeurs supplémentaires à utiliser dans le workflow.

  • Google Sheets1

    Ce noeud interagit avec Google Sheets pour effectuer des opérations sur une autre plage de données.

  • NoOp

    Ce noeud ne réalise aucune opération, servant de point de passage dans le workflow.

  • Contacts

    Ce noeud exécute un code JavaScript personnalisé pour traiter des données de contact.

  • IFContacts

    Ce noeud évalue une condition liée aux contacts pour déterminer le flux du workflow.

  • Customers

    Ce noeud exécute un code JavaScript personnalisé pour traiter des données de clients.

  • IFCustomers

    Ce noeud évalue une condition liée aux clients pour déterminer le flux du workflow.

  • NoOp1

    Ce noeud ne réalise aucune opération, servant de point de passage dans le workflow.

  • CreateTicketForCustomer

    Ce noeud envoie une requête HTTP pour créer un ticket pour un client avec les paramètres spécifiés.

  • ForGoogle2

    Ce noeud définit des valeurs supplémentaires à utiliser dans le workflow pour un traitement ultérieur.

  • Google Sheets2

    Ce noeud interagit avec Google Sheets pour effectuer des opérations sur une autre plage de données.

  • EnvVariables

    Ce noeud définit des variables d'environnement à utiliser dans le workflow.

  • IF

    Ce noeud évalue une condition générale pour déterminer le flux du workflow.

  • NoOp2

    Ce noeud ne réalise aucune opération, servant de point de passage dans le workflow.

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

Inscription gratuite

S'inscrire gratuitementBesoin d'aide ?
{
  "id": "1",
  "name": "Dialpad to Syncro",
  "nodes": [
    {
      "name": "GetCustomer",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        350,
        180
      ],
      "parameters": {
        "url": "={{$node[\"EnvVariables\"].json[\"syncro_baseurl\"]}}/api/v1/search?query={{$json[\"body\"][\"external_number\"].replace(/\\+/g, '').replace(/^[01]/, '')}}",
        "options": {},
        "authentication": "headerAuth"
      },
      "credentials": {
        "httpHeaderAuth": "Syncro"
      },
      "typeVersion": 1
    },
    {
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -60,
        180
      ],
      "webhookId": "ec452bb5-58d9-4e0d-9cd2-c6df1c2cd957",
      "parameters": {
        "path": "moezdialpad",
        "options": {},
        "httpMethod": "POST",
        "responseData": "allEntries",
        "responseMode": "lastNode"
      },
      "typeVersion": 1
    },
    {
      "name": "CreateTicket",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1190,
        110
      ],
      "parameters": {
        "url": "={{$node[\"EnvVariables\"].json[\"syncro_baseurl\"]}}/api/v1/tickets",
        "options": {
          "bodyContentType": "json"
        },
        "requestMethod": "POST",
        "authentication": "headerAuth",
        "bodyParametersUi": {
          "parameter": [
            {
              "name": "customer_id",
              "value": "={{$node[\"Contacts\"].json[\"contacts\"][0][\"customer_id\"]}}"
            },
            {
              "name": "subject",
              "value": "=Phone call from {{$node[\"Function\"].json[\"contacts\"][0][\"firstname\"]}} {{$node[\"Function\"].json[\"contacts\"][0][\"lastname\"]}} ({{$node[\"Webhook\"].json[\"body\"][\"contact\"][\"phone\"]}})"
            },
            {
              "name": "status",
              "value": "In Progress"
            },
            {
              "name": "contact_id",
              "value": "={{$node[\"Contacts\"].json[\"contacts\"][0][\"id\"]}}"
            },
            {
              "name": "user_id",
              "value": "={{$node[\"EnvVariables\"].parameter[\"values\"][\"string\"][1][\"value\"]}}"
            }
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": "Syncro"
      },
      "typeVersion": 1
    },
    {
      "name": "GetTicket",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        860,
        40
      ],
      "parameters": {
        "url": "={{$node[\"EnvVariables\"].json[\"syncro_baseurl\"]}}/api/v1/tickets?contact_id={{$json[\"contacts\"][0][\"id\"]}}&status=Not%20Closed",
        "options": {},
        "authentication": "headerAuth"
      },
      "credentials": {
        "httpHeaderAuth": "Syncro"
      },
      "typeVersion": 1
    },
    {
      "name": "IFMoreThanOne",
      "type": "n8n-nodes-base.if",
      "position": [
        1000,
        40
      ],
      "parameters": {
        "conditions": {
          "number": [
            {
              "value1": "={{$node[\"GetTicket\"].json[\"tickets\"].length}}",
              "value2": 1,
              "operation": "equal"
            }
          ],
          "boolean": [
            {
              "value1": "={{$json[\"tickets\"]}}",
              "value2": true
            }
          ]
        },
        "combineOperation": "any"
      },
      "typeVersion": 1
    },
    {
      "name": "Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1480,
        -40
      ],
      "parameters": {
        "range": "A:B",
        "options": {
          "valueInputMode": "USER_ENTERED"
        },
        "sheetId": "xxx",
        "operation": "append"
      },
      "credentials": {
        "googleApi": "Google"
      },
      "typeVersion": 1
    },
    {
      "name": "ForGoogle",
      "type": "n8n-nodes-base.set",
      "position": [
        1340,
        -40
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "Call",
              "value": "={{$node[\"Webhook\"].json[\"body\"][\"call_id\"]}}"
            },
            {
              "name": "Ticket",
              "value": "={{$node[\"GetTicket\"].json[\"tickets\"][0][\"id\"]}}"
            }
          ]
        },
        "options": {},
        "keepOnlySet": true
      },
      "typeVersion": 1
    },
    {
      "name": "UpdateTicket",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1190,
        -40
      ],
      "parameters": {
        "url": "={{$node[\"EnvVariables\"].json[\"syncro_baseurl\"]}}/api/v1/tickets/{{$json[\"tickets\"][0][\"id\"]}}/comment",
        "options": {},
        "requestMethod": "POST",
        "authentication": "headerAuth",
        "bodyParametersUi": {
          "parameter": [
            {
              "name": "subject",
              "value": "=Phone call from {{$node[\"GetCustomer\"].json[\"results\"][0][\"table\"][\"_source\"][\"table\"][\"firstname\"]}} {{$node[\"GetCustomer\"].json[\"results\"][0][\"table\"][\"_source\"][\"table\"][\"lastname\"]}} ({{$node[\"Webhook\"].json[\"body\"][\"contact\"][\"phone\"]}})"
            },
            {
              "name": "body",
              "value": "={{$node[\"GetCustomer\"].json[\"results\"][0][\"table\"][\"_source\"][\"table\"][\"firstname\"]}} {{$node[\"GetCustomer\"].json[\"results\"][0][\"table\"][\"_source\"][\"table\"][\"lastname\"]}} called."
            },
            {
              "name": "hidden",
              "value": "true"
            },
            {
              "name": "user_id",
              "value": "={{$node[\"EnvVariables\"].parameter[\"values\"][\"string\"][1][\"value\"]}}"
            }
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": "Syncro"
      },
      "typeVersion": 1
    },
    {
      "name": "ForGoogle1",
      "type": "n8n-nodes-base.set",
      "position": [
        1340,
        110
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "Call",
              "value": "={{$node[\"Webhook\"].json[\"body\"][\"call_id\"]}}"
            },
            {
              "name": "Ticket",
              "value": "={{$node[\"CreateTicket\"].json[\"ticket\"][\"id\"]}}"
            }
          ]
        },
        "options": {},
        "keepOnlySet": true
      },
      "typeVersion": 1
    },
    {
      "name": "Google Sheets1",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1480,
        110
      ],
      "parameters": {
        "range": "A:B",
        "options": {
          "valueInputMode": "USER_ENTERED"
        },
        "sheetId": "xxx",
        "operation": "append"
      },
      "credentials": {
        "googleApi": "Google"
      },
      "typeVersion": 1
    },
    {
      "name": "NoOp",
      "type": "n8n-nodes-base.noOp",
      "position": [
        830,
        220
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "name": "Contacts",
      "type": "n8n-nodes-base.function",
      "position": [
        510,
        180
      ],
      "parameters": {
        "functionCode": "const { json: { results } } = items[0];\n\nconst getData = (results, type) => results.filter(r => r.table._index === type).map(x => ({\n   id: x.table._id,\n   firstname: x.table._source.table.firstname,\n   lastname: x.table._source.table.lastname,\n   customer_id: x.table._source.table.customer_id,\n   email: x.table._source.table.email,\n   business_name: x.table._source.table.business_name,\n   phones: x.table._source.table.phones\n }));\n \nreturn [ { json: { contacts: getData(results, 'contacts') } } ];\n"
      },
      "typeVersion": 1,
      "alwaysOutputData": false
    },
    {
      "name": "IFContacts",
      "type": "n8n-nodes-base.if",
      "position": [
        670,
        180
      ],
      "parameters": {
        "conditions": {
          "number": [
            {
              "value1": "={{$node[\"Contacts\"].json[\"contacts\"].length}}",
              "value2": 1,
              "operation": "equal"
            }
          ],
          "string": [],
          "boolean": []
        }
      },
      "typeVersion": 1
    },
    {
      "name": "Customers",
      "type": "n8n-nodes-base.function",
      "position": [
        510,
        370
      ],
      "parameters": {
        "functionCode": "const { json: { results } } = items[0];\n\nconst getData = (results, type) => results.filter(r => r.table._index === type).map(x => ({\n   id: x.table._id,\n   firstname: x.table._source.table.firstname,\n   lastname: x.table._source.table.lastname,\n   customer_id: x.table._source.table.customer_id,\n   email: x.table._source.table.email,\n   business_name: x.table._source.table.business_name,\n   phones: x.table._source.table.phones\n }));\n \nreturn [ { json: { customers: getData(results, 'customers') } } ];\n"
      },
      "typeVersion": 1
    },
    {
      "name": "IFCustomers",
      "type": "n8n-nodes-base.if",
      "position": [
        670,
        370
      ],
      "parameters": {
        "conditions": {
          "number": [
            {
              "value1": "={{$node[\"Customers\"].json[\"customers\"].length}}",
              "value2": 1,
              "operation": "equal"
            }
          ],
          "string": [],
          "boolean": []
        }
      },
      "typeVersion": 1
    },
    {
      "name": "NoOp1",
      "type": "n8n-nodes-base.noOp",
      "position": [
        810,
        520
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "name": "CreateTicketForCustomer",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        860,
        360
      ],
      "parameters": {
        "url": "={{$node[\"EnvVariables\"].json[\"syncro_baseurl\"]}}/api/v1/tickets",
        "options": {
          "bodyContentType": "json"
        },
        "requestMethod": "POST",
        "authentication": "headerAuth",
        "bodyParametersUi": {
          "parameter": [
            {
              "name": "customer_id",
              "value": "={{$node[\"Customers\"].json[\"customers\"][0][\"id\"]}}"
            },
            {
              "name": "subject",
              "value": "=Phone call from {{$node[\"Customers\"].json[\"customers\"][0][\"business_name\"]}} ({{$node[\"Webhook\"].json[\"body\"][\"contact\"][\"phone\"]}})"
            },
            {
              "name": "status",
              "value": "In Progress"
            },
            {
              "name": "user_id",
              "value": "={{$node[\"EnvVariables\"].parameter[\"values\"][\"string\"][1][\"value\"]}}"
            }
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": "Syncro"
      },
      "typeVersion": 1
    },
    {
      "name": "ForGoogle2",
      "type": "n8n-nodes-base.set",
      "position": [
        1040,
        360
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "Call",
              "value": "={{$node[\"Webhook\"].json[\"body\"][\"call_id\"]}}"
            },
            {
              "name": "Ticket",
              "value": "={{$node[\"CreateTicketForCustomer\"].json[\"ticket\"][\"id\"]}}"
            }
          ]
        },
        "options": {},
        "keepOnlySet": true
      },
      "typeVersion": 1
    },
    {
      "name": "Google Sheets2",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1210,
        360
      ],
      "parameters": {
        "range": "A:B",
        "options": {
          "valueInputMode": "USER_ENTERED"
        },
        "sheetId": "xxx",
        "operation": "append"
      },
      "credentials": {
        "googleApi": "Google"
      },
      "typeVersion": 1
    },
    {
      "name": "EnvVariables",
      "type": "n8n-nodes-base.set",
      "position": [
        210,
        180
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "syncro_baseurl",
              "value": "https://subdomain.syncromsp.com"
            },
            {
              "name": "user_id",
              "value": "1234"
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "name": "IF",
      "type": "n8n-nodes-base.if",
      "position": [
        70,
        180
      ],
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{$node[\"Webhook\"].json[\"body\"][\"direction\"]}}",
              "value2": "inbound"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "name": "NoOp2",
      "type": "n8n-nodes-base.noOp",
      "position": [
        70,
        370
      ],
      "parameters": {},
      "typeVersion": 1
    }
  ],
  "active": true,
  "settings": {},
  "connections": {
    "IF": {
      "main": [
        [
          {
            "node": "EnvVariables",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "NoOp2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook": {
      "main": [
        [
          {
            "node": "IF",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Contacts": {
      "main": [
        [
          {
            "node": "IFContacts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Customers": {
      "main": [
        [
          {
            "node": "IFCustomers",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ForGoogle": {
      "main": [
        [
          {
            "node": "Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GetTicket": {
      "main": [
        [
          {
            "node": "IFMoreThanOne",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ForGoogle1": {
      "main": [
        [
          {
            "node": "Google Sheets1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ForGoogle2": {
      "main": [
        [
          {
            "node": "Google Sheets2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IFContacts": {
      "main": [
        [
          {
            "node": "GetTicket",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "NoOp",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GetCustomer": {
      "main": [
        [
          {
            "node": "Contacts",
            "type": "main",
            "index": 0
          },
          {
            "node": "Customers",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IFCustomers": {
      "main": [
        [
          {
            "node": "CreateTicketForCustomer",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "NoOp1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CreateTicket": {
      "main": [
        [
          {
            "node": "ForGoogle1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "EnvVariables": {
      "main": [
        [
          {
            "node": "GetCustomer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "UpdateTicket": {
      "main": [
        [
          {
            "node": "ForGoogle",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IFMoreThanOne": {
      "main": [
        [
          {
            "node": "UpdateTicket",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "CreateTicket",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CreateTicketForCustomer": {
      "main": [
        [
          {
            "node": "ForGoogle2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Workflow n8n Google Sheets, tickets, Dialpad : pour qui est ce workflow ?

Ce workflow s'adresse aux équipes de support client et aux responsables de la gestion des tickets au sein d'entreprises de taille petite à moyenne. Les utilisateurs doivent avoir des connaissances de base en automatisation et en gestion de données, mais aucune compétence technique avancée n'est requise.

Workflow n8n Google Sheets, tickets, Dialpad : problème résolu

Ce workflow résout le problème de la gestion manuelle des tickets, qui peut entraîner des erreurs et des retards dans le traitement des demandes clients. En automatisant la création et la mise à jour des tickets, les utilisateurs peuvent réduire le temps passé sur des tâches répétitives et se concentrer sur des activités à plus forte valeur ajoutée. De plus, il diminue le risque de perte d'informations critiques et assure une meilleure organisation des données clients.

Workflow n8n Google Sheets, tickets, Dialpad : étapes du workflow

Étape 1 : Le workflow est déclenché par un Webhook qui reçoit les données des tickets.

  • Étape 1 : Le noeud 'GetCustomer' récupère les informations du client depuis Dialpad.
  • Étape 2 : Le noeud 'IFMoreThanOne' vérifie s'il y a plusieurs tickets à traiter.
  • Étape 3 : Pour chaque ticket, le workflow crée ou met à jour les informations via les noeuds 'CreateTicket' et 'UpdateTicket'.
  • Étape 4 : Les données sont ensuite envoyées vers Google Sheets pour une gestion centralisée grâce aux noeuds 'Google Sheets'.
  • Étape 5 : Des fonctions personnalisées comme 'Contacts' et 'Customers' enrichissent les données avant leur envoi.

Workflow n8n Google Sheets, tickets, Dialpad : guide de personnalisation

Pour personnaliser ce workflow, vous pouvez modifier l'URL du Webhook pour l'adapter à votre environnement. Il est également possible de changer les paramètres des noeuds 'CreateTicket' et 'UpdateTicket' pour correspondre aux spécificités de votre système de gestion des tickets. Si vous souhaitez intégrer d'autres outils, vous pouvez ajouter des noeuds supplémentaires ou modifier les noeuds existants pour inclure des API différentes. Assurez-vous de sécuriser le flux en configurant correctement les authentifications requises pour chaque service utilisé.