8
n8n 한국어amn8n.com

Motion 및 Airtable을 사용한 작업 추적 및 알림 자동 편집

중급

이것은Project Management, Multimodal AI분야의자동화 워크플로우로, 12개의 노드를 포함합니다.주로 If, Code, Gmail, Filter, Airtable 등의 노드를 사용하며. Motion 및 Airtable을 사용한 자동화된 편집 작업 추적 및 알림

사전 요구사항
  • Google 계정 및 Gmail API 인증 정보
  • Airtable API Key
  • 대상 API의 인증 정보가 필요할 수 있음
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "meta": {
    "instanceId": "393ca9e36a1f81b0f643c72792946a5fe5e49eb4864181ba4032e5a408278263"
  },
  "nodes": [
    {
      "id": "404dea4e-a4da-43f1-b9cd-ab6bbfbe4266",
      "name": "일정 트리거",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        0,
        0
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 8 10-31 * *"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "79a4bd70-fe9b-4ead-91aa-b22d8f620b4e",
      "name": "Récupération infos airtable",
      "type": "n8n-nodes-base.airtable",
      "position": [
        208,
        0
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appk6h4dLarLUXKpR",
          "cachedResultUrl": "https://airtable.com/appk6h4dLarLUXKpR",
          "cachedResultName": "Base clients"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblTrvdyaIcsSgOWR",
          "cachedResultUrl": "https://airtable.com/appk6h4dLarLUXKpR/tblTrvdyaIcsSgOWR",
          "cachedResultName": "Projets"
        },
        "options": {},
        "operation": "search"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "9mTR7mhD0VA7GbZP",
          "name": "Airtable Personal Access Token account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "ed68d3fa-5835-4499-9550-f07bf1d3deec",
      "name": "Actif",
      "type": "n8n-nodes-base.if",
      "position": [
        448,
        0
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "f1a41893-c6cd-4824-8b74-c0d52b2ac842",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json['Status - Calendrier éditorial'] }}",
              "rightValue": "Actif"
            },
            {
              "id": "79f0320a-0d4e-4fa0-9adc-f9f11ace8efb",
              "operator": {
                "type": "dateTime",
                "operation": "before"
              },
              "leftValue": "={{ $json['Last sent - Calendrier éditorial'] }}",
              "rightValue": "={{ (function() { const now = new Date(); const year = now.getFullYear(); const month = String(now.getMonth() + 1).padStart(2, '0'); return `${year}-${month}-01`; })() }}"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "cb0b775e-7871-4a65-a8e6-cf33596b323b",
      "name": "항목 반복",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        688,
        -16
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "d23bc2b5-3479-49a4-9910-6a86e202997a",
      "name": "Récupération des projets",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        944,
        0
      ],
      "parameters": {
        "url": "https://api.usemotion.com/v1/projects",
        "options": {},
        "sendQuery": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "queryParameters": {
          "parameters": [
            {
              "name": "workspaceId",
              "value": "={{ $json['Motion Workspace ID'] }}"
            }
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "binrCBMqjqNEJXmX",
          "name": "Motion"
        }
      },
      "executeOnce": true,
      "typeVersion": 4.2
    },
    {
      "id": "76113108-e532-4309-a48d-2b3032bde4cf",
      "name": "Tri des projets",
      "type": "n8n-nodes-base.code",
      "position": [
        1184,
        0
      ],
      "parameters": {
        "jsCode": "// On récupère le tableau de projets depuis la réponse de la requête HTTP\nconst responseData = items[0].json;\n\n// Vérifie si la structure attendue existe\nif (!responseData || !responseData.projects || !Array.isArray(responseData.projects)) {\n  // Retourne un tableau vide si la structure n'est pas celle attendue\n  return [];\n}\n\n// Crée un nouvel élément pour chaque projet\nconst newItems = responseData.projects.map(project => {\n  return {\n    json: {\n      // On copie toutes les propriétés du projet\n      ...project,\n      // Ajout optionnel de métadonnées de la réponse originale si nécessaire\n      _meta: responseData.meta\n    }\n  };\n});\n\n// Retourne le tableau des nouveaux éléments\nreturn newItems;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "c78fbb0b-4a5a-4528-bb85-acf5372111bf",
      "name": "Todo",
      "type": "n8n-nodes-base.filter",
      "position": [
        1408,
        0
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "7f5baee8-dc14-4f12-a9fe-1cdfaaf88792",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.status.name }}",
              "rightValue": "Todo"
            },
            {
              "id": "9e4044d3-039a-48d7-b5d2-fc60084fbff9",
              "operator": {
                "type": "string",
                "operation": "contains"
              },
              "leftValue": "={{ $json.name }}",
              "rightValue": "SEO"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "e11fedb7-b55d-4549-9e3f-9d84790b9d31",
      "name": "HTTP 요청",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1600,
        0
      ],
      "parameters": {
        "url": "https://api.usemotion.com/v1/tasks",
        "options": {},
        "sendQuery": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "queryParameters": {
          "parameters": [
            {
              "name": "projectId",
              "value": "={{ $json.id }}"
            },
            {
              "name": "name",
              "value": "Intégrer les articles de blog"
            },
            {
              "name": "status",
              "value": "completed"
            }
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "binrCBMqjqNEJXmX",
          "name": "Motion"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "47bd408f-272b-4837-9682-1e2b0e474aac",
      "name": "If1",
      "type": "n8n-nodes-base.if",
      "position": [
        1840,
        0
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "f53cacf4-8628-4203-8ea6-c7272ee891a4",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.tasks[0].status.name }}",
              "rightValue": "Completed"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "56165205-4be8-41c6-b718-877e765ea374",
      "name": "Airtable",
      "type": "n8n-nodes-base.airtable",
      "position": [
        2304,
        0
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appk6h4dLarLUXKpR",
          "cachedResultUrl": "https://airtable.com/appk6h4dLarLUXKpR",
          "cachedResultName": "Base clients"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblTrvdyaIcsSgOWR",
          "cachedResultUrl": "https://airtable.com/appk6h4dLarLUXKpR/tblTrvdyaIcsSgOWR",
          "cachedResultName": "Projets"
        },
        "columns": {
          "value": {
            "id": "={{ $('Loop Over Items').item.json.id }}",
            "Budget - Accès": 0,
            "Last sent - Calendrier éditorial": "={{ $now.format(\"M/d/yyyy\") }}"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "id",
              "defaultMatch": true
            },
            {
              "id": "Projets",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Projets",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Chef de projet",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Chef de projet",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Collaborateurs",
              "type": "array",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Collaborateurs",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Contacts",
              "type": "array",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Contacts",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Mails",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Mails",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Prénom",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Prénom",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Date de création",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Date de création",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Optimiseur de contenu",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Optimiseur de contenu",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Rédacteur d'articles",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Rédacteur d'articles",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "CMS",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "CMS",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Plan d'optimisation",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Plan d'optimisation",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Backlinks tracking",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Backlinks tracking",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Looker",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Looker",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Calendrier éditorial",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Calendrier éditorial",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Rapports",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Rapports",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status - Rapport mensuel",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "Inactif",
                  "value": "Inactif"
                },
                {
                  "name": "Actif",
                  "value": "Actif"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Status - Rapport mensuel",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status - Backlinks tracking",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "Inactif",
                  "value": "Inactif"
                },
                {
                  "name": "Actif",
                  "value": "Actif"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Status - Backlinks tracking",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status - Optimisation de contenu",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "Inactif",
                  "value": "Inactif"
                },
                {
                  "name": "Actif",
                  "value": "Actif"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Status - Optimisation de contenu",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status - Calendrier éditorial",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "Actif",
                  "value": "Actif"
                },
                {
                  "name": "Inactif",
                  "value": "Inactif"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Status - Calendrier éditorial",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last sent - Rapport mensuel",
              "type": "dateTime",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Last sent - Rapport mensuel",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last sent - Backlinks tracking",
              "type": "dateTime",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Last sent - Backlinks tracking",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last sent - Calendrier éditorial",
              "type": "dateTime",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Last sent - Calendrier éditorial",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last sent - Optimisation de contenu",
              "type": "dateTime",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Last sent - Optimisation de contenu",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Dernière modification",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Dernière modification",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Accès - URL",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Accès - URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Accès - Login",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Accès - Login",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Accès - Password",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Accès - Password",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Budget - Accès",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Budget - Accès",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Accès - Consultant",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Accès - Consultant",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Prévisionnel budgétaire",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Prévisionnel budgétaire",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Date mail rdv",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Date mail rdv",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Calendly",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Calendly",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last sent - RDV consultant",
              "type": "dateTime",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Last sent - RDV consultant",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Motion Workspace ID",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Motion Workspace ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Missions",
              "type": "array",
              "display": true,
              "options": [
                {
                  "name": "SEO",
                  "value": "SEO"
                },
                {
                  "name": "SEA",
                  "value": "SEA"
                },
                {
                  "name": "SMA",
                  "value": "SMA"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Missions",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Adresse mail 1",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Adresse mail 1",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Adresse mail 2",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Adresse mail 2",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Adresse mail 3",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Adresse mail 3",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Adresse mail 4",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Adresse mail 4",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Statut",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "Actif",
                  "value": "Actif"
                },
                {
                  "name": "Inactif",
                  "value": "Inactif"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Statut",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Mail collaborateur 1",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Mail collaborateur 1",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Mail collaborateur 2",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Mail collaborateur 2",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Mail collaborateur 3",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Mail collaborateur 3",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Mail collaborateur 4",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Mail collaborateur 4",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Make SEO rapport",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Make SEO rapport",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Make SEA rapport",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Make SEA rapport",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "9mTR7mhD0VA7GbZP",
          "name": "Airtable Personal Access Token account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "fc9bd435-5ead-4940-a388-5636c7585b26",
      "name": "Send a message",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2128,
        0
      ],
      "webhookId": "8ee7592a-0b31-4661-901d-dd50a7e59723",
      "parameters": {
        "sendTo": "={{ $('Loop Over Items').item.json['Chef de projet'].email }}, {{ $('Loop Over Items').item.json.Mails }}, {{ $('Loop Over Items').item.json['Mails collaborateurs'] }}",
        "message": "=Bonjour {{ $('Loop Over Items').item.json['Prénom'] }},<br>\n<p></p>\nDe nouveaux articles ont vu le jour dans votre calendrier éditorial pour le mois de <strong>{{ [\"Janvier\", \"Février\", \"Mars\", \"Avril\", \"Mai\", \"Juin\", \"Juillet\", \"Août\", \"Septembre\", \"Octobre\", \"Novembre\", \"Décembre\"][new Date().getMonth() === 0 ? 11 : new Date().getMonth() ] }}</strong> ! Il est l'heure de les consulter depuis le blog de <strong> {{ $('Loop Over Items').item.json.Projets }}  </strong>.<br>\n<p></p>\nVous retrouverez les détails et les liens vers les articles dans le livrable prévu à cet effet : <a href=\"{{ $('Loop Over Items').item.json['Calendrier éditorial'] }}\">consulter le calendrier éditorial</a><br>\n<p></p>\nNous sommes disponibles pour répondre à vos questions et en cas de modifications à apporter 🤓.<br>\n<p></p>\nA bientôt,<br>\n<p></p>\n--\n",
        "options": {
          "senderName": "Institut du Référencement"
        },
        "subject": "={{ $('Loop Over Items').item.json.Projets }} - 📝 Nouvel article de blog - {{ [\"Janvier\", \"Février\", \"Mars\", \"Avril\", \"Mai\", \"Juin\", \"Juillet\", \"Août\", \"Septembre\", \"Octobre\", \"Novembre\", \"Décembre\"][new Date().getMonth() === 0 ? 11 : new Date().getMonth() ] }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "F6YsSmraPe7v98FF",
          "name": "Gmail account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "d07e24e0-d222-49b7-880e-ab7fb151e5f0",
      "name": "메모",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1216,
        -832
      ],
      "parameters": {
        "color": 4,
        "width": 1056,
        "height": 3568,
        "content": "# Automated project status tracking with Airtable and Motion\n## Who's it for\nProject managers, team leads, and agencies who need to automatically monitor project completion status across multiple clients and send notifications when specific milestones are reached.\n## What it does\nThis workflow automatically tracks project progress by connecting Airtable project databases with Motion task management. It monitors specific tasks within active projects and triggers email notifications when key milestones are completed. The system is designed to handle multiple projects simultaneously and can be customized for various notification triggers.\n## How it works\nThe workflow follows a structured monitoring process:\n\nData Retrieval: Fetches project information from Airtable (project names and Motion workspace IDs)\nMotion Integration: Connects to Motion API using HTTP requests to retrieve project details\nProject Filtering: Identifies only active projects with \"Todo\" status containing \"SEO\" in the name\nTask Monitoring: Checks for specific completed tasks (e.g., \"Intégrer les articles de blog\")\nConditional Notifications: Sends email alerts only when target tasks are marked as \"Completed\"\nDatabase Updates: Updates Airtable with last notification timestamps\n\n## Requirements\n\nAirtable account with project database\nMotion account with API access\nGmail account for email notifications\nHTTP request authentication for Motion API\n\n## How to set up\n### Step 1: Configure your Airtable database\nEnsure your Airtable contains the following fields:\n\nProject names: Names of projects to monitor\nMotion Workspace ID: Workspace identifiers for Motion API calls\nStatus - Calendrier éditorial: Project status field (set to \"Actif\" for active projects)\nLast sent - Calendrier éditorial: Timestamp tracking for notification frequency\nEmail addresses: Client and team member contact information\n\n### Step 2: Set up API credentials\nConfigure the following authentication in n8n:\n\nAirtable Personal Access Token: For database access\nMotion API: HTTP header authentication for Motion integration\nGmail OAuth2: For email notification sending\n\n### Step 3: Configure Motion API integration\n\nBase URL: Uses Motion API v1 endpoints\nProject retrieval: Fetches projects using workspace ID parameter\nTask monitoring: Searches for specific task names and completion status\nCustom filtering: Targets projects with \"SEO\" in name and \"Todo\" status\n\n### Step 4: Customize scheduling\n\nDefault schedule: Runs daily between 10th-31st of each month at 8 AM\nCron expression: 0 8 10-31 * * (modify as needed)\nFrequency options: Can be adjusted for weekly, daily, or custom intervals\n\n### Step 5: Set up email notifications\nConfigure Gmail settings:\n\nRecipients: Project managers, clients, and collaborators\nSubject line: Dynamic formatting with project name and month\nMessage template: HTML-formatted email with professional signature\nSender name: Customizable organization name\n\n## How to customize the workflow\n### Single project, multiple tasks monitoring\nTo adapt for monitoring one project with several different tasks:\n\nModify the filter conditions to target your specific project\nAdd multiple HTTP requests for different task names\nCreate conditional branches for each task type\nSet up different notification templates per task\n\n### Multi-project customization\n\nDatabase fields: Add custom fields in Airtable for different project types\nFiltering logic: Modify conditions to match your project categorization\nMotion workspace: Support multiple workspaces per client\nNotification rules: Set different notification frequencies per project\n\n### Alternative notification methods\nReplace or complement Gmail with:\n\nSlack notifications: Send updates to team channels\nDiscord integration: Alert development teams\nSMS notifications: Urgent milestone alerts\nWebhook integrations: Connect to custom internal systems\nTeams notifications: Enterprise communication\n\n### Task monitoring variations\n\nMultiple task types: Monitor different milestones (design, development, testing)\nTask dependencies: Check completion of prerequisite tasks\nProgress tracking: Monitor task progress percentages\nDeadline monitoring: Alert on approaching deadlines\n\n## Conditional logic features\n### Smart filtering system\n\nActive project detection: Only processes projects marked as \"Actif\"\nDate-based filtering: Prevents duplicate notifications using timestamp comparison\nStatus verification: Confirms task completion before sending notifications\nProject type filtering: Targets specific project categories (SEO projects in this example)\n\n### Notification frequency control\n\nMonthly notifications: Prevents spam by tracking last sent dates\nConditional execution: Only sends emails when tasks are actually completed\nDatabase updates: Automatically records notification timestamps\nLoop management: Processes multiple projects sequentially\n\n## Results interpretation\n### Automated monitoring outcomes\n\nProject status tracking: Real-time monitoring of active projects\nMilestone notifications: Immediate alerts when key tasks complete\nDatabase synchronization: Automatic updates of notification records\nTeam coordination: Ensures all stakeholders are informed of progress\n\n### Email notification content\nEach notification includes:\n\nProject identification: Clear project name and context\nCompletion confirmation: Specific task that was completed\nCalendar reference: Links to editorial calendars or project resources\nProfessional formatting: Branded email template with company signature\nAction items: Clear next steps for recipients\n\n## Use cases\n### Agency project management\n\nClient deliverable tracking: Monitor when content is ready for client review\nMilestone notifications: Alert teams when phases complete\nQuality assurance: Ensure all deliverables meet completion criteria\nClient communication: Automated updates on project progress\n\n### Editorial workflow management\n\nContent publication: Track when articles are integrated into websites\nEditorial calendar: Monitor content creation and publication schedules\nTeam coordination: Notify writers, editors, and publishers of status changes\nClient approval: Alert clients when content is ready for review\n\n### Development project tracking\n\nFeature completion: Monitor when development milestones are reached\nTesting phases: Track QA completion and deployment readiness\nClient delivery: Automate notifications for UAT and launch phases\nTeam synchronization: Keep all stakeholders informed of progress\n\n## Workflow limitations\n\nMotion API dependency: Requires stable Motion API access and proper authentication\nSingle task monitoring: Currently tracks one specific task type per execution\nEmail-only notifications: Default setup uses Gmail (easily expandable)\nMonthly frequency: Designed for monthly notifications (customizable)\nProject naming dependency: Filters based on specific naming conventions\nManual configuration: Requires setup for each new project type or workspace"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {
    "Schedule Trigger": [
      {
        "Hour": "08",
        "Year": "2025",
        "Month": "August",
        "Minute": "00",
        "Second": "00",
        "Timezone": "Europe/Berlin (UTC+02:00)",
        "timestamp": "2025-08-14T08:00:00.033+02:00",
        "Day of week": "Thursday",
        "Day of month": "14",
        "Readable date": "August 14th 2025, 8:00:00 am",
        "Readable time": "8:00:00 am"
      }
    ]
  },
  "connections": {
    "47bd408f-272b-4837-9682-1e2b0e474aac": {
      "main": [
        [
          {
            "node": "fc9bd435-5ead-4940-a388-5636c7585b26",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c78fbb0b-4a5a-4528-bb85-acf5372111bf": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ed68d3fa-5835-4499-9550-f07bf1d3deec": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "56165205-4be8-41c6-b718-877e765ea374": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        [
          {
            "node": "47bd408f-272b-4837-9682-1e2b0e474aac",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "fc9bd435-5ead-4940-a388-5636c7585b26": {
      "main": [
        [
          {
            "node": "56165205-4be8-41c6-b718-877e765ea374",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "d23bc2b5-3479-49a4-9910-6a86e202997a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "76113108-e532-4309-a48d-2b3032bde4cf": {
      "main": [
        [
          {
            "node": "c78fbb0b-4a5a-4528-bb85-acf5372111bf",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "79a4bd70-fe9b-4ead-91aa-b22d8f620b4e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d23bc2b5-3479-49a4-9910-6a86e202997a": {
      "main": [
        [
          {
            "node": "76113108-e532-4309-a48d-2b3032bde4cf",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "79a4bd70-fe9b-4ead-91aa-b22d8f620b4e": {
      "main": [
        [
          {
            "node": "ed68d3fa-5835-4499-9550-f07bf1d3deec",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

이 워크플로우를 어떻게 사용하나요?

위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.

이 워크플로우는 어떤 시나리오에 적합한가요?

중급 - 프로젝트 관리, 멀티모달 AI

유료인가요?

이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.

워크플로우 정보
난이도
중급
노드 수12
카테고리2
노드 유형9
난이도 설명

일정 경험을 가진 사용자를 위한 6-15개 노드의 중간 복잡도 워크플로우

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34