Как добавить

Добавьте голосового агента на любой сайт через диалог Configure Widget в настройках агента. Шаг 1: Откройте настройки агента, нажав gear icon в правом верхнем углу редактора агента. Открытие настроек агента Шаг 2: Прокрутите до раздела Add to Website и нажмите Configure Widget. Переход к Add to Website Шаг 3: Включите embedding, добавьте domain вашего сайта в Allowed Domains, выберите Floating Widget, Inline Component или Headless (Bring Your Own UI), при необходимости настройте кнопку (position, color, text) и нажмите Save Configurations. Сохранение конфигурации Шаг 4: Скопируйте сгенерированный embed code и вставьте его на страницу сайта, чтобы протестировать агента. Копирование deployment 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

Floating widget shown in the corner of a host page Рендерит 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

Inline widget rendered inside a page section Рендерит 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 widget driven by host-page UI В 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.load listener, который выполнит регистрацию.
  • 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)

Callbacks on* из 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 остаются чистыми.