РУКОВОДСТВО ДЛЯ РАЗРАБОТЧИКА

Виджет и пользователь сайта — за несколько строк.

Анонимный чат подключается одной строкой. Если на сайте есть авторизация, передайте ID, email и имя клиента — безопасно с серверной подписью или упрощённо для некритичных данных.

1 МИНУТА

Обычное подключение

Создайте сайт в кабинете, добавьте его домен и вставьте код перед </body>. Публичный ключ можно показывать в браузере.

<script async
  src="https://visitker.com/widget.js"
  data-site="ВАШ_ПУБЛИЧНЫЙ_КЛЮЧ">
</script>

Виджет сам создаёт анонимный ID в браузере, сохраняет историю, определяет русский или английский язык и подключает ответы в реальном времени.

Разрешённые домены

Добавьте точный домен в настройках сайта: например, shop.example.com. HTTPS-страница, с которой приходит запрос, проверяется сервером. Один публичный ключ нельзя незаметно использовать на чужом сайте.

Для тестирования добавляйте staging-домен отдельно. Публичный ключ — не секрет; signing secret никогда не вставляйте в HTML или JavaScript.

Самая простая интеграция с пользователем

Если доверенная верификация пока не нужна, данные можно передать атрибутами. В кабинете они будут отмечены как данные из браузера, а не как подтверждённая личность.

<script async src="https://visitker.com/widget.js"
  data-site="ВАШ_ПУБЛИЧНЫЙ_КЛЮЧ"
  data-user-id="42"
  data-email="client@example.com"
  data-user-name="Анна">
</script>

Этот вариант удобен для быстрого старта, но пользователь браузера теоретически может подменить атрибуты. Для заказов, платежей и персональных данных используйте подпись ниже.

Безопасная серверная подпись

Ваш backend создаёт одноразовый токен HMAC-SHA256. Visitker проверяет подпись, срок, публичный ключ и уникальный jti. Максимальный срок жизни — 24 часа; рекомендуемый — 5 минут.

<?php
$payload = [
  'site_key'   => getenv('VISITKER_SITE_KEY'),
  'external_id'=> (string) $user->id,
  'email'      => $user->email,
  'name'       => $user->name,
  'exp'        => time() + 300,
  'jti'        => bin2hex(random_bytes(16)),
];
$json = json_encode($payload, JSON_UNESCAPED_UNICODE);
$encoded = rtrim(strtr(base64_encode($json), '+/', '-_'), '=');
$token = $encoded.'.'.hash_hmac(
  'sha256', $encoded, getenv('VISITKER_SIGNING_SECRET')
);
?>

<script async src="https://visitker.com/widget.js"
  data-site="<?= htmlspecialchars(getenv('VISITKER_SITE_KEY')) ?>"
  data-identity-token="<?= htmlspecialchars($token) ?>">
</script>
Signing secret показывается один раз при создании сайта. Храните его только на backend в переменной окружения. При утечке немедленно выполните Rotate secret в кабинете.

SPA: вход пользователя и контекст страницы

Для React, Vue и других SPA дождитесь события готовности. Новый подписанный токен получайте с вашего backend непосредственно перед вызовом identify.

document.addEventListener('visitker:ready', async () => {
  await Visitker.identify(
    { externalId: user.id, email: user.email, name: user.name },
    freshIdentityToken
  );

  Visitker.setContext({
    order_id: currentOrder.id,
    plan: account.plan
  });
  });

Ключи контекста сначала разрешите в настройках сайта. При каждом следующем сообщении Visitker отправляет актуальные URL, заголовок страницы и контекст — это работает и после переходов внутри SPA.

Выход и смена аккаунта

На logout обязательно сбросьте локальный диалог. Так следующий человек за тем же браузером не увидит историю предыдущего пользователя.

// Выход
Visitker.resetIdentity();

// Смена аккаунта без перезагрузки
Visitker.resetIdentity();
const token = await fetch('/api/visitker-token').then(r => r.text());
await Visitker.identify(
  { externalId: nextUser.id, email: nextUser.email, name: nextUser.name },
  token
);

Доступны также Visitker.open(), close(), setVisibility(false) и destroy().

Регистрация и установка через Telegram

Пользователь может пройти весь стартовый сценарий прямо в @visitkerbot: отправить /register, указать имя и email (или /skip), затем создать сайт и получить код виджета.

/start       — приветствие или меню
/register   — регистрация workspace
/site       — создать сайт: название → домен
/code       — получить код установки последнего сайта
/login      — одноразовая ссылка входа в кабинет
/active     — активные диалоги и онлайн-посетители
/cancel     — отменить текущий шаг

В уведомлении доступны кнопки «Инфо», «Ответить» и «Ответить на сайте». Кнопка «Ответить» включает ответ прямо в Telegram, а «Активные диалоги» показывает посетителей, которые недавно писали и сейчас находятся на сайте.

После регистрации Telegram подключается автоматически. Ссылка /login действует 15 минут и используется только один раз.

Карточка посетителя и данные визита

После первого сообщения Visitker создаёт карточку посетителя и показывает её оператору: имя или стабильное анонимное имя, email, необязательный телефон, внешний ID, UUID браузера, сайт, страницу, реферер, UTM, контекст и технические данные визита.

Email запрашивается в компактной форме после сообщения; телефон остаётся необязательным. Данные визита обновляются при heartbeat виджета и при каждом новом сообщении.

IP и сведения о браузере относятся к персональным данным. Подключайте понятное уведомление и ссылку на свою политику, настраивайте срок хранения и собирайте согласие там, где это требуется законом.