Интеграционный слой
Интеграционный слой — это сущность визуального конструктора, позволяющая производить какие-либо действия (по получению, преобразованию, пересчету, отправке и так далее) в контексте узла.
Он состоит из нескольких блоков настроек, которые помогут вам в решении поставленной задачи:
Действие при свободном вводе;
Пропустить свободный ввод через словарь;
Сохранить входящее сообщение в переменную;
Сделать HTTP запрос;
Подписать HTTP запрос сертификатом;
Сохранение результата HTTP запроса в переменную;
Выполнение процедуры с использованием DTL (Совместимость с Django Template Language (DTL) );
Примечание: Для краткости изложения, вы можете встретить в разных местах данной документации сокращенный вариант написания — «инт. слой» или «ИС» — но помните, что речь идет именно про Интеграционный слой.
Быстрая навигация:
Понимание работы Интеграционного слоя
Как работать в Интеграционном слое?
Действие при свободном вводе
Пример: получение и сохранение имени пользователя
Пропустить свободный ввод через словарь
Сохранить входящее сообщение в переменную
Сделать HTTP запрос
Подписать HTTP запрос сертификатом
Сохранить результат запроса в переменную
Лайфхак для очистки результата от ненужной информации
Сохранение HTTP кода ответа
Пример: получить данные о клиенте из стороннего API
Возможности IDE процедур
Выполнение процедуры с использованием DTL
Порядок обработки кода в процедуре
Понимание работы Интеграционного слоя
Все блоки настроек в интеграционном слое отрабатывают перед отображением контента узла.
Примечание: Исключением выступает блок обработки свободного ввода, о котором мы поговорим ниже.
Если все настройки отработали и пользователя никуда не переключило в результате работы процедуры, то отображается контент. Иначе отрабатывается интеграционный слой другого узла (куда перешел пользователь) и т.д.
Как работать в Интеграционном слое?
Для начала, давайте откроем его. Для этого необходимо:
Перейдите в визуальный конструктор;
Выберите узел из списка;
Кликните по его названию правой кнопкой мышки;
В открывшимся контекстном меню, выберите пункт «Интеграционный слой»;
Примечание: Если у вас в браузере или системе стоит английский язык, то этот пункт, возможно, будет называться Integration Layer.
Здесь картинка: attachments/2911731724/2911830026.png?width=680
Далее, будет открыт ИС в правой колонке (над визуальным конструктором).
Действие при свободном вводе
Здесь картинка: attachments/2911731724/2911830033.png
Особый блок настроек инт. слоя, который выполняется не до, а после отображения узла. Он отвечает за отправку пользователя в нужный узел, если тот не нажал на предложенные кнопки меню, а отправил боту свободный текст (в виде сообщения).
Для работы нужны два узла:
Первый будет задавать вопрос (в шаблоне);
Второй обрабатывает полученные данные и что-нибудь делает с ними;
Обращение ко входящему тексту осуществляется через переменную контекста 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
Развернуть блок процедур на весь экран;
Изменить тему оформления.
По умолчанию стоит тема - 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
Порядок обработки кода в процедуре
Сначала код проходит через шаблонизатор, все фильтры и теги (Теги и фильтры интеграционного слоя ) превращаются в список внутренних команд;
Обработчик идет по списку команд сверху вниз и выполняет их;
Неблокирующие команды выполняются, не останавливая обработку кода;
Первая встреченная блокирующая команда — останавливает обработку;
При этом, все последующие команды (как блокирующие, так и неблокирующие), не будут обработаны;
Если во время обработки кода не встретилась ни одна блокирующая команда, то обработчик останавливается и показывает пользователю контент узла;
Примечание: Подробнее можно почитать тут Работа с процедурами .
Last updated