Vai al contenuto
Chiudi
Carrello (0)
Your cart is currently empty.
Ritorna al negozio
This store requires javascript to be enabled for some features to work correctly.
I nostri prodotti
Biscotti
Cioccolato a pezzettoni
Creme Spalmabili
Mieli aromatizzati
Mix di Spezie
Mousse e Crispy Chilli
Risotti Pronti
Tavolette di cioccolato
La nostra storia
Le nostre Ricette
Rivenditori
I nostri prodotti
Biscotti
Cioccolato a pezzettoni
Creme Spalmabili
Mieli aromatizzati
Mix di Spezie
Mousse e Crispy Chilli
Risotti Pronti
Tavolette di cioccolato
La nostra storia
Le nostre Ricette
Rivenditori
I nostri prodotti
Biscotti
Cioccolato a pezzettoni
Creme Spalmabili
Mieli aromatizzati
Mix di Spezie
Mousse e Crispy Chilli
Risotti Pronti
Tavolette di cioccolato
La nostra storia
Le nostre Ricette
Rivenditori
I nostri prodotti
Biscotti
Cioccolato a pezzettoni
Creme Spalmabili
Mieli aromatizzati
Mix di Spezie
Mousse e Crispy Chilli
Risotti Pronti
Tavolette di cioccolato
La nostra storia
Le nostre Ricette
Rivenditori
0
Navigazione
Ricerca
0
Carrello
Informativa sulle spedizioni
q
export default { async fetch(request, env) { if (request.method === "OPTIONS") { return new Response("OK", { headers: { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "POST, OPTIONS", "Access-Control-Allow-Headers": "Content-Type", }, }); } if (request.method !== "POST") return new Response("Metodo non supportato", { status: 405 }); const { message, customer = {}, step = "ask_name" } = await request.json(); let nextStep = step; let reply = ""; try { switch (step) { case "ask_name": reply = "Ciao 💛 sono Angela! Come ti chiami?"; nextStep = "save_name"; break; case "save_name": customer.name = message.trim(); reply = `Piacere ${customer.name}! Qual è la tua email?`; nextStep = "save_email"; break; case "save_email": if (!/@/.test(message)) { reply = "Mi serve un indirizzo email valido 💛"; nextStep = "save_email"; } else { customer.email = message.trim(); reply = "Perfetto 💛 e un numero di telefono per ricontattarti?"; nextStep = "save_phone"; } break; case "save_phone": customer.phone = message.trim(); // Cerca eventuale ordine Shopify const order = await findOrder(customer.email, env); if (order) { const tracking = order.fulfillments?.[0]?.tracking_number || "non disponibile"; reply = `Ho trovato il tuo ordine ${order.name} 💛. Stato: ${order.fulfillment_status || "in preparazione"}. Tracking: ${tracking}. Posso aiutarti in altro?`; nextStep = "complete"; } else { reply = "Non trovo un ordine associato, apro subito un ticket per te 💛."; await sendTicket(customer, env); nextStep = "complete"; } break; default: reply = "Posso aiutarti in altro? 💛"; nextStep = "complete"; } return new Response(JSON.stringify({ reply, customer, step: nextStep }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*", }, }); } catch (err) { console.error(err); return new Response( JSON.stringify({ reply: "Ops 💛 c’è stato un piccolo problema tecnico, riprova più tardi.", }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*", }, status: 500, } ); } }, }; // --- Funzione Shopify --- async function findOrder(email, env) { if (!email) return null; const url = `https://${env.SHOPIFY_STORE}/admin/api/2025-01/orders.json?email=${encodeURIComponent( email )}&status=any&limit=1`; const res = await fetch(url, { headers: { "X-Shopify-Access-Token": env.SHOPIFY_API_KEY, "Content-Type": "application/json", }, }); if (!res.ok) return null; const data = await res.json(); return data.orders?.[0] || null; } // --- Crea ticket / invia email (tramite webhook Zapier o Make) --- async function sendTicket(customer, env) { if (!env.WEBHOOK_TICKET_URL) return; await fetch(env.WEBHOOK_TICKET_URL, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ customer, message: "Nuovo ticket aperto da Angela Chat", source: "Chat Casa Folino", }), }); }
💬
A
Angela – Casa Folino