Перейти до основного вмісту

Віджети сайту

Вбудовуйте свого голосового агента на будь-який сайт, щоб відвідувачі могли розпочати голосову розмову прямо з браузера. Вкладка Widgets надає коди вбудовування, опції налаштування та параметри безпеки доменів.

Шукаєте віджет зворотного дзвінка?

Віджет зворотного дзвінка працює зовсім інакше, ніж віджети на цій сторінці — замість того, щоб почати голосовий дзвінок у браузері, він збирає номер телефону відвідувача, і ваш агент передзвонює йому. Див. окрему сторінку Віджет зворотного дзвінка.

Типи віджетів​

Hanc.AI пропонує чотири типи віджетів у браузері плюс окремий Віджет зворотного дзвінка для телефонних зворотних дзвінків:

ВіджетНазва тегуОписНайкраще для
Floating Widgethanc-ai-floating-callКругла кнопка, яка плаває над вашою сторінкоюЗавжди видимий заклик до дії
Pill Widgethanc-ai-pill-callКомпактна кнопка у формі pill, розміщена inline у вашому контентіМінімальний слід усередині наявного макета
Pill Floating Widgethanc-ai-pill-floating-callТака ж компактна форма pill, як у Pill, але плаває разом зі сторінкою, як Floating-віджетКоли хочете естетику pill, яка слідує за відвідувачем при прокручуванні
Inline Widgethanc-ai-inline-callПовнорозмірна кнопка дзвінка, вбудована в контент сторінкиВиділені секції «Talk to Us»
Callback Widgethanc-ai-callbackФорма для номера телефону; агент передзвонює відвідувачуЛід-генеруючі сторінки, лендінги з високим наміром — див. Віджет зворотного дзвінка

Спільні атрибути​

Усі типи віджетів підтримують ці основні атрибути:

АтрибутОбов'язковийОписЗа замовчуванням
agent-idТакУнікальний ідентифікатор вашого агента—
voice-service-urlНіПеревизначає URL голосового сервісуАвтовизначення
api-base-urlНіПеревизначає базовий URL APIАвтовизначення

Атрибути відображення​

АтрибутОписЗначенняЗа замовчуванням
positionПозиція віджета на сторінціbottom-right, bottom-left, top-right, top-left, staticbottom-right
sizeРозмір віджета в пікселяхЧисло120
themeНазва кольорової темиДив. Кольорові темиdefault

Атрибути тексту кнопки​

АтрибутОписЗа замовчуванням
button-start-textТекст, який показується на неактивній кнопці"Call"
button-connecting-textТекст, який показується під час підключення"Connecting..."
button-end-textТекст, який показується під час активного дзвінка—

Атрибути умов​

АтрибутОписЗа замовчуванням
terms-enabledУвімкнути діалог згоди перед дзвінкомfalse
terms-contentMarkdown-форматований текст згоди""
terms-urlПосилання на вашу сторінку Terms & Conditions"https://hanc.ai/terms"
privacy-urlПосилання на вашу сторінку Privacy Policy"https://hanc.ai/privacy"
інформація

Атрибути умов, установлені на HTML-елементі, перевизначаються налаштуваннями віджета агента, отриманими з API, якщо skip-fetch не встановлено в true.

Звукові атрибути​

АтрибутОписЗа замовчуванням
sound-enabledУвімкнути звуки початку/завершення дзвінкаtrue
sound-volumeГучність звукових ефектів0.25
sound-presetІдентифікатор звукового пресета"1"

Кольорові теми​

Налаштовуйте зовнішній вигляд віджета 11 вбудованими кольоровими темами:

ТемаЗначення
Defaultdefault
Purplepurple
Blueblue
Cyancyan
Emeraldemerald
Amberamber
Tangerinetangerine
Roserose
Emberember
Blackblack
Whitewhite

Кожна тема має варіанти dark і light. Установіть тему через атрибут theme у коді вбудовування або налаштуйте її в налаштуваннях віджета агента.


Приклади вбудовування​

Floating 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>

Floating Widget із темою та позицією​

<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>

Pill 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>

Inline 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>
Закріплення версії віджета

URL скрипту вище завжди завантажує останню випущену версію віджета — ваш сайт автоматично отримує покращення, і @latest є значенням за замовчуванням, коли версію не вказано. Якщо вам треба зафіксуватися на конкретному релізі, явно закріпіть його, додавши потрібну версію, наприклад https://unpkg.com/hanc-webrtc-widgets@X.Y.Z.


Події віджета​

Віджети генерують події, які можна слухати в JavaScript:

ПодіяОпис
status-changedСпрацьовує при зміні статусу дзвінка
connectingДзвінок встановлюється
connectedДзвінок активний
idleНемає активного дзвінка
errorВиникла помилка
audio-trackОтримано віддалену аудіодоріжку (для візуалізації)
local-audio-trackЛокальна аудіодоріжка мікрофона (для візуалізації)
microphone-enabledМікрофон увімкнено
microphone-disabledМікрофон вимкнено
call-startСпрацьовує, коли дзвінок успішно стартує
call-endСпрацьовує, коли дзвінок завершується

Приклад: прослуховування подій​

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

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

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

Як дозволити агентові відкривати сторінки​

Під час дзвінка з браузера агент може попросити ваш сайт відкрити сторінку — «покажу вам тарифи» — і відвідувач бачить це, не перериваючи розмову.

Рішення лишається за вашою сторінкою. Агент надсилає запит, ваш код вирішує, що він означає. Відкрити адресу, перемкнути вкладку, прокрутити до розділу, розгорнути акордеон — усе це допустимі відповіді.

Потрібні три кроки, і жоден не працює окремо.

Крок 1 — Скажіть агентові, які сторінки існують​

Агент не бачить мапи вашого сайту. Він просить лише той шлях, який ви йому дали, — перелічіть їх у промпті агента або в базі знань:

Сторінки нашого сайту:
/pricing — тарифи й ціни
/contact — форма звʼязку і телефон
/product/crm — CRM

Пропустите цей крок — агентові нема чого просити, тож він навіть не спробує.

Крок 2 — Обробіть запит на своїй сторінці​

Додайте це один раз, будь-де після скрипта віджета. Подія спливає сторінкою, тож document — зручне місце:

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

if (type === 'navigate') {
// SPA: перехід без перезавантаження — дзвінок триває.
router.push(payload.path);

// Звичайний сайт: відкрити другу вкладку, ця (і дзвінок) лишиться живою.
// window.open(payload.path, '_blank');

event.preventDefault(); // ← саме це каже агентові «прийнято»
}
});
</script>
Повне перезавантаження сторінки обриває дзвінок

Дзвінок живе в цій сторінці. window.location.href = … вивантажує документ, і розмова зникає разом із ним — відвідувача обриває на півслові. Якщо є роутер, переходьте без перезавантаження; інакше відкривайте сторінку в новій вкладці. Перепідключення немає: перезавантаження не переживає ніщо.

preventDefault() не є необовʼязковим

Це єдиний спосіб сказати «я обробив». Без нього агентові повідомлять, що сайт не підтримує навігацію: до кінця дзвінка він припинить спроби й повернеться до пояснень, куди натиснути. У консолі нічого не зʼявиться — сторінка просто має вигляд такої, що проігнорувала запит, бо так і сталося.

Крок 3 — Перевірте​

Зателефонуйте своєму агентові з сайту й попросіть відкрити сторінку за назвою. Мають статися дві речі: сторінка відкрилася, і агент сказав щось на кшталт «ось ціни», а не «знайдете їх у меню».


Як відповідати агентові даними​

Деякі команди — це запитання, а не вказівки. Надходять вони так само, але відповідати треба через respond():

КомандаПро що питає агентЧим відповідаєте
navigate«відкрий цей шлях»нічим — досить preventDefault()
page_context«що зараз перед відвідувачем?»будь-чим корисним: шлях, заголовок, товар
cart_state«що в нього в кошику?»позиції, суми, валюта
<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>

Після preventDefault() на відповідь є приблизно секунда, тож await допустимий, а повільний запит до API — ні. Відповідайте тим, що вже маєте під рукою.


Що агент може просити, а що ні​

  • Лише шляхи всередині вашого сайту. Шлях має починатися з /. Усе, що виводить із домену — //evil.com, https://…, зворотні скісні — відхиляється ще до вашої сторінки. Відвести відвідувача на чужий сайт агент не може.
  • Лише дзвінки з браузера. Під час телефонного дзвінка відкривати нема чого, тож там таких команд немає.
  • Однієї відмови досить. Якщо сторінка не підтвердила перший запит, агент припиняє питати до кінця дзвінка. Він не спробує знову і — що важливіше — не скаже відвідувачеві, що відкрив те, чого не відкривав.
Нічого не відбувається?

Виводьте кожну команду до того, як фільтруєте: document.addEventListener('agent-command', e => console.log(e.detail)). Бачите в консолі navigate — агент свою частину зробив, отже, річ у preventDefault() або у вашому обробнику. Не бачите нічого — агентові не сказали, що такий шлях існує; поверніться до кроку 1.


Технічні вимоги​

Віджети вимагають, щоб браузер відвідувача підтримував:

  • WebGL 2.0 — для рендерингу
  • Web Audio API — для обробки аудіо
  • WebRTC — для голосової комунікації в реальному часі

Усі сучасні браузери (Chrome, Firefox, Safari, Edge) підтримують ці технології.


Обмеження доменів​

Контролюйте, які сайти можуть вбудовувати ваш віджет агента.

Завжди дозволені домени​

Наступні домени дозволені завжди, незалежно від конфігурації:

  • hanc.ai (і піддомени)
  • hanc.me (і піддомени)
  • localhost

Дозволити всі домени​

За замовчуванням ваш віджет можна вбудовувати на будь-якому сайті. Перемкніть «Allow all domains» у налаштуваннях віджета, щоб це обмежити.

Обмежити конкретними доменами​

Коли обмежено, додайте кожен домен, який має бути дозволено:

  • Вводьте назви доменів без https:// (наприклад, example.com)
  • Піддомени потребують окремих записів (наприклад, www.example.com, shop.example.com)
  • Можна вказувати порти (наприклад, localhost:3000)
  • Максимум 50 доменів можна додати в білий список
Безпека

Для продакшн-агентів обмежуйте віджети своїми власними доменами, щоб запобігти несанкціонованому вбудовуванню.


Terms & Conditions​

Увімкніть діалог згоди, перш ніж співрозмовники зможуть розпочати розмову.

Конфігурація​

ПараметрОпис
Enable TermsПеремикач діалогу умов on/off
Terms ContentMarkdown-форматований текст згоди, що показується користувачам (макс. 5 000 символів)
Terms URLПосилання на вашу повну сторінку Terms & Conditions
Privacy URLПосилання на вашу сторінку Privacy Policy

Коли увімкнено:

  • Користувачі бачать діалог згоди перед початком дзвінка
  • Вони мають натиснути «Agree», щоб продовжити
  • Згода зберігається локально в браузері
  • Кнопка Reset Consent очищає збережену згоду для тестування

Форматування контенту​

Контент умов підтримує форматування Markdown:

  • Використовуйте #### для заголовків
  • Використовуйте **bold** для виділення
  • Використовуйте переноси рядків для зручності читання

Пов'язане​