Эндпоинт сообщений Deep Chat
const url = 'https://example.com/wp-json/wp2tutor-bot/deepchat/v1/chat/123';const options = { method: 'POST', headers: { 'X-Wp2tutor-Bot-Secret': '<X-Wp2tutor-Bot-Secret>', 'Content-Type': 'application/json' }, body: '{"messages":[{"role":"user","text":"Привет"}]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://example.com/wp-json/wp2tutor-bot/deepchat/v1/chat/123 \ --header 'Content-Type: application/json' \ --header 'X-Wp2tutor-Bot-Secret: <X-Wp2tutor-Bot-Secret>' \ --data '{ "messages": [ { "role": "user", "text": "Привет" } ] }'Контракт виджета Deep Chat connect. Публичный POST: cookie/nonce не проверяются. Заголовок X-Wp2tutor-Bot-Secret должен совпасть с meta wp2tutor_bot_dc_secret. CORS открыт (Origin запроса или *); whitelist dc_origins в этом контроллере не применяется.
Тело запроса — {messages: [{role, text}, …]} (как шлёт виджет). PHP требует непустой массив messages и хотя бы одно сообщение role=user с непустым text. Ответ успеха — только {text} (строка от LlmAnswerService / ChatProxyService). Ошибки слоя — {error} с человекочитаемой строкой, не WP_Error {code,message,data} и не машинный код Telegram/VK.
Лимит: 20 запросов / 60 с на ключ deepchat|{IP}|{channel_id} (RequestRateLimiter). Нужен включённый модуль Ai WP2Tutor.
Authorizations
Заголовок раздела «Authorizations»Parameters
Заголовок раздела «Parameters»Path Parameters
Заголовок раздела «Path Parameters»ID поста CPT wp2tutor_channel типа deepchat. Обязателен (path (?P<channel_id>\d+)). URL в метабоксе и в примере connect: …/deepchat/v1/chat/{post_id}. Не id сессии виджета. <= 0, не wp2tutor_channel или тип не deepchat — 404 {error}.
Example
123Request Bodyrequired
Заголовок раздела «Request Bodyrequired»object
Массив сообщений виджета Deep Chat. Обязателен и непустой, иначе 400. PHP ищет с конца первое role=user с непустым text; в LLM уходит окно последних ~12 реплик (user / ai|assistant / system).
object
Роль в чате виджета: user, ai или assistant, system. Не роль пользователя WordPress. Для разбора входа нужна хотя бы одна user.
Текст реплики виджета. Пустой text у user-сообщений PHP пропускает.
Example
{ "messages": [ { "role": "user", "text": "Привет" } ]}Responses
Заголовок раздела «Responses»Ответ модели. Тело только {text} — строка PHP $reply. Полей апстрима нет.
object
Текст ответа ассистента. Единственное поле 200: PHP WP_REST_Response( [ 'text' => $reply ], 200 ).
Example
{ "text": "Краткий ответ ассистента"}Пустой body, не JSON, нет массива messages, нет user-текста (Empty request body. / Invalid JSON. / messages array is required. / No user message found.), либо Could not build a prompt from messages. Тело {error}.
object
Человекочитаемая строка (__() / message WP_Error / текст LLM). PHP: {error: $message}. Не машинный код Telegram/VK и не {code,message,data}.
Example
{ "error": "messages array is required."}Invalid secret. — заголовок пустой или не совпал с секретом канала (канал найден и секрет в meta задан).
object
Человекочитаемая строка (__() / message WP_Error / текст LLM). PHP: {error: $message}. Не машинный код Telegram/VK и не {code,message,data}.
Example
{ "error": "Invalid secret."}Forbidden. — зарезервировано под DualRest/capability, если запрос трактуется как cookie-сессия (обычно неверный секрет даёт 401).
object
Человекочитаемая строка (__() / message WP_Error / текст LLM). PHP: {error: $message}. Не машинный код Telegram/VK и не {code,message,data}.
Example
{ "error": "Forbidden."}Channel not found. — нет поста wp2tutor_channel или тип не deepchat.
object
Человекочитаемая строка (__() / message WP_Error / текст LLM). PHP: {error: $message}. Не машинный код Telegram/VK и не {code,message,data}.
Example
{ "error": "Channel not found."}Too many requests. Please try again later. — больше 20 запросов за 60 с с этого IP на этот канал.
object
Человекочитаемая строка (__() / message WP_Error / текст LLM). PHP: {error: $message}. Не машинный код Telegram/VK и не {code,message,data}.
Example
{ "error": "Too many requests. Please try again later."}Failed to encode prompt. — wp_json_encode промпта не вернул строку.
object
Человекочитаемая строка (__() / message WP_Error / текст LLM). PHP: {error: $message}. Не машинный код Telegram/VK и не {code,message,data}.
Example
{ "error": "Failed to encode prompt."}Канал выключен (Channel disabled.), секрет канала не задан (Channel secret is not configured.), модуль Ai недоступен/выключен, сбой LLM или пустой ответ модели. Тело {error} с message из PHP.
object
Человекочитаемая строка (__() / message WP_Error / текст LLM). PHP: {error: $message}. Не машинный код Telegram/VK и не {code,message,data}.
Example
{ "error": "WP2Tutor Ai module is not available."}