{
  "name": "Email in arrivo: smistamento e bozza di risposta",
  "nodes": [
    {
      "parameters": {
        "content": "## Email: smistamento e bozza di risposta\nOgni email nuova viene classificata (informazioni, preventivo, appuntamento…) e ti arriva un riepilogo con **una bozza di risposta da rileggere**. Nessuna risposta parte da sola verso il cliente.\n\n**In più serve:** credenziale **IMAP** della casella da leggere, nel nodo \"Nuova email\".\n\n**Credenziali da collegare dopo l'importazione**\n- **OpenAI** → nei nodi HTTP Request \"… con AI\": Header Auth con *Name* `Authorization` e *Value* `Bearer LA-TUA-CHIAVE`.\n- **Email (SMTP)** → nei nodi Send Email: l'account da cui partono i messaggi.\n\nPoi apri il nodo **Impostazioni** e cambia solo il blocco iniziale (email, attività, modello).\nFai una prova con *Execute workflow*, poi attivalo con *Publish* (in n8n 1.x: *Test workflow* e interruttore *Active*).",
        "width": 520,
        "height": 400,
        "color": 5
      },
      "id": "6fcc97b2-4632-5f30-a287-5214d3bec036",
      "name": "Leggimi",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        0,
        -220
      ]
    },
    {
      "parameters": {
        "mailbox": "INBOX",
        "postProcessAction": "nothing",
        "format": "simple",
        "options": {}
      },
      "id": "7ff705c2-5fd1-543f-b595-e2e272bf3c5e",
      "name": "Nuova email",
      "type": "n8n-nodes-base.emailReadImap",
      "typeVersion": 2,
      "position": [
        0,
        300
      ]
    },
    {
      "parameters": {
        "jsCode": "// ⚙️ IMPOSTAZIONI — modifica solo questo blocco\nconst cfg = {\n  model: 'gpt-4o-mini',                 // un modello economico disponibile nel tuo account OpenAI\n  tuaEmail: 'tu@esempio.it',            // dove ricevi riepilogo e bozza\n  mittente: 'automazioni@esempio.it',   // indirizzo dell'account SMTP da cui parte il riepilogo\n  attivita: 'studio di consulenza',     // la tua attività, in poche parole\n  tono: 'cordiale e professionale, dai del lei',\n  categorie: ['Richiesta informazioni', 'Preventivo', 'Appuntamento', 'Reclamo', 'Fornitore', 'Altro'],\n};\nreturn $input.all().map(item => ({ json: { ...item.json, cfg } }));\n"
      },
      "id": "2806d371-207a-585c-96ac-ef4bb7c2f1ad",
      "name": "Impostazioni",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        240,
        300
      ]
    },
    {
      "parameters": {
        "jsCode": "return $input.all().map(item => {\n  const e = item.json, cfg = e.cfg;\n  const testo = String(e.textPlain || e.text || e.textHtml || '').replace(/<[^>]+>/g, ' ').slice(0, 6000);\n  const istruzioni =\n    `Sei l'assistente di: ${cfg.attivita}. Classifica l'email in una di queste categorie: ${cfg.categorie.join(', ')}. ` +\n    `Poi scrivi una bozza di risposta in italiano, tono ${cfg.tono}. Non inventare prezzi, date o impegni: ` +\n    `dove mancano informazioni scrivi [DA COMPLETARE]. Rispondi solo con un oggetto JSON: ` +\n    `{\"categoria\": string, \"urgente\": boolean, \"riassunto\": string (massimo 2 frasi), \"bozza\": string}.`;\n  return { json: { ...e, testoEmail: testo, body: {\n    model: cfg.model, temperature: 0.3, response_format: { type: 'json_object' },\n    messages: [\n      { role: 'system', content: istruzioni },\n      { role: 'user', content: `Da: ${e.from}\\nOggetto: ${e.subject}\\n\\n${testo}` },\n    ],\n  } } };\n});\n"
      },
      "id": "a8ba66bd-d772-53b5-b851-138c1040c419",
      "name": "Prepara richiesta AI",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        480,
        300
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.openai.com/v1/chat/completions",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify($json.body) }}",
        "options": {}
      },
      "id": "df1f723b-cfcb-5720-bbc7-1d75f133e97b",
      "name": "Classifica con AI",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        720,
        300
      ]
    },
    {
      "parameters": {
        "jsCode": "// Estrae il JSON dalla risposta di OpenAI; se non è valido restituisce `fallback`.\nfunction leggiAI(risposta, fallback) {\n  try { return JSON.parse(risposta.choices[0].message.content); } catch (e) { return fallback; }\n}\n\nconst origini = $('Prepara richiesta AI').all();\nreturn $input.all().map((item, i) => {\n  const e = origini[i].json;\n  const r = leggiAI(item.json, { categoria: 'Da verificare', urgente: false, riassunto: 'Classificazione non riuscita.', bozza: '' });\n  const oggetto = `${r.urgente ? '[URGENTE] ' : ''}[${r.categoria}] ${e.subject || '(senza oggetto)'}`;\n  const testo = [\n    `Da: ${e.from}`, `Oggetto: ${e.subject}`, '', `Riassunto: ${r.riassunto}`, '',\n    '--- Bozza di risposta (rileggila prima di inviarla) ---', r.bozza || '(nessuna bozza)', '',\n    '--- Email originale ---', String(e.testoEmail || '').slice(0, 3000),\n  ].join('\\n');\n  return { json: { oggetto, testo, a: e.cfg.tuaEmail, da: e.cfg.mittente } };\n});\n"
      },
      "id": "93eb8995-3e88-56bc-b7e5-2538d0c2ea72",
      "name": "Componi riepilogo",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        960,
        300
      ]
    },
    {
      "parameters": {
        "fromEmail": "={{ $json.da }}",
        "toEmail": "={{ $json.a }}",
        "subject": "={{ $json.oggetto }}",
        "emailFormat": "text",
        "text": "={{ $json.testo }}",
        "options": {}
      },
      "id": "7cdbc636-347e-547c-980b-3db1e2428753",
      "name": "Invia riepilogo a me",
      "type": "n8n-nodes-base.emailSend",
      "typeVersion": 2.1,
      "position": [
        1200,
        300
      ]
    }
  ],
  "connections": {
    "Nuova email": {
      "main": [
        [
          {
            "node": "Impostazioni",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Impostazioni": {
      "main": [
        [
          {
            "node": "Prepara richiesta AI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepara richiesta AI": {
      "main": [
        [
          {
            "node": "Classifica con AI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Classifica con AI": {
      "main": [
        [
          {
            "node": "Componi riepilogo",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Componi riepilogo": {
      "main": [
        [
          {
            "node": "Invia riepilogo a me",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {},
  "meta": {
    "templateCredsSetupCompleted": false
  },
  "tags": []
}
