Интеграционный слой

Интеграционный слой — это сущность визуального конструктора, позволяющая производить какие-либо действия (по получению, преобразованию, пересчету, отправке и так далее) в контексте узла.

Он состоит из нескольких блоков настроек, которые помогут вам в решении поставленной задачи:

  1. Действие при свободном вводе;

  2. Пропустить свободный ввод через словарь;

  3. Сохранить входящее сообщение в переменную;

  4. Сделать HTTP запрос;

  5. Подписать HTTP запрос сертификатом;

  6. Сохранение результата HTTP запроса в переменную;

  7. Выполнение процедуры с использованием DTL (Совместимость с Django Template Language (DTL) );

Примечание: Для краткости изложения, вы можете встретить в разных местах данной документации сокращенный вариант написания — «инт. слой» или «ИС» — но помните, что речь идет именно про Интеграционный слой.

Быстрая навигация:

  • Понимание работы Интеграционного слоя

  • Как работать в Интеграционном слое?

  • Действие при свободном вводе

    • Пример: получение и сохранение имени пользователя

  • Пропустить свободный ввод через словарь

  • Сохранить входящее сообщение в переменную

  • Сделать HTTP запрос

  • Подписать HTTP запрос сертификатом

  • Сохранить результат запроса в переменную

    • Лайфхак для очистки результата от ненужной информации

    • Сохранение HTTP кода ответа

    • Пример: получить данные о клиенте из стороннего API

  • Возможности IDE процедур

  • Выполнение процедуры с использованием DTL

    • Порядок обработки кода в процедуре

Понимание работы Интеграционного слоя

Все блоки настроек в интеграционном слое отрабатывают перед отображением контента узла.

Примечание: Исключением выступает блок обработки свободного ввода, о котором мы поговорим ниже.

Если все настройки отработали и пользователя никуда не переключило в результате работы процедуры, то отображается контент. Иначе отрабатывается интеграционный слой другого узла (куда перешел пользователь) и т.д.

Как работать в Интеграционном слое?

Для начала, давайте откроем его. Для этого необходимо:

  1. Перейдите в визуальный конструктор;

  2. Выберите узел из списка;

  3. Кликните по его названию правой кнопкой мышки;

  4. В открывшимся контекстном меню, выберите пункт «Интеграционный слой»;

Примечание: Если у вас в браузере или системе стоит английский язык, то этот пункт, возможно, будет называться Integration Layer.

Здесь картинка: attachments/2911731724/2911830026.png?width=680

Далее, будет открыт ИС в правой колонке (над визуальным конструктором).

Действие при свободном вводе

Здесь картинка: attachments/2911731724/2911830033.png

Особый блок настроек инт. слоя, который выполняется не до, а после отображения узла. Он отвечает за отправку пользователя в нужный узел, если тот не нажал на предложенные кнопки меню, а отправил боту свободный текст (в виде сообщения).

Для работы нужны два узла:

  1. Первый будет задавать вопрос (в шаблоне);

  2. Второй обрабатывает полученные данные и что-нибудь делает с ними;

Обращение ко входящему тексту осуществляется через переменную контекста request.content. Параметры из поля “GET-параметры“ будут переданы в узел, указанный в "Передать в узел" вместе с request.content

Также свободный ввод можно проверить регулярным выражением.

В узле после перехода через свободный ввод появятся перменные direct_from_node_id иdirect_from_node_name, которые содержат в себе id и название узла через который мы попали в новый узел.

Пример: получение и сохранение имени пользователя

Здесь картинка: attachments/2911731724/2911830039.png

Во втором узле сохраняем имя так:

Здесь картинка: attachments/2911731724/2911830045.png

Или так:

Здесь картинка: attachments/2911731724/2911830051.png

А ещё с request.content можно работать в отрисовке узле и http запросах

Пропустить свободный ввод через словарь

Прогнать входящее сообщение через один из NLP словарей.

Примечание: Это большая тема которая заслужила отдельного раздела: Словарь опечаток

Здесь картинка: attachments/2911731724/2911830057.png

Сохранить входящее сообщение в переменную

Используется для сохранения request.content в переменые чата.

Здесь картинка: attachments/2911731724/2911830063.png

Сделать HTTP запрос

Страничка с примерами: Работа с REST API

Здесь картинка: attachments/2911731724/2911830069.png

Подписать HTTP запрос сертификатом

Предоставляет возможность подписать запрос необходимым сертификатом.

Примечание: Используется в случае, когда необходимо сделать запрос во внешнюю систему, которая не может авторизовать клиента по заголовкам.

Здесь картинка: attachments/2911731724/2911830075.png

Сохранить результат запроса в переменную

Сохранить в переменных чата JSON с результатом запроса под определенным именем.

Здесь картинка: attachments/2911731724/2911830081.png

Лайфхак для очистки результата от ненужной информации

Довольно часто ответы разных API содержат «мусор» вроде кодов состояния, каких-нибудь служебных и временных переменных, комментариев. Поэтому, необязательно сохранять весь ответ при помощи опции «Сохранить результат HTTP-запроса в переменную».

Примечание: Не корректно использовать запрос, когда целью является получить какой-то один объект, например, количество записей.

Для решения проблемы, на нашей платформе есть постоянно присутствующая в контексте переменная http_response, которая поможет сохранить только часть запроса.

Например, если в результате запроса есть JSON объект с названием count, то мы можем сохранить его значение сразу в переменную, не сохраняя все остальное:

{% save_variable "number_of_items" http_response.count %}

Сохранение HTTP кода ответа

Вместе с телом результата будет сохранена переменная http_status_code, содержащая HTTP статус ответа, http_headers, содержащая заголовки ответа, и http_cookies, содержащая набор cookie-значений, установленный сервером.

Примечание: Это удобно для проверки ошибок сервера и/или ошибок авторизации (4хх и 5хх).

Пример: получить данные о клиенте из стороннего API

Сервер отвечает кодом 403 и сообщением:

| { "status": "error", "detail": "wrong password"

}

Мы сохраняем этот ответ в переменную {{ auth_response }}.

В итоге в пользовательских переменных будет:

| "auth_response": { "status": "error", "detail": "wrong password", "http_status_code": 403

}

Возможности IDE процедур

Здесь картинка: attachments/2911731724/2967896077.png

  1. Развернуть блок процедур на весь экран;

  2. Изменить тему оформления.

По умолчанию стоит тема - default. Внешний вид темы и вид в развёрнутом виде можно посмотреть на скриншотах ниже.

Здесь картинка: attachments/2911731724/2968027143.png

Здесь картинка: attachments/2911731724/2967994391.png

Кроме стандартной темы у пользователя есть ещё 3 темы на выбор в выпадающем списке.

Здесь картинка: attachments/2911731724/2968027153.png

ideaЗдесь картинка: attachments/2911731724/2967994403.png

Здесь картинка: attachments/2911731724/2967896093.png

nordЗдесь картинка: attachments/2911731724/2967994424.png

Здесь картинка: attachments/2911731724/2968027169.png

monokaiЗдесь картинка: attachments/2911731724/2967896103.png

Здесь картинка: attachments/2911731724/2967994434.png

Выполнение процедуры с использованием DTL

Это специальный блок настроек, который выполняется после HTTP запроса. Он определяет дальнейшее поведение узла.

Здесь можно преобразовать полученные по HTTP данные, обработать пользовательский ввод, направить пользователя в другой узел и т.д. Поддерживается язык шаблонизации Django Template Language (Совместимость с Django Template Language (DTL) ).

Здесь картинка: attachments/2911731724/2967994369.png

Порядок обработки кода в процедуре

  1. Сначала код проходит через шаблонизатор, все фильтры и теги (Теги и фильтры интеграционного слоя ) превращаются в список внутренних команд;

  2. Обработчик идет по списку команд сверху вниз и выполняет их;

  3. Неблокирующие команды выполняются, не останавливая обработку кода;

  4. Первая встреченная блокирующая команда — останавливает обработку;

  5. При этом, все последующие команды (как блокирующие, так и неблокирующие), не будут обработаны;

  6. Если во время обработки кода не встретилась ни одна блокирующая команда, то обработчик останавливается и показывает пользователю контент узла;

Примечание: Подробнее можно почитать тут Работа с процедурами .

Last updated