Traitement automatique de factures dans Gmail avec Azure GPT-4.1 et vérification humaine
Ceci est unInvoice Processing, AI Summarizationworkflow d'automatisation du domainecontenant 17 nœuds.Utilise principalement des nœuds comme If, Gmail, Merge, GmailTrigger, StopAndError. Automatisation du traitement des factures Gmail avec Azure GPT-4.1 et vérification humaine
- •Compte Google et informations d'identification Gmail API
- •Clé API OpenAI
Nœuds utilisés (17)
Catégorie
{
"id": "zZWPMtZ0TNebe1fI",
"meta": {
"instanceId": "9d85a8cf5ffde86dc8ca46087fd639ee7966eec2fa01c3b00004cfc2bd9c91b0"
},
"name": "Automate Invoice Processing from Gmail with Azure GPT-4.1 and Human Verification",
"tags": [],
"nodes": [
{
"id": "a6fd1034-16ac-48ce-a20e-5d00f9709d76",
"name": "Gmail Trigger",
"type": "n8n-nodes-base.gmailTrigger",
"position": [
40,
220
],
"parameters": {
"simple": false,
"filters": {
"sender": "youremail@gmail.com"
},
"options": {
"downloadAttachments": true
},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
}
},
"credentials": {
"gmailOAuth2": {
"id": "T2T44GgzbxyaFB0y",
"name": "Gmail account"
}
},
"typeVersion": 1
},
{
"id": "b4829627-2c3e-477c-8ff0-9754f0010826",
"name": "SI : L'IA répond Oui",
"type": "n8n-nodes-base.if",
"position": [
1020,
260
],
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json.output[0].insights[0].body }}",
"value2": "Yes",
"operation": "contains"
}
]
}
},
"typeVersion": 1
},
{
"id": "14933a59-1cd2-4572-aa92-8968ffa03b8a",
"name": "Enregistrer le PDF localement",
"type": "n8n-nodes-base.writeBinaryFile",
"position": [
1640,
220
],
"parameters": {
"options": {},
"fileName": "=C:/Test/Invoices/invoice_{{ $now.toFormat('yyyyLLdd_HHmmss') }}.pdf",
"dataPropertyName": "attachment_0"
},
"typeVersion": 1
},
{
"id": "0a17eed9-be81-4576-b218-ad12b3ffac28",
"name": "Fusionner",
"type": "n8n-nodes-base.merge",
"position": [
1480,
220
],
"parameters": {
"mode": "chooseBranch"
},
"retryOnFail": false,
"typeVersion": 3.2
},
{
"id": "e577ce73-0505-45f0-80cb-aa6d241f1add",
"name": "Extracteur d'informations",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"onError": "continueErrorOutput",
"position": [
660,
280
],
"parameters": {
"text": "={{ $json.text }}",
"options": {
"systemPromptTemplate": "You are an expert reviewing invoices. Analyze the texts and say if it is an invoice. Just answer 'Yes' or 'No'"
},
"schemaType": "manual",
"inputSchema": "{\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"topic\": { \"type\": \"string\" },\n \"insights\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"title\": { \"type\": \"string\" },\n \"body\": { \"type\": \"string\" }\n }\n }\n }\n }\n }\n}"
},
"typeVersion": 1.2,
"alwaysOutputData": true
},
{
"id": "861f5008-bd46-4091-b040-b7b2fe1e6f45",
"name": "Est-ce un PDF ?",
"type": "n8n-nodes-base.if",
"position": [
260,
220
],
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json.subject }}",
"value2": "Invoice",
"operation": "contains"
},
{
"value1": "={{ $binary.attachment_0 }}",
"operation": "isNotEmpty"
}
]
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "e23bf999-1718-4489-a308-e244b22e14ad",
"name": "Envoyer un message",
"type": "n8n-nodes-base.gmail",
"position": [
1020,
480
],
"webhookId": "aaafea40-4fcd-4775-82bf-5302914a681b",
"parameters": {
"sendTo": "receiver@gmail.com",
"message": "I had trouble parsing the recent invoice. Can you please confirm that it is an invoice?",
"options": {
"appendAttribution": false
},
"subject": "Approval Required!",
"operation": "sendAndWait",
"approvalOptions": {
"values": {
"approvalType": "double"
}
}
},
"credentials": {
"gmailOAuth2": {
"id": "T2T44GgzbxyaFB0y",
"name": "Gmail account"
}
},
"typeVersion": 2.1
},
{
"id": "bc2a8732-2e5f-421b-8df1-37a6ec2f7a2e",
"name": "Message d'enregistrement de facture",
"type": "n8n-nodes-base.gmail",
"position": [
1800,
220
],
"webhookId": "aaafea40-4fcd-4775-82bf-5302914a681b",
"parameters": {
"sendTo": "receiver@gmail.com",
"message": "=Hi there,\nInvoice '{{ $json.subject }}' from \"{{ $json.from.value[0].name }}\" has been saved successfully in your Local Folder!\n\n",
"options": {
"appendAttribution": false
},
"subject": "=Invoice Downloaded"
},
"credentials": {
"gmailOAuth2": {
"id": "T2T44GgzbxyaFB0y",
"name": "Gmail account"
}
},
"typeVersion": 2.1
},
{
"id": "c9155103-6c04-438a-8e90-edb63b9ffd1a",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
0,
120
],
"parameters": {
"color": 7,
"width": 200,
"height": 300,
"content": "Triggers Gmail when new email from specific email account is received.\n"
},
"typeVersion": 1
},
{
"id": "a7a4385d-f00e-493c-9757-fbd660a64354",
"name": "Note adhésive 1",
"type": "n8n-nodes-base.stickyNote",
"position": [
220,
120
],
"parameters": {
"color": 7,
"width": 180,
"height": 300,
"content": "Checks if there is any pdf attachments in email, and Invoice is included in subject\n"
},
"typeVersion": 1
},
{
"id": "da0c4d5e-9c24-4f3d-a17a-ca92d3299729",
"name": "Note adhésive 2",
"type": "n8n-nodes-base.stickyNote",
"position": [
420,
0
],
"parameters": {
"color": 7,
"width": 180,
"height": 600,
"content": "If both are true, it extracts the information from the pdf.\n\nIf not, it gives an error saying that there is no invoice file included."
},
"typeVersion": 1
},
{
"id": "2196f52f-9e5b-4acd-b173-86ff7e986b71",
"name": "Note adhésive 3",
"type": "n8n-nodes-base.stickyNote",
"position": [
620,
0
],
"parameters": {
"color": 7,
"width": 780,
"height": 660,
"content": "This checks the extracted information from the pdf and analyze if it is invoice.\n\nBased on the information, if it is invoice, it gives output of \"Yes\", otherwise \"No\".\n\nIf \"Yes\", it merges response to another node.\nIf \"No\", it sends an email to person and says that the file does not seem like an invoice and double check the file for review. When human responds that it is an invoice, it corrects its answer as \"Yes\".\n\nIf there is an error parsing the extracted texts, it sends an email to user to check the file and asks for approval."
},
"typeVersion": 1
},
{
"id": "ba5b7574-a2e1-401e-aab0-c7ca6b7856d8",
"name": "Azure OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
"position": [
660,
440
],
"parameters": {
"model": "gpt-4.1",
"options": {}
},
"credentials": {
"azureOpenAiApi": {
"id": "QvYBe8DtpxGloSPZ",
"name": "Azure Open AI account"
}
},
"typeVersion": 1
},
{
"id": "42973f72-4ce9-4fff-90e5-9a09cc68f39b",
"name": "Vérification manuelle",
"type": "n8n-nodes-base.gmail",
"position": [
1200,
340
],
"webhookId": "69f41f8b-bad8-4fe6-83db-b46e64f10e7f",
"parameters": {
"sendTo": "receiveremail@gmail.com",
"message": "The latest invoice does not seem to be legit. Please verify it manually.",
"options": {
"appendAttribution": false
},
"subject": "Manual Verification Required"
},
"credentials": {
"gmailOAuth2": {
"id": "T2T44GgzbxyaFB0y",
"name": "Gmail account"
}
},
"typeVersion": 2.1
},
{
"id": "f1d15106-d677-4484-8602-7091c87be5c7",
"name": "Note adhésive 4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1420,
120
],
"parameters": {
"color": 7,
"width": 560,
"height": 300,
"content": "After verifying that the file is an invoice, it saves the file in the local directory. When the workflow is completed, it sends a success email to user."
},
"typeVersion": 1
},
{
"id": "f589f451-3faf-4930-ab12-4796f219d066",
"name": "Note adhésive 5",
"type": "n8n-nodes-base.stickyNote",
"position": [
0,
0
],
"parameters": {
"width": 400,
"height": 100,
"content": "## Use this to automatically save invoice received in an email"
},
"typeVersion": 1
},
{
"id": "3b021445-e52e-4191-a454-654ba26e1bba",
"name": "Gestionnaire d'erreurs",
"type": "n8n-nodes-base.stopAndError",
"position": [
460,
440
],
"parameters": {
"errorMessage": "There is no pdf file!"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "a74dc17a-a9fe-448e-a457-4b267ce63830",
"connections": {
"0a17eed9-be81-4576-b218-ad12b3ffac28": {
"main": [
[
{
"node": "14933a59-1cd2-4572-aa92-8968ffa03b8a",
"type": "main",
"index": 0
}
]
]
},
"861f5008-bd46-4091-b040-b7b2fe1e6f45": {
"main": [
[
{
"node": "0a17eed9-be81-4576-b218-ad12b3ffac28",
"type": "main",
"index": 0
},
{
"node": "e577ce73-0505-45f0-80cb-aa6d241f1add",
"type": "main",
"index": 0
}
],
[
{
"node": "3b021445-e52e-4191-a454-654ba26e1bba",
"type": "main",
"index": 0
}
]
]
},
"a6fd1034-16ac-48ce-a20e-5d00f9709d76": {
"main": [
[
{
"node": "861f5008-bd46-4091-b040-b7b2fe1e6f45",
"type": "main",
"index": 0
}
]
]
},
"b4829627-2c3e-477c-8ff0-9754f0010826": {
"main": [
[
{
"node": "0a17eed9-be81-4576-b218-ad12b3ffac28",
"type": "main",
"index": 1
}
],
[
{
"node": "42973f72-4ce9-4fff-90e5-9a09cc68f39b",
"type": "main",
"index": 0
}
]
]
},
"14933a59-1cd2-4572-aa92-8968ffa03b8a": {
"main": [
[
{
"node": "bc2a8732-2e5f-421b-8df1-37a6ec2f7a2e",
"type": "main",
"index": 0
}
]
]
},
"e577ce73-0505-45f0-80cb-aa6d241f1add": {
"main": [
[
{
"node": "b4829627-2c3e-477c-8ff0-9754f0010826",
"type": "main",
"index": 0
}
],
[
{
"node": "e23bf999-1718-4489-a308-e244b22e14ad",
"type": "main",
"index": 0
}
]
]
},
"ba5b7574-a2e1-401e-aab0-c7ca6b7856d8": {
"ai_languageModel": [
[
{
"node": "e577ce73-0505-45f0-80cb-aa6d241f1add",
"type": "ai_languageModel",
"index": 0
}
]
]
}
}
}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é ?
Avancé - Traitement des factures, Résumé IA
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.
Workflows recommandés
Sachin Shrestha
@sachinPartager ce workflow