Диалоги
Покажите покупателю список его диалогов, дайте продолжить выбранный разговор или убрать его из истории. Сообщения выбранного диалога загружаются отдельным методом истории.
Список и скрытие требуют Authorization: Bearer gst_.... Сервер определяет секцию и resourceId по гостевому токену. Используйте идентификатор из основной интеграции Gravity Field: user.uid либо применяемый user.custom. Один токен подходит для нескольких диалогов этого пользователя. Статический API-ключ не заменяет гостевой токен.
Список диалогов
GET /shopping/dialogs
Переменная окружения GUEST_ACCESS_TOKEN в примерах содержит полный токен сохранённой гостевой сессии.
curl --request GET \
--url 'https://shopping-assistant-api.gravityfield.ai/shopping/dialogs?limit=20' \
--header "Authorization: Bearer $GUEST_ACCESS_TOKEN"
Тело запроса не требуется. Не передавайте tenant_id, resourceId или другие query-параметры вне таблицы — API вернёт 400.
Ответ списка
API возвращает 200 OK:
{
"items": [
{
"threadId": "thread-8f2b1c",
"title": "Помоги выбрать корм для котёнка",
"createdAt": "2026-10-16T10:00:00.000000Z",
"lastMessageAt": "2026-10-16T10:01:00.000000Z"
}
],
"pagination": {
"hasMore": false,
"nextCursor": null
}
}
В список попадают только доступные пользователю диалоги с сохранёнными сообщениями. Пустые и скрытые диалоги не возвращаются. При отсутствии диалогов ответ содержит items: [], hasMore: false и nextCursor: null.
Последние активные диалоги идут первыми. При одинаковом времени последнего сообщения используется порядок threadId по убыванию. Служебные сообщения не меняют порядок списка.
Если hasMore равно true, передайте nextCursor в query-параметре cursor следующего запроса. Курсор привязан к владельцу и типу списка: не разбирайте его, не изменяйте и кодируйте как значение URL-параметра. Он не заменяет токен. Неверный или чужой курсор возвращает 400 INVALID_CURSOR.
Список обновляется по мере общения. После продолжения диалога заново загрузите первую страницу и объедините записи по threadId, чтобы обновить порядок и избежать дублей.
Открытие и продолжение
- Возьмите
threadIdиз списка и загрузите сообщения черезPOST /shopping/historyс пагинацией с конца. - Отобразите полученные сообщения. Историю не нужно повторно отправлять в генерацию.
- Чтобы продолжить разговор, вызовите
POST /shopping/generateс тем жеthreadId,resourceIdи гостевым токеном, передав только новое сообщение. - Для действия «Новый чат» создайте новый
threadId, сохранив прежний идентификатор пользователя и действующий токен.
Отдельного метода создания пустого диалога нет: используйте первый запрос обычной генерации. При смене страницы сохраняйте текущий threadId, а в новом запросе генерации передавайте актуальный контекст страницы.
Убрать из истории
DELETE /shopping/dialogs/{threadId}
Передайте ID выбранного диалога в пути и гостевой токен в заголовке. Тело запроса не требуется:
curl --request DELETE \
--url 'https://shopping-assistant-api.gravityfield.ai/shopping/dialogs/thread-8f2b1c' \
--header "Authorization: Bearer $GUEST_ACCESS_TOKEN"
После успешного скрытия API возвращает 204 No Content. Повторное скрытие своего диалога также возвращает 204. Для чужого или отсутствующего диалога ответ — 404 DIALOG_NOT_FOUND.
После скрытия:
- диалог исчезает из списка;
- чтение сообщений, продолжение, оценка и создание публичных ссылок возвращают
404, включая прежний API истории, debug-генерацию и повтор генерации; - ранее созданные публичные ссылки перестают открываться;
- сообщения остаются для аналитики магазина, а сохранённые предпочтения — для персонализации. Восстановление диалога через API не предусмотрено.
Называйте действие в интерфейсе «Убрать из истории»: оно не удаляет персональные данные. После 204 уберите диалог из интерфейса. Уже выполняющийся запрос может завершиться после скрытия — не возвращайте его поздний ответ в список и не вставляйте в другой открытый чат.
Ошибки и ограничения
Ответы используют Cache-Control: no-store. Не помещайте список в общий или публичный кеш. CORS разрешает Authorization и методы GET/DELETE; запросы OPTIONS не требуют токена.
Список и скрытие не объединяют историю сайта и приложения через аккаунт магазина. Доступ определяется текущей гостевой сессией.