Данные клиентов в чате: заказы, доставка, счета
Позвольте ИИ-ассистенту отвечать вошедшим клиентам об их собственных заказах: безопасная подписанная идентификация, точно выбранные поля, запрос данных из магазина или импорт.
С данными клиентов ИИ-ассистент отвечает на вопросы «Где моя посылка?», «Оплачен ли мой счёт?» или «Что было в последнем заказе?» — для вошедших клиентов и только об их собственных данных. Функция доступна на платных тарифах.
Как защищены данные
- Браузер ничего не доказывает. Ни номер заказа или счёта, ни адрес электронной почты, ни что-либо показанное на странице или написанное в чате не дают доступа. Кто какие данные может видеть, определяется исключительно идентификационными данными, подписанными вашим сервером.
- Номер — только фильтр. Если клиент называет номер заказа, поиск идёт только среди его собственных заказов. Чужой номер ничего не возвращает.
- Вы решаете по каждому полю. Ассистент получает только включённые вами поля. Всё остальное отбрасывается при получении, даже если магазин прислал это.
- Без хранилища у нас (при запросе). В режиме запроса reactive.chat обращается к магазину для каждого вопроса и не сохраняет ответ. При импорте данные хранятся у нас зашифрованными и удаляются не позднее чем через 90 дней.
- Только наши собственные машины. Данные поступают только на наши ИИ-серверы (или ваш собственный узел ИИ), никогда в сторонний ИИ-сервис.
Условие: подтверждение личности
Ассистент использует данные клиентов только для посетителей, чью личность подтвердил ваш сервер. Настройте секрет в аккаунте в Проект → Подтверждение личности. Он остаётся на сервере и никогда не должен попадать в браузер или код встраивания.
Для каждого вошедшего клиента сервер вычисляет хеш со сроком действия (не более 24 часов вперёд) и передаёт его виджету:
$userId = (string) $customer->id;
$exp = time() + 3600;
$hash = hash_hmac('sha256', $userId . '.' . $exp, getenv('RC_IDENT_SECRET'));
echo "<script>ReactiveChat('identify', { userId: " . json_encode($userId)
. ", userHash: " . json_encode($hash) . ", exp: " . $exp . " });</script>";
const crypto = require('crypto');
const exp = Math.floor(Date.now() / 1000) + 3600;
const hash = crypto.createHmac('sha256', process.env.RC_IDENT_SECRET)
.update(String(user.id) + '.' + exp).digest('hex');
// in the template: ReactiveChat('identify', { userId: '<id>', userHash: '<hash>', exp: <exp> });
Хеш без exp по-прежнему подтверждает посетителя (например, для истории разговоров), но для данных клиентов недостаточен. При обновлении секрета старый остаётся действительным 24 часа.
Подпись электронной почты (для бронирования встреч и интеграций по адресу почты). Поле email рядом с хешем считается подтверждённым, только если входит в подпись: userHash = HMAC-SHA256(secret, userId + "." + exp + "." + email) — адрес ровно в том виде, в котором вы передаёте его в identify. Иначе посетитель остаётся вошедшим, но ассистент не забронирует встречу для этого адреса, а интеграции не будут искать его. Прежний вариант userId + "." + exp продолжает работать без изменений.
Запрос, импорт или оба способа
В Проект → Данные клиентов выберите, откуда ассистент получает данные:
- Запрашивать из магазина — reactive.chat вызывает конечную точку для каждого подходящего вопроса. Данные остаются у вас. Рекомендуется.
- Импорт через API — магазин отправляет заказы клиента в reactive.chat. Полезно, если магазин не может предоставить конечную точку.
- Оба способа — сначала импортированные данные; если там ничего нет, выполняется запрос.
Какие данные может получать ассистент
Каждое поле включается отдельно. Значения по умолчанию покрывают обычные вопросы:
bestellung.nummer— номер заказа. По умолчанию: всегда включено. Для чего: обязательно — заказа без номера нетbestellung.datum— дата заказа (YYYY-MM-DD). По умолчанию: включено. Для чего: «Когда я сделал заказ?»bestellung.status— статус заказа текстом. По умолчанию: включено. Для чего: «Заказ уже отправлен?»bestellung.summe— общая сумма. По умолчанию: включено. Для чего: «Сколько я заплатил?»bestellung.waehrung— валюта (ISO, например EUR). По умолчанию: включено. Для чего: только вместе с суммойpositionen.name— название позиции. По умолчанию: включено. Для чего: «Что было в заказе?»positionen.menge— количество каждой позиции. По умолчанию: включено. Для чего: «Сколько я заказал?»versand.dienst— перевозчик. По умолчанию: включено. Для чего: «Кто доставляет посылку?»versand.sendungsnummer— номер отслеживания. По умолчанию: включено. Для чего: «Где моя посылка?»versand.status— статус доставки текстом. По умолчанию: включено. Для чего: «Она уже в пути?»versand.ort— город адреса доставки. По умолчанию: отключено. Для чего: «Куда идёт посылка?»versand.plz— индекс адреса доставки. По умолчанию: отключено. Для чего: как вышеrechnung.nummer— номер счёта. По умолчанию: включено. Для чего: «Какой счёт относится к заказу?»rechnung.status— статус оплаты текстом. По умолчанию: включено. Для чего: «Оплачен ли мой счёт?»rechnung.faellig_am— срок оплаты. По умолчанию: включено. Для чего: «Когда нужно заплатить?»
Отключённое поле никогда не доходит до ассистента: при запросе оно отбрасывается, при импорте вообще не сохраняется. Город и индекс намеренно доступны только при явном включении; улица и имя исключены всегда.
Что никогда не передаётся
Это нельзя включить. Если магазин отправит такие данные, они отбрасываются:
- улица, номер дома и дополнительные строки адреса
- имя получателя или клиента
- адрес электронной почты и телефон
- IBAN, BIC, номер счёта и данные карт
- дата рождения
- пароли, токены и ключи доступа
- налоговые и идентификационные номера
Ограничения
Не более 10 заказов в ответе, до 20 позиций на заказ, тексты не длиннее 200 символов, весь ответ не более 16 кБ. Неизвестные поля отбрасываются без ошибки.
Конечная точка запроса
reactive.chat вызывает вашу конечную точку через POST:
POST https://shop.your-domain.com/rc-customer-data
Content-Type: application/json
X-RC-Zeit: 1791196400
X-RC-Signatur: <hex(HMAC_SHA256(endpoint secret, X-RC-Zeit + "." + body))>
{"user_id":"4711","anliegen":"bestellung","referenz":"2026-0815","sprache":"en","nonce":"..."}
user_id— подтверждённый ID клиента из проверки личности; никогда не значение из чата.anliegen—bestellung(заказ),lieferung(доставка),rechnung(счёт),retoure(возврат) илиtestдля кнопки проверки.referenz— названный клиентом номер или пустое значение. Ищите только среди заказов этогоuser_id.
Ваша конечная точка должна:
- проверять подпись (сравнением с постоянным временем) и отклонять запросы, если
X-RC-Zeitотличается более чем на 5 минут; - возвращать только данные указанного
user_id; - быть доступной через
httpsна порту 443 по публичному адресу, без перенаправлений; - отвечать за 3 секунды.
Ответ:
{
"bestellungen": [
{
"nummer": "2026-0815", "datum": "2026-09-28", "status": "shipped",
"summe": "49.90", "waehrung": "EUR",
"positionen": [ { "name": "Balance bike blue", "menge": 1 } ],
"versand": { "dienst": "DHL", "sendungsnummer": "00340434...", "status": "out for delivery" },
"rechnung": { "nummer": "R-2026-1201", "status": "paid", "faellig_am": "2026-10-12" }
}
]
}
Полный пример PHP доступен в документации разработчика (kundendaten-referenz-endpunkt.php).
Через Проверить соединение reactive.chat вызывает конечную точку с user_id rc-test и типом запроса test и показывает результат. Верните для него пустой список или образец заказа.
Импорт через API
С API-ключом, у которого есть право kundendaten:schreiben:
PUT https://reactive.chat/v1/kundendaten/4711?project_id=123
Authorization: Bearer <API key>
Content-Type: application/json
{"bestellungen":[ ... as above ... ]}
project_id — номер вашего проекта; если в рабочем пространстве только один проект, его можно не указывать. PUT заменяет все заказы этого ID клиента (не более 50). DELETE /v1/kundendaten/4711?project_id=123 удаляет их. Импортированные данные хранятся у нас зашифрованными и удаляются через 90 дней после последнего импорта; поэтому постоянно передавайте изменения, например при каждой смене статуса.
Посетители без входа
Если человек без подтверждённой личности спрашивает о заказе, ассистент ничего не запрашивает. Вместо этого показывает уведомление из Проект → Данные клиентов: текст для каждого языка и необязательную ссылку входа. Другой вариант — передать вопрос команде.
Что сохраняется
- Запрос: ответ магазина используется только для одного ответа ассистента и не сохраняется ни в разговоре, ни в базе знаний.
- Импорт: в зашифрованном виде, до 90 дней, удаляется вместе с проектом.
- Ответ ассистента появляется в истории разговора как обычное сообщение. Команда видит его в панели управления.
Устранение неполадок
- Ассистент просит клиента войти, хотя он уже вошёл: если
expотсутствует, истёк или хеш не совпадает, посетитель не считается подтверждённым. Проверьте секрет, порядокuserId + "." + expи часы сервера. - Кнопка проверки сообщает «Адрес не разрешён»: конечная точка должна быть доступна через
httpsпо публичному адресу; внутренние адреса и другие порты отклоняются. - На вашей стороне ошибка подписи: подписываемая строка —
X-RC-Zeit + "." + bodyс секретом конечной точки; в точности полученное тело, не перекодированное. - В ответе ассистента нет поля: включено ли оно в «Какие данные может получать ассистент»?
Подробнее в документации
Подробное описание: Конечная точка данных клиентов. Все главы собраны в документации.
Обновлено: