Идентификация авторизованного покупателя (user_token)

Подпись вашего сервера подтверждает личность покупателя, чтобы AI мог проверять заказы и помогать с оформлением.

Перед тем как AI сможет искать заказы, он должен знать, кто клиент. Личность клиента подтверждается подписью вашего сервера — браузер не может её подделать.

Ключ подписи находится в разделе «Подключение» в админке (виден только владельцу), формат whsec_.... Он используется в обе стороны: вы подписываете им user_token; мы подписываем им webhook-и и запросы на поиск заказов, которые отправляем вам.

Формат user_token: base64url(JSON) + "." + hex(HMAC-SHA256(ключ подписи, base64url(JSON)))

Поля JSON:

ПолеОбязательноОписание
user_idДаID клиента в вашей системе; при поиске заказов возвращается вам без изменений
expДаВремя истечения (Unix-секунды), максимум 7 дней
name / emailНетОтображаются в рабочем месте оператора

Пример на Node.js:

import crypto from "node:crypto"

function signUserToken(user, secret) {
  const payload = { user_id: user.id, name: user.name, email: user.email, exp: Math.floor(Date.now() / 1000) + 3600 }
  const body = Buffer.from(JSON.stringify(payload)).toString("base64url")
  const mac = crypto.createHmac("sha256", secret).update(body).digest("hex")
  return `${body}.${mac}`
}

На странице:

<script>window.AICS_USER_TOKEN = "服务器签发的 user_token"</script>
<!-- 页面加载后才登录的,调用 AICS.identify(token) -->

Можно не встраивать токен в страницу, а добавить к script атрибут data-user-token-url="/ваш-адрес": перед началом диалога окно поддержки отправит запрос с cookie клиента на этот же origin, и адрес должен вернуть {"token": "user_token"} (если клиент не авторизован — {"token": null}). Если в магазине Shopify установлено приложение Yinke, окно чата автоматически получает такую идентификацию авторизованного клиента — отдельно подключать ничего не нужно.

Эта страница была полезной?

Обновлено: