Перейти к содержимому

Эндпоинт сообщений Deep Chat

POST
/wp-json/wp2tutor-bot/deepchat/v1/chat/{channel_id}
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.

channel_id
required
integer

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
123
Media typeapplication/json
object
messages
required

Массив сообщений виджета Deep Chat. Обязателен и непустой, иначе 400. PHP ищет с конца первое role=user с непустым text; в LLM уходит окно последних ~12 реплик (user / ai|assistant / system).

Array<object>
object
role

Роль в чате виджета: user, ai или assistant, system. Не роль пользователя WordPress. Для разбора входа нужна хотя бы одна user.

string
text

Текст реплики виджета. Пустой text у user-сообщений PHP пропускает.

string
Example
{
"messages": [
{
"role": "user",
"text": "Привет"
}
]
}

Ответ модели. Тело только {text} — строка PHP $reply. Полей апстрима нет.

Media typeapplication/json
object
text
required

Текст ответа ассистента. Единственное поле 200: PHP WP_REST_Response( [ 'text' => $reply ], 200 ).

string
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}.

Media typeapplication/json
object
error
required

Человекочитаемая строка (__() / message WP_Error / текст LLM). PHP: {error: $message}. Не машинный код Telegram/VK и не {code,message,data}.

string
Example
{
"error": "messages array is required."
}

Invalid secret. — заголовок пустой или не совпал с секретом канала (канал найден и секрет в meta задан).

Media typeapplication/json
object
error
required

Человекочитаемая строка (__() / message WP_Error / текст LLM). PHP: {error: $message}. Не машинный код Telegram/VK и не {code,message,data}.

string
Example
{
"error": "Invalid secret."
}

Forbidden. — зарезервировано под DualRest/capability, если запрос трактуется как cookie-сессия (обычно неверный секрет даёт 401).

Media typeapplication/json
object
error
required

Человекочитаемая строка (__() / message WP_Error / текст LLM). PHP: {error: $message}. Не машинный код Telegram/VK и не {code,message,data}.

string
Example
{
"error": "Forbidden."
}

Channel not found. — нет поста wp2tutor_channel или тип не deepchat.

Media typeapplication/json
object
error
required

Человекочитаемая строка (__() / message WP_Error / текст LLM). PHP: {error: $message}. Не машинный код Telegram/VK и не {code,message,data}.

string
Example
{
"error": "Channel not found."
}

Too many requests. Please try again later. — больше 20 запросов за 60 с с этого IP на этот канал.

Media typeapplication/json
object
error
required

Человекочитаемая строка (__() / message WP_Error / текст LLM). PHP: {error: $message}. Не машинный код Telegram/VK и не {code,message,data}.

string
Example
{
"error": "Too many requests. Please try again later."
}

Failed to encode prompt. — wp_json_encode промпта не вернул строку.

Media typeapplication/json
object
error
required

Человекочитаемая строка (__() / message WP_Error / текст LLM). PHP: {error: $message}. Не машинный код Telegram/VK и не {code,message,data}.

string
Example
{
"error": "Failed to encode prompt."
}

Канал выключен (Channel disabled.), секрет канала не задан (Channel secret is not configured.), модуль Ai недоступен/выключен, сбой LLM или пустой ответ модели. Тело {error} с message из PHP.

Media typeapplication/json
object
error
required

Человекочитаемая строка (__() / message WP_Error / текст LLM). PHP: {error: $message}. Не машинный код Telegram/VK и не {code,message,data}.

string
Example
{
"error": "WP2Tutor Ai module is not available."
}