Assistenti che rispondono sui canali su cui scrivono i vostri clienti, con le vostre informazioni, e che passano la conversazione a una persona quando superano il ruolo.
Implementiamo assistenti testuali sulla nostra piattaforma, aichat.md, che è in produzione. Il lavoro significa canali collegati con codice proprietario, una base di conoscenze indicizzata, strumenti che eseguono nei vostri sistemi e un percorso di passaggio all’umano registrato nel database.
Già costruitoIl servizio si appoggia a una piattaforma propria in produzione, non a una promessa. `https://aichat.md` risponde pubblicamente (307 verso `/ro`, verificato il 06.09.2026), e i comportamenti descritti qui sotto sono letti dallo schema del database e dalle rotte della piattaforma, con file e riga: le soglie della ricerca, i tipi di strumenti e il loro tempo massimo, gli stati del thread di conversazione, il registro di presa in carico. La seconda implementazione propria citata è la funzione di catalogo del negozio (`storeCatalog.service.js` più tre strumenti incorporati), scritta come funzione di piattaforma al posto degli strumenti per cliente. Ciò che la prova non sostiene lo diciamo con la stessa chiarezza: i messaggi del modello WhatsApp non esistono nel codice, quindi non promettiamo messaggi proattivi al di fuori della finestra di 24 ore.
Un assistente utile non è uno che scrive bene, ma uno che è connesso alle informazioni reali dell’azienda e che sa dove fermarsi. Il nostro lavoro parte dal canale su cui scrivono i vostri clienti e finisce alla persona che prende in carico la conversazione quando l’assistente non ha più nulla da dire. In mezzo mettiamo conoscenze, strumenti e limiti.
La piattaforma su cui costruiamo è aichat.md, fatta da noi e in produzione. Questo cambia la natura del servizio: non integriamo una scatola nera altrui, ma configuriamo un sistema in cui possiamo leggere qualsiasi soglia e possiamo cambiare qualsiasi comportamento. Quando diciamo che la risposta usa in modo predefinito cinque frammenti dai vostri documenti, con soglia di similarità 0,70 e 30% di peso sulla corrispondenza delle parole, sono valori nello schema del database, non una descrizione da brochure.
I canali con codice proprio, verificati il 06.09.2026, sono sei: Facebook Messenger, Instagram Direct, Telegram, 999.md, il widget del sito e WhatsApp Business tramite Cloud API su Graph v22.0. Ognuno ha il proprio modulo, non una casella spuntata — e le differenze tra loro contano nella pratica: Messenger può mostrare un carosello di prodotti, Instagram no, perché Meta non offre template generici su Instagram.
La parte che i clienti sottovalutano è la presa in carico da parte dell’uomo. In aichat non è una promessa, ma uno stato nel database: il thread è `bot` o `human`, il registro di presa in carico distingue la presa in carico da parte di un umano, il ritorno al bot e la riattivazione automatica, e il thread ha separatamente uno stato di rispetto del tempo di risposta — `ok`, `warning`, `breached`. Si può mostrare, a fine mese, quante conversazioni sono state prese in carico e in quanto tempo.
Cosa comprende
Il lavoro, per componenti
Connettiamo il canale e verifichiamo cosa succede quando tace
Sei canali hanno codice proprio nella piattaforma: Messenger, Instagram Direct, Telegram, 999.md, widget web e WhatsApp Business Cloud API su Graph v22.0. La connessione Meta avviene tramite Embedded Signup. Per ogni canale verifichiamo anche il caso brutto, non solo il primo messaggio riuscito: un token di pagina scaduto blocca il canale in silenzio, non con un errore visibile, perciò la piattaforma ha monitoraggio dei token e notifica alla scadenza.
Indicizziamo le conoscenze e fissiamo le soglie con cui cerca
I documenti e le pagine vengono spezzati in frammenti con hash di contenuto ed embedding `text-embedding-3-small`. I valori predefiniti con cui partiamo e poi regoliamo: cinque frammenti per domanda, soglia di similarità 0,70, ricerca ibrida, peso 0,30 sulla corrispondenza delle parole, attribuzione della fonte attiva. Ogni interrogazione può essere registrata con i frammenti restituiti, i punteggi e i tempi — quindi il «perché ha risposto così» ha una risposta con i dati, non con supposizioni.
Colleghiamo gli strumenti ai sistemi che eseguono
Uno strumento può essere un webhook verso il vostro sistema, con metodo e intestazioni a scelta, un pezzo di codice JavaScript eseguito dalla piattaforma, oppure uno strumento incorporato nella piattaforma. Ognuno ha un tempo massimo di esecuzione, predefinito 15 secondi. La conseguenza pratica, detta prima del contratto, non dopo: un’integrazione che risponde in 40 secondi va fatta in asincrono, non forzata in conversazione.
Catalogo vivo, connesso all’indirizzo del negozio
Per i negozi esistono tre strumenti incorporati — `store_catalog_search`, `store_catalog_match`, `store_catalog_product` — sopra un servizio comune di catalogo. Per WooCommerce, Store API è pubblica, quindi il negozio si connette con l’indirizzo del sito, senza chiavi di accesso. Prima, il catalogo veniva scritto come strumento separato per ogni cliente; è diventato funzione di piattaforma proprio perché la variante con strumenti scritti a nome del cliente non si poteva mantenere.
Passaggio a un umano, con evidenza
Il thread ha stato esplicito `bot` o `human`. Il registro di presa in carico conosce tre azioni: presa in carico da parte di un umano, ritorno al bot e riattivazione automatica. Separatamente, il thread ha stato di rispetto del tempo di risposta: `ok`, `warning`, `breached`. Il modulo di presa in carico della piattaforma ha coda e ruoli. Stabiliamo fin dalla prima discussione chi prende in carico e in quanto tempo, perché questo stato si misura dal primo thread, non si aggiunge più tardi.
Voce nella conversazione scritta
La nota vocale ricevuta su WhatsApp o Telegram viene trascritta con `whisper-1` ed entra nella conversazione come testo. La risposta può tornare come voce, tramite `tts-1` o tramite ElevenLabs, con impostazioni di stabilità e somiglianza per voce. Per chi detta invece di scrivere — un artigiano sul campo, un autista — questa è la differenza tra un canale utilizzabile e un canale decorativo.
Traduzione in conversazione, in un solo senso oggi
La risposta dell’operatore può essere riscritta nella lingua del cliente, con il tono dell’agente e senza aggiungere fatti. Il senso inverso — il messaggio del cliente tradotto per l’operatore — non esiste nel codice alla data della verifica, quindi l’operatore legge l’originale. Lo diciamo perché è la differenza tra un team che può servire un cliente russo o inglese e uno che crede di poterlo fare.
Il comportamento con messaggi doppi e raffiche
Il webhook Meta ritrasmette davvero lo stesso messaggio: la deduplicazione avviene sull’identificatore del messaggio, con 120 secondi di memoria. E quando qualcuno scrive tre righe una dopo l’altra, esse si accumulano in un buffer di 15 secondi e ricevono una sola risposta, a tutto ciò che ha scritto l’umano, non tre risposte parziali.
Il modello non è legato a un fornitore
Le chiamate passano attraverso un gateway proprio su `api.megapromoting.com/v1`, che parla il formato OpenAI per tutti i fornitori sullo sfondo. Il modello si sceglie per assistente e si può cambiare senza riscrivere l’integrazione. Per gli embedding usiamo `text-embedding-3-small`.
Come si presenta
Il percorso, passo dopo passo.
01
Scegliamo il canale e la persona che prende in carico
Un canale, un pubblico, un risultato monitorato. Nella stessa conversazione si stabilisce chi prende in carico i thread marcati `human` e in quanto tempo. Forniamo: l’elenco degli scenari che l’assistente copre e l’elenco esplicito di quelli che non copre.
02
Colleghiamo le fonti e verifichiamo cosa ne esce
I documenti e le pagine entrano come fonti di conoscenza. Nei cataloghi verifichiamo i prodotti estratti uno per uno dove il prezzo conta. Forniamo: le fonti indicizzate, le soglie di ricerca impostate per il vostro caso e un set di domande di controllo con le risposte ottenute.
03
Colleghiamo gli strumenti e testiamo il caso lento
Webhook verso CRM o ERP, codice per trasformazioni proprie, strumento incorporato per ciò che esiste già. Testiamo il caso lento e il caso di errore, non solo quello felice, perché il limite di 15 secondi è quello che decide. Forniamo: gli strumenti configurati e il comportamento documentato al superamento del limite.
04
Apriamo il canale con il monitoraggio attivo
Il canale entra in funzione con il monitoraggio del token attivo e con la presa in carico umana esercitata almeno una volta su un caso reale. Forniamo: accesso al pannello, la procedura di presa in carico e i punti in cui il sistema si ferma da solo.
05
Leggiamo i log e regoliamo
Dopo le prime conversazioni reali si guarda il registro delle interrogazioni: cosa ha trovato, con quale punteggio, in quanto tempo. Da lì si regola la soglia, il numero di frammenti o il testo della fonte. Consegnamo: l’elenco delle modifiche apportate e il motivo di ciascuna.
Il cammino di un messaggio
I dati
Cosa tocchiamo, dove risiedono e quanto rimangono
Le domande che pone chiunque abbia un responsabile della protezione dei dati — poste qui prima che le ponga lui.
Dove risiedono le conversazioni
MySQL, sul proprio server in Microsoft Azure. Lo schema ha oltre 80 tabelle modellate in Prisma, con tabelle separate per i thread Meta, i thread Telegram, i thread 999.md, i commenti, le etichette, le note interne e il registro di audit.
I token dei canali sono conservati crittografati
Il token WhatsApp è memorizzato criptato con Fernet, con ritorno al testo semplice solo per le registrazioni vecchie. I messaggi hanno il proprio modulo di crittografia nel servizio dei canali. Esiste il monitoraggio dei token e la notifica alla scadenza.
Cosa vede il widget e da dove
Il widget ha un elenco di origini consentite per assistente. Il comportamento predefinito deve essere noto: se l’elenco è vuoto, il controllo passa — è una scelta di compatibilità con le installazioni vecchie, scritta così com’è nel codice. Ciò significa che la restrizione per dominio si configura esplicitamente in ogni implementazione che la richiede; noi la configuriamo, non la presumiamo.
Quali dati personali entrano senza che li chieda
Il campo libero di una conversazione può contenere qualsiasi cosa — un numero di telefono, un indirizzo, un problema medico. Non si può bloccare tecnicamente, ma si può trattare: si stabilisce cosa si conserva, per quanto tempo, chi vi ha accesso e cosa si istruisce il team a non chiedere sul canale. Il registro dei trattamenti dell’implementazione si scrive nello stesso tempo dell’implementazione, non dopo.
Termine di conservazione
Si stabilisce per ogni implementazione e si scrive nella politica pubblicata del cliente. La regola che applichiamo da noi e che richiediamo anche nei progetti: se una modifica di codice cambia ciò che viene raccolto, a chi arriva o per quanto viene conservato, la politica pubblicata si modifica nello stesso commit.
Un caso
Una domanda di prezzo che parte da Instagram e finisce a un operatore
La situazione
Un negozio con catalogo online riceveva domande sui prezzi nei DM di Instagram e su Messenger. Le stesse cinque domande, tutto il giorno, mentre la risposta corretta esisteva già sul sito.
Cosa abbiamo costruito
Abbiamo collegato i due canali, indicizzato le fonti e collegato il catalogo tramite gli strumenti integrati del negozio, che per WooCommerce leggono la Store API pubblica — quindi senza chiavi di accesso nella piattaforma. Abbiamo impostato il buffer di concatenazione, affinché tre messaggi scritti di seguito diventino un’unica domanda, e abbiamo scritto esplicitamente ciò che l’assistente non ha il diritto di fare. Su Messenger abbiamo avviato il carosello di prodotti, con le tre condizioni da cui dipende; su Instagram siamo rimasti al testo più immagine, perché Meta lì non offre modelli generici.
Cosa è emerso
Le domande di prezzo e disponibilità ricevono una risposta con il prodotto visualizzato e il link. Ciò che esce dal catalogo passa allo stato `human` e arriva alla persona designata, con tutto il contesto della conversazione. Il registro delle interrogazioni mostra cosa ha trovato l’assistente, con quale punteggio e in quanto tempo, quindi la regolazione si fa sui dati.
Cosa non dice il caso
Il risultato dipende dalla qualità del catalogo. Un prezzo errato sul sito diventa un prezzo errato nella conversazione — l’assistente legge la fonte, non la corregge. E non abbiamo misurato la riduzione del volume di lavoro del team, quindi non la affermiamo come risultato.
Domande
Cosa ci chiedono le persone prima di chiamare
Può scrivere lui per primo su WhatsApp a un cliente che non scrive più da una settimana?
No. E il motivo è sia Meta sia una reale mancanza da parte nostra, entrambe dette chiaramente. Fuori dalla finestra di 24 ore dall’ultimo messaggio del cliente, Meta respinge il testo libero con l’errore 131047, e la piattaforma marca il messaggio come fallito e mostra l’errore invece di fingere che sia partito. L’invio fuori dalla finestra richiede messaggi di modello approvati da Meta, e quelli non esistono nel nostro codice — una ricerca per tipo `template` su tutto il codice restituisce zero risultati. Quindi: risposta nella finestra di 24 ore, sì; campagna proattiva su WhatsApp, no, finché non vengono implementati i modelli.
Su quali canali funziona effettivamente, oggi?
Sei, con codice proprio verificato al 06.09.2026: Facebook Messenger, Instagram Direct, Telegram, 999.md, widget web e WhatsApp Business Cloud API. Un audit interno più vecchio ha trovato codice anche per SMS ed e-mail; non li abbiamo riverificati a questa data, quindi non li indichiamo come disponibili senza una verifica sull’implementazione concreta. Un canale apparso nel frattempo non si presume collegato.
L’integrazione con 999.md è ufficiale?
Non è un’integrazione di partner con API pubblica. Funziona con la sessione del tuo account: la piattaforma ti chiede il valore del cookie di sessione dal tuo browser e lo usa per leggere e rispondere ai messaggi. La conseguenza pratica, detta in anticipo: se 999.md cambia il meccanismo di sessione, l’integrazione si interrompe e deve essere ricollegata. Chi non accetta questo rischio non dovrebbe partire su questo canale.
Da dove sa la risposta e cosa fa quando non la sa?
Cercate nelle vostre fonti con una ricerca ibrida — di default cinque frammenti, soglia 0,70, 30% ponderazione sulle parole, il resto semantico — e può allegare la fonte alla risposta. Quando non trova, il percorso progettato è il passaggio all’operatore: il thread passa allo stato `human`, e il registro annota chi ha preso in carico e quando. Esiste anche il ritorno automatico al bot, sempre come azione registrata.
Può mostrare prodotti con foto e prezzo?
Su Messenger, sì — carosello di card. Su Instagram, no: Meta non offre modelli generici su Instagram, quindi lì resta testo più foto. Il carosello richiede tre cose simultaneamente: essere attivato nella configurazione dell’assistente, che lo strumento restituisca almeno due prodotti, e che l’istruzione dell’assistente richieda un elenco con prezzo e link — perché il detector guarda il testo dell’agente, non solo i dati. Se manca uno qualsiasi dei tre, il carosello non si costruisce. Le configuriamo tutte e tre, ma è utile sapere perché.
Chi risponde al cliente che scrive in russo al team che parla rumeno?
La risposta dell’operatore può essere riscritta automaticamente nella lingua del cliente, mantenendo il tono dell’agente e senza aggiungere fatti — questo funziona. Il senso inverso, il messaggio del cliente tradotto per l’operatore, non esiste nel codice alla data della verifica. In pratica: il cliente riceve una risposta nella sua lingua, ma l’operatore legge il messaggio originale. Se vi serve anche l’altro senso, è un lavoro da fare, non un’impostazione da spuntare.
Cosa succede se un cliente invia lo stesso messaggio due volte?
Non riceve due risposte. I duplicati vengono filtrati in base all’identificatore del messaggio, con 120 secondi di memoria — il webhook di Meta infatti reinvia. E i messaggi scritti uno dopo l’altro si aggregano in un buffer di 15 secondi e ricevono un’unica risposta, per tutti.
Con quale modello AI risponde e cosa succede se ne voglio un altro?
Le chiamate passano attraverso un gateway proprietario su `api.megapromoting.com/v1`, che parla il formato OpenAI per tutti i fornitori a monte; il modello si sceglie per assistente. Il cambio del modello non richiede la riscrittura dell’integrazione. Per gli embedding usiamo `text-embedding-3-small`; il cambio del modello di embedding, invece, richiede la reindicizzazione delle fonti — non è la stessa cosa.
Cosa non fa questo servizio?
Non fa voce al telefono — quello è un’altra nostra piattaforma, Kallina, ed è un altro lavoro. Non invia messaggi proattivi su WhatsApp, per il motivo di cui sopra. Non genera PDF e non allega le fotografie ricevute a un ordine — alla data della verifica, la fotografia ricevuta viene solo marcata. E non garantiamo percentuali di riduzione del carico di lavoro: non abbiamo la misurazione, quindi non la affermiamo.
Su cosa si basano le affermazioni sopra (21 fonti)
20 di esse sono codice e file dei nostri repository. Non ne pubblichiamo il nome né la riga: insieme, in un'unica pagina, descriverebbero con troppa precisione come sono costruiti sistemi che non sono solo nostri. Le esaminiamo con te, nel repository, su richiesta — la verifica resta possibile, solo che avviene in una discussione.