Прямой Диалог документация
На сайт Войти в панель

Подтверждение ключей подписью

Если по ключу показывается что-то важное — скидка, статус «оплачено», доступ к истории заказов, — ключ нужно подтвердить подписью вашего сервера. Тогда чат отличает «страница сказала, что это клиент 98765» от «сервер сайта подтвердил, что это клиент 98765».

Как это работает #

  1. Ваш сервер (там, где посетитель уже авторизован) выпускает короткоживущий токен — JWT HS256 на секрете подписи личности из панели.
  2. Страница передаёт его вместе с ключами.
  3. Подтверждёнными считаются ключи, которые есть и в вызове, и в токене. Остальные приходят как обычные, неподтверждённые.
DirectDialog.push(['identify', {
  keys: ['user:98765'],
  token: '<выпущенный вашим сервером JWT>'
}]);

Полезная нагрузка токена #

{
  "site": "shop.ru",            // код сайта в «Прямом Диалоге»
  "keys": ["user:98765"],       // какие ключи подтверждаем
  "iat": 1789401600,            // необязательно, не из будущего
  "exp": 1789405200             // обязательно, не дальше 24 часов
}

Пример выпуска на PHP:

function ddIdentityToken(array $keys, string $site, string $secret, int $ttl = 3600): string
{
    $head = rtrim(strtr(base64_encode('{"alg":"HS256","typ":"JWT"}'), '+/', '-_'), '=');
    $body = rtrim(strtr(base64_encode(json_encode([
        'site' => $site,
        'keys' => array_values($keys),
        'iat'  => time(),
        'exp'  => time() + $ttl,
    ])), '+/', '-_'), '=');
    $sig  = rtrim(strtr(base64_encode(hash_hmac('sha256', "$head.$body", $secret, true)), '+/', '-_'), '=');
    return "$head.$body.$sig";
}

Галочка «Доверять только подтверждённым ключам» в настройках сайта делает подпись обязательной: неподтверждённые ключи перестают учитываться — ни склейки устройств, ни меток по ним не будет. Включайте её, когда фронтенд уже научился передавать токен, иначе узнавание посетителей просто выключится.