Un assistente che legge il prezzo e la disponibilità del suo negozio nell’istante in cui il cliente chiede.
Colleghiamo l’assistente al catalogo del negozio tramite la sua gate pubblica, lo inseriamo nei canali su cui i clienti scrivono già e gli diamo una regola che non può infrangere: non dica un prezzo che non sia pubblicato nel negozio. Quando supera il suo ruolo, passa la conversazione a una persona, con evidenza.
Già costruitoSe poate verifica din exterior, fără să ne întrebi pe noi. Punctul nostru de catalog livrat unui distribuitor răspunde 200 și spune „154 rezultate”, iar interfața publică a magazinului lui, interogată direct, întoarce antetul `x-wp-total: 154` — aceeași cifră, două surse independente, 06.09.2026. A doua implementare e funcția de catalog din platforma de asistenți: `storeCatalog.service.js` plus trei unelte încorporate pe care agentul le poate chema în timpul conversației. Rezerva pe care o spunem înainte de contract: mesajele din șablon WhatsApp nu există în codul platformei, deci nu promitem niciun mesaj proactiv în afara ferestrei de 24 de ore; iar traseul de catalog stă pe o ramură de dezvoltare care nu e unificată în trunchi — e livrat pentru magazinele pe care le-am conectat, nu pornit implicit pentru toți.
Un assistente di negozio non si guasta perché non capisce la domanda. Si guasta perché risponde da una copia del catalogo. Qualcuno ha esportato i prodotti una volta, li ha incollati in un file, e da allora l’assistente legge una fotografia vecchia del negozio: il prezzo di tre settimane fa, lo stock di prima del weekend. Funziona perfettamente fino al primo cambiamento di prezzo e fino al primo prodotto esaurito — e allora sbaglia con convinzione, il che è peggio che tacere. Nel commercio questo non è un errore di sfumatura: il cliente arriva nel negozio con il prezzo che gli ha detto il bot.
La nostra scelta è semplice e ha conseguenze: il catalogo non si copia, si legge. Per i negozi WooCommerce, l’interfaccia Store API è pubblica — quindi la connessione avviene con l’indirizzo del sito, senza chiave consumatore e senza segreto. Quando il cliente chiede di un prodotto, l’agente chiama uno strumento, lo strumento interroga il negozio, il negozio risponde con il prezzo e la disponibilità di adesso. Ciò che appare nella conversazione è ciò che è nel negozio, non ciò che era quando è stata fatta l’integrazione.
Il costo di questa scelta è visibile nel codice, non nascosto: il catalogo si carica in modo paginato, fino a trenta pagine da cento prodotti ciascuna, viene tenuto in una memoria temporanea di dieci minuti per sito e viene normalizzato in una sola forma, letta senza modifiche da tutti i consumatori — inclusa la carosello di prodotti nella messaggistica, che ha bisogno di un prezzo numerico, e il widget nella pagina. Dieci minuti è il compromesso: una modifica di prezzo fatta adesso si vede al massimo entro dieci minuti, non istantaneamente. Diciamo la cifra, così può contestarla.
Il resto dei limiti non viene da noi, ma dai canali, ed è più onesto saperlo prima: Meta rifiuta il testo libero al di fuori della finestra di 24 ore dall’ultimo messaggio del cliente, Instagram non ha affatto caroselli di prodotti, e una foto inviata dal cliente viene marcata nella conversazione, non allegata automaticamente a un ordine. Ognuna di queste frasi è citata più sotto con file e riga.
Cosa comprende
Cosa cambia concretamente nel commercio online
La domanda diventa una ricerca nel suo catalogo, non un indovinello
L’agente ha tre strumenti incorporati sopra un servizio comune di catalogo: `store_catalog_search` per la ricerca, `store_catalog_match` per l’abbinamento di una formulazione del cliente a un prodotto specifico, `store_catalog_product` per la scheda completa. Non sono strumenti scritti separatamente per ogni negozio — sono una funzione della piattaforma. La differenza pratica: quando correggiamo qualcosa nell’abbinamento, si corregge per tutti i negozi collegati contemporaneamente.
Il prezzo e lo stock si leggono dal negozio al momento della domanda
Il risultato dello strumento proviene dal suo negozio, non da un file nostro. La memoria temporanea è di dieci minuti per sito, e il catalogo viene percorso in modo paginato — fino a 30 pagine da 100 prodotti. La conseguenza che deve accettare: una modifica di prezzo appare nella conversazione con un ritardo di al massimo dieci minuti. La conseguenza che ottiene: non esiste lo scenario in cui l’agente ripete per mesi un prezzo preso dal negozio.
La risposta esce sul canale su cui ha scritto il cliente
Sei canali hanno codice proprio nella piattaforma: Messenger, Instagram Direct, Telegram, il widget nella pagina, una piattaforma locale di annunci e WhatsApp tramite Cloud API su Graph v22.0. Non è un unico «chat» rinominato sei volte: ogni canale ha proprie regole di formato e propri modi di guastarsi, e noi verifichiamo anche il caso brutto — un token di pagina scaduto ferma il canale in silenzio se non è monitorato.
La connessione del negozio su WooCommerce si fa con il suo indirizzo, senza chiavi
Store API è pubblica, quindi non le chiediamo `consumer_key` e `consumer_secret`. Non è una comodità, è una decisione di rischio: gli strumenti scritti a mano che questo percorso ha sostituito conservavano, alcuni di essi, chiavi del negozio scritte in chiaro nel database. Il nuovo percorso ha sostituito 109 strumenti scritti manualmente, di cui 28 erano scraper su HTML — cioè integrazioni che si rompevano al primo cambiamento di tema del negozio.
Il carosello di prodotti ha condizioni, e cambiano da un canale all’altro
Su Messenger, il carosello viene visualizzato solo quando sono soddisfatte tre condizioni simultaneamente; se ne manca una, la risposta rimane testo, non si rompe. Su Instagram non esiste il carosello di prodotti — Meta non ha modelli generici su Instagram, quindi nessuno può consegnarlo lì, indipendentemente da ciò che è scritto nell’offerta. È il tipo di frase che preferiamo che senta da noi prima del contratto.
Finestra di 24 ore su WhatsApp, detta con il numero dell’errore
Fuori dalla finestra di 24 ore dall’ultimo messaggio del cliente, Meta respinge il testo libero con l’errore 131047, e il messaggio resta contrassegnato come fallito nella piattaforma. I messaggi da modello — l’unico modo legittimo di scrivere per primi dopo la finestra — non esistono nel codice della piattaforma: una ricerca per tipo `template` restituisce zero risultati, viene inviato solo il tipo `text`. Quindi: il recupero del carrello abbandonato su WhatsApp dopo 48 ore oggi non possiamo prometterlo.
Le raffiche di messaggi e i messaggi duplicati vengono trattati, non ignorati
Il webhook di Meta reinvia davvero lo stesso messaggio: la deduplicazione avviene sull’identificatore del messaggio, con 120 secondi di memoria. E il cliente che scrive «ciao», «avete», «il modello nero» su tre righe riceve una sola risposta a tutto ciò che ha scritto, non tre risposte parziali — i messaggi si accumulano in un buffer di 15 secondi. Nel commercio questo conta più di quanto sembri: tre risposte parziali a una sola intenzione appaiono esattamente come un robot.
La presa in carico da parte di una persona ha uno stato, non è una promessa
Il filo della conversazione ha uno stato esplicito `bot` o `human`. Il registro della presa in carico conosce tre azioni: presa in carico da parte di una persona, ritorno al bot, riattivazione automatica. Separatamente, il filo ha uno stato di rispetto del tempo di risposta — `ok`, `warning`, `breached` — quindi si vede quale conversazione è rimasta senza risposta umana, non solo quante ce ne sono state.
Ciò che non risolve un assistente di negozio
Non incassa il pagamento. Non crea l’ordine nel negozio se il negozio non ha un canale di scrittura — la lettura è pubblica, la scrittura no. Non allega la foto inviata dal cliente a un ordine: la fotografia ricevuta viene contrassegnata nella conversazione, e basta, e la generazione di PDF non esiste nella piattaforma. E non ripete l’ordine precedente di un cliente senza accesso autorizzato al suo storico. Ognuna di queste cose si può costruire, ma come lavoro separato, non come spunta nell’offerta.
Traseul
Come passa una richiesta attraverso il sistema.
01
Verifichiamo prima quale gate pubblico ha il vostro negozio
La prima verifica, non l’ultima: chiediamo il catalogo dall’esterno e contiamo ciò che torna indietro. Se il negozio è su WooCommerce con Store API attiva, l’integrazione non ha bisogno di chiavi. Se no, passiamo all’autenticazione — e allora la chiave diventa un elemento da amministrare, con tutto ciò che questo comporta. Consegniamo per iscritto il risultato di questa verifica, anche quando la risposta è che non è possibile.
02
Colleghiamo il catalogo e i canali, con il caso peggiore testato
La connessione Meta avviene tramite Embedded Signup. Per ogni canale verifichiamo non solo il primo messaggio riuscito, ma anche cosa succede quando il token scade o quando il negozio non risponde. Consegniamo i canali collegati e l’elenco scritto del comportamento in ogni modalità di guasto.
03
Scriviamo il ruolo, gli strumenti e il limite
Ogni strumento ha una descrizione scritta per il modello, parametri tipizzati e un proprio termine di esecuzione — per impostazione predefinita 15 secondi. Il ruolo dell’agente dice in modo esplicito ciò che non ha il diritto di affermare: prezzo non pubblicato, termine di consegna, disponibilità che non ha letto. Consegniamo la configurazione dell’agente e l’elenco degli strumenti a lui associati — non tutti gli strumenti della piattaforma, solo quelli di cui ha bisogno.
04
Partiamo con la presa in carico umana attiva e regoliamo le soglie
Partiamo con la presa in carico da parte di una persona configurata e con il registro delle interrogazioni attivato, così si vede quali frammenti ha usato l’agente e con quali punteggi. Da lì si regola la soglia di similarità e il numero di frammenti per domanda. Consegniamo un report delle conversazioni con le decisioni di regolazione, non solo un assistente avviato.
Traseul, în 5 pași
I dati
Cosa tocchiamo, dove risiedono e quanto rimangono
Le regole cambiano da un settore all’altro. Queste sono quelle che si applicano nel commercio online.
Il catalogo non viene copiato da noi
I prodotti, i prezzi e lo stock restano da Lei. Ciò che passa attraverso la piattaforma è la risposta a una domanda, tenuta in memoria temporanea per dieci minuti. Da noi non esiste un database con il Suo catalogo che qualcuno possa esportare, perché non esiste alcun export da fare.
Dove risiedono le conversazioni
MySQL, sul server proprio in Microsoft Azure. Lo schema ha oltre 80 tabelle modellate in Prisma, con tabelle separate per i thread Meta, i thread Telegram, i thread della piattaforma di annunci, i commenti, le etichette, le note interne e il registro di audit. Il token del canale è conservato criptato con Fernet.
I dati dell’ordine entrano in campo libero
In una conversazione di negozio arrivano nome, telefono, indirizzo di consegna e, a volte, la taglia o il problema medico per cui il cliente acquista il prodotto. Tecnicamente non si può bloccare. Si può gestire: si stabilisce che cosa si conserva, per quanto tempo, chi ha accesso e che cosa il team è istruito a non chiedere sul canale. Il registro dei trattamenti dell’implementazione si scrive all’implementazione, non dopo.
Il widget nella pagina e l’elenco delle origini
Il widget ha un elenco di origini consentite per assistente, ma il comportamento predefinito va conosciuto: se l’elenco è vuoto, il controllo viene superato. È una scelta di compatibilità con le installazioni vecchie, scritta tale e quale nel codice. In pratica, la restrizione sul dominio del Suo negozio si configura esplicitamente a ogni implementazione — non viene fornita già pronta.
Termine di conservazione
Si stabilisce per implementazione e si scrive nella politica pubblicata da Lei. La regola che applichiamo da noi e che chiediamo anche nei progetti: se una modifica al codice cambia ciò che viene raccolto, a chi arriva o per quanto tempo viene conservato, la politica pubblicata si modifica nello stesso commit.
Un caso
Un catalogo di 154 prodotti, verificato da due direzioni
La situazione
Un distributore di Chișinău vendeva tramite un negozio WooCommerce e rispondeva alle domande sui prodotti sui canali di messaggistica. L’integrazione ovvia — un export dei prodotti inserito nella base di conoscenza dell’agente — avrebbe funzionato fino alla prima campagna di sconti.
Cosa abbiamo costruito
Abbiamo collegato il catalogo tramite l’interfaccia pubblica del negozio, che non richiede chiavi, e sopra di esso abbiamo inserito tre strumenti che l’agente chiama in conversazione: ricerca, corrispondenza e scheda prodotto. I risultati vengono normalizzati in una forma unica, letta allo stesso modo dal carosello nella messaggistica e dal widget nella pagina, così da non esistere due verità sullo stesso prezzo.
Cosa è emerso
La verifica può essere fatta dall’esterno, senza doverci credere sulla parola: il nostro endpoint di catalogo risponde 200 e riporta 154 risultati, mentre l’interfaccia pubblica del negozio, interrogata direttamente, restituisce l’intestazione `x-wp-total: 154`. Lo stesso numero, due fonti indipendenti, nello stesso giorno.
Cosa non dice il caso
Il numero è quello di quel giorno, 06.09.2026, e cambia quando il distributore aggiunge prodotti — questo è il punto. Non è una misurazione di performance e non dice nulla sulle vendite; dice soltanto che l’agente legge il catalogo reale.
Domande
Che cosa chiede chi lavora nell’e-commerce
Come faccio a sapere che non dice un prezzo vecchio?
Perché non ha da dove prenderlo. Il prezzo arriva dalla risposta del Suo negozio al momento della domanda, tenuto in memoria temporanea per al massimo dieci minuti. Da noi non esiste una copia del catalogo da cui possa leggere. La verifica può farla da solo: chiede all’agente un prodotto, cambia il prezzo nel negozio, attende dieci minuti e chiede di nuovo.
Che cosa risponde quando il prodotto è esaurito?
Dice ciò che dice il negozio. La disponibilità arriva dalla stessa risposta del prezzo. Ciò che non fa — ed è una decisione, non una svista — è inventare una data di riassortimento. Se vuole che l’agente proponga alternative quando un prodotto manca, questa è una regola che scriviamo esplicitamente nel suo ruolo e testiamo, non qualcosa che accade da sé.
Può concludere l’ordine?
Non dalla lettura del catalogo. L’API pubblica dello store è una gate di lettura; la scrittura di un ordine richiede un percorso autenticato verso il negozio, quindi un lavoro separato, con chiavi da amministrare. Quello che fa oggi: porta il cliente fino al prodotto giusto, al prezzo giusto, e gli dà il link oppure passa la conversazione a un umano.
Può scrivere per primo a un cliente che ha abbandonato il carrello?
Su WhatsApp, no, fuori dalla finestra di 24 ore. Meta respinge il testo libero con l’errore 131047, e i messaggi da template non esistono nel codice della piattaforma. Su Telegram e su Messenger, nei limiti delle regole di ciascun canale, esistono automazioni programmate che riprendono le conversazioni rimaste senza risposta, con contatori visibili di quante sono partite e quante sono state saltate.
Funziona con il carosello di prodotti su Instagram?
No. Meta non ha template generici su Instagram, quindi il carosello lì non esiste per nessuno. Su Messenger esiste, ma richiede tre condizioni simultanee; quando ne manca una, la risposta resta testo. Preferiamo dirlo ora, non alla terza settimana di implementazione.
Il mio negozio non è su WooCommerce. Cosa cambia?
Cambia la prima fase: invece di collegare l’indirizzo, verifichiamo quale interfaccia pubblica ha la tua piattaforma e se risponde abbastanza velocemente per una conversazione. Se non ne ha nessuna, oppure scriviamo un connettore autenticato — e allora discutiamo chi amministra la chiave — oppure diciamo che non si può fare onestamente un catalogo vivo e restiamo a una base di conoscenza aggiornata periodicamente, marcata come tale.
Il cliente invia la foto del prodotto che desidera. Cosa succede?
La fotografia viene marcata nella conversazione e resta lì per l’umano che prende in carico. Non si allega automaticamente a un ordine e non viene generato alcun documento da essa — non esiste codice per questo. Un agente che sostenesse di aver registrato l’ordine dalla foto mentirebbe, e questo si scopre alla consegna.
Cosa succede quando il cliente scrive quattro messaggi uno dopo l’altro?
Riceve una sola risposta, su tutto ciò che ha scritto. I messaggi si accumulano in un buffer di 15 secondi prima di essere inviati al modello. Separatamente, se la piattaforma Meta reinvia lo stesso messaggio — e lo fa — la deduplicazione sull’identificatore del messaggio, con 120 secondi di memoria, impedisce la seconda risposta.
Chi risponde quando l’agente non sa?
Una persona del vostro team, e il passaggio si vede nel sistema: il thread passa dallo stato `bot` a `human`, il registro di presa in carico annota chi e quando, e lo stato di rispetto del tempo di risposta mostra se il thread è rimasto in sospeso. Senza questo meccanismo, «passa a un operatore» è una promessa che nessuno può verificare mesi dopo.