> For the complete documentation index, see [llms.txt](https://docs.fstrk.io/knowledge_base/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.fstrk.io/knowledge_base/instructions/old/vizualnyi-konstruktor-chat-botov/konstruktor/rabota-s-procedurami/rabota-s-procedurami-s-primerami-ispolzovaniya.md).

# Работа с процедурами (с примерами использования)

#### Старт новой сессии в чат-центре

#### Работа с чат-центром

### chat\_center\_enable

Функция, которая стартует новую сессию с выбранным оператором (или командой операторов) в чат-центре.

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

```
{# Старт новой сессии в чат-центре #}
{% chat_center_enable %}
```

При этом, откроется сессия с командой «Нераспределенные», которая есть в любой учетной записи на платформе по умолчанию.

Чтобы открыть сессию с указанной командой:

```
{# Старт новой сессии в чат-центре с командой "Поддержка" #}
{% chat_center_enable team="Поддержка" %}
```

Чтобы открыть сессию с конкретным оператором:

```
{# Старт новой сессии в чат-центре с конкретным оператором #}
{% chat_center_enable operator="operator_1@example.com" %}
```

> Обратите внимание: если оператора с указанным Email не окажется, то сессия будет открыта с командой по умолчанию.

Чтобы добавить контекст для оператора при открытии новой сессии:

```
{# Формирование объекта с контекстом сессии #}
{% createobj chat_context %}
    {
        "Вопрос": "Привет! Как дела?"
    }
{% endcreateobj %}

{# Старт новой сессии в чат-центре с заголовком и контекстом #}
{% chat_center_enable title="Сообщение от нового пользователя" variables=chat_context %}
```

Чтобы переназначить сессию на другого оператора:

```
{# Переназначение сессии на другого оператора #}
{% chat_center_enable operator="operator_2@example.com" reassign_if_exists=True %}
```

Или другую команду операторов:

```
{# Переназначение сессии на другую команду операторов #}
{% chat_center_enable team="Отдел продаж" reassign_if_exists=True %}
```

#### Проверить существование номера телефона в профиле клиентаРабота с профилем клиента

### check\_phone\_number

Функция для проверки, существует ли указанный номер телефона у какого либо другого профиля клиента.

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

```
{# Проверить существование номера телефона в профиле клиента #}
{% check_phone_number "+79001234567" as is_phone_exist %}

{# Если телефон был найден (существует в профиле клиента), то выполняем действие #}
{% if is_phone_exist %}
    {# Сохранить номер телефона в профиль клиента #}
    {% save_phone_number "+79001234567" %}
{% endif %}
```

> Обратите внимание: номер телефона проходит дополнительную валидацию перед сохранением. Заведомо неверный формат номера телефона может вызвать ошибку.

#### Удалить значение у атрибута профиля клиента или чатаРабота с профилем клиента

### clear\_attribute

Функция, которая удаляет значение атрибута из профиля клиента или чата.

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

```
{# Удалить значение у атрибута профиля клиента или чата #}
{% clear_attribute "profile_city" %}
```

#### Удалить тег из профиля клиентаРабота с профилем клиента

### clear\_tag

Функция, которая удаляет тег из профиля клиента.

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

```
{# Удалить тег из профиля клиента #}
{% clear_tag "profile_auth" %}
```

#### Создать объектРабота с контекстом сценария

### createobj

Функция для программного создания JSON-объекта в контексте сценария (узла) чат-бота.

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

```
{# Создать объект my_obj #}
{% createobj "my_obj" %}
    {
        "country": "Россия",
        "city": "Москва"
    }
{% endcreateobj %}
```

Теперь в контексте текущего сценария (узла) будет доступна временная переменная `my_obj` с указанным JSON-объектом.

> Обратите внимание: в названии переменной допускается только латиница и знак нижнего подчеркивания (`_`).

Не забудьте сохранить полученную временную переменную в пользовательский контекст (функция `save_variable`).

#### Создать строку (с форматированием)Работа с контекстом сценария

### createstring

Функция для программного создания строки с текстом в контексте сценария (узла) чат-бота. Поддерживается форматирование, а все переносы строк и отступы будут интерпретироваться, как `\n`, при отображении пользователю.

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

```
{# Создать строку с текстом my_string #}
{% createstring "my_string" %}
Привет, {{ attributes.profile_full_name }}!

Как ваши дела?
{% endcreatestring %}
```

Теперь в контексте текущего сценария (узла) будет доступна временная переменная `my_string` с указанным текстом.

> Обратите внимание: в названии переменной допускается только латиница и знак нижнего подчеркивания (`_`).

Не забудьте сохранить полученную временную переменную в пользовательский контекст (функция `save_variable`).

#### Удалить переменные из пользовательского контекстаРабота с контекстом сценария

### delete\_variables

Функция для программного удаления значения из контекста пользователя на платформе.

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

```
{# Удалить переменные из пользовательского контекста #}
{% delete_variables "my_var_1" "my_var_2" "my_var_3" %}
```

Теперь в контексте пользователя больше нет переменных `my_var_1`, `my_var_2` и `my_var_3`.

> Обратите внимание: вы можете удалять любое кол-во переменных из контекста пользователя за один раз.

#### Запустить нативную анкетуРабота с нативными анкетами

### enter\_input\_form

Функция, которая запускает первый вопрос нативной анкеты.

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

```
{# Запустить нативную анкету с названием "Моя анкета" #}
{% enter_input_form "Моя анкета" %}
```

Чтобы предварительно заполнить некоторые (или все) вопросы нативной анкеты:

```
{# Запустить нативную анкету с названием "Моя анкета" и ответами на 2 вопроса #}
{% enter_input_form "Моя анкета" question_123="Виктор" question_456="Дизайнер" %}
```

> Обратите внимание: если ответ на первый вопрос был программно получен (при вызове нативной анкеты), то чат-бот пришлёт следующий *неотвеченный* вопрос пользователю.

Чтобы перезапустить нативную анкету:

```
{# Перезапустить нативную анкету с названием "Моя анкета" #}
{% enter_input_form "Моя анкета" restart=True %}
```

#### Сохранить переносы строк при отображении текста подписчикуРабота с текстом (фильтр)

### value|keep\_slash\_n

Фильтр для функции, который интерпретирует переносы строк (Enter) в `\n`, сохраняя оригинальный формат контента.

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

```
{# Отображение текста из переменной my_var с переносами строк #}
{{ my_var|keep_slash_n }}
```

#### Получить текущую дату и/или времяРабота с датой и временем

### now

Функция для программного получения текущего [timestamp](https://ru.wikipedia.org/wiki/%D0%92%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B5%D1%82%D0%BA%D0%B0) (даты и времени) сервера платформы в UNIX-формате (по МСК).

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

```
{# Получить timestamp текущей даты и времени #}
{% now as current_datetime %}
```

> Обратите внимание: функция `now` существует только в контексте сценария (узла), где была вызвана. Для того, чтобы её использовать в процедуре, необходимо сохранить её в контекст пользователя (функция `save_variable`) после получения.

#### Заменить значение в строкеРабота с контекстом сценария

### replace

Функция для программной замены необходимого значения в указанной строке внутри сценария (узла) чат-бота.

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

```
{# Заменить значение в строке #}
{% replace "С новым 2021 годом!" "2021" "2022" as my_var %}
```

Теперь в контексте текущего сценария (узла) будет доступна временная переменная `my_var` с измененным значением.

> Обратите внимание: в названии переменной допускается только латиница и знак нижнего подчеркивания (`_`).

Не забудьте сохранить полученную временную переменную в пользовательский контекст (функция `save_variable`).

#### Найти ID контактов в S2 по номеру телефонаРабота с CRM-системой S2

### s2crm\_contact

Функция для поиска ID контакта в подключенном CRM S2 по номеру телефона.

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

```
{# Найти ID контакта в S2 по номеру телефона #}
{% s2crm_contact number="79001234567" need_save=True as contact_id %}
```

Если в S2 существует контакт с указанным номером телефона, то в контексте текущего сценария (узла) будет доступен ID контакта во временной переменной `contact_id`.

> Обратите внимание: в названии переменной допускается только латиница и знак нижнего подчеркивания (`_`).

Не забудьте сохранить полученную временную переменную в пользовательский контекст (функция `save_variable`).

#### Инициации сделки в CRM S2 по номеру телефонаРабота с CRM-системой S2

### s2crm\_lead\_create

Функция для инициации сделки в CRM S2. Если контакта с указанным номером телефона нет, то он будет создан автоматически.

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

```
{# Инициации сделки "Моя сделка" в CRM S2 по номеру телефона #}
{% s2crm_lead_create name="Моя сделка" number="79001234567" %}
```

Для указания маршрутизации новой сделки в автоворонку:

```
{# Инициации сделки "Моя сделка" в CRM S2 по номеру телефона #}
{% s2crm_lead_create name="Моя сделка" number="79001234567" stage="123" %}
```

В атрибуте `stage` необходимо указать ID автоворонки, которую вы создали в CRM S2.

#### Проверить наличие сделок в S2 по номеру телефонаРабота с CRM-системой S2

### s2crm\_lead\_exists

Функция для проверки наличия сделок контакта по номеру телефона в подключенной к платформе CRM S2.

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

```
{# Проверить наличие сделок в S2 по номеру телефона #}
{% s2crm_lead_exists number="79001234567" as is_lead_exists %}
```

Если в S2 существует контакт с указанным номером телефона и у него есть хотя бы одна сделка, то в контексте сценария (узла) во временной переменной `is_lead_exists` будет значение `True`. Если нет сделок, то `False`.

> Обратите внимание: вы можете использовать полученную временную переменную сразу же, не сохраняя её в контекст пользователя. Это бывает удобно для построения условий, с помощью конструкции `{% if ... %}`.

Чтобы исключить ID статусов сделки, которые вам (по каким-то причинам) на данный момент не нужны для проверки:

```
{# Проверить наличие сделок в S2 по номеру телефона, исключив из нее некоторые ID статусов #}
{% s2crm_lead_exists number="79001234567" exclude="123,456" as is_lead_exists %}
```

#### Сохранить номер телефона в профиль клиентаРабота с профилем клиента

### save\_phone\_number

Функция для сохранения номера телефона в профиль клиента.

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

```
{# Сохранить номер телефона в профиль клиента #}
{% save_phone_number "+79001234567" %}
```

> Обратите внимание: номер телефона проходит дополнительную валидацию перед сохранением. Заведомо неверный формат номера телефона может вызвать ошибку.

#### Сохранить переменную в пользовательский контекстРабота с контекстом сценария

### save\_variable

Функция для программного сохранения значения в контекст пользователя на платформе.

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

```
{# Сохранить значение в пользовательский контекст #}
{% save_variable "my_var" "Привет!" %}
```

Теперь в контексте пользователя (во всех сценариях чат-бота) будет доступна переменная `my_var` с указанным значением.

> Обратите внимание: в названии переменной допускается только латиница и знак нижнего подчеркивания (`_`).

Значение можно сохранять не только из строки, но и из другой переменной, которая есть в контексте сценария (узла) или пользователя.

#### Отправить письмо на указанный EmailВзаимодействие с подписчиками

### send\_email

Функция для программной отправки письма на указанный Email.

Создайте в интеграционном слое DTL-функцию `{% send_email %}`, в которой передайте первым аргументом Email получателя, во втором тему письма, а в третьем – тело письма (строку текста).

> Обратите внимание: вы можете подставлять Email из контекста пользователя и/или из профиля клиента.

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

```
{# Создаём тело письма #}
{% createstring message %}
	Зима. Крестьянин, торжествуя,
	На дровнях обновляет путь.
{% endcreatestring %}

{# Отправляем письмо на указанный Email с темой "Письмо от Пушкина" #}
{% send_email "mail@example.com" "Письмо от Пушкина" message %}
```

> Обратите внимание: введенный вами текст будет отправлен с учётом переноса строк.

#### Отправить подписчику текст от чат-ботаВзаимодействие с подписчиками

### send\_text

Функция для программной отправки текста подписчику от чат-бота. Создайте в интеграционном слое DTL-функцию `{% send_text %}`, в которой передайте первым аргументом необходимую строку текста.

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

```
{# Отправляем текст подписчику чат-бота #}
{% send_text "ВАШ ТЕКСТ ТУТ" %}
```

> Обратите внимание: введенный вами текст будет отправлен «как есть», без учёта переноса строк.

#### Установить переменную в контексте сценарияРабота с контекстом сценария

### set

Функция для программной установки контекста внутри сценария (узла) чат-бота.

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

```
{# Установить переменную в контексте сценария #}
{% set my_var="Привет!" %}
```

Теперь в контексте текущего сценария (узла) будет доступна временная переменная `my_var` с указанным значением.

> Обратите внимание: в названии переменной допускается только латиница и знак нижнего подчеркивания (`_`).

Удобно использовать функцию `set` для форматирования значения «на лету» с использованием фильтров для функций.

Например, вот так:

```
{# Установить переменную в контексте сценария со значением текущей даты #}
{% set today=now|as_datetime|date:"d.m.Y" %}
```

Теперь в переменной `today` будет содержаться строка со значением текущей даты в формате `ДД.ММ.ГГГГ`.

#### Добавить значение к атрибуту профиля клиента или чатаРабота с профилем клиента

### set\_attribute

Функция для программного добавления значения для атрибута чата или профиля клиента.

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

```
{# Добавить значение к атрибуту профиля клиента или чата #}
{% set_attribute "profile_city" "Москва" %}
```

> Обратите внимание: если атрибута с таким названием не будет на платформе, то будет ошибка валидации интеграционного слоя при сохранении.

#### Добавить тег к профилю клиентаРабота с профилем клиента

### set\_tag

Функция для программного добавления тега к профилю клиента.

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

```
{# Добавить тег к профилю клиента #}
{% set_tag "profile_auth" %}
```

> Обратите внимание: если тега с таким названием не будет на платформе, то будет ошибка валидации интеграционного слоя при сохранении.

#### Перемешать все элементы в спискеРабота с объектами (фильтр)

### value|shuffle

Фильтр для функции, который перемешивает в случайном порядке все элементы в заданном списке.

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

```
{# Перемешать все элементы в списке my_list #}
{{ my_list|shuffle }}
```

Если в списке my\_list был такой порядок элементов `["a", "b", "c" ,"d"]`, то после применения данного фильтра для функции, он поменяет его в абсолютно случайном порядке. Например, вот так: `["c", "d", "a" ,"b"]`.

#### Разбить строку на список, используя разделительРабота с контекстом сценария (фильтр)

### split

Фильтр для функции, с помощью которого можно разбить строку на список, используя разделитель.

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

```
{# Разбить строку на список, используя разделитель #}
{{ my_var|split:"," }}
```

Если в `my_var` строка с текстом `"John, Paul, George, Ringo"`, то, после применения этого фильтра, вы получите следующий список:

```
["John", "Paul", "George", "Ringo"]
```

#### Остановить дальнейшее выполнение сценарияРабота с контекстом сценария

### stop

Функция, которая останавливает дальнейшие действия в сценарии (узле). Чаще всего используется в ситуации, когда нужно оставить выполнение какой-либо процедуры в интеграционном слое.

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

```
{# Остановить дальнейшее выполнение сценария #}
{% stop %}
```

> Обратите внимание: после остановки сценария пользователь может «зависнуть» в неопределенном состоянии. Чтобы так не происходило, следите за тем, что перед выполнением функции `stop`, – вы оставили какое-то пояснительное сообщение или действие для пользователя.

#### Подписка на автоворонкуРабота с автоворонками

### subscribe\_to\_funnel

Функция для программной подписки чата пользователя на указанную автоворонку.

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

```
{# Подписка на автоворонку "Вебинар" #}
{% subscribe_to_funnel "Вебинар" %}
```

Чтобы отправить пользователя, находящегося в указанной автоворонке, снова на её начало:

```
{# Повторная подписка на автоворонку "Вебинар" (сценарий пойдёт сначала) #}
{% subscribe_to_funnel "Вебинар" "start" %}
```

#### Перейти в указанный сценарий чат-ботаРабота со сценариями

### now

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

> Обратите внимание: если узла с указанным названием не будет, то возникнет ошибка.

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

```
{# Переход в сценарий "Главное меню" #}
{% switch "Главное меню" %}
```

Также, можно передавать GET-параметры, которые будут доступны в контексте узла, в который будет совершен переход.

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

```
{# Переход в сценарий "Главное меню" с передачей GET-параметров #}
{% switch "Главное меню" %}?country=Россия&city=Москва
```

#### Отписаться от всех автоворонокРабота с автоворонками

### unsubscribe\_all\_funnels

Функция для *немедленной* программной отписки чата пользователя от *всех* автоворонок, на которые он был подписан.

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

```
{# Отписаться от всех автоворонк #}
{% unsubscribe_all_funnels %}
```

#### Отписаться от автоворонкиРабота с автоворонками

### unsubscribe\_from\_funnel

Функция для *немедленной* программной отписки чата пользователя от указанной автоворонки.

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

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

```
{# Отписаться от автоворонки "Вебинар" #}
{% unsubscribe_from_funnel "Вебинар" %}
```
