API JavaScript
Metodi di window.BluBot per aprire, chiudere, inviare messaggi, identificare l utente e gestire il ciclo di vita del widget.
Dopo il caricamento dello script, BluBot espone l'oggetto globale window.BluBot.
Tutti i metodi sono sincroni salvo dove indicato e possono essere invocati
solo dopo l'evento blubot:ready.
Attendi la disponibilità
Invocare un metodo prima dell'inizializzazione genera l'errore
BluBot is not defined. Racchiudi le chiamate in un listener di
blubot:ready oppure usa l'operatore di accesso opzionale: window.BluBot?.open().
Verifica rapida dalla console del browser
window.BluBot.versionRestituisce la versione caricata, ad esempio 1.24.0.
Riepilogo dei metodi
| Metodo | Restituisce | Effetto |
|---|---|---|
init(config) | void | Inizializza il widget |
open() | void | Apre la finestra di chat |
close() | void | Chiude la finestra |
toggle() | void | Inverte lo stato di apertura |
sendMessage(text) | Promise | Invia un messaggio a nome dell'utente |
setUser(user) | void | Identifica l'utente corrente |
setLocale(locale) | void | Cambia la lingua dell'interfaccia |
reset() | void | Chiude la sessione e ne apre una nuova |
destroy() | void | Rimuove il widget dalla pagina |
isOpen() | boolean | Indica se la finestra è aperta |
on(event, handler) | void | Registra un ascoltatore |
off(event, handler) | void | Rimuove un ascoltatore |
init
Inizializza il widget con la configurazione fornita. Necessario solo se hai
disattivato l'inizializzazione automatica con data-auto-init="false".
BluBot.init(config: BluBotConfig): voidParametri
| Parametro | Tipo | Obblig. | Default | Descrizione |
|---|---|---|---|---|
config | object | Sì | — | Oggetto di configurazione. Il solo campo obbligatorio è projectKey. Riferimento completo nella pagina Configurazione. |
window.BluBot.init({
projectKey: 'bp_proj_7f3a9c21',
locale: 'it',
theme: 'auto',
position: 'bottom-right'
});Una seconda chiamata su un widget già inizializzato viene ignorata e produce un avviso in console.
open
Apre la finestra di chat. Se il widget è nascosto lo rende visibile.
BluBot.open(): void<button type="button" onclick="window.BluBot.open()">
Parla con noi
</button>document.querySelectorAll('[data-open-chat]').forEach((el) => {
el.addEventListener('click', (event) => {
event.preventDefault();
window.BluBot?.open();
});
});close
Chiude la finestra lasciando visibile il launcher. La sessione resta attiva e i messaggi ricevuti generano una notifica sul pulsante.
BluBot.close(): voidwindow.addEventListener('hashchange', () => {
if (!window.location.hash.startsWith('#assistenza')) {
window.BluBot?.close();
}
});toggle
Inverte lo stato della finestra. Utile per un launcher personalizzato.
BluBot.toggle(): voidconst launcher = document.getElementById('mio-launcher');
launcher.addEventListener('click', () => window.BluBot?.toggle());
window.BluBot?.on('open', () => launcher.setAttribute('aria-expanded', 'true'));
window.BluBot?.on('close', () => launcher.setAttribute('aria-expanded', 'false'));sendMessage
Invia un messaggio come se lo avesse scritto l'utente. Apre la finestra se chiusa. Restituisce una promessa che si risolve quando il messaggio è stato accettato dal server.
BluBot.sendMessage(text: string, options?: SendOptions): Promise<void>Parametri
| Parametro | Tipo | Obblig. | Default | Descrizione |
|---|---|---|---|---|
text | string | Sì | — | Testo del messaggio. Massimo 4000 caratteri. Le stringhe vuote vengono ignorate. |
options.hidden | boolean | No | — | Invia il messaggio senza mostrarlo nella trascrizione visibile. Utile per fornire contesto. |
options.metadata | object | No | — | Metadati allegati al messaggio, disponibili nei flussi e nei webhook. |
document.getElementById('chiedi-info').addEventListener('click', async () => {
await window.BluBot.sendMessage(
'Vorrei informazioni sulla visita cardiologica.',
{ metadata: { origine: 'scheda-prestazione', codice: 'VIS_CARD' } }
);
});window.BluBot.sendMessage(
'Contesto: l utente proviene dalla pagina prezzi, piano Business.',
{ hidden: true }
);Non usare i messaggi nascosti per i segreti
Il contenuto dei messaggi nascosti è generato nel browser e visibile nella scheda Rete. Non inserirvi token, prezzi riservati o dati personali non già noti all'utente.
setUser
Identifica l'utente corrente. Se la sessione è già avviata, i dati vengono associati retroattivamente.
BluBot.setUser(user: BluBotUser): voidParametri
| Parametro | Tipo | Obblig. | Default | Descrizione |
|---|---|---|---|---|
user.id | string | Sì | — | Identificativo stabile nel tuo sistema. Deve restare invariato tra le sessioni. |
user.name | string | No | — | Nome mostrato agli operatori nella Console. |
user.email | string | No | — | Email usata per la corrispondenza con l anagrafica cliente. |
user.phone | string | No | — | Telefono in formato internazionale. |
user.metadata | object | No | — | Massimo 20 chiavi con valori di massimo 256 caratteri. |
user.signature | string | No | — | Firma HMAC calcolata sul server. Obbligatoria con identificazione verificata attiva. |
window.BluBot.setUser({
id: 'usr_88213',
name: 'Marco Rossi',
email: 'marco.rossi@example.it',
metadata: { piano: 'premium', citta: 'Milano', cliente_dal: '2023-04-11' }
});Per disidentificare l'utente al logout usa reset().
setLocale
Cambia la lingua dell'interfaccia e delle risposte senza ricaricare la pagina.
BluBot.setLocale(locale: string): voidParametri
| Parametro | Tipo | Obblig. | Default | Descrizione |
|---|---|---|---|---|
locale | string | Sì | — | Codice della lingua: it, en, fr, de, es, ar, ro. Un codice non supportato viene ignorato con un avviso. |
document.getElementById('selettore-lingua').addEventListener('change', (event) => {
window.BluBot?.setLocale(event.target.value);
});Il cambio di lingua non interrompe la conversazione: i messaggi precedenti restano nella lingua originale.
reset
Chiude la sessione corrente, cancella lo stato locale e ne prepara una nuova.
BluBot.reset(): voiddocument.getElementById('logout').addEventListener('click', () => {
window.BluBot?.reset();
});Obbligatorio al logout
Su dispositivi condivisi, senza reset() l'utente successivo vede la
conversazione del precedente. Invocalo sempre nella procedura di disconnessione.
destroy
Rimuove il widget dal DOM, chiude la connessione WebSocket e libera gli ascoltatori.
Per riattivarlo serve una nuova chiamata a init.
BluBot.destroy(): voidwindow.addEventListener('consent:revoked', () => {
window.BluBot?.destroy();
});isOpen
Indica se la finestra è attualmente aperta.
BluBot.isOpen(): booleanif (!window.BluBot.isOpen()) {
window.BluBot.open();
}on e off
Registrano e rimuovono gli ascoltatori degli eventi. L'elenco completo è in Eventi.
BluBot.on(event: string, handler: (payload: unknown) => void): void
BluBot.off(event: string, handler: (payload: unknown) => void): voidParametri
| Parametro | Tipo | Obblig. | Default | Descrizione |
|---|---|---|---|---|
event | string | Sì | — | Nome dell evento, ad esempio message:sent oppure booking:completed. |
handler | function | Sì | — | Funzione richiamata con il payload dell evento. Per rimuoverla con off deve essere lo stesso riferimento passato a on. |
function onBooking(payload) {
console.log('Prenotazione completata', payload.bookingId);
}
window.BluBot.on('booking:completed', onBooking);
window.BluBot.off('booking:completed', onBooking);Esempio completo di integrazione
Integrazione tipica su un sito con area riservata: identificazione verificata dell'utente, apertura da un pulsante personalizzato, tracciamento e pulizia al logout.
<script
src="https://static.blupantheon.com/blubot/v1/bpblubot.umd.js"
data-project-key="bp_proj_7f3a9c21"
data-auto-init="false"
defer
></script>
<script>
(function () {
var CONFIG = {
projectKey: 'bp_proj_7f3a9c21',
locale: document.documentElement.lang || 'it',
theme: 'auto',
position: 'bottom-right',
offsetY: 88,
title: 'Assistenza Acme',
subtitle: 'Rispondiamo in pochi secondi'
};
window.addEventListener('blubot:loaded', function () {
window.BluBot.init(CONFIG);
});
window.addEventListener('blubot:ready', function () {
identificaUtente();
collegaLauncher();
collegaTracciamento();
});
function identificaUtente() {
fetch('/api/blubot/identity', { credentials: 'include' })
.then(function (res) {
if (!res.ok) return null;
return res.json();
})
.then(function (identity) {
if (!identity) return;
window.BluBot.setUser({
id: identity.id,
name: identity.name,
email: identity.email,
signature: identity.signature,
metadata: { piano: identity.plan, cliente_dal: identity.since }
});
})
.catch(function () {
// utente anonimo: nessuna identificazione
});
}
function collegaLauncher() {
var button = document.getElementById('apri-assistenza');
if (!button) return;
button.addEventListener('click', function () {
window.BluBot.open();
window.BluBot.sendMessage('Ho bisogno di assistenza sul mio ordine.', {
metadata: { origine: 'area-riservata' }
});
});
}
function collegaTracciamento() {
window.BluBot.on('message:sent', function () {
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({ event: 'blubot_message_sent' });
});
window.BluBot.on('handover:requested', function (payload) {
window.dataLayer.push({ event: 'blubot_handover', motivo: payload.reason });
});
}
document.addEventListener('acme:logout', function () {
window.BluBot.reset();
});
})();
</script>L'endpoint /api/blubot/identity deve essere implementato sul tuo server:
verifica la sessione, calcola la firma HMAC dell'identificativo con il segreto
e restituisce il risultato. Non generare mai la firma nel browser.
import { createHmac } from 'node:crypto';
export function signUserId(userId) {
return createHmac('sha256', process.env.BLUBOT_USER_SIGNING_SECRET)
.update(userId)
.digest('hex');
}Definizioni TypeScript
export interface BluBotUser {
id: string;
name?: string;
email?: string;
phone?: string;
metadata?: Record<string, string | number | boolean>;
signature?: string;
}
export interface BluBotApi {
version: string;
init(config: Record<string, unknown>): void;
open(): void;
close(): void;
toggle(): void;
sendMessage(text: string, options?: { hidden?: boolean; metadata?: Record<string, unknown> }): Promise<void>;
setUser(user: BluBotUser): void;
setLocale(locale: string): void;
reset(): void;
destroy(): void;
isOpen(): boolean;
on(event: string, handler: (payload: never) => void): void;
off(event: string, handler: (payload: never) => void): void;
}
declare global {
interface Window {
BluBot?: BluBotApi;
}
}Passi successivi
- Eventi — payload di ogni evento e inoltro ad Analytics.
- Configurazione — tutte le opzioni disponibili.
- Riferimento API — usa la piattaforma dal tuo backend.