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

$response

Объект для заполнения поля $response в ответах системы. $response.replies — список ответов, выведенных в процессе обработки реакций.

replies — массив реплик чат-бота, содержащий строго типизированные элементы. Предназначен для передачи ответов в различные каналы коммуникации, например, в Telegram.

подсказка
Ниже представлен список 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"});
  • llmRequest — использование LLM с минимальными паузами. Только для телефонных звонков.

    {
    type: "llmRequest",
    provider: "CAILA_OPEN_AI",
    model: "gpt-4o",
    tokenSecret: "NEW_TOKEN",
    fillersPhraseConfig: {"fillerPhrase": "Хороший вопрос!", "activationDelayMs": 4000},
    messages: [{"role": "user","content": $request.query}]
    }

Примеры использования

  • Вывод изображения:

    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;
    });

Пишите, я помогу!

Пишите, я помогу!

База знаний по документации