Данный сайт является КЛОНОМ оффициальной документации dev.vk.com
Настоятельно рекомендуется воздержаться от ввода личной информации.
Сайт создан на случай падения оффициальной документации.

Дата создания: 13.11.2022

Схема взаимодействия со скиллом

  1. 1.
    Пользователь произносит фразу для вызова скилла.
  2. 2.
    Получив и распознав выражение, сервер Маруси отправляет POST-запрос на Webhook URL, который вы указали в настройках.
  3. 3.
    Обработчик скилла должен ответить на полученный от сервера Маруси запрос. Тайм-аут ожидания ответа — 5 секунд, после чего сервер Маруси завершит сессию.

Фраза вызова скилла строится по следующей схеме:

Слово «Маруся» + любая из дефолтных фраз вызова скилла + фраза активации

Дефолтные фразы вызова скилла:

  • хочу скилл/навык;
  • запусти скилл/навык;
  • включи скилл/навык;
  • открой скилл/навык.

Примеры фраз, которые пользователь произносит, чтобы вызвать скилл:

Маруся, запусти навык «Шутка дня»!

Маруся, включи скилл «Шутка дня»!

Тестирование скилла

При создании скилла по умолчанию доступ к нему имеют только его администраторы. Чтобы проверить скилл, авторизуйтесь в приложении «Маруся» для Android или iOS через VK Connect, используя номер телефона, привязанный к учётной записи ВКонтакте.

Запустить скилл можно как голосовой командой, так и при помощи чата в приложении.

Протестировать и исправить ошибки можно в отладчике скиллов.

Формат POST-запроса на Webhook URL

Обратите внимание: разработчики Маруси оставляют за собой право добавлять любые новые поля в JSON, внешний скилл не должен из-за этого ломаться.

Запрос содержит четыре поля:

Структура запроса

ПолеТипОписание
metametaИнформация об устройстве, с помощью которого пользователь общается с Марусей.
requestrequestДанные, полученные от пользователя.
sessionsessionДанные о сессии.
versionstringВерсия протокола. Текущая — 1.0.

meta

ПолеТипОписание
localestringЯзык в POSIX-формате, максимум 64 символа.
timezonestringНазвание часового пояса, включая алиасы, максимум 64 символа.
interfacesarrayИнтерфейсы, доступные на устройстве пользователя. Сейчас всегда присылается screen — пользователь может видеть ответ скилла на экране и открывать ссылки в браузере.

session

ПолеТипОписание
session_idstringУникальный идентификатор сессии, максимум 64 символа.
user_id (deprecated)stringИдентификатор экземпляра приложения, в котором пользователь общается с Марусей, максимум 64 символа. Важно! Это поле устарело, вместо него стоит использовать session.application.application_id (см. ниже).
skill_idstringИдентификатор вызываемого скилла, присвоенный при создании. Соответствует полю «Маруся ID» в настройках скилла.
newbooleanПризнак новой сессии:    • true — пользователь начинает новый разговор с вызова навыка,    • false — запрос отправлен в рамках уже начатого разговора.
message_idintegerИдентификатор сообщения в рамках сессии, максимум 8 символов. Инкрементируется с каждым следующим запросом.
useruserДанные о пользователе. Передаётся, только если пользователь авторизован. (см. ниже).
applicationapplicationДанные об экземпляре приложения (см. ниже).
auth_tokenobjectАвторизационный токен Маруси.

user

ПолеТипОписание
user_idstringИдентификатор аккаунта пользователя (максимум 64 символа). Уникален в разрезе: «скилл + аккаунт».

application

ПолеТипОписание
application_idstringИдентификатор экземпляра приложения, в котором пользователь общается с Марусей (максимум 64 символа). Уникален в разрезе: «скилл + приложение (устройство)».
application_typestringТип приложения (устройства). Возможные значения:    • mobile;    • speaker;    • VK;    • other.

request

ПолеТипОписание
commandstringПользовательский текст, очищенный от слов, не влияющих на смысл предложения. В ходе преобразования текст, в частности, очищается от знаков препинания, удаляются обращения к Марусе и слова, выражающие просьбу, например «пожалуйста», «слушай» и т. д., числительные преобразуются в числа. При завершении скилла (по команде «стоп», «выход» и так далее) в него будет передана команда on_interrupt, чтобы у скилла была возможность попрощаться с пользователем.
original_utterancestringПолный текст пользовательского запроса, максимум 1024 символа.
typestringТип ввода, обязательное свойство. Возможные значения:    • SimpleUtterance — голосовой ввод;    • ButtonPressed — нажатие кнопки.
payloadobjectJSON, полученный с нажатой кнопкой от обработчика скилла (в ответе на предыдущий запрос), максимум 4 096 байт. Передаётся, только если была нажата кнопка с payload.
nluobjectОбъект, содержащий слова и именованные сущности, которые Маруся извлекла из запроса пользователя, в поле tokens (array).

Пример запроса

JSON{ "meta": { "client_id": "MailRu-VC/1.0", "locale": "ru_RU", "timezone": "Europe/Moscow", "interfaces": { "screen": {} } }, "request": { "command": "какая очередь в столовой", "original_utterance": "какая очередь в столовой", "type": "SimpleUtterance", "payload": {}, "nlu": { "tokens": [ "какая", "очередь", "в", "столовой" ] } }, "session": { "session_id": "01bfd28fe3a326-c-2-fea35db06d4-a8930", "user_id": "f63bc4d9e9c89abe10fbe874b5400b67c0df41f86143ec22629b00be606a1dac", "skill_id": "5b23aa28b9cbd41ad25-21-2-60c7-121d4b", "new": false, "message_id": 1, "user": { "user_id": "c825511e862f23f3728a58cd3b15896cd243c7460237c651944b7499c7c9a425" }, "application": { "application_id": "f63bc4d9e9c89abe10fbe874b5400b67c0df41f86143ec22629b00be606a1dac", "application_type": "mobile" } }, "version": "1.0" }

Формат ответа обработчика скилла Марусе

Структура ответа

ПолеТипОписание
responseresponseОбязательное. Данные для ответа пользователю.
sessionsessionОбязательное. Данные о сессии.
versionstringОбязательное. Версия протокола. Текущая — 1.0.

response

ПолеТипОписание
textstring или arrayОбязательное. Текст, который следует показать и сказать пользователю, максимум 1 024 символа. Не должен быть пустым. В тексте ответа можно указать переводы строк последовательностью \n. Если передать массив строк, то сообщения разобьются на баблы.
ttsobjectОтвет в формате TTS (text-to-speech), максимум 1 024 символа. Поддерживается расстановка ударений с помощью '+'.
buttonsarrayКнопки (suggest), которые следует показать пользователю. Кнопки можно использовать как релевантные ответу ссылки или подсказки для продолжения разговора.
end_sessionbooleanОбязательное. Признак конца разговора:    • true — сессию следует завершить,    • false — сессию следует продолжить.
cardcardОписание карточки — сообщения с различным контентом. Подробнее о типах карточек и описание структур в специальном разделе.
commandsarrayКоманды. Поле позволяет передать несколько сообщений в нужном порядке. На данный момент поддерживаются только карточки.

buttons

ПолеТипОписание
titlestringОбязательное. Текст кнопки, максимум 64 символа.
urlstringURL, который откроется при нажатии на кнопку, максимум 1 024 байта. Если свойство URL не указано, по нажатию на кнопку навыку будет отправлен текст кнопки. Пока кнопки с URL не поддерживаются в приложении VK.
payloadobjectЛюбой JSON, который нужно отправить скиллу, если эта кнопка будет нажата, максимум 4 096 байт.

session

ПолеТипОписание
session_idstringОбязательное. Уникальный идентификатор сессии, максимум 64 символа.
user_idstringОбязательное. Идентификатор экземпляра приложения, в котором пользователь общается с Марусей, максимум 64 символа.
message_idstringОбязательное. Идентификатор сообщения в рамках сессии, максимум 8 символов. Инкрементируется с каждым следующим запросом.

Пример ответа

JSON{ "response": { "text": "Сейчас очередь в столовой 5 человек.", "tts": "Сейчас очередь в столовой пять человек.", "buttons": [ { "title": "Надпись на кнопке", "payload": {}, "url": "https://example.com/" } ], "end_session": true }, "session": { "session_id": "01bfd28fe3a326-c-2-fea35db06d4-a8930", "user_id": "f63bc4d9e9c89abe10fbe874b5400b67c0df41f86143ec22629b00be606a1dac", "skill_id": "5b23aa28b9cbd41ad25-21-2-60c7-121d4b", "new": false, "message_id": 1, "user": { "user_id": "c825511e862f23f3728a58cd3b15896cd243c7460237c651944b7499c7c9a425" }, "application": { "application_id": "f63bc4d9e9c89abe10fbe874b5400b67c0df41f86143ec22629b00be606a1dac", "application_type": "mobile" } }, "version": "1.0" }