Обзор Chat API
Эта функция доступна только в некоторых тарифных планах. Она позволяет программно управлять виджетом чата и регистрировать колбэки для событий чата.
Ищете REST API? В этой статье рассматривается браузерный JavaScript API виджета (window.aichatbotApi) для страниц со встроенным виджетом ChatLab. Информацию о REST API для взаимодействия типа сервер-сервер, используемом для общения с ботами из вашего бэкенда или программного управления ими, можно найти в статьях Bot Talk API и Management API.
Начало работы
Chatbot API становится доступным не сразу при загрузке страницы - сначала скрипт должен загрузиться и инициализироваться. Для безопасного доступа к API необходимо использовать window.aichatbotCallback.onSessionActivated в качестве механизма начальной загрузки (bootstrap).
Разместите следующий код перед тегом скрипта ChatLab:
<script>
window.aichatbotCallback = {
onSessionActivated() {
var chatbot = window.aichatbotApi.getChatbotApi('YOUR_API_KEY');
chatbot.addCallback('onUserMessage', function(message) {
console.log('User said:', message);
});
chatbot.addCallback('onChatbotMessage', function(message) {
console.log('Bot replied:', message);
});
chatbot.sendMessage('Hello from the API!');
}
};
</script>
<script>window.aichatbotApiKey="YOUR_API_KEY";</script>
<script src="https://script.chatlab.com/aichatbot.js" defer></script>
Событие onSessionActivated срабатывает при создании сессии чата (то есть когда пользователь открывает виджет). Внутри этой функции гарантированно существует объект API и сессия активна, поэтому вы можете безопасно вызывать sendMessage(), updateClientContext() и регистрировать колбэки событий.
Важно: не вызывайте window.aichatbotApi.getChatbotApi() напрямую в скрипте страницы без ожидания - объект API не существует до тех пор, пока скрипт ChatLab не загрузится и не инициализируется.
Совет: если вам требуется только управлять виджетом (показывать/скрывать/переключать) и активная сессия не нужна, слушайте DOM-событие aichatbotReady:
window.addEventListener('aichatbotReady', function(e) {
var chatbot = window.aichatbotApi.getChatbotApi(e.detail.apiKey);
chatbot.showChat();
});
Методы
| Метод | Описание |
|---|---|
showChat() |
Открыть виджет чата |
hideChat() |
Закрыть виджет чата |
toggleChat() |
Переключить видимость виджета |
sendMessage(text) |
Отправить сообщение программно |
updateClientContext(data) |
Обновить контекст пользователя (см. ниже) |
setLanguage(code) |
Переключить виджет на определенный язык (только для мультиязычных ботов, см. ниже) |
getLanguage() |
Вернуть язык, используемый виджетом в данный момент |
getAvailableLanguages() |
Вернуть список поддерживаемых ботом языков |
addCallback(name, fn) |
Зарегистрировать колбэк события |
Примечание: методы sendMessage и updateClientContext требуют активной сессии. Используйте шаблон инициализации onSessionActivated, описанный в разделе "Начало работы".
Колбэки
Регистрируйте колбэки событий внутри обработчика onSessionActivated (см. раздел "Начало работы"):
chatbot.addCallback('onUserMessage', function(message) {
console.log('User said:', message);
});
chatbot.addCallback('onChatbotMessage', function(message) {
console.log('Bot replied:', message);
});
chatbot.addCallback('onProductClick', function(productIdOrLink) {
console.log('Product clicked:', productIdOrLink);
});
chatbot.addCallback('onLeadCollectionFormSubmit', function(data) {
console.log('Lead captured:', data.email);
});
chatbot.addCallback('onContactFormSubmit', function(data) {
console.log('Support request from:', data.email);
});
chatbot.addCallback('onLiveChatFormSubmit', function(data) {
console.log('Live chat started:', data.name);
});
Доступные колбэки
| Колбэк | Данные | Описание |
|---|---|---|
onSessionActivated |
- | Сессия чата готова |
onUserMessage |
string |
Пользователь отправил сообщение |
onChatbotMessage |
string |
Бот ответил сообщением |
onProductClick |
string (ID товара или ссылка) |
Пользователь нажал на товар (требуется включенная функция Offer Cards) |
onLeadCollectionFormSubmit |
{email, phone, name} |
Форма сбора лидов отправлена |
onContactFormSubmit |
{email, message} |
Контактная форма/форма поддержки отправлена |
onLiveChatFormSubmit |
{name, email} |
Форма Live Chat отправлена |
Устаревшие колбэки событий (Deprecated)
Объект window.aichatbotCallback также поддерживает onUserMessage и onChatbotMessage в качестве прямых свойств. Этот формат устарел - используйте addCallback() для доступа ко всем типам колбэков:
window.aichatbotCallback = {
onUserMessage(message) { ... },
onChatbotMessage(message) { ... }
};
Примечание: метод window.aichatbotCallback.onSessionActivated не является устаревшим - это рекомендуемый механизм начальной загрузки для инициализации Chat API (см. раздел "Начало работы").
Развертывание через iframe
При использовании развертывания через iframe применяйте postMessage для взаимодействия с чатботом:
Отправка команд
const chatbotIframe = document.querySelector('iframe');
// Показать чат
chatbotIframe.contentWindow.postMessage({
type: 'aichatbot',
action: 'showChat'
}, '*');
// Скрыть чат
chatbotIframe.contentWindow.postMessage({
type: 'aichatbot',
action: 'hideChat'
}, '*');
// Отправить сообщение
chatbotIframe.contentWindow.postMessage({
type: 'aichatbot',
action: 'sendMessage',
payload: 'Hello!'
}, '*');
// Обновить контекст клиента
chatbotIframe.contentWindow.postMessage({
type: 'aichatbot',
action: 'updateClientContext',
payload: { clientId: 'user123', clientName: 'John' }
}, '*');
// Переключить язык (только для мультиязычных ботов)
chatbotIframe.contentWindow.postMessage({
type: 'aichatbot',
action: 'setLanguage',
payload: 'de'
}, '*');
Получение колбэков
window.addEventListener('message', (event) => {
if (event.data?.type !== 'aichatbot-callback') return;
const { apiKey, callback, data } = event.data;
switch (callback) {
case 'onSessionActivated':
console.log('Session ready');
break;
case 'onUserMessage':
console.log('User said:', data);
break;
case 'onChatbotMessage':
console.log('Bot replied:', data);
break;
case 'onProductClick':
console.log('Product clicked:', data);
break;
case 'onLeadCollectionFormSubmit':
console.log('Lead captured:', data);
break;
case 'onContactFormSubmit':
console.log('Contact form:', data);
break;
case 'onLiveChatFormSubmit':
console.log('Live chat started:', data);
break;
}
});
Обновление контекста клиента
Функция updateClientContext позволяет обновлять контекст клиента во время активной сессии:
chatbot.updateClientContext({
clientId: "unique-client-identifier", // Обязательно
clientName: "John", // Необязательно
clientEmail: "john@doe.com", // Необязательно
clientPhone: "555-444-333", // Необязательно
clientSecurityToken: "your-token", // Необязательно
clientHostContext: { // Необязательно
param1: "value1",
param2: "value2"
}
});
Параметры:
- clientId (обязательно): уникальный идентификатор клиента
- clientName, clientEmail, clientPhone (необязательно): данные клиента, отображаемые в диалогах
- clientSecurityToken (необязательно): токен безопасности для авторизации API
- clientHostContext (необязательно): дополнительные параметры контекста, доступные в пользовательских действиях API
Использование в вызовах API:
Атрибуты контекста можно использовать в вызовах функций API, настроив параметр API с типом "Context":
clientName,clientEmail,clientPhone,clientSecurityToken- Пользовательские параметры контекста хоста с префиксом
client, напримерclientparam1,clientparam2
Язык
Эти методы работают только с мультиязычными чатботами. У бота с одним языком нет языкового слоя для переключения в виджете, поэтому setLanguage() ничего не делает, а getAvailableLanguages() возвращает только собственный язык бота. Сначала включите поддержку нескольких языков в Settings > Languages (Настройки > Языки) - см. Мультиязычные чатботы.
Используйте setLanguage(), если ваш сайт доступен на нескольких языках и вы хотите, чтобы чат открывался на том языке, который просматривает посетитель, а не на том, который установлен в его браузере:
window.addEventListener('aichatbotReady', function(e) {
var chatbot = window.aichatbotApi.getChatbotApi(e.detail.apiKey);
chatbot.setLanguage(document.documentElement.lang); // например, "de"
console.log(chatbot.getLanguage()); // "de"
console.log(chatbot.getAvailableLanguages()); // ["en", "de", "fr", ...]
});
Вы также можете объявить язык страницы до загрузки скрипта, что предотвратит кратковременное отображение неверного языка:
<script>window.aichatbotLanguage = "de";</script>
Приоритет выбора языка. Виджет определяет язык в следующем порядке:
- Язык, который посетитель выбрал самостоятельно в языковом меню самого виджета.
- Язык страницы, переданный через
setLanguage()илиwindow.aichatbotLanguage. - Язык браузера посетителя.
- Базовый язык чатбота.
Собственный выбор посетителя сохраняется для последующих визитов, но перестает применяться при изменении языка страницы - таким образом, ваш переключатель языков всегда имеет приоритет перед устаревшим выбором. Коды указываются в формате ISO 639-1 (en, de, pl); для региональных кодов вроде de-AT выполняется откат к базовому коду de. Язык, не поддерживаемый ботом, игнорируется.
Переключение языка не завершает диалог и не очищает историю сообщений.