Для разработчиков

JS API виджета

Управляйте виджетом программно — настройка, события, интеграция и расширенные сценарии.

Быстрый старт

Вставьте код на все страницы сайта — перед закрывающим тегом </head> или </body>. Замените ВАШ_ORG_ID на ID из раздела «Настройки» в кабинете.

HTML<script>
  // Конфигурация — задаётся до загрузки скрипта
  window.SvyazioConfig = {
    orgId: "ВАШ_ORG_ID"
  };
  window.Svyazio = window.Svyazio || function() {
    (window.Svyazio.q = window.Svyazio.q || []).push(arguments);
  };
</script>
<script async src="https://app.svyazio.ru/widget/svyazio.js"></script>
Очередь команд

Все вызовы Svyazio(...) до загрузки скрипта автоматически встают в очередь и выполняются после инициализации. API безопасен для асинхронного использования.

Конфигурация

Объект window.SvyazioConfig (или алиас window.SvyazioSetup) должен быть задан до загрузки скрипта. Параметры переопределяют настройки из панели администратора.

Внешний вид

ПараметрТипПо умолч.Описание
buttonStyle'round' | 'tab''round'Стиль кнопки чата.
buttonPositionstring'br'Позиция кнопки: bl, bc, br, lt, lm, lb, rt, rm, rb.
buttonSizenumber60Размер круглой кнопки (px).
chatWidthnumber400Ширина окна чата (мин. 280px).
chatHeightnumber600Высота окна чата (мин. 300px).
zIndexnumber999999z-index виджета.
accentColorstringиз настроекЦвет акцента, например '#6C63FF'.
colorsobjectЦветовая схема (см. setColors).

Поведение

ПараметрТипПо умолч.Описание
startHiddenbooleanfalseСкрыть виджет при загрузке. Показать через Svyazio('show').
disabledOnMobilebooleanfalseНе показывать на мобильных.
mobileOnlybooleanfalseПоказывать только на мобильных.
disableChatOpenHashbooleanfalseОтключить управление URL-хэшем #svyazioChatExpanded.
deferredLoadingbooleanfalseЗагружать виджет после полной загрузки страницы.
customWidgetButtonstringCSS-селектор кастомной кнопки. Стандартная кнопка скрывается.

Текст виджета

ПараметрТипОписание
headerTextstringЗаголовок окна чата.
welcomeTextstringПриветственный текст при первом открытии.
onlineTitlestringПодзаголовок, когда агенты онлайн.
offlineTitlestringПодзаголовок, когда агенты офлайн.
offlineTextstringТекст, когда никого нет в сети.

Язык и локаль

ПараметрТипОписание
localestring | objectКод языка ('ru', 'en', 'es', 'pt') или объект с оверрайдами строк интерфейса.
languagestringАлиас для locale.

Данные посетителя

ПараметрТипОписание
clientIdstringУникальный ID пользователя из вашей системы — объединяет историю между устройствами и сессиями.
groupIdstringID отдела для маршрутизации обращений (Настройки → Отделы).

Коллбэки

ПараметрТипОписание
onNewMessagefunction(msg)При каждом новом сообщении. msg: { id, text, createdAt, type }
onAnalyticEventfunction(eventName)При аналитических событиях виджета.

Пример расширенной конфигурации:

JSwindow.SvyazioConfig = {
  orgId: "ВАШ_ORG_ID",
  buttonPosition: "br",
  chatWidth: 380,
  startHidden: true,
  language: "ru",
  groupId: "abc123",
  clientId: "user_42",
  headerText: "Служба поддержки",
  colors: { buttonBg: "#6C63FF", buttonText: "#fff" },
  onNewMessage: function(msg) {
    console.log("Новое:", msg.text, "от", msg.type);
  }
};

SvyazioIntegration

Альтернатива методу setIntegrationData — передайте данные о пользователе до загрузки виджета.

HTML<script>
  window.SvyazioIntegration = {
    name: "Иван Иванов",
    email: "ivan@example.com",
    phone: "+7 999 123 45 67",
    plan: "pro",    // произвольные поля
    userId: "12345"
  };
</script>
<script async src="https://app.svyazio.ru/widget/svyazio.js"></script>

Открытие по ссылке

Добавьте хэш #svyazioChatExpanded к любой ссылке — при клике автоматически откроется чат:

HTML<a href="#svyazioChatExpanded">Написать нам</a>

<button onclick="location.hash='#svyazioChatExpanded'">Задать вопрос</button>
На мобильных

Хэш добавляется в URL при открытии, чтобы кнопка «Назад» закрывала чат — как в нативных приложениях.

Видимость и состояние

Svyazio('openChat', focus?)

Открыть окно чата. true — сфокусировать поле ввода.

JSSvyazio('openChat');
Svyazio('openChat', true); // с фокусом
Svyazio('expandWidget', focus?)

Аналог openChat, но игнорирует вызов на мобильных. Удобно для десктопных триггеров.

JSSvyazio('expandWidget', true);
Svyazio('minimizeWidget')  /  Svyazio('closeChat')

Свернуть окно чата. Оба метода — алиасы.

JSSvyazio('minimizeWidget');
Svyazio('closeChat'); // алиас
Svyazio('hide')

Полностью скрыть виджет (кнопку и окно). Восстановить через show().

JSSvyazio('hide');
Svyazio('show')

Показать виджет после hide() или startHidden: true.

JSSvyazio('show');

Данные посетителя

Svyazio('setIntegrationData', data)

Полностью перезаписывает данные посетителя. Поля: name, email, phone, notes и любые произвольные.

JSSvyazio('setIntegrationData', {
  name: "Иван Иванов",
  email: "ivan@example.com",
  phone: "+7 999 123 45 67",
  plan: "pro",
  userId: "12345"
});
Svyazio('updateIntegrationData', data)

Частично обновляет данные (merge). null — удалить поле.

JSSvyazio('updateIntegrationData', { email: "new@example.com" });
Svyazio('updateIntegrationData', { phone: null }); // удалить

Позиция и размер

Svyazio('setButtonPosition', code)

Переместить кнопку в одну из 9 позиций: bl, bc, br (низ), lt, lm, lb (лево), rt, rm, rb (право).

JSSvyazio('setButtonPosition', 'bl');  // снизу слева
Svyazio('resetButtonPosition');        // вернуть из конфига
Svyazio('setButtonSize', size)

Изменить диаметр круглой кнопки в пикселях.

JSSvyazio('setButtonSize', 72);
Svyazio('setChatWidth', width)

Ширина окна чата (минимум 280px).

JSSvyazio('setChatWidth', 350);
Svyazio('setChatHeight', height)

Высота окна чата (минимум 300px).

JSSvyazio('setChatHeight', 500);
Svyazio('setZIndex', value)

Изменить z-index — если что-то перекрывает виджет на странице.

JSSvyazio('setZIndex', 99999);

Цвета

Svyazio('setColors', colors)

Изменить цветовую схему на лету. Поля: buttonBg, buttonText, clientBubbleBg, agentBubbleBg.

JSSvyazio('setColors', {
  buttonBg: '#6C63FF',
  buttonText: '#fff',
  clientBubbleBg: '#7C74FF'
});
Svyazio('resetColors')

Вернуть исходные цвета из конфига.

JSSvyazio('resetColors');

Язык

Svyazio('setLanguage', code)

Переключить язык интерфейса. Доступны: 'ru', 'en', 'es', 'pt'.

JSSvyazio('setLanguage', 'en');
Svyazio('setLanguage', 'es');
Svyazio('setLocale', codeOrOverrides)

Строка — переключить язык. Объект — переопределить отдельные строки интерфейса.

JSSvyazio('setLocale', 'ru');

// Переопределить строки
Svyazio('setLocale', {
  chat: { input: { placeholder: "Напишите сообщение..." } }
});

Действия

Svyazio('sendAutoMessage', text)

Отправить автосообщение от имени агента. Автоматически открывает чат. Идеально для триггерных сценариев.

JSSvyazio('sendAutoMessage', 'Привет! Чем могу помочь? 👋');

// Через 30 секунд после загрузки
setTimeout(function() {
  Svyazio('sendAutoMessage', 'Нужна помощь? Мы онлайн!');
}, 30000);
Svyazio('pageView')

Отправить событие просмотра страницы. Обязательно в SPA при смене маршрута.

JS// React Router
useEffect(() => { Svyazio('pageView'); }, [location.pathname]);

// Vue Router
router.afterEach(() => { Svyazio('pageView'); });
Svyazio('setGroupId', id)

Направить обращение в отдел. null — сбросить маршрутизацию.

JSSvyazio('setGroupId', 'abc123ef');
Svyazio('setGroupId', null); // сброс

Жизненный цикл

Svyazio('restart')

Перезапустить виджет — читает актуальный SvyazioConfig заново. Используется при смене пользователя.

JSwindow.SvyazioConfig.clientId = 'new_user_id';
Svyazio('restart');
Svyazio('kill')

Полностью уничтожить виджет: удаляет DOM, закрывает WebSocket. После kill() восстановление без перезагрузки невозможно.

Необратимая операция

Используйте только если нужно полностью удалить виджет до следующей перезагрузки.

JSSvyazio('kill');

Коллбэки

onNewMessage

JSwindow.SvyazioConfig = {
  orgId: "ВАШ_ORG_ID",
  onNewMessage: function(msg) {
    // msg.id, msg.text, msg.createdAt (ms), msg.type: "agent"|"client"|"bot"
    console.log(msg);
  }
};

// Пример: счётчик непрочитанных в title
let unread = 0;
window.SvyazioConfig.onNewMessage = function(msg) {
  if (msg.type === 'agent' || msg.type === 'bot') {
    document.title = '(' + (++unread) + ') ' + document.title;
  }
};

onAnalyticEvent

JSwindow.SvyazioConfig = {
  orgId: "ВАШ_ORG_ID",
  onAnalyticEvent: function(eventName) {
    // Google Analytics 4
    gtag('event', eventName, { event_category: 'Live Chat' });

    // Яндекс.Метрика
    if (window.ym) {
      ym(XXXXXX, 'reachGoal', 'CHAT_' + eventName.toUpperCase());
    }
  }
};

Примеры сценариев

Показать чат через N секунд

JSsetTimeout(function() {
  Svyazio('show');
  Svyazio('openChat');
}, 15000);

Передать данные после авторизации

JSfunction onUserLogin(user) {
  Svyazio('setIntegrationData', {
    name: user.name,
    email: user.email,
    plan: user.plan,
    clientId: 'user_' + user.id
  });
}

VIP-клиентов — в приоритетный отдел

JSif (currentUser.plan === 'enterprise') {
  Svyazio('setGroupId', 'vip_dept_id');
}

Скрыть на определённых страницах

JSif (window.location.pathname === '/checkout') {
  Svyazio('hide');
} else {
  Svyazio('show');
}

Кастомная кнопка

HTML<button id="my-chat-btn">Написать в поддержку</button>

<script>
  window.SvyazioConfig = {
    orgId: "ВАШ_ORG_ID",
    customWidgetButton: "#my-chat-btn"
  };
</script>

clientId — история между устройствами

JSwindow.SvyazioConfig = {
  orgId: "ВАШ_ORG_ID",
  clientId: "user_" + currentUser.id
};
Важно

clientId должен быть постоянным для пользователя. Не используйте случайные или временные значения.

Миграция с Chatra

Большинство методов Chatra JS API поддерживаются в Связио. Для переноса кода достаточно переименовать объекты и вызовы:

  1. Замените ChatraSetupSvyazioSetup
  2. Замените ChatraIntegrationSvyazioIntegration
  3. Замените все вызовы Chatra('метод')Svyazio('метод')
Переход займёт несколько минут

Основные методы — openChat, hide, show, setIntegrationData, sendAutoMessage и другие — реализованы и работают. Часть редких методов Chatra может отсутствовать — уточните в сводной таблице.

Все методы

МетодАргументыОписание
openChatfocus?Открыть чат
expandWidgetfocus?Открыть (только десктоп)
minimizeWidgetСвернуть чат
closeChatАлиас minimizeWidget
hideСкрыть виджет
showПоказать виджет
setIntegrationDatadataУстановить данные (перезапись)
updateIntegrationDatadataОбновить данные (merge)
setButtonPositioncodeПереместить кнопку
resetButtonPositionВернуть позицию из конфига
setButtonSizesizeРазмер кнопки (px)
setChatWidthwidthШирина окна (px)
setChatHeightheightВысота окна (px)
setZIndexvaluez-index виджета
setColorscolorsИзменить цвета
resetColorsСбросить цвета
setLanguagecodeПереключить язык
setLocalecode | objectЯзык или оверрайд строк
sendAutoMessagetextАвтосообщение от агента
pageViewТрекинг страницы (SPA)
setGroupIdid | nullНаправить в отдел
restartПерезапустить виджет
killУничтожить виджет