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

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

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

### 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 "Вебинар" %}
```


---

# 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/rabota-s-procedurami-s-primerami-ispolzovaniya.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.
