# Теги и фильтры интеграционного слоя

#### Теги команд

Для самых распространеннных внутренних команд существуют теги, которые упрощают написание кода. Например, для команды переключения на другой узел есть тег `{% switch %}`. Вы можете написать как `{% switch "Пройти регистрацию" %}`, так и **/switch/21282**, но гораздо проще запомнить название узла, чем идентификатор 21282.

#### ТОП-тегов интеграционного слоя

* `{% now %}` Отображает текущую дату и/или время
* `{% datetime_now %}` Вернёт текущее время и дату
* &#x20;`{% switch %}` Переход в узел&#x20;
* `{% set %}` Установить переменную в контексте узла&#x20;
* `{% replace %}` Заменить значение в строке. Пример - `{% replace "С новым 2021 годом" "2021" "2022" as text %}`&#x20;
* `{% createobj %}` Создать объект&#x20;
* `{% createstring %}` Создать строку&#x20;
* `{% calc_timedelta %}` Вычисляет дельту между двумя датами&#x20;
* `{% save_variable %}` Сохраниться переменную&#x20;
* `{% delete_variables %}` Удалить переменную&#x20;
* `{% send_text %}` Отправить текстовое сообщение&#x20;
* `{% save_phone_number %}` Сохранить телефон в профиль (основной)&#x20;
* `{% check_phone_number %}` Проверить существует ли телефон у других клиентов&#x20;
* `{% set_attribute %}` Сохранить атрибут чата&#x20;
* `{% clear_attribute %}` Отчистить атрибут чата&#x20;
* `{% set_tag %}` Добавить тег чата&#x20;
* `{% clear_tag %}` Удалить тег чата&#x20;
* `{% profile.set_attribute %}` Сохранить атрибут профиля&#x20;
* `{% profile.set_tag %}` Добавить тег профиля&#x20;
* `{% profile.clear_tag %}` Удалить тег профиля&#x20;
* `{% chat_center_enable %}` Открыть чат-сессию с оператором&#x20;
* `{% subscribe_to_funnel %}` Подписаться на воронку&#x20;
* `{% unsubscribe_from_funnel %}` Отписаться от воронки&#x20;
* `{% enter_input_form %}` Запустить анкету&#x20;
* `{% form_lead %}` Получить данные последнего лида формы для сайта&#x20;
* `{% form_data %}` Получить данные последнего лида формы для бота&#x20;
* `{% stop %}` Остановить выполнение процедур и отправку контента узла

#### ТОП-фильтров интеграционного слоя

* `{% date %}` Форматирует дату в соответствии с заданным форматом.
* `{% as_datetime %}` Вернуть объект в виде даты&#x20;
* `{% add_days %}` Добавить дни к объекту даты и времени&#x20;
* `{% subtract_days %}` Отнять дни от объекта даты и времени&#x20;
* `{% subtract %}` Вычитает одно число из другого&#x20;
* `{% keep_slash_n %}` Интерпретирует переносы строк (энтеры) в \n

#### Переменные, которые всегда есть в контексте

* `{{ platform }}` Платформа пользователя. Может быть равна `"telegram", "facebook", "viber"`
* `{{ messenger_first_name }}` и `{{ messenger_last_name }}` Имя и фамилия пользователя (как он сам себя назвал в мессенджере)
* `{{ request.type }}` Тип сообщения от пользователя. Может быть равен `"text", "picture", "video", "document", "location", "contact", "postback"`
* `{{ request.content }}` Содержимое сообщения от пользователя. Это текст, адрес отправленной картинки/документа, и так далее.
* `{{ request.latitude }}` и `{{ request.longitude }}` Широта и долгота (для типа `location`)

для того чтобы точки в координатах не были экранированы при запросе (к FlexCMS или к любому стороннему REST API), необходимо передавать их с фильтром `unlocalize`. Например - `{{request.longitude|unlocalize }}`

* `{{ request.is_telegram_user }}` Является ли телефон аккаунтом Telegram (для типа `contact`, платформы `telegram`):
* `{{ request.is_own_contact }}` Отправил ли пользователь свой личный контакт или чей-то еще из записной книжки  (для типа `contact`, платформы `telegram/viber`).
* `{{ request.viber_api_version }}` Версия API Viber: число 1, 2, 3, 4, 5 и тд (для платформы `viber`)
* `{{ chat_id }}` Внутренний ID чата с пользователем в конструкторе
* `{{ chat_uuid }}` Внутренний UUID чата с пользователем в конструкторе
* `{{ cookies }}` Хранинище BotCookies.
* `{{ chat_center.session.team }}` и `{{ chat_center.session.operator }}` и `{{chat_center.session.is_automatic }}` Информация про контекст чат-центра (находится ли пользователь в чат-центре? с кем из операторов он общается? и тд).
* `{{ operator.is_authorized }}` Авторизован ли оператор (только для операторского бота). Возвращает True или False. Можно использовать в условиях: `{% if operator_is.authorized %}`, `{% if not operator.is_authorized %}`
* `{{ operator.phone_number }}` Телефонный номер, который передал оператор (только для операторского бота).
* `{{ get_params }}` GET-параметры запроса. Подробнее о GET-параметрах можно прочитать [здесь](https://fasttrack-docs.atlassian.net/wiki/spaces/IG/pages/53117117).
* `{{ http_response }}` Результат HTTP-запроса, сделанного в узле. Эта переменная существует только в узле, сделавшем запрос, и нигде больше не сохраняется. Ее можно использовать, если нужно достать что-нибудь из ответа на HTTP-запрос, но при этом полностью этот ответ сохранять необязательно.  Если же вы настроите сохранение ответа в определенную переменную (например, `{{ my_result }}`), то результат HTTP-запроса будет одинаково доступен и в\*\*\*\*`{{ my_result }}`, и в `{{ http_response }}` . Но после выхода из узла переменная `{{ my_result }}` сохранится в пользовательских переменных, а `{{ http_response }}` - нет.
* `{{ http_response.http_status_code }}` Статус ответа  HTTP
* `{{ http_response.http_cookies }}` Куки в ответе HTTP
* `{{ facebook_deeplink }}` Ссылка на бота Facebook Messanger. Присутствует тогда, когда подключен Facebook Bot.
* `{{ viber_deeplink }}` Ссылка на бота Viber. Присутствует тогда, когда подключен Viber Bot.
* `{{ telegram_deeplink }}` Ссылка на бота Telegram. Присутствует тогда, когда подключен Telegram Bot.
* `{{ vkontakte_deeplink }}` Ссылка на бота Вконтакте. Присутствует тогда, когда подключен Вконтакте Бот.
* `{{ bot_uuid }}` UUID бота.
* `{{ bot_key }}` API-ключ к боту. Требуется внешним сервисам для интеграции с ботом.
* `{{ node_id }}` ID узла (если сообщение сгенерировано узлом, а не анкетой и пр.)
* `{{ node_name }}` Название узла (если сообщение сгенерировано узлом, а не анкетой и пр.)

#### Полный список кастомных тегов и фильтров для работы на платформе

Рекомендуется к изучению для более продуктивной работы.

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

#### Полный список тегов Django Template Language (DTL)

Рекомендуется к изучению для более продуктивной работы.

<https://docs.djangoproject.com/en/3.2/ref/templates/builtins/#ref-templates-builtins-filters>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.fstrk.io/knowledge_base/instructions/old/vizualnyi-konstruktor-chat-botov/konstruktor/rabota-s-procedurami/tegi-i-filtry-integracionnogo-sloya.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
