🔗 Ponte di Integrazione¶
Come i due server comunicano tra loro in tempo reale
Flusso Comunicazione¶
sequenceDiagram
participant C as Cliente WA
participant B as Bot (.91)
participant S as Sito (.154)
participant M as Marco WA
participant E as Brevo Email
C->>B: "Vorrei info sul nigiri robot"
B->>B: AI risponde su WA
B->>S: POST /api/email/bot-generate-draft
S->>S: Gemini genera bozza email
S-->>B: {draftId: 5, subject: "..."}
B->>M: "BOZZA EMAIL GENERATA - INVIA 5 o MODIFICA 5"
M->>B: "INVIA 5"
B->>S: POST /api/email/send/5
S->>E: Brevo HTTP API
E->>C: Email professionale ricevuta
API Bridge (Bot → Sito)¶
| Endpoint | Funzione | File Bot |
|---|---|---|
GET /api/bot/resolve-contact |
Risolvi nome contatto | api.js |
POST /api/bot/contact |
Upsert contatto | api.js |
POST /api/stats/increment |
Incrementa contatori | api.js |
POST /api/messages/sync |
Sincronizza messaggio | api.js |
POST /api/email/bot-generate-draft |
Genera bozza email AI | api.js |
POST /api/email/send/:id |
Invia bozza approvata | api.js |
GET /api/knowledge |
Carica regole KB | aiClient.js |
Token: isr-bot-service-2026 (header Authorization: Bearer)
Push Control — Flusso Dettagliato¶
Trigger¶
Il bot rileva intent email quando il messaggio del cliente contiene:
preventivo, prezzo, costo, quotation, quote, price, listino, catalogo, informazioni, info, brochure, specifiche, demo, appuntamento, visita, showroom
Condizioni¶
- Chat privata (non gruppo)
- Contatto classificato come cliente (non interno)
- Contatto ha un email nel DB
Tipi Email Generati¶
| Keyword | Tipo Email |
|---|---|
| preventivo, prezzo, costo, listino | quote_send |
| demo, appuntamento, showroom, visita | appointment_confirm |
| info, brochure, catalogo, specifiche | product_info |
| altro | follow_up |
Email Relay — Brevo¶
| Parametro | Valore |
|---|---|
| Provider | Brevo (ex-Sendinblue) |
| Metodo | HTTP API (non SMTP) |
| Mittente | info@italiasushirobot.com |
| Limite | 300 email/giorno (piano gratuito) |
| Motivo | DigitalOcean blocca SMTP outbound (25, 465, 587) |
URL Shortener + QR — Flusso¶
Admin crea preventivo → QR generato con /q/123
→ QR cached su disco (/cache/qr/qr_123.png)
→ Cliente scansiona QR
→ GET /q/123 → redirect 301 → /preventivo/123
→ Landing mobile-first (< 5KB, < 1s su 4G)
→ Tracking: quotes.views++ nel DB
→ CTA: "Conferma via WhatsApp" (wa.me link)