Přeskočit na hlavní obsah

Webové widgety

Vložte svého hlasového agenta na jakýkoli web, aby návštěvníci mohli zahájit hlasovou konverzaci přímo z prohlížeče. Karta Widgety poskytuje kódy pro vložení, možnosti přizpůsobení a nastavení doménového zabezpečení.

Hledáte widget zpětného volání?

Widget zpětného volání funguje velmi odlišně od widgetů na této stránce — místo zahájení hlasového hovoru v prohlížeči sbírá telefonní číslo návštěvníka a nechá vašeho agenta zavolat mu zpět. Viz samostatná stránka Widget zpětného volání.

Typy widgetů

Hanc.AI nabízí čtyři typy widgetů v prohlížeči a navíc samostatný Widget zpětného volání pro telefonická zpětná volání:

WidgetNázev taguPopisNejvhodnější pro
Plovoucí widgethanc-ai-floating-callTlačítko v podobě koule plovoucí nad vaší stránkouVždy viditelná výzva k akci
Pilulkový widgethanc-ai-pill-callKompaktní tlačítko ve tvaru pilulky umístěné vloženě ve vašem obsahuMinimální stopa uvnitř stávajícího rozvržení
Plovoucí pilulkový widgethanc-ai-pill-floating-callStejný kompaktní tvar pilulky jako Pilulka, ale plove se stránkou jako plovoucí widgetKdyž chcete estetiku pilulky, která návštěvníka sleduje při posouvání
Vložený widgethanc-ai-inline-callTlačítko hovoru v plné velikosti vložené do obsahu stránkyVyhrazené sekce „Zavolejte nám“
Widget zpětného voláníhanc-ai-callbackFormulář pro telefonní číslo; agent zavolá návštěvníkovi zpětStránky pro sběr leadů, vstupní stránky s vysokým záměrem — viz Widget zpětného volání

Společné atributy

Všechny typy widgetů podporují tyto základní atributy:

AtributPovinnýPopisVýchozí
agent-idAnoJedinečný identifikátor vašeho agenta
voice-service-urlNePřepsat URL hlasové službyAutomaticky detekováno
api-base-urlNePřepsat základní URL APIAutomaticky detekováno

Atributy zobrazení

AtributPopisHodnotyVýchozí
positionPozice widgetu na stráncebottom-right, bottom-left, top-right, top-left, staticbottom-right
sizeVelikost widgetu v pixelechČíslo120
themeNázev barevného motivuViz Barevné motivydefault

Atributy textu tlačítka

AtributPopisVýchozí
button-start-textText zobrazený na nečinném tlačítku"Call"
button-connecting-textText zobrazený během navazování"Connecting..."
button-end-textText zobrazený během aktivního hovoru

Atributy podmínek

AtributPopisVýchozí
terms-enabledZapnout dialog souhlasu před hovoremfalse
terms-contentText souhlasu formátovaný v Markdownu""
terms-urlOdkaz na vaši stránku s podmínkami a smluvními ujednáními"https://hanc.ai/terms"
privacy-urlOdkaz na vaši stránku se zásadami ochrany osobních údajů"https://hanc.ai/privacy"
info

Atributy podmínek nastavené na HTML elementu jsou přepsány nastavením widgetu agenta získaným z API, pokud není skip-fetch nastaveno na true.

Atributy zvuku

AtributPopisVýchozí
sound-enabledZapnout zvuky začátku/konce hovorutrue
sound-volumeHlasitost zvukového efektu0.25
sound-presetIdentifikátor zvukové předvolby"1"

Barevné motivy

Přizpůsobte vzhled widgetu pomocí 11 vestavěných barevných motivů:

MotivHodnota
Defaultdefault
Purplepurple
Blueblue
Cyancyan
Emeraldemerald
Amberamber
Tangerinetangerine
Roserose
Emberember
Blackblack
Whitewhite

Každý motiv má tmavou i světlou variantu. Motiv nastavte pomocí atributu theme v kódu pro vložení, nebo ho nakonfigurujte v nastavení widgetu agenta.


Příklady vložení

Plovoucí widget

<hanc-ai-floating-call agent-id="YOUR_AGENT_ID"></hanc-ai-floating-call>
<script src="https://unpkg.com/hanc-webrtc-widgets" async type="text/javascript"></script>

Plovoucí widget s motivem a pozicí

<hanc-ai-floating-call
agent-id="YOUR_AGENT_ID"
theme="emerald"
position="bottom-left"
size="140"
></hanc-ai-floating-call>
<script src="https://unpkg.com/hanc-webrtc-widgets" async type="text/javascript"></script>

Pilulkový widget

<hanc-ai-pill-call agent-id="YOUR_AGENT_ID"></hanc-ai-pill-call>
<script src="https://unpkg.com/hanc-webrtc-widgets" async type="text/javascript"></script>

Vložený widget

<hanc-ai-inline-call agent-id="YOUR_AGENT_ID"></hanc-ai-inline-call>
<script src="https://unpkg.com/hanc-webrtc-widgets" async type="text/javascript"></script>
Připnutí verze widgetu

Výše uvedená URL skriptu vždy načte nejnovější vydaný widget — váš web automaticky přebírá vylepšení a @latest je výchozí, když není zadána žádná verze. Pokud potřebujete zamknout na pevné vydání, připněte ho explicitně přidáním požadované verze, např. https://unpkg.com/hanc-webrtc-widgets@X.Y.Z.


Události widgetu

Widgety vysílají události, na které můžete naslouchat v JavaScriptu:

UdálostPopis
status-changedVyvolá se při změně stavu hovoru
connectingHovor se navazuje
connectedHovor je aktivní
idleŽádný aktivní hovor
errorDošlo k chybě
audio-trackPřijata vzdálená zvuková stopa (pro vizualizaci)
local-audio-trackZvuková stopa z lokálního mikrofonu (pro vizualizaci)
microphone-enabledMikrofon byl zapnut
microphone-disabledMikrofon byl vypnut
call-startVyvolá se, když hovor úspěšně začne
call-endVyvolá se, když hovor skončí

Příklad: Naslouchání událostem

const widget = document.querySelector('hanc-ai-floating-call');

widget.addEventListener('call-start', () => {
console.log('Call started');
});

widget.addEventListener('call-end', () => {
console.log('Call ended');
});

Jak nechat agenta otevírat stránky

Během hovoru z prohlížeče může agent požádat váš web, aby otevřel stránku – „ukážu vám ceník“ – a návštěvník to vidí, aniž by přerušil rozhovor.

Rozhoduje vaše stránka. Agent pošle požadavek, váš kód určí, co znamená. Otevřít adresu, přepnout záložku, odrolovat k sekci a rozbalit accordion – všechno jsou platné odpovědi.

Jsou k tomu tři kroky a žádný nefunguje samostatně.

Krok 1 – Řekněte agentovi, jaké stránky existují

Agent nevidí mapu vašeho webu. Ptá se vždy jen na cestu, kterou jste mu dali – vypište je v promptu agenta nebo ve znalostní bázi:

Stránky našeho webu:
/pricing — tarify a ceny
/contact — kontaktní formulář a telefon
/product/crm — CRM

Bez tohoto kroku nemá agent nač se ptát, a tak to ani nezkusí.

Krok 2 – Zpracujte požadavek na své stránce

Přidejte to jednou, kdekoli za skriptem widgetu. Událost probublává stránkou, takže document je vhodné místo:

<script>
document.addEventListener('agent-command', (event) => {
const { type, payload } = event.detail;

if (type === 'navigate') {
// SPA: přechod bez načtení stránky — hovor pokračuje.
router.push(payload.path);

// Klasický web: otevřít druhou záložku, tato (a hovor) zůstane naživu.
// window.open(payload.path, '_blank');

event.preventDefault(); // ← tím agentovi říkáte „vyřízeno“
}
});
</script>
Úplné načtení stránky ukončí hovor

Hovor žije v této stránce. window.location.href = … dokument zahodí a rozhovor jde s ním — návštěvník je přerušen uprostřed věty. Máte-li router, přecházejte na klientu; jinak stránku otevřete v nové záložce. Znovupřipojení neexistuje: načtení stránky nepřežije nic.

preventDefault() není volitelné

Je to jediný způsob, jak říct „zpracoval jsem to“. Bez něj se agent dozví, že web navigaci nepodporuje: po zbytek hovoru to přestane zkoušet a vrátí se k popisu, kam kliknout. V konzoli se nic neobjeví – stránka prostě vypadá, že požadavek ignorovala, protože ho ignorovala.

Krok 3 – Vyzkoušejte to

Zavolejte svému agentovi z webu a požádejte o stránku jménem. Mají nastat dvě věci: stránka se otevře a agent řekne něco jako „tady jsou ceny“ místo „najdete je v menu“.


Jak agentovi odpovědět daty

Některé příkazy jsou otázky, ne pokyny. Přicházejí stejně, ale odpovídá se přes respond():

PříkazNa co se agent ptáČím odpovíte
navigate„otevři tuto cestu“ničím – stačí preventDefault()
page_context„na co se návštěvník dívá?“čímkoli užitečným: cesta, titulek, produkt
cart_state„co má v košíku?“položky, součty, měna
<script>
document.addEventListener('agent-command', (event) => {
const { type, respond } = event.detail;

if (type === 'page_context') {
event.preventDefault();
respond({ path: location.pathname, title: document.title });
}
});
</script>

Po preventDefault() máte na odpověď zhruba sekundu – await je v pořádku, pomalé volání API ne. Odpovězte tím, co už máte po ruce.


Co agent smí a nesmí žádat

  • Jen cesty na vašem vlastním webu. Cesta musí začínat /. Cokoli, co by mohlo opustit vaši doménu – //evil.com, https://…, zpětná lomítka – je odmítnuto dřív, než se dostane na vaši stránku. Agent nemůže poslat návštěvníky jinam.
  • Jen hovory z prohlížeče. Při telefonním hovoru není co otevírat, takže tam tyto příkazy neexistují.
  • Jedno odmítnutí stačí. Pokud vaše stránka nepotvrdí první požadavek, agent se po zbytek hovoru ptát přestane. Nebude to zkoušet znovu a – což je důležitější – neřekne návštěvníkovi, že něco otevřel, když neotevřel.
Nic se neděje?

Logujte každý příkaz ještě před filtrováním: document.addEventListener('agent-command', e => console.log(e.detail)). Vidíte-li v konzoli navigate, agent svou část splnil a chybí preventDefault() nebo váš handler. Nevidíte-li nic, agentovi nikdo neřekl, že taková cesta existuje – zpět ke kroku 1.


Technické požadavky

Widgety vyžadují, aby prohlížeč návštěvníka podporoval:

  • WebGL 2.0 — pro vykreslování
  • Web Audio API — pro zpracování zvuku
  • WebRTC — pro hlasovou komunikaci v reálném čase

Všechny moderní prohlížeče (Chrome, Firefox, Safari, Edge) tyto technologie podporují.


Doménová omezení

Určete, které weby mohou vkládat widget vašeho agenta.

Vždy povolené domény

Následující domény jsou vždy povoleny bez ohledu na konfiguraci:

  • hanc.ai (a subdomény)
  • hanc.me (a subdomény)
  • localhost

Povolit všechny domény

Ve výchozím nastavení lze váš widget vložit na jakýkoli web. Přepnutím „Povolit všechny domény“ v nastavení widgetu to omezíte.

Omezit na konkrétní domény

Při omezení přidejte každou doménu, která má být povolena:

  • Zadejte názvy domén bez https:// (např. example.com)
  • Subdomény vyžadují samostatné položky (např. www.example.com, shop.example.com)
  • Lze zadat porty (např. localhost:3000)
  • Na seznam povolených lze zařadit maximálně 50 domén
Zabezpečení

U produkčních agentů omezte widgety na vlastní domény, abyste zabránili neoprávněnému vkládání.


Podmínky a smluvní ujednání

Zapněte dialog souhlasu předtím, než mohou volající zahájit konverzaci.

Konfigurace

NastaveníPopis
Zapnout podmínkyZapnout/vypnout dialog s podmínkami
Obsah podmínekText souhlasu formátovaný v Markdownu zobrazený uživatelům (max. 5 000 znaků)
URL podmínekOdkaz na vaši úplnou stránku s podmínkami a smluvními ujednáními
URL ochrany osobních údajůOdkaz na vaši stránku se zásadami ochrany osobních údajů

Když je zapnuto:

  • Uživatelé před zahájením hovoru vidí dialog souhlasu
  • K pokračování musí kliknout na „Souhlasím“
  • Souhlas je uložen lokálně v prohlížeči
  • Tlačítko Resetovat souhlas vymaže uložený souhlas pro účely testování

Formátování obsahu

Obsah podmínek podporuje formátování Markdown:

  • Použijte #### pro nadpisy
  • Použijte **bold** pro zvýraznění
  • Použijte zalomení řádků pro lepší čitelnost

Související