Přehled Chat API
Widget API vám umožňuje programově ovládat chatovací widget a registrovat zpětná volání (callbacks) pro události chatu.
Hledáte REST API? Tento článek se věnuje JavaScript widget API v prohlížeči (window.aichatbotApi) pro stránky, kde je widget ChatLab vložen. Pro server-to-server REST API určené ke komunikaci s boty z vašeho backendu nebo k programové správě botů si přečtěte články Bot Talk API a Management API.
Začínáme
API chatbota není k dispozici okamžitě po načtení stránky - skript se musí nejprve načíst a inicializovat. Pro bezpečný přístup k API musíte jako inicializační mechanismus použít window.aichatbotCallback.onSessionActivated.
Jako YOUR_API_KEY použijte veřejný klíč widgetu ze sekce Deploy (Nasazení), nikdy ne tajný klíč ck_ nebo mk_. ID poskytovatele a hostitele skriptu ponechte ze svého vlastního fragmentu kódu z Deploy. Nastavení callbacku umístěte před tento tag skriptu:
<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 se spustí ve chvíli, kdy je relace k dispozici, a to včetně obnovených relací. V závislosti na nastavení nasazení a uvítací obrazovky to nemusí být nutně první kliknutí otevírající widget. Může se spustit znovu; zaregistrujte callbacky jednou pro každý objekt API, abyste předešli duplicitním obslužným rutinám. Uvnitř máte jistotu, že objekt API existuje a relace je aktivní, takže můžete bezpečně volat sendMessage(), updateClientContext() a registrovat callbacky událostí.
Důležité: Nevolejte window.aichatbotApi.getChatbotApi() přímo ve skriptu stránky bez čekání - objekt API neexistuje, dokud se skript ChatLab nenačte a neinicializuje.
Tip: Pokud potřebujete widget pouze ovládat (zobrazit/skrýt/přepnout) a nepotřebujete aktivní relaci, poslouchejte místo toho DOM událost aichatbotReady:
window.addEventListener('aichatbotReady', function(e) {
var chatbot = window.aichatbotApi.getChatbotApi(e.detail.apiKey);
chatbot.showChat();
});
Metody
| Metoda | Popis |
|---|---|
showChat() |
Otevřít widget chatu |
hideChat() |
Zavřít widget chatu |
toggleChat() |
Přepnout viditelnost widgetu |
sendMessage(text) |
Odeslat zprávu programově |
updateClientContext(data) |
Aktualizovat kontext uživatele (viz níže) |
setLanguage(code) |
Přepnout widget do daného jazyka (pouze vícejazyční boti, viz níže) |
getLanguage() |
Vrátit jazyk, který widget aktuálně používá |
getAvailableLanguages() |
Vrátit seznam jazyků, které bot nabízí |
addCallback(name, fn) |
Zaregistrovat zpětné volání události |
Poznámka: Metody sendMessage a updateClientContext vyžadují aktivní relaci. Použijte inicializační vzor onSessionActivated popsaný v části Začínáme.
Zpětná volání (callbacks)
Zaregistrujte zpětná volání událostí uvnitř vašeho obslužného kódu onSessionActivated (viz Začínáme):
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);
});
Dostupná zpětná volání
| Callback | Data | Popis |
|---|---|---|
onSessionActivated |
- | Chatová relace je připravena |
onUserMessage |
string |
Uživatel odeslal zprávu |
onChatbotMessage |
string |
Bot odpověděl zprávou |
onProductClick |
Payload produktu/odkazu z vykreslené karty | Uživatel kliknul na odkaz na produkt; zkontrolujte payload pro váš typ karty |
onLeadCollectionFormSubmit |
{email, phone, name} |
Formulář pro sběr leadů byl odeslán |
onContactFormSubmit |
{email, message} |
Kontaktní/podpůrný formulář byl odeslán |
onLiveChatFormSubmit |
{name, email} |
Formulář pro live chat byl odeslán, nejde o potvrzení připojení operátora |
onCustomFormSubmit |
{formId, values} |
Vlastní formulář byl odeslán; data nahraných souborů nejsou v tomto callbacku zahrnuta |
Zpětná volání formulářů hlásí odeslání na straně prohlížeče, nikoli potvrzené uložení nebo úspěšné doručení. Pro zpracování potvrzené backendem použijte Webhooks. Data (payloady) zpětných volání mohou obsahovat osobní údaje; nepřeposílejte je kompletně do analytických nástrojů ani veřejných logů.
Starší zpětná volání událostí (legacy)
Objekt window.aichatbotCallback také podporuje onUserMessage a onChatbotMessage jako přímé vlastnosti. Pro modulární listenery bez nahrazování globálního objektu použijte addCallback():
window.aichatbotCallback = {
onUserMessage(message) { ... },
onChatbotMessage(message) { ... }
};
Poznámka: window.aichatbotCallback.onSessionActivated není zastaralý - jedná se o doporučený bootstrap mechanismus pro inicializaci Chat API (viz Začínáme).
Nasazení přes iframe
Při nasazení přes iframe použijte pro komunikaci s chatbotem postMessage:
Odesílání příkazů
// 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);
Příjem zpětných volání
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;
}
});
Aktualizace kontextu klienta
Funkce updateClientContext umožňuje aktualizovat kontext klienta během aktivní relace:
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"
}
});
Parametry:
- clientId (povinné): Jedinečný identifikátor klienta
- clientName, clientEmail, clientPhone (volitelné): Údaje o klientovi zobrazované v konverzacích
- clientSecurityToken (volitelné): Token předávaný jako kontext pro vaši vlastní integraci. Vaše vlastní API musí ověřit jeho pravost, platnost a oprávnění.
- clientHostContext (volitelné): Další kontextové parametry přístupné ve vlastních akcích API
Identifikátory a kontext poskytnuté prohlížečem nejsou důkazem totožnosti. Do JavaScriptu na stránce nevkládejte tajné klíče s přístupem k celému účtu a neudělujte přístup pouze na základě toho, že zadané clientId nebo e-mail odpovídají záznamu.
Použití ve voláních API:
Atributy kontextu můžete použít ve voláních funkcí API nastavením typu parametru API na "Context":
clientName,clientEmail,clientPhone,clientSecurityToken- Vlastní parametry kontextu hostitele s předponou
client, např.clientparam1,clientparam2
Jazyk
Tyto metody fungují pouze u vícejazyčných chatbotů. U jednojazyčného bota widget nemá žádnou jazykovou vrstvu, kterou by bylo možné přepnout, takže setLanguage() neprovede žádnou akci a getAvailableLanguages() vrátí pouze vlastní jazyk bota. Nejprve zapněte vícejazyčnou podporu v Settings > Languages (Nastavení > Jazyky) - viz Vícejazyční chatboti.
Metodu setLanguage() použijte, pokud vaše stránka existuje v několika jazycích a chcete, aby se chat otevřel v jazyce, který návštěvník právě čte, namísto jazyka nastaveného v jeho prohlížeči:
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", ...]
});
Jazyk stránky můžete také deklarovat před načtením skriptu, čímž zabráníte krátkému probliknutí nesprávného jazyka:
<script>window.aichatbotLanguage = "de";</script>
Který jazyk má přednost. Widget vyhodnocuje jazyk v tomto pořadí:
- Jazyk, který si návštěvník sám vybral v nabídce jazyků přímo ve widgetu.
- Jazyk stránky z
setLanguage()nebowindow.aichatbotLanguage. - Jazyk prohlížeče návštěvníka.
- Výchozí jazyk chatbota.
Vlastní volba návštěvníka se ukládá pro pozdější návštěvy, ale přestane platit, jakmile se změní jazyk stránky - váš přepínač jazyků na stránce má tedy vždy přednost před starší volbou. Kódy odpovídají standardu ISO 639-1 (en, de, pl); regionální kód jako de-AT přechází zpět na de. Jazyk, který bot nenabízí, se ignoruje.
Přepnutí jazyka neukončí konverzaci ani nesmaže její přepis.