Google Forms → Créateur d'issues Jira

Intermédiaire

Ceci est unMiscellaneous, Multimodal AIworkflow d'automatisation du domainecontenant 9 nœuds.Utilise principalement des nœuds comme Code, Jira, Gmail, GoogleSheets, GoogleSheetsTrigger. Créer des tickets Jira à partir de Google Forms, avec mises à jour de tableaux et notifications par e-mail

Prérequis
  • Compte Google et informations d'identification Gmail API
  • Informations d'identification Google Sheets API
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "id": "JmH0beZB5ZUgJGor",
  "meta": {
    "instanceId": "0430772da25f7bca29bf5ef2b251086a85fb4096503a6f781526d32befd038d6",
    "templateCredsSetupCompleted": true
  },
  "name": "Google Forms → Jira Issue Creator",
  "tags": [
    {
      "id": "MxIJ6vHorSEdfi3v",
      "name": "google form",
      "createdAt": "2025-08-18T07:16:22.720Z",
      "updatedAt": "2025-08-18T07:16:22.720Z"
    },
    {
      "id": "eAzNESqLUWwWMrE9",
      "name": "gmail",
      "createdAt": "2025-08-18T07:16:22.709Z",
      "updatedAt": "2025-08-18T07:16:22.709Z"
    },
    {
      "id": "EYNbAs3Q9sg9NksG",
      "name": "Jira",
      "createdAt": "2025-09-10T10:47:53.750Z",
      "updatedAt": "2025-09-10T10:47:53.750Z"
    },
    {
      "id": "7zEwLFClveXBEcdb",
      "name": "google sheet",
      "createdAt": "2025-08-18T07:16:22.756Z",
      "updatedAt": "2025-08-18T07:16:22.756Z"
    }
  ],
  "nodes": [
    {
      "id": "8b90ebac-96e0-4b28-8024-edd6692f45c9",
      "name": "Note adhésive1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -224,
        -544
      ],
      "parameters": {
        "color": 3,
        "width": 304,
        "height": 176,
        "content": "## Required\n\n\n• Google Form + response sheet\n• Jira Cloud project (API email + API token)\n• Gmail credential"
      },
      "typeVersion": 1
    },
    {
      "id": "f7d9bcc1-d9c2-4844-ab4d-7d9d6b8610c3",
      "name": "Déclencheur lors de l'ajout d'une ligne",
      "type": "n8n-nodes-base.googleSheetsTrigger",
      "position": [
        208,
        -16
      ],
      "parameters": {
        "event": "rowAdded",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": ""
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": ""
        }
      },
      "credentials": {
        "googleSheetsTriggerOAuth2Api": {
          "id": "3lAHCn7CBb11QTMg",
          "name": "Google Sheets Trigger account 2"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "5278e62a-2d6c-4aa5-8621-77e38efd9dc6",
      "name": "Normaliser les champs",
      "type": "n8n-nodes-base.code",
      "position": [
        416,
        -16
      ],
      "parameters": {
        "jsCode": "const priorityMap = {\n  \"Highest\": \"1\",\n  \"High\": \"2\", \n  \"Medium\": \"3\",\n  \"Low\": \"4\",\n  \"Lowest\": \"5\"\n};\n\nconst sheetPriority = ($json['Priority'] || \"\").toString().trim();\nconst jiraPriority = priorityMap[sheetPriority] || \"3\";\nconst context = $json['Context'] || \"No context provided\";\nconst email = $json['Adresse e-mail'] || $json['Email'] || \"No email provided\";\n\n// keep data from the  Google Sheets Trigger\nconst originalData = $input.first().json;\n\nreturn {\n  ...originalData,  // keep all data from trigger\n  priority: jiraPriority,\n  summary: context,\n  description: `Email: ${email}\\nContext: ${context}\\nSteps to reproduce: ${$json['If bug, steps to reproduce'] || \"N/A\"}\\nAcceptance criteria: ${$json['Acceptance criteria'] || \"N/A\"}`\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "ce1d830b-85af-423f-81d1-36089e5ce1ae",
      "name": "Créer un ticket Jira",
      "type": "n8n-nodes-base.jira",
      "position": [
        672,
        -16
      ],
      "parameters": {
        "project": {
          "__rl": true,
          "mode": "list",
          "value": "10002",
          "cachedResultName": "test2"
        },
        "summary": "={{$json.summary}}",
        "issueType": {
          "__rl": true,
          "mode": "list",
          "value": "10014",
          "cachedResultName": "Story"
        },
        "additionalFields": {
          "priority": {
            "__rl": true,
            "mode": "",
            "value": "={{$json.priority}}"
          },
          "description": "={{$json.description}}"
        }
      },
      "credentials": {
        "jiraSoftwareCloudApi": {
          "id": "lvsJXpsetLJRz9RJ",
          "name": "Jira SW Cloud account 2"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "387f2792-94a0-43ec-b358-a27229c50566",
      "name": "Mettre à jour la feuille Google avec les informations des tickets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        976,
        -16
      ],
      "parameters": {
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "c1iXpA4kOmymMGXu",
          "name": "Google Sheets account 2"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "5cc9d8ed-dea5-44cc-bc5f-60fcc2a8b464",
      "name": "E-mail de notification",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1296,
        -16
      ],
      "webhookId": "875c21fa-2282-4652-b4f7-7894df8d7769",
      "parameters": {
        "message": "=<p>Hello, you just received a new Jira ticket created.</p>\n\n<p><strong>Details:</strong></p>\n<ul>\n  <li><strong>Reference:</strong> {{$node[\"Cretate Jira Ticket\"].json.key}}</li>\n  <li><strong>URL:</strong> \n    <a href=\"https://YOURSITE.atlassian.net/browse/{{$node['Cretate Jira Ticket'].json.key}}\">View ticket</a>\n  </li>\n  <li><strong>Title:</strong> {{\n    (String($node[\"Normalize fields\"].json.summary ?? '')\n      .replace(/\\s+/g,' ')\n      .trim())\n    || 'New issue from Google Form'\n  }}</li>\n  <li><strong>Priority:</strong> {{\n    (()=>{\n         const p = String($node[\"Normalize fields\"].json.priority ?? $json.priority ?? '').toLowerCase().trim();\n         const map = { '1':'Highest','2':'High','3':'Medium','4':'Low','5':'Lowest',\n                       'highest':'Highest','high':'High','medium':'Medium','low':'Low','lowest':'Lowest' };\n         return map[p] || (p || 'Medium');\n       })()\n  }}</li>\n  <li><strong>Status:</strong> {{ String($json.status ?? 'Created') }}</li>\n</ul>\n\n<p><strong>Requester:</strong></p>\n<ul>\n  <li><strong>Email:</strong> {{\n    $node[\"Trigger when row added\"].json[\"Adresse e-mail\"]\n    || $node[\"Trigger when row added\"].json.Email\n    || $node[\"Normalize fields\"].json[\"Adresse e-mail\"]\n    || $node[\"Normalize fields\"].json.Email\n    || ''\n  }}</li>\n</ul>",
        "options": {},
        "subject": "You just received a new ticket"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "C7dkDtQlmRSRwBlz",
          "name": "Gmail account 2"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "d4016ada-d836-4ff2-9c57-882fda5d1e1f",
      "name": "Note adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        112,
        -544
      ],
      "parameters": {
        "width": 448,
        "height": 704,
        "content": "## 1) Trigger and Normalize \n\nTrigger: New row added to Google Sheets\n\nData Processing:\n- Clean and normalize all fields\n- summary: Single-spaced, trimmed text\n- description: Preserve paragraphs (trimmed)\n- reporter_email: Extract from \"email address\" or \"Email\" fields\n- Handle optional fields (like attachments)\n\nBest Practices:\nPerform all data cleaning here to avoid reprocessing later"
      },
      "typeVersion": 1
    },
    {
      "id": "0df66792-90e8-4802-9e0b-33d46d8f9e0d",
      "name": "Note adhésive2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        576,
        -544
      ],
      "parameters": {
        "color": 5,
        "width": 304,
        "height": 704,
        "content": "## 2) Create Jira ticket\n\nAction: Call Jira API to create ticket\n\nKey Parameters:\n- Project: \n- Type: Story\n- Priority: Mapped to Jira IDs (1-5)\n- Description: Standardized format\n\nOutputs:\n- Ticket key (e.g., TES-503)\n- Ticket URL\n- Creation status\n\nTips\nPriority: Map with the ID"
      },
      "typeVersion": 1
    },
    {
      "id": "6379b494-5fd6-4795-8310-2b3b28dbf39a",
      "name": "Note adhésive3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        896,
        -544
      ],
      "parameters": {
        "color": 4,
        "width": 576,
        "height": 704,
        "content": "## 3) Update the sheet and send Gmail notification\nAction: Update source row with Jira information\n\nUpdated Fields:\n- jira_key: Ticket reference\n- jira_url: Ticket link\n- status: \"Created\"\n- created_at: Creation timestamp\n\nMatching Mechanism:\n- Use \"Horodateur\" column for row matching\n\n\nAction: Send confirmation email\n\nRecipients: The person who needs to get the notification + eventually the requester\n\nContent:\n- Ticket reference and link\n- Title and priority\n- Creation status\n- Requester information"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "9e5ef1b9-61ec-41c0-bd9a-ae923ff3e582",
  "connections": {
    "5278e62a-2d6c-4aa5-8621-77e38efd9dc6": {
      "main": [
        [
          {
            "node": "ce1d830b-85af-423f-81d1-36089e5ce1ae",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ce1d830b-85af-423f-81d1-36089e5ce1ae": {
      "main": [
        [
          {
            "node": "387f2792-94a0-43ec-b358-a27229c50566",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f7d9bcc1-d9c2-4844-ab4d-7d9d6b8610c3": {
      "main": [
        [
          {
            "node": "5278e62a-2d6c-4aa5-8621-77e38efd9dc6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "387f2792-94a0-43ec-b358-a27229c50566": {
      "main": [
        [
          {
            "node": "5cc9d8ed-dea5-44cc-bc5f-60fcc2a8b464",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Intermédiaire - Divers, IA Multimodale

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Intermédiaire
Nombre de nœuds9
Catégorie2
Types de nœuds6
Description de la difficulté

Adapté aux utilisateurs expérimentés, avec des workflows de complexité moyenne contenant 6-15 nœuds

Auteur
Yassin Zehar

Yassin Zehar

@yassinzehar

Digital & IT Project Manager | Data-oriented | Agile certified (PSM I, PSPO I) | Paris

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34