Данные фрагментов RAG для DataTables
const url = 'https://example.com/wp-json/wp2tutor/rag/v1/datatables?draw=1&start=0&length=25&search%5Bvalue%5D=%D1%8D%D0%BC%D0%B1%D0%B5%D0%B4%D0%B4%D0%B8%D0%BD%D0%B3&order%5B0%5D%5Bcolumn%5D=6&order%5B0%5D%5Bdir%5D=desc';const options = {method: 'GET', headers: {'X-WP-Nonce': '<X-WP-Nonce>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://example.com/wp-json/wp2tutor/rag/v1/datatables?draw=1&start=0&length=25&search%5Bvalue%5D=%D1%8D%D0%BC%D0%B1%D0%B5%D0%B4%D0%B4%D0%B8%D0%BD%D0%B3&order%5B0%5D%5Bcolumn%5D=6&order%5B0%5D%5Bdir%5D=desc' \ --header 'X-WP-Nonce: <X-WP-Nonce>'Серверная выдача SQLite-фрагментов текущего блога в формате DataTables. PHP ChunksDataTablesController::datatables: array_merge(get_query_params(), get_body_params()) — JSON-тело не читается.
Админка (chunks_datatable.js) шлёт GET с X-WP-Nonce, pageLength 25, сортировка [[6, desc]] (колонка created_at). Поиск LIKE по content, id_post, id_chunk, content_hash, metadata. Нет PDO — recordsTotal/recordsFiltered 0, data []. Нужно manage_options. Не рантайм чата.
Authorizations
Заголовок раздела «Authorizations»Parameters
Заголовок раздела «Parameters»Query Parameters
Заголовок раздела «Query Parameters»Счётчик DataTables. PHP (int), затем max(1, …); по умолчанию 1. Эхо в ответе draw.
Example
1OFFSET выборки. PHP max(0, (int)), по умолчанию 0.
Example
0LIMIT. PHP min(100, max(1, (int))), по умолчанию 25. Админка lengthMenu 25/50/75/100.
Example
25Строка поиска DataTables. PHP: $params['search']['value'], sanitize_text_field. LIKE %term% по content, id_post, id_chunk, content_hash, metadata. Пусто — без фильтра.
Example
эмбеддингИндекс колонки DataTables (order[0][column]). PHP (int), по умолчанию 3. ChunkReadModel: 1 → status, 2 → id_chunk, 5 → id_post, 6 → created_at; иное (в т.ч. 3 — превью, 4 — metadata) → created_at. Админка по умолчанию колонка 6.
Example
6Направление (order[0][dir]). PHP sanitize_key, затем ASC только если строка ASC (без учёта регистра), иначе DESC. По умолчанию desc.
Example
descResponses
Заголовок раздела «Responses»DataTables { draw, recordsTotal, recordsFiltered, data }. draw — эхо (min 1). recordsTotal — COUNT по id_site. recordsFiltered — COUNT после search.
object
Эхо входного draw после max(1, …).
COUNT(*) чанков текущего id_site без поиска. Нет PDO — 0.
COUNT(*) после LIKE-поиска (или равно recordsTotal, если search пуст). Нет PDO — 0.
Строки страницы (LIMIT/OFFSET). Не payload WP_Error/лицензии.
object
PHP всегда ''. Чекбокс рисует клиент DataTables, не REST.
ChunkStatus строки SQLite (0 PENDING, 1 ACTIVE, 2 INDEXING, −1 ERROR).
Эмодзи PHP match: 1 → 🟢, 2 → 🔵, −1 → 🔴, иначе ⚪ (в т.ч. PENDING 0).
ID фрагмента.
Первое предложение content (до .?! + пробел) или первые 200 символов; HTML снят, пробелы схлопнуты.
HTML из JSON metadata (source.post_type/anchor, taxonomies). Невалидный JSON — ''.
object
Id_post чанка (запись WordPress, из которой нарезан фрагмент).
Get_the_title(id_post); нет заголовка — ''.
Get_edit_post_link(id_post, raw); если не строка — ''.
UTC mysql datetime из SQLite (как current_time(‘mysql’, true)).
Локальное wp_date('d.m.Y H:i') после get_date_from_gmt.
Example
{ "draw": 1, "recordsTotal": 120, "recordsFiltered": 8, "data": [ { "select": "", "status": 1, "status_icon": "🟢", "id_chunk": 42, "content_preview": "Эмбеддинг — векторное представление текста.", "metadata_html": "<div class=\"wp2tutor-rag-meta\"><h4>Source</h4><ul><li><strong>post_type:</strong> page</li></ul></div>", "source_post": { "id": 15, "title": "Введение в RAG", "edit": "https://example.com/wp-admin/post.php?post=15&action=edit" }, "created_at": "2026-09-13 10:00:00", "created_at_human": "13.09.2026 13:00" } ]}Не аутентифицирован. DualRest: rest_forbidden (status 401), если нет cookie-сессии. Cookie + X-WP-Nonce или Application Password.
object
Код WP_Error. Для POST /chat 401 — rest_forbidden. DualRest cookie — rest_forbidden / rest_not_logged_in / rest_cookie_invalid_nonce.
Сообщение WP_Error (для секрета чата — Missing or invalid secret.).
Обычно { status: HTTP-код }, как PHP кладёт в WP_Error data.
object
Example
{ "code": "rest_forbidden", "message": "Missing or invalid secret.", "data": { "status": 401 }}Нет права manage_options или невалидный REST nonce. WordPress REST: rest_forbidden / rest_cookie_invalid_nonce.
object
Код WP_Error. Для POST /chat 401 — rest_forbidden. DualRest cookie — rest_forbidden / rest_not_logged_in / rest_cookie_invalid_nonce.
Сообщение WP_Error (для секрета чата — Missing or invalid secret.).
Обычно { status: HTTP-код }, как PHP кладёт в WP_Error data.
object
Example
{ "code": "rest_forbidden", "message": "Missing or invalid secret.", "data": { "status": 401 }}