Установка виджета
Добавьте виджет VivoChat на страницы вашего сайта.
Этапы установки
Заголовок раздела «Этапы установки»1. Создайте канал
Заголовок раздела «1. Создайте канал»Перейдите в раздел:
Управление → Каналы связи
Создайте канал с типом: Виджет на сайт
2. Получите WIDGET_ID
Заголовок раздела «2. Получите WIDGET_ID»Откройте настройки канала:
Управление → Каналы связи → [канал] → Опции
Скопируйте значение:
Идентификатор канала
WIDGET_ID — публичный идентификатор канала. Он используется для подключения виджета на сайт.
3. Подключите виджет
Заголовок раздела «3. Подключите виджет»Вставьте код перед закрывающим тегом </body> на каждой странице, где должен отображаться чат.
Скрипт загружается асинхронно и не блокирует рендеринг страницы.
Повторное подключение скрипта не создаёт дубликат интерфейса.
Подключение виджета
Заголовок раздела «Подключение виджета»Javascript
Заголовок раздела «Javascript»<script defer> (() => { const loadScript = (callback) => { const widgetId = 'YOUR_WIDGET_ID'; // Replace with YOUR_WIDGET_ID
const script = document.createElement('script'); script.type = 'text/javascript'; script.async = true; script.src = `//widget.vivochat.ai/script/widget/${widgetId}`; script.onload = callback;
const sourceScript = document.getElementsByTagName('script')[0]; sourceScript.parentNode.insertBefore(script, sourceScript); }
const initWidget = () => { const withIcon = true;
vivo_api.run({withIcon}); }
loadScript(initWidget) })();</script>import { useEffect } from 'react';
const WIDGET_ID = 'YOUR_WIDGET_ID'; // Replace with YOUR_WIDGET_ID
const WIDGET_SRC = `//widget.vivochat.ai/script/widget/${WIDGET_ID}`;
declare global { interface Window { vivo_api?: { run: (opts: { withIcon: boolean }) => void; destroy: () => void; }; }}
export function App() { useEffect(() => { const script = document.createElement('script'); script.src = WIDGET_SRC; script.async = true; script.onload = () => window.vivo_api?.run({ withIcon: true }); document.body.appendChild(script);
return () => { window.vivo_api?.destroy(); script.remove(); }; }, []);
return <>{/* ... */}</>;} 'use client';
import Script from 'next/script';
const WIDGET_ID = 'YOUR_WIDGET_ID'; // Replace with YOUR_WIDGET_ID
export function VivoChat() { useEffect(() => { return () => { window.vivo_api?.destroy(); }; }, []);
return ( <Script src={`//widget.vivochat.ai/script/widget/${WIDGET_ID}`} strategy="afterInteractive" onLoad={() => window.vivo_api?.run({ withIcon: true })} /> ); }<script setup lang="ts"> import { onMounted, onBeforeUnmount } from 'vue';
const WIDGET_ID = 'YOUR_WIDGET_ID'; // Replace with YOUR_WIDGET_ID
let script: HTMLScriptElement | null = null;
onMounted(() => { script = document.createElement('script'); script.src = `//widget.vivochat.ai/script/widget/${WIDGET_ID}`; script.async = true; script.onload = () => window.vivo_api?.run({ withIcon: true }); document.body.appendChild(script); });
onBeforeUnmount(() => { window.vivo_api?.destroy(); script?.remove(); });</script><script setup lang="ts"> const WIDGET_ID = 'YOUR_WIDGET_ID'; // Replace with YOUR_WIDGET_ID
onMounted(() => { useHead({ script: [ { src: `//widget.vivochat.ai/script/widget/${WIDGET_ID}`, async: true, tagPosition: 'bodyClose', onload: () => window.vivo_api?.run({ withIcon: true }), }, ], }); });
onBeforeUnmount(() => { window.vivo_api?.destroy(); });</script>Nuxt 3.11+
Заголовок раздела «Nuxt 3.11+»<script setup lang="ts"> const WIDGET_ID = 'YOUR_WIDGET_ID'; // Replace with YOUR_WIDGET_ID
const { onLoaded } = useScript( `//widget.vivochat.ai/script/widget/${WIDGET_ID}`, { trigger: 'client' }, );
onLoaded(() => { window.vivo_api?.run({ withIcon: true }); });
onBeforeUnmount(() => { window.vivo_api?.destroy(); });</script>Angular
Заголовок раздела «Angular»import { Component, OnInit, OnDestroy } from '@angular/core';
declare const vivo_api: { run: (opts: { withIcon: boolean }) => void; destroy: () => void;};
@Component({ selector: 'app-root', standalone: true, template: `<!-- ... -->`,})export class AppComponent implements OnInit, OnDestroy { private readonly WIDGET_ID = 'YOUR_WIDGET_ID'; // Replace with YOUR_WIDGET_ID private script?: HTMLScriptElement;
ngOnInit(): void { this.script = document.createElement('script'); this.script.src = `//widget.vivochat.ai/script/widget/${this.WIDGET_ID}`; this.script.async = true; this.script.onload = () => vivo_api.run({ withIcon: true }); document.body.appendChild(this.script); }
ngOnDestroy(): void { vivo_api?.destroy(); this.script?.remove(); }}