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

Обратный вызов VK

POST
/wp-json/wp2tutor-bot/vk/v1/callback/{channel_id}
curl --request POST \
--url https://example.com/wp-json/wp2tutor-bot/vk/v1/callback/12 \
--header 'Content-Type: application/json' \
--data '{ "type": "message_new", "secret": "callback-secret", "object": { "message": { "peer_id": 2000000001, "text": "Привет", "out": 0 } } }'

Callback API сообщества VK. Публичный URL. PHP сначала проверяет, что пост — wp2tutor_channel типа vk, затем token+group_id, затем JSON: поле secret должно совпасть с meta wp2tutor_bot_vk_secret. type=confirmation — строка confirmation из настроек канала; message_new с входящим текстом — AnswerService и messages.send. Успех и часть ошибок — text/plain (VK ждёт raw ok / confirmation, не JSON). plain() ставит Content-Type: text/plain; charset=UTF-8. Ошибка messages.send логируется, клиенту всё равно 200 ok (чтобы VK не засыпал ретраями). invalid_json / secret_required / forbidden из parseInbound уходят JSON {ok, error}: контроллер делает text/plain только если data ответа — строка.

channel_id
required
integer

ID поста CPT wp2tutor_channel, не VK group_id. Обязателен (path (?P<channel_id>\d+)). URL в метабоксе: rest_url( wp2tutor-bot/vk/v1/callback/{post_id} ). <= 0, не wp2tutor_channel или тип канала не vk — 404, тело not_found (text/plain).

Example
12
Media typeapplication/json
object
type

Тип события Callback API. confirmation — вернуть строку confirmation. message_new — разобрать входящее. Любое другое значение (и пустой type) — 200 ok после проверки secret.

string
secret

Секрет Callback API. Сверяется с meta канала. Пустой в настройках канала — 403 secret_required. Не совпал — 403 forbidden.

string
object

Для message_new: object.message (или сам object) с text, peer_id или from_id. out=1 (исходящее сообщества) и пустой текст — 200 ok без ответа пользователю.

object
key
additional properties
any
key
additional properties
any
Example
{
"type": "message_new",
"secret": "callback-secret",
"object": {
"message": {
"peer_id": 2000000001,
"text": "Привет",
"out": 0
}
}
}

text/plain: ok (сообщение обработано, другой type, канал выключен, нет текста) или строка confirmation из meta канала. Не JSON.

Media typetext/plain
string
Example
ok

config_missing — нет VK token или group_id (text/plain, код ошибки как тело). invalid_json — body не JSON-объект (application/json {ok: false, error: invalid_json}).

string
Example
config_missing

secret_required — секрет канала пустой. forbidden — JSON secret пустой или не совпал. Оба — JSON {ok: false, error}, не text/plain.

Media typeapplication/json
object
ok
required

True — вебхук/callback принят (в том числе тихий ack). false — смотри error.

boolean
error

Машинный код при ok: false. Telegram/контроллер: bot_not_found, token_missing, secret_required, forbidden, invalid_json, telegram_api_error. VK JSON: invalid_json, secret_required, forbidden. Не человеческое сообщение и не объект WP_Error.

string
Example
{
"ok": false,
"error": "forbidden"
}

not_found — нет поста wp2tutor_channel или тип не vk. Тело — эта строка, text/plain.

Media typetext/plain
string
Example
not_found