Дані клієнтів у чаті: замовлення, доставка, рахунки
Дозвольте ШІ-асистенту відповідати клієнтам, які ввійшли, про їхні власні замовлення: безпечно, з підписаною ідентифікацією, чітко визначеними полями, запитом до магазину або імпортом.
З даними клієнтів ШІ-асистент відповідає на запитання на кшталт «Де моя посилка?», «Чи оплачено мій рахунок?» або «Що було в останньому замовленні?» — для клієнтів, які ввійшли, і лише про їхні власні дані. Функція доступна на платних тарифах.
Як захищено дані
- Браузер нічого не доводить. Ані номер замовлення чи рахунку, ані електронна адреса, ані щось на сторінці чи в чаті не надають доступу. Хто які дані може бачити, визначається лише ідентифікацією, підписаною вашим сервером.
- Номер — лише фільтр. Якщо клієнт називає номер замовлення, його шукають лише серед власних замовлень цього клієнта. Чужий номер нічого не повертає.
- Ви визначаєте кожне поле. Асистент отримує лише ввімкнені вами поля. Решта відкидається після надходження, навіть якщо магазин її надіслав.
- Без сховища на нашому боці (запит). У режимі запиту 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із секретом кінцевої точки; саме отримане тіло, без повторного кодування. - У відповіді асистента бракує поля: чи ввімкнене воно в розділі «Які дані може отримувати асистент»?
Докладніше в документації
Докладно: Кінцева точка даних клієнтів. Усі розділи є в документації.
Оновлено: