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

raw

Тип ответа raw предназначен для методов, специфичных для определенного канала.

Свойства

СвойствоТипОбязательноеОписание
bodyОбъектДаТело ответа. Содержит свойства, специфичные для определенного канала.
methodСтрокаНетМетод, предусмотренный определенным каналом.

Алиса

В body могут передаваться свойства response:

  • card — описание сообщения с поддержкой изображений (карточки). Содержимое зависит от типа карточки, указанного в поле card.type:
    • BigImage — одно изображение.
    • ImageGallery — галерея из нескольких изображений.
    • ItemsList — список из нескольких изображений.
  • directives — директива. Содержимое зависит от типа директивы:
    • audio_player — запуск аудиоплеера на умных колонках.
    • confirm_purchase — подтверждение оплаты навыком.
    • start_account_linking — запуск процесса авторизации в навыке.
    • start_purchase — запуск сценария оплаты.
предупреждение
При использовании типа ответа raw нужно указывать обязательные свойства для response. Иначе при обработке этого ответа в Алисе будет появляться ошибка.

Примеры:

  • Создание карточки.

    {
    "type": "raw",
    "body": {
    "text": "Слушайте любимые песни, где бы вы ни находились", // Обязательное свойство для response
    "end_session": false, // Обязательное свойство для response
    "card": {
    "type": "BigImage",
    "image_id": "10123456789",
    "title": "Слушайте любимые песни, где бы вы ни находились"
    }
    }
    }
  • Указание директивы для связки аккаунтов.

    {
    "type": "raw",
    "body": {
    "text": "Купить книгу", // Обязательное свойство для response
    "end_session": false, // Обязательное свойство для response
    "directives": {
    "start_account_linking": {}
    }
    }
    }

Telegram

В свойстве method могут использоваться методы, которые поддерживает Telegram, например:

  • editMessageText — изменяет текст последнего сообщения бота.
  • sendSticker — отправляет статичные, анимированные и видео-стикеры.
  • sendVoice — отправляет аудиофайлы, которые отображаются в чате в виде голосового сообщения.

Свойства, которые передаются в body, зависят от выбранного метода. Вы можете подробнее ознакомиться с методами и их свойствами в документации Telegram Bot API.

предупреждение
При использовании типа ответа raw нужно указывать обязательные свойства для выбранного метода. Иначе при обработке этого ответа в Telegram будет появляться ошибка.

Пример:

{
"type": "raw",
"body": {
"sticker": 12345, // Обязательное свойство для sendSticker
"protect_content": true
},
"method": "sendSticker"
}

Ограничения на каналы

Поддерживается только в следующих каналах:

Использование в сценарии

Отправка контакта в Telegram

Рассмотрим пример использования метода sendContact для канала Telegram. При переходе в стейт SendContact бот отправит в чат карточку с номером телефона.

state: SendContact
a: Спасибо за заказ!
a: Вы можете узнать статус заказа по телефону:
script:
$response.replies = $response.replies || [];
$response.replies.push({
"type": "raw",
"body": {
"phone_number": "89111234567", // Обязательное свойство для sendContact
"first_name": "Компания" // Обязательное свойство для sendContact
},
"method": "sendContact"
});

Отправка файлов в Microsoft Teams

В сценарии для канала Microsoft Teams вы можете использовать в body свойство attachments для отправки файлов в чат.

  • При переходе в стейт SendFile бот отправит в чат карточку с запросом на разрешение загрузить файл в OneDrive.
  • В зависимости от согласия или отказа пользователя в сценарий придет событие acceptFile или declineFile.
state: SendFile
script:
$response.replies = $response.replies || [];
$response.replies.push({
"type": "raw",
"body": {
"type": "message",
"from": $request.rawRequest.from,
"recipient": $request.rawRequest.recipient,
"conversation": $request.rawRequest.conversation,
"attachments": [{
"name": "example.txt",
"contentType": "application/vnd.microsoft.teams.card.file.consent",
"content": {
"description": "Это пример текстового файла.",
"acceptContext": {
"fileUrl": "https://example.com/file.txt"
},
"declineContext": {}
}
}],
"replyToId": $request.rawRequest.id
}
});

state: AcceptFile
event: acceptFile
a: Вот документ со всей необходимой информацией:
script:
$response.replies = $response.replies || [];
$response.replies.push({
"type": "raw",
"body": {
"type": "message",
"from": $request.rawRequest.from,
"recipient": $request.rawRequest.recipient,
"conversation": $request.rawRequest.conversation,
"attachments": [{
"contentType": "application/vnd.microsoft.teams.card.file.info",
"content": {
"uniqueId": $request.data.eventData.uniqueId
},
"contentUrl": $request.data.eventData.contentUrl,
"name": $request.data.eventData.name
}],
"replyToId": $request.rawRequest.id
}
});

state: Decline
event: declineFile
a: К сожалению, я не могу отправить файл без вашего согласия.