Automatiser le support client et les ventes avec chatbot et Google Sheets

				
					{
  "id": "7Pw91QNT4UGeNmL5",
  "meta": {
    "instanceId": "95959af22bc98ea4ce12f3aa06514276ddf020a37e9465025051938d10308902",
    "templateCredsSetupCompleted": true
  },
  "name": "Customer and Sales Support",
  "tags": [],
  "nodes": [
    {
      "id": "99d711a1-2341-493b-ba56-e40e76e07d97",
      "name": "When chat message received",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        -360,
        -120
      ],
      "webhookId": "1de1a4dd-cea5-4c95-b489-6004601ff727",
      "parameters": {
        "public": true,
        "options": {
          "responseMode": "lastNode",
          "loadPreviousSession": "memory"
        },
        "initialMessages": "Hi! Iu2019m Babish from Apple Case. How can I help?u201d"
      },
      "typeVersion": 1.1
    },
    {
      "id": "ab809cbb-0456-4a6f-b078-8a6f7bdbd4d0",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        60,
        260
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1",
          "cachedResultName": "gpt-4.1"
        },
        "options": {
          "maxTokens": 1024,
          "temperature": 0.3
        }
      },
      "credentials": {
        "openAiApi": {
          "id": "zqONgMf7CM0LERga",
          "name": "OpenAi DPL 2"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "e74bc18b-3058-4658-83fd-85f9a45d3537",
      "name": "Simple Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        -220,
        240
      ],
      "parameters": {},
      "typeVersion": 1.3
    },
    {
      "id": "008d806b-e56d-4c37-b64d-2eb6792eefb5",
      "name": "Place order",
      "type": "n8n-nodes-base.googleSheetsTool",
      "position": [
        540,
        240
      ],
      "parameters": {
        "columns": {
          "value": {
            "Address": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Address', ``, 'string') }}",
            "Case ID": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Case_ID', ``, 'string') }}",
            "Quantity": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Quantity', ``, 'string') }}",
            "Case Name": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Case_Name', ``, 'string') }}",
            "Timestamp": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Timestamp', ``, 'string') }}",
            "Phone Model": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Phone_Model', ``, 'string') }}",
            "Phone Number": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Phone_Number', ``, 'string') }}",
            "Customer Name": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Customer_Name', ``, 'string') }}"
          },
          "schema": [
            {
              "id": "Timestamp",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Case ID",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Case ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Case Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Case Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone Model",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Phone Model",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Customer Name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Customer Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone Number",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Phone Number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Address",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Address",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Quantity",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Quantity",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 622166849,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1btXGPudVDrG64coe5mIlw0Nd8r6YzOnNQ3wp7OVUffc/edit#gid=622166849",
          "cachedResultName": "Order placed"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1btXGPudVDrG64coe5mIlw0Nd8r6YzOnNQ3wp7OVUffc",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1btXGPudVDrG64coe5mIlw0Nd8r6YzOnNQ3wp7OVUffc/edit?usp=drivesdk",
          "cachedResultName": "Apple Case Stock"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "r16nFPNT77oA4BPq",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "9f1d892a-ad76-47ce-815f-1a7cc7a46cf8",
      "name": "Update Stock",
      "type": "n8n-nodes-base.googleSheetsTool",
      "position": [
        660,
        240
      ],
      "parameters": {
        "columns": {
          "value": {
            "Sold": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Sold', ``, 'string') }}",
            "Case ID": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Case_ID__using_to_match_', ``, 'string') }}",
            "Updated ISO": "={{ $now.toISO() }}",
            "Quantity Available": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Quantity_Available', ``, 'string') }}"
          },
          "schema": [
            {
              "id": "Case ID",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Case ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone Model",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Phone Model",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Case Name",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Case Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Case Type",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Case Type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Quantity Available",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Quantity Available",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Initial Inventory,",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Initial Inventory,",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Sold",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Sold",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Updated ISO",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Updated ISO",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Case ID"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 2019723207,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1btXGPudVDrG64coe5mIlw0Nd8r6YzOnNQ3wp7OVUffc/edit#gid=2019723207",
          "cachedResultName": "Inventory"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1btXGPudVDrG64coe5mIlw0Nd8r6YzOnNQ3wp7OVUffc",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1btXGPudVDrG64coe5mIlw0Nd8r6YzOnNQ3wp7OVUffc/edit?usp=drivesdk",
          "cachedResultName": "Apple Case Stock"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "r16nFPNT77oA4BPq",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "7f0e6e31-6bdb-4901-9c07-4fb6fa4734f0",
      "name": "Support Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        120,
        -120
      ],
      "parameters": {
        "options": {
          "systemMessage": "=SYSTEMnYou are the customer-support agent for u201cMy Apple Caseu201d.nnTOOLSnu2022 GetStock      { "phone_model": string }n  u2022 Returns: [{ "case_id": int, "case_name": string,n                "quantity_available": int, "sold": int,n                "image_url": string, ... }]nu2022 PlaceOrder    { "case_id": int,n                  "case_name": string,n                  "phone_model": string,n                  "customer_name": string,n                  "phone_number": string,n                  "address": string,n                  "quantity": int }nu2022 UpdateStock   { "case_id": int,n                  "quantity_sold": int,n                  "quantity_available": int,n                  "sold": int }nu2022  The "case_id" you send to PlaceOrder or UpdateStock must be the one thatn   appears **in the same row as the chosen case_name** from the latestn   GetStock response. Do not invent or modify it.nRULESn1. Begin every user-visible reply with:  **Welcome to My Apple Case.**n2. Speak English or Roman-Nepali, matching the customer.n3. ONE tool call per turn. n4. If GetStock returns an **image_url**, embed it after the text line usingn   Markdown:  n   `![]()`n5. Legal case_ids setn   u2022 The only valid case_id values are the ones you just received fromn     GetStock in this conversation turn.n6. Guard clausen   u2022 If you do not have a valid case_id for the customeru2019s chosen case,n     ask follow-up questions or run GetStock again.  DO NOT guess.n7.Picking the correct case_idn   a. After GetStock returns, keep its rows in memory.n   b. When the customer names a case_name you just showed, locate the rown      whose case_name matches **exactly** (case-insensitive) and copy thatn      rowu2019s case_id.n   c. If more than one row shares the same case_name, ask which u201cOption #u201dn      or show a numbered list so they can pick.  Never guess.nnWORKFLOWna. If you donu2019t yet know stock data, call **GetStock** with the phone model.  nb. From GetStock output read:n      qa = quantity_availablen      sold = soldn      img  = image_url  n  u2022 Show the case_id, case_name, qa and (if img exists) the image. nc. If qa < requested quantity u2192 apologize, no PlaceOrder. nd. Determine the correct case_id:n     u2022 EXACT match: one row u2192 use that rowu2019s case_id.n     u2022 Multiple matches: show a numbered list and ask the customer ton       choose (e.g. u201cType 1 or 2u201d).  Run no tools until they choose.n   Then call PlaceOrder using that exact case_id.ne. Else collect missing customer fields u2192 call **PlaceOrder**.  nf. After PlaceOrder succeeds, compute:n      qa_new   = qa   - quantityn      sold_new = sold + quantityn   then call **UpdateStock** with:n      { "case_id": ..., "quantity_sold": quantity,n        "quantity_available": qa_new, "sold": sold_new }ng. After UpdateStock returns, thank the customer and show qa_new.nnEXAMPLESn### Check stock with imagenUser: iPhone 12 ko cover cha?  nAssistant u2192 tool:  n{ "tool": "GetStock", "args": { "phone_model": "iPhone 12" } }nn(GetStock output example)  n[n  {n    "case_id": 312,n    "case_name": "Clear MagSafe Case",n    "quantity_available": 25,n    "sold": 75,n    "image_url": "https://example.com/clear-case.png"n  }n]nn### Two rows same namen(GetStock output)n1. case_id 101  "Leather Flip"  qty 3n2. case_id 202  "Leather Flip"  qty 10nnUser: I want the Leather Flip case.nAssistant: Welcome to My Apple Case. I have two u201cLeather Flipu201d options:n(1) case_id 101 u2013 3 in stockn(2) case_id 202 u2013 10 in stocknWhich one would you like? Please reply 1 or 2.nnMy Apple Case ma swagatam. **Clear MagSafe Case** u2013 25 stock cha.  n![Clear MagSafe Case](https://example.com/clear-case.png)n",
          "returnIntermediateSteps": true
        }
      },
      "retryOnFail": true,
      "typeVersion": 1.8
    },
    {
      "id": "03153a59-4971-49db-86c2-5fd245b36d28",
      "name": "GetStock",
      "type": "n8n-nodes-base.googleSheetsTool",
      "position": [
        400,
        240
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Value', ``, 'string') }}",
              "lookupColumn": "Phone Model"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 2019723207,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1btXGPudVDrG64coe5mIlw0Nd8r6YzOnNQ3wp7OVUffc/edit#gid=2019723207",
          "cachedResultName": "Inventory"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1btXGPudVDrG64coe5mIlw0Nd8r6YzOnNQ3wp7OVUffc",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1btXGPudVDrG64coe5mIlw0Nd8r6YzOnNQ3wp7OVUffc/edit?usp=drivesdk",
          "cachedResultName": "Apple Case Stock"
        },
        "combineFilters": "OR"
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "r16nFPNT77oA4BPq",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.5
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "6f49665c-583f-456e-9ea9-bb95b172cac1",
  "connections": {
    "GetStock": {
      "ai_tool": [
        [
          {
            "node": "Support Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Place order": {
      "ai_tool": [
        [
          {
            "node": "Support Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Update Stock": {
      "ai_tool": [
        [
          {
            "node": "Support Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "Support Agent",
            "type": "ai_memory",
            "index": 0
          },
          {
            "node": "When chat message received",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Support Agent": {
      "main": [
        []
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Support Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "When chat message received": {
      "main": [
        [
          {
            "node": "Support Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}