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"
}
Ограничения на каналы
Поддерживается только в следующих каналах:
- Алиса
- Салют
- Aimybox
- Amazon Alexa
- Chat API
- Microsoft Teams
- Telegram
- Viber
- WhatsApp (подключение напрямую)
Использование в сценарии
Отправка контакта в 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: К сожалению, я не могу отправить файл без вашего согласия.