События виджета
JavaScript API
После инициализации доступен глобальный объект smaiwer.
Методы
Открытие/закрытие
// Открыть виджет
smaiwer('open');
// Закрыть виджет
smaiwer('close');
// Переключить состояние
smaiwer('toggle');
Отправка сообщения
// Отправить сообщение от имени пользователя
smaiwer('sendMessage', 'Привет! Хочу узнать про доставку');
Установка данных пользователя
// Передать данные о пользователе
smaiwer('setUser', {
name: 'Иван Петров',
email: 'ivan@example.com',
phone: '+79991234567',
customData: {
userId: '12345',
plan: 'premium'
}
});
Скрытие/показ
// Скрыть виджет полностью
smaiwer('hide');
// Показать виджет
smaiwer('show');
// Скрыть только кнопку
smaiwer('hideButton');
// Показать кнопку
smaiwer('showButton');
Уничтожение
// Удалить виджет со страницы
smaiwer('destroy');
События (Callbacks)
Подписка на события
smaiwer('on', 'eventName', callback);
Доступные события
open
Виджет открыт.
smaiwer('on', 'open', () => {
console.log('Widget opened');
analytics.track('chat_opened');
});
close
Виджет закрыт.
smaiwer('on', 'close', () => {
console.log('Widget closed');
});
message:sent
Пользователь отправил сообщение.
smaiwer('on', 'message:sent', (data) => {
console.log('Message sent:', data.text);
});
message:received
Получено сообщение от оператора.
smaiwer('on', 'message:received', (data) => {
console.log('Message received:', data.text);
// Показать браузерное уведомление если виджет закрыт
if (!isWidgetOpen) {
showNotification('Новое сообщение', data.text);
}
});
lead:submitted
Форма сбора контактов заполнена.
smaiwer('on', 'lead:submitted', (data) => {
console.log('Lead data:', data);
// { name: 'Иван', email: 'ivan@example.com', phone: '+7...' }
// Отправить в CRM
sendToCRM(data);
});
ready
Виджет загружен и готов к работе.
smaiwer('on', 'ready', () => {
console.log('Widget is ready');
// Теперь можно вызывать методы
smaiwer('setUser', { name: currentUser.name });
});
Отписка от событий
const handler = (data) => console.log(data);
// Подписка
smaiwer('on', 'message:received', handler);
// Отписка
smaiwer('off', 'message:received', handler);
Примеры интеграции
Аналитика
smaiwer('on', 'open', () => {
gtag('event', 'chat_open', {
event_category: 'engagement'
});
});
smaiwer('on', 'message:sent', (data) => {
gtag('event', 'chat_message', {
event_category: 'engagement',
event_label: 'user_message'
});
});
smaiwer('on', 'lead:submitted', (data) => {
gtag('event', 'generate_lead', {
event_category: 'conversion',
value: 1
});
});
Интеграция с CRM
smaiwer('on', 'lead:submitted', async (data) => {
await fetch('/api/crm/leads', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
source: 'smaiwer_widget',
...data
})
});
});
Открытие по триггеру
// Открыть виджет через 30 секунд на странице
setTimeout(() => {
smaiwer('open');
}, 30000);
// Открыть при попытке уйти со страницы
document.addEventListener('mouseleave', (e) => {
if (e.clientY < 0) {
smaiwer('open');
}
}, { once: true });
// Открыть по клику на кнопку
document.getElementById('help-btn').addEventListener('click', () => {
smaiwer('open');
smaiwer('sendMessage', 'Нужна помощь с заказом');
});