$response
Объект для заполнения поля $response
в ответах системы. $response.replies
— список ответов, выведенных в процессе обработки реакций.
replies
— массив реплик чат-бота, содержащий строго типизированные элементы. Предназначен для передачи ответов в различные каналы коммуникации, такие как Telegram, Google Assistant и др.
подсказка
Ниже представлен список
replies
, поддерживаемых платформой. Формат ответа бота, параметры и типы сообщений для каналов подробно описаны в статье Типы ответов.replies
Поддерживаемые элементы replies
:
text
— простой текстовый ответ, каждый элемент выводится отдельным сообщением. Параметрtts
задаёт текст ответа с разметкой для синтеза речи. Параметрmarkup
задаёт способ форматирования.
{
"type": "text",
"text": "....",
"tts": "....",
"markup": "html|markdown|plain"
}
buttons
— вывод кнопки.
{
"type": "buttons",
"buttons": [
{
"text": "кнопка" // Другие поля будут переданы непосредственно в мессенджер.
}
]
}
inlineButtons
— вывод инлайн-кнопки. Если заполнено полеinlineButtons[].url
, по клику будет открыт указанный url.
{
"type": "inlineButtons",
"buttons": [
{
"text": "кнопка",
"url": "https://example.com"
}
]
}
image
— вывод изображения.
{
"type": "image",
"imageUrl": "http://..."
}
raw
используется для передачи методов, специфичных для определенного канала. Обязательный параметрbody
— тело ответа, которое будет передано в чат-систему. Параметры, идентифицирующие пользователя в чате, будут подставлены автоматически.
{
"type": "raw",
"body": {...},
"method": "sendMessage"
}
switch
— переключение диалога клиента с бота на оператора.
{
"type": "switch",
"firstMessage": "...",
"closeChatPhrases": ["..."],
"ignoreOffline": true|false,
"oneTimeMessage": true|false
}
location
— вывод координат. Параметры:lat
,lon
.
{
"type": "location",
"lat": 59.934280,
"lon": 30.335099
}
timeout
задает переход в состояние, если от пользователя нет ответа.
{
"type": "timeout",
"interval": 10,
"targetState": "/timedout"
}
dtmf
— запрос набора DTMF-сообщения (цифры/символы в тоновом режиме). Только для телефонных звонков.
$response.replies.push({type:"dtmf"});
hangup
— прерывание звонка. Только для телефонных звонков.
$response.replies.push({type:"hangup"});
htmlResponse
используется для вывода визуальной составляющей навыков, созданных с использованием Interactive Canvas.
{
"type": "htmlResponse",
"updatedState": "some",
"suppressMic": true|false,
"url": "appUrl"
}
Примеры использования
- Вывод изображения.
script:
$response.replies = $response.replies || [];
$response.replies.push({
"type": "image",
"imageUrl": "https://testimageurl.jpg",
"text": "Изображение" // Это поле опционально.
});
- Вывод GIF анимации.
$response.replies = $response.replies || [];
$response.replies.push({
"type": "raw",
"body": {
"animation": "https://www.catgifpage.com/gifs/318.gif"
},
"method": "sendAnimation"
});
- Переключение диалога с бота на оператора.
$response.replies = $response.replies || [];
$response.replies .push({
"type": "switch",
"phoneNumber": 74155,
"closeChatPhrases": catchAll.closeChatPhrases,
"firstMessage": $client.history,
"destination": catchAll.operatorGroup,
});
- Пример изменения ответа в post-процессе при третьей попытке бота ответить одинаково.
init:
bind("postProcess", function(){
var $session = $jsapi.context().session;
var $response = $jsapi.context().response;
var answer = $response.replies ? $response.replies.reduce (function (answers, current) {
answers += " " + current.text;
return answers;
}, "") : "";
if ($session.lastAnswer && (answer == $session.lastAnswer)) {
$session.answerRepetition = $session.answerRepetition || 0;
$session.answerRepetition += 1;
} else {
$session.answerRepetition = 0;
}
if ($session.answerRepetition == 2) {
$response.replies = [{
"type": "text",
"text": "Похоже, мы ходим кругами. Может, спросишь о чем-нибудь другом?"
}];
}
$session.lastAnswer = answer;
});