Помощен център
Chat API

Chat API

Последна актуализация:

Общ преглед на Chat API

API на уиджета Ви позволява да управлявате чат уиджета програмно и да регистрирате функции за обратно извикване (callbacks) за събития в чата.

Търсите REST API? Тази статия разглежда JavaScript API на уиджета в браузъра (window.aichatbotApi) за страници, в които е вграден уиджетът на ChatLab. За REST API от тип сървър-към-сървър, използвано за разговори с ботове от Вашия бекенд или за програмно управление на ботове, вижте статиите за Bot Talk API и Management API.

Първи стъпки

API на чатбота не е налично веднага при зареждане на страницата Ви - скриптът трябва първо да се зареди и инициализира. Трябва да използвате window.aichatbotCallback.onSessionActivated като механизъм за първоначално зареждане (bootstrap), за да получите безопасен достъп до API.

Използвайте публичния ключ на уиджета от Deploy (Внедряване) като YOUR_API_KEY, никога таен ключ ck_ или mk_. Запазете идентификатора на доставчика и хоста на скрипта от Вашия собствен код за внедряване (Deploy snippet). Поставете настройката на callback функцията преди този таг за скрипт:

<script>
let registeredChatbot;
window.aichatbotCallback = {
    onSessionActivated() {
        var chatbot = window.aichatbotApi.getChatbotApi('YOUR_API_KEY');

        if (registeredChatbot === chatbot) return;
        registeredChatbot = chatbot;

        chatbot.addCallback('onUserMessage', function(message) {
            console.log('User said:', message);
        });

        chatbot.addCallback('onChatbotMessage', function(message) {
            console.log('Bot replied:', message);
        });

        // Send only when your application intends to start a real chat:
        // 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 се задейства, когато дадена сесия стане налична, включително при възстановени сесии. В зависимост от настройките за внедряване и началния екран (welcome-screen), това не е непременно първото кликване за отваряне на уиджета. Може да се задейства повторно; регистрирайте callback функциите еднократно за всеки API обект, за да избегнете дублиращи се обработчици (handlers). В рамките на тази функция е гарантирано, че API обектът съществува и сесията е активна, така че можете безопасно да извиквате sendMessage(), updateClientContext() и да регистрирате callback функции за събития.

Важно: Не извиквайте 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) Регистриране на callback за събитие

Забележка: sendMessage и updateClientContext изискват активна сесия. Използвайте модела за инициализация с onSessionActivated, показан в раздела „Първи стъпки“.

Callbacks

Регистрирайте callbacks за събития вътре във Вашия 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);
});

Налични Callbacks

Callback Данни Описание
onSessionActivated - Чат сесията е готова
onUserMessage string Потребителят изпрати съобщение
onChatbotMessage string Ботът отговори със съобщение
onProductClick Payload за продукт/връзка от рендерираната карта Потребителят кликна върху продуктова връзка; проверете payload за Вашия тип карта
onLeadCollectionFormSubmit {email, phone, name} Формулярът за събиране на лийдове беше изпратен
onContactFormSubmit {email, message} Формулярът за контакт/поддръжка беше изпратен
onLiveChatFormSubmit {name, email} Формулярът за чат на живо беше изпратен; не е доказателство, че оператор се е присъединил
onCustomFormSubmit {formId, values} Персонализираният формуляр беше изпратен; данните за качените файлове не са включени в този callback

Callbacks за формуляри отчитат изпращане от страна на браузъра, а не потвърдено записване или успешна доставка. За потвърдена от бекенда обработка използвайте Webhooks. Данните (payloads) в callbacks могат да съдържат лични данни; не ги препращайте изцяло към аналитични инструменти или публични логове.

Остарели callbacks за събития

Обектът window.aichatbotCallback поддържа също onUserMessage и onChatbotMessage като директни свойства. Използвайте addCallback() за модулни listeners, без да заменяте глобалния обект:

window.aichatbotCallback = {
    onUserMessage(message) { ... },
    onChatbotMessage(message) { ... }
};

Забележка: window.aichatbotCallback.onSessionActivated не е остарял - това е препоръчителният bootstrap механизъм за инициализиране на Chat API (вижте Първи стъпки).

Внедряване чрез iframe

Когато използвате внедряване чрез iframe, използвайте postMessage за комуникация с чатбота:

Изпращане на команди

// Give the ChatLab iframe from Deploy this unique id.
const chatbotIframe = document.getElementById('chatlab-frame');
const chatbotOrigin = new URL(chatbotIframe.src, window.location.href).origin;
// Run show/hide/language commands after the iframe loads.
// Wait for onSessionActivated before sendMessage or updateClientContext.

// Show chat
chatbotIframe.contentWindow.postMessage({
    type: 'aichatbot',
    action: 'showChat'
}, chatbotOrigin);

// Hide chat
chatbotIframe.contentWindow.postMessage({
    type: 'aichatbot',
    action: 'hideChat'
}, chatbotOrigin);

// Send message
chatbotIframe.contentWindow.postMessage({
    type: 'aichatbot',
    action: 'sendMessage',
    payload: 'Hello!'
}, chatbotOrigin);

// Update client context
chatbotIframe.contentWindow.postMessage({
    type: 'aichatbot',
    action: 'updateClientContext',
    payload: { clientId: 'user123', clientName: 'John' }
}, chatbotOrigin);

// Switch language (multi-language bots only)
chatbotIframe.contentWindow.postMessage({
    type: 'aichatbot',
    action: 'setLanguage',
    payload: 'de'
}, chatbotOrigin);

Получаване на callbacks

window.addEventListener('message', (event) => {
    if (event.origin !== chatbotOrigin || event.source !== chatbotIframe.contentWindow) return;
    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",     // Required
    clientName: "John",                       // Optional
    clientEmail: "john@doe.com",              // Optional
    clientPhone: "555-444-333",               // Optional
    clientSecurityToken: "your-token",        // Optional
    clientHostContext: {                      // Optional
        param1: "value1",
        param2: "value2"
    }
});

Параметри:

  • clientId (задължително): Уникален идентификатор на клиента
  • clientName, clientEmail, clientPhone (незадължително): Данни за клиента, показвани в разговорите
  • clientSecurityToken (незадължително): Токен, предаван като контекст за Вашата персонализирана интеграция. Вашето собствено API трябва да валидира неговата автентичност, изтичане на валидността и оторизация.
  • clientHostContext (незадължително): Допълнителни контекстни параметри, достъпни в персонализирани API действия

Предоставените от браузъра идентификатори и контекст не са доказателство за самоличност. Не поставяйте тайни за целия акаунт в JavaScript кода на страницата и не предоставяйте достъп единствено въз основа на това, че подаден clientId или имейл съвпада със запис.

Употреба в 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);  // e.g. "de"

    console.log(chatbot.getLanguage());            // "de"
    console.log(chatbot.getAvailableLanguages());   // ["en", "de", "fr", ...]
});

Можете също да заявите езика на страницата преди зареждането на скрипта, което предотвратява краткото премигване на грешния език:

<script>window.aichatbotLanguage = "de";</script>

Кой език има предимство. Уиджетът определя езика в следния ред:

  1. Език, избран лично от посетителя в езиковото меню на самия уиджет.
  2. Езикът на страницата, зададен чрез setLanguage() или window.aichatbotLanguage.
  3. Езикът на браузъра на посетителя.
  4. Основният език на чатбота.

Личният избор на посетителя се запомня за бъдещи посещения, но спира да се прилага веднага щом езикът на страницата се промени - така Вашият превключвател на езика винаги има предимство пред остарял избор. Кодовете са по ISO 639-1 (en, de, pl); регионален код като de-AT се свежда обратно до de. Език, който ботът не предлага, се игнорира.

Превключването на езика не прекратява разговора и не изтрива хронологията му.

Свързани статии