Как добавить
Добавьте голосового агента на любой сайт через диалог Configure Widget в настройках агента. Шаг 1: Откройте настройки агента, нажав gear icon в правом верхнем углу редактора агента.
Шаг 2: Прокрутите до раздела Add to Website и нажмите Configure Widget.
Шаг 3: Включите embedding, добавьте domain вашего сайта в Allowed Domains, выберите Floating Widget, Inline Component или Headless (Bring Your Own UI), при необходимости настройте кнопку (position, color, text) и нажмите Save Configurations.
Шаг 4: Скопируйте сгенерированный embed code и вставьте его на страницу сайта, чтобы протестировать агента.
Embed modes
Требования
Они относятся ко всем трем режимам:- Отдавайте страницу по HTTPS или с
http://localhost. Браузеры запрещают доступ к microphone на обычных HTTP origins иfile://. - Если вы задали Allowed Domains в dashboard, добавьте test origin, например
localhost; иначе widget config и signaling requests будут отклонены. Оставьте список пустым, чтобы разрешить все domains. - Embed snippet из dashboard — это один тег
<script>, который загружаетagentika-widget.jsасинхронно. Widget auto-initializes после загрузки и предоставляетwindow.AgentikaWidget. Код, который регистрирует callbacks, должен дождаться доступности widget.
Старые имена по-прежнему работают. Страницы, встроенные до переименования, продолжают работать без изменений:
/embed/agentika-widget.js загружает актуальный виджет, window.AgentikaWidget — алиас window.AgentikaWidget, а <div id="agentika-inline-container"> по-прежнему подхватывается в режиме Inline. Для новых встраиваний используйте актуальные имена.Floating Widget
Рендерит pill-shaped button (microphone icon + text), закрепленную в углу страницы. Клик запускает звонок, повторный клик завершает его. Кнопка автоматически обновляет label и color по lifecycle звонка: configured text → “Connecting…” → “End Call” → “Retry” при ошибке.
Настройте Button Text, Button Color и Position (top/bottom + left/right) из dashboard.
Host page не пишет JavaScript: вся integration — это вставка embed snippet. Если нужно подписаться на lifecycle events, например для analytics, см. Lifecycle callbacks ниже.
Inline Component
Рендерит panel (status icon + status text + CTA button) внутри <div>, который вы размещаете на странице. Status changes обновляют panel на месте.
Настройте Button Text, Button Color и Call to Action Text из dashboard.
Plain HTML
Поместите container<div> туда, где должен рендериться widget. Widget автоматически привяжется к нему.
React
Поскольку React монтируется после того, как widget script уже мог загрузиться, интегрируйте черезinitInline при первом mount и refresh при remount. Poll для window.AgentikaWidget нужен, чтобы обработать async загрузку script.
Headless Mode
В Headless mode widget не добавляет свой UI. Вы рендерите любые buttons, banners или in-call indicators и вызываете JavaScript API для запуска и завершения звонков.
JavaScript API
Все
on* setters — single-listener: повторный вызов того же setter заменяет предыдущий handler.
О timing. Widget script загружается асинхронно, поэтому
window.AgentikaWidget может еще не существовать, когда ваш inline <script> впервые выполняется. Примеры ниже предполагают, что window.AgentikaWidget уже доступен при регистрации. Чтобы гарантировать это:- Vanilla JS: оберните registration code в
window.addEventListener('load', () => { /* register here */ }). - React: внутри
useEffectрегистрируйтесь сразу, еслиdocument.readyState === 'complete'; иначе добавьте одноразовыйwindow.loadlistener, который выполнит регистрацию. - Click handlers, вызывающие
start()/end(), не требуют guard: к моменту клика widget уже обычно загружен.
Vanilla JS
React + TypeScript
start() должен запускаться внутри реального user-gesture handler (click, touchend и т. д.). Браузеры не дают microphone access скриптам, которые запрашивают его вне такого handler: вызов start() из setTimeout или при загрузке страницы завершится permission error.Lifecycle callbacks (all modes)
Callbackson* из Headless JavaScript API работают во всех трех embed modes, не только в Headless. Используйте их для analytics или запуска UI на host page даже когда widget рендерит собственный UI (Floating или Inline).
onCallConnected и onCallDisconnected срабатывают только когда звонок действительно установил media connection. Failed-to-connect attempts, например отказ microphone или network failure, их не вызывают, поэтому analytics остаются чистыми.