I need help with a email asistant

Hello, my problem is the following:

I am creating a mailbox wizard, the problem that is happening to me is that I have a poll time of 1 minute to check the mail.

It is a mail that normally receives simultaneous mails many times.

The problem comes when in that interval of one minute more than one mail arrives the wizard is not able to manage several mails at the same time and gives me failure in the execution.

Could someone help me?

Thanks in advance.

Hello,

I’m trying to understand and think if okay if you could share the workflow, just so I can see what setting you are using, you can do that like this.

n8n attach workflow

I’ve seen quite a few issues with scheudling nodes / trigger so like to dig abit more into this one.

Best regards,

Samuel

{
“nodes”: [
{
“parameters”: {
“pollTimes”: {
“item”: [
{
“mode”: “everyMinute”
}
]
},
“output”: “fields”,
“fields”: [
“body”,
“from”,
“sender”,
“subject”
],
“filters”: {},
“options”: {}
},
“type”: “n8n-nodes-base.microsoftOutlookTrigger”,
“typeVersion”: 1,
“position”: [
-2640,
440
],
“id”: “6263390f-037f-4e1d-bc08-a032d530fdca”,
“name”: “Microsoft Outlook Trigger”,
“notesInFlow”: true,
“credentials”: {
“microsoftOutlookOAuth2Api”: {
“id”: “uGGY1n3l5jzFZdUJ”,
“name”: “Microsoft Outlook account”
}
},
“notes”: “Disparador cuando un correo entra a la bandeja de entrada.”
},
{
“parameters”: {
“assignments”: {
“assignments”: [
{
“id”: “5c10e178-cf63-4bb1-9d22-129e3082dce3”,
“name”: “Solicitante”,
“value”: “={{ Object.values($(‘HTTP Request1’).item.json.objects)[0].fields.id }}”,
“type”: “string”
},
{
“id”: “2019c5a8-45e0-4f29-8ca3-71ef3c4ff6ee”,
“name”: “Asunto”,
“value”: “={{ $(‘Microsoft Outlook Trigger’).item.json.subject }}”,
“type”: “string”
},
{
“id”: “e8596d74-c179-41f2-8c73-ece6c742d0b5”,
“name”: “Descripcion”,
“value”: “={{ $(‘Microsoft Outlook Trigger’).item.json.body.content }}”,
“type”: “string”
},
{
“id”: “96e67342-f3e6-4319-abc1-e93b83f9d5cd”,
“name”: “Organización”,
“value”: “={{ Object.values($(‘HTTP Request1’).item.json.objects)[0].fields.org_id }}”,
“type”: “string”
}
]
},
“options”: {}
},
“type”: “n8n-nodes-base.set”,
“typeVersion”: 3.4,
“position”: [
-1680,
520
],
“id”: “4bfb30e3-5328-4adb-8e12-e3e96b91976b”,
“name”: “Edit Fields”
},
{
“parameters”: {
“modelId”: {
“__rl”: true,
“value”: “gpt-4o”,
“mode”: “list”,
“cachedResultName”: “GPT-4O”
},
“messages”: {
“values”: [
{
“content”: “=#ROL\nComo experto en ticketing necesito que cuando recibas un correo entrante saques los datos correspondientes para crear los datos de un ticket:\n\n### Instrucciones:\n1. Analizar tanto el asunto como el cuerpo de cada correo entrante y indicame siguiendo reglas si el correo se trata de una solicitud o una incidencia (Teniendo en cuenta que una solicitud es la solicitud que hace alguien y una indcidencia es un servicio, sistema, hardware… que antes si funcionaba).\n\nPara dectectar un solicitud por ejemplo tendras palabras como ("Solicitud", "Solicito", "Solicitudes" y palabras asi) Tanto en el texto como en la descripción.\nPara detectar una incidencia entontraras cosas como ("Ha dejado de funcionar","No funciona" y cosas asi).\n\nSi lo que analizas te parece una solicitud tu output sera "UserRequest".\n\nSi lo que analizas te parece una incidencia tu output sera "Incident".\n\n2. Analiza la criticidad del ticket separandola en :\n- Baja\n- Media\n- Alta\n- Critica\n\n3. Clasificar los correos analizados y derivarlos a carpetas específicas dentro del buzón, según el contenido del mensaje y si estos correos no son prioritarios.\n\n4. Asegurarte de que los correos realmente relevantes permanezcan en la bandeja de entrada.\n\n5. Asegurate de en el correo entrante sacar la siguiente información, como titulo del ticket debes de sacar el subjetc del correo y por ultimo como descripción del ticket debes de sacar el body del correo.\n\n6.IMPORTANTE: No todos los correos que recibiras son solcitudes o incidencias es importante que te fijes si estos correos son publicitarios, informativos o son respuesta de otro correo si esto es asi esos correos no seran creados, por lo tanto me deberas clasificar los correos en "Publicidad" , "Informativos", "Respuesta a otro correo", "Ticket", "E-solver". "Llamada" y si los correos son tickets entonces deberes de crear indicando si es solicitud o incidencia.\n\nAqui te voy a detallar algunos de los correos que son de tipo "E-solver" como:\n\n- Cuando en el asunto del correo Tengas La solicitud "—" y "—" con prioridad "x" ha sido creada.\n- Cuando en el asunto del correo Tengas La solicitud con identificador "—" y titulo "—" ha sido solucionada.\n- Cuando en el asunto del correo Tengas La solicitud "—" ha sido actualizada.\n- Cuando en el asunto del correo Tengas La incidencia "—" y "—" con prioridad "x" ha sido creada.\n- Cuando en el asunto del correo Tengas La incidencia con identificador "—" y titulo "—" ha sido solucionada.\n- Cuando en el asunto del correo Tengas La incidencia "—" ha sido actualizada.\n- Cuando en el asunto del correo Tengas Se ha registrado su comentario en la incidencia "—"\n- Cuando en el asunto del correo Tengas Se ha registrado su comentario en la solicitud "—"\n\nEl output de estas sera "E-solver".\n\nAqui te voy a detallar algunos de los correos que son de tipo "Llamada":\n\n- Cuando en el asunto del correo este lo siguiente "Caller "—" abandoned queue Soporte Produccion AGE2"\n- Cuando en el asunto del correo este lo siguiente "Aviso de llamada fuera de horario desde el número "—""\n- Cuando en el asunto del correo este lo siguiente "Caller "—" abandoned queue Soporte CAU GSSPAIN"\n\nEl output de estas sera "Llamada".\n\nAqui te voy a detallar algunos de los correos que son de tipo "Informativos":\n\n- Cuando en el asunto del correo este lo siguiente "Informe diario".\n- Cuando en el asunto del correo este lo siguiente "Relevo tardes" o "Relevo guardias".\n- Cuando en el asunto del correo este lo siguiente "Actividad de Hiperdetección".\n- Cuando en el asunto del correo este lo siguiente "TAKASAGO - Checklist Diaria "—""\n\nEl output de estas sera "Informativos"\n\n### Detalles Adicionales:\n\nOutput: Provee el resultado con formato JSON con unos campos llamados:\n\n- Tipo de correo: "Publicidad" , "Informativos", "Respuesta a otro correo", "Ticket", "E-solver", "No procesado", "Llamada"\n- Tipo de ticket: "UserRequest" o "Incident".\n- Criticidad: "Baja" o "Media" o "Alta" o "Critica"\n- Titulo del ticket: "{{ $(‘Edit Fields2’).item.json[‘nombre de la empresa’] }}" mas " - " mas el asunto del correo.\n- Descripción del ticket: Hazme un resumen del body del correo añade y antes de comenzar con el resumen lo siguiente "Este texto ha sido generado por IA y puede contener errores.

".\n- Descripción original del ticket: Body del correo sin caracteres especiales. \n- Contrato seleccionado: contrato que se selecciona con nombre e id.\n\n## IMPORTANTE:\n\nRecuerda que es importante que me devuelvas un contrato con su id sino no podre crear el ticket correctamente.\n\n”,
“role”: “system”
},
{
“content”: “=Este es quien envia el correo: {{ $(‘Edit Fields’).item.json.Solicitante }} De Aqui podemos sacar el solicitante y la oragnización)\n\nEsto es el asunto del correo: {{ $(‘Edit Fields’).item.json.Asunto }} (De aqui sacamos el titulo del ticket)\n\nEste es el cuerpo del correo (De aqui sacamos la descripción original del ticket) !IMPORTANTE! Quiero que en las descripción la interpretes como un html que te va a llegar, interpreta los caracteres como "/br" como salto de linea, "/b" como texto en negrita y "

" quiero que los cambies a "
" como parrafo una vez interpretados estos caracteres quiero qu quites las etiquetas por favor que no se te olvide esto. (En esta descripción quiero que me des todos los caracteres necesarios) Quitame tambien todas las etiquetas de html que tenga el texto, tambien quiero que me quites las cabeceras que vayan con este texto:"[EXTERNAL EMAIL] NO HAGAS CLICK EN EL LINK o en los adjuntos a menos que reconozcas el remitente y sepas que el contenido es seguro. DO NOT CLICK links or attachments unless you recognize the sender and know the content is safe." y que quites los pie de pagina que vayan incluidos de la siguiente manera "(Nombre del usario). (Empresa y puesto) (correo) y (teléfono)":{{ $(‘Edit Fields’).item.json.Descripcion }}\n\n##Importante\n\n Todos los saltos de linea que generes añademe un
en el codigo \n\n\n\n”
},
{
“content”: “=##Rol\n\nComo experto en desarrollo de asistentes para plataformas de ticketing, te pido que diseñes un asistente que pueda analizar contratos de una organización en función de los tickets que recibe.\n\n##Instrucciones:\n\nCuando se le proporcionen datos sobre los contratos y un ticket específico, el asistente deberá identificar y seleccionar el contrato que mejor se ajuste al tipo de ticket, que generalmente será de soporte proactivo.\n\n\nUna vez que haya realizado la elección, el asistente debe devolver el ID y el nombre del contrato seleccionado de manera clara y concisa. Asegúrate de que el proceso sea eficiente y que la información entregada sea fácil de entender.\n\n##Importante \n\nEvita poner contratos que sean proyectos normalmente el contrato sera de tipo soporte.\n\nEstos son los contratos que tiene esta organización:{{ $json.textoPlano }}\n\n”,
“role”: “assistant”
}
]
},
“jsonOutput”: true,
“options”: {}
},
“type”: “@n8n/n8n-nodes-langchain.openAi”,
“typeVersion”: 1.8,
“position”: [
-780,
520
],
“id”: “af5d7849-7b73-4a2f-801b-e73c9602d11f”,
“name”: “OpenAI”,
“credentials”: {
“openAiApi”: {
“id”: “6MIfisKd1mXcImbF”,
“name”: “OpenAi account”
}
}
},
{
“parameters”: {
“method”: “POST”,
“url”: “https://e-solvermulti.age2.es/esolverdesa/webservices/rest.php?version=1.3”,
“sendQuery”: true,
“queryParameters”: {
“parameters”: [
{
“name”: “auth_token”,
“value”: “dllabEZFK2VMRlUvQ244WUxya3VZZDdMQ2h0dWV2UDcxVmFZWUVCbFpES0E3MzFRa1IvNFdSdHVYRHVSUnd2ZkphWVdHNmhraTZnR2hpMDQzVzVZdlE9PQ”
},
{
“name”: “json_data”,
“value”: “={\n"operation": "core/get",\n"class": "Person",\n"key": "SELECT Person WHERE email LIKE ‘{{ $json.sender.emailAddress.address }}’",\n"output_fields": "id, org_id"\n}”
}
]
},
“options”: {
“allowUnauthorizedCerts”: true
}
},
“type”: “n8n-nodes-base.httpRequest”,
“typeVersion”: 4.2,
“position”: [
-2420,
440
],
“id”: “737dc74c-bdb1-4d33-b97e-94296f5afa33”,
“name”: “HTTP Request1”
},
{
“parameters”: {
“conditions”: {
“options”: {
“caseSensitive”: true,
“leftValue”: “”,
“typeValidation”: “strict”,
“version”: 2
},
“conditions”: [
{
“id”: “3c76bb7f-24c1-41e0-9912-a955dc421a09”,
“leftValue”: “={{ $json.message }}”,
“rightValue”: “Found: 0”,
“operator”: {
“type”: “string”,
“operation”: “equals”,
“name”: “filter.operator.equals”
}
}
],
“combinator”: “and”
},
“options”: {}
},
“type”: “n8n-nodes-base.if”,
“typeVersion”: 2.2,
“position”: [
-1920,
500
],
“id”: “8b07083d-b9e3-41ae-aef6-c22b43a11fc8”,
“name”: “If”
},
{
“parameters”: {
“method”: “POST”,
“url”: “https://e-solvermulti.age2.es/esolverdesa/webservices/rest.php?version=1.3”,
“sendQuery”: true,
“queryParameters”: {
“parameters”: [
{
“name”: “auth_token”,
“value”: “dllabEZFK2VMRlUvQ244WUxya3VZZDdMQ2h0dWV2UDcxVmFZWUVCbFpES0E3MzFRa1IvNFdSdHVYRHVSUnd2ZkphWVdHNmhraTZnR2hpMDQzVzVZdlE9PQ==”
},
{
“name”: “json_data”,
“value”: "={\n "operation": "core/get",\n "class": "Service",\n "key": "SELECT Organization WHERE id = {{ $json[‘Organización’] }}",\n "output_fields": "name"\n} "
}
]
},
“options”: {
“allowUnauthorizedCerts”: true
}
},
“type”: “n8n-nodes-base.httpRequest”,
“typeVersion”: 4.2,
“position”: [
-1500,
520
],
“id”: “85df0c17-3366-4fc7-b571-7e61d1dc393b”,
“name”: “HTTP Request2”
},
{
“parameters”: {
“content”: “## Selección y filtrado de Organización y contratos\n”,
“height”: 220,
“width”: 800
},
“type”: “n8n-nodes-base.stickyNote”,
“position”: [
-1960,
440
],
“typeVersion”: 1,
“id”: “f90ddaaa-f8a3-4e26-a7ae-4487137e8829”,
“name”: “Sticky Note4”
},
{
“parameters”: {
“assignments”: {
“assignments”: [
{
“id”: “1f655a4f-b69f-483d-9484-4233baaf3d71”,
“name”: “nombre de la empresa”,
“value”: “={{ Object.values($json.objects)[0].fields.friendlyname }}”,
“type”: “string”
}
]
},
“options”: {}
},
“type”: “n8n-nodes-base.set”,
“typeVersion”: 3.4,
“position”: [
-1300,
520
],
“id”: “43791736-b7de-4e68-a92c-2a9fd9eca52b”,
“name”: “Edit Fields2”
},
{
“parameters”: {
“method”: “POST”,
“url”: “https://e-solvermulti.age2.es/esolverdesa/webservices/rest.php?version=1.3”,
“sendQuery”: true,
“queryParameters”: {
“parameters”: [
{
“name”: “auth_token”,
“value”: “dllabEZFK2VMRlUvQ244WUxya3VZZDdMQ2h0dWV2UDcxVmFZWUVCbFpES0E3MzFRa1IvNFdSdHVYRHVSUnd2ZkphWVdHNmhraTZnR2hpMDQzVzVZdlE9PQ==”
},
{
“name”: “json_data”,
“value”: "={\n "operation": "core/get",\n "class": "Service",\n "key": "SELECT CustomerContract WHERE org_id = {{ $(‘Edit Fields’).item.json[‘Organización’] }}",\n "output_fields": "name"\n} "
}
]
},
“options”: {
“allowUnauthorizedCerts”: true
}
},
“type”: “n8n-nodes-base.httpRequest”,
“typeVersion”: 4.2,
“position”: [
-1120,
520
],
“id”: “758ec8d9-7809-4d87-afed-aaa53d482148”,
“name”: “HTTP Request3”
},
{
“parameters”: {
“jsCode”: “const contracts = $input.item.json.objects;\nconst result = ;\n\nfor (const key in contracts) {\n const contract = contracts[key];\n const id = contract.fields.id;\n const name = contract.fields.friendlyname;\n result.push(ID: ${id} - ${name});\n}\n\nreturn [\n {\n json: {\n textoPlano: result.join(‘\n’)\n }\n }\n];”
},
“type”: “n8n-nodes-base.code”,
“typeVersion”: 2,
“position”: [
-940,
520
],
“id”: “ea676925-6adb-46f9-9f78-fd866eeca3d4”,
“name”: “Code”
}
],
“connections”: {
“Microsoft Outlook Trigger”: {
“main”: [
[
{
“node”: “HTTP Request1”,
“type”: “main”,
“index”: 0
}
]
]
},
“Edit Fields”: {
“main”: [
[
{
“node”: “HTTP Request2”,
“type”: “main”,
“index”: 0
}
]
]
},
“OpenAI”: {
“main”: [

]
},
“HTTP Request1”: {
“main”: [
[
{
“node”: “If”,
“type”: “main”,
“index”: 0
}
]
]
},
“If”: {
“main”: [
,
[
{
“node”: “Edit Fields”,
“type”: “main”,
“index”: 0
}
]
]
},
“HTTP Request2”: {
“main”: [
[
{
“node”: “Edit Fields2”,
“type”: “main”,
“index”: 0
}
]
]
},
“Edit Fields2”: {
“main”: [
[
{
“node”: “HTTP Request3”,
“type”: “main”,
“index”: 0
}
]
]
},
“HTTP Request3”: {
“main”: [
[
{
“node”: “Code”,
“type”: “main”,
“index”: 0
}
]
]
},
“Code”: {
“main”: [
[
{
“node”: “OpenAI”,
“type”: “main”,
“index”: 0
}
]
]
}
},
“pinData”: {},
“meta”: {
“templateCredsSetupCompleted”: true,
“instanceId”: “b2e969cc2e21c429089fb7017410ed67eda8d2923315d311de65ac3f25d55f8b”
}
}