> 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/poleznye-procedury-dlya-nastroiki-scenariev.md).

# Полезные процедуры для настройки сценариев

* [Обработка номера телефона](#obrabotka-nomera-telefona)
* [Обработка номера телефона с проверкой на то, что был отправлен контакт из Telegram](#obrabotka-nomera-telefona-s-proverkoi-na-to-chto-byl-otpravlen-kontakt-iz-telegram)
* [Сохранение имени, email в профиль клиента](#sokhranenie-imeni-email-v-profil-klienta)
* [Регулярные выражения](#regulyarnye-vyrazheniya)
* [Проверка подписки на Telegram-канал](#proverka-podpiski-na-telegram-kanal)

## Обработка номера телефона&#x20;

Процедура для узла, в котором необходимо обработать пользовательский ввод и проверить номер телефона на валидность. После копирования добавьте названия узлов для следующего шага в сценарии и для повторного ввода номера телефона.

```python
{# проверяем на валидность отправленный номер телефона #}
{% normalize_phone request.content is_forced=True as phone_number %}
{# Отправленный номер телефона валидный #}
{% if phone_number %}
    {# сохраняем в профиль клиента отправленный номер телефона #}
    {% set_attribute "profile_phone_number" phone_number %}
    {# переадресуем пользователя в следующий сценарий #}
    {% switch "название_сценария" %}
{% else %}
    {# отправлен был невалидный номер телефона, переадресуем пользователя в сценарий где повторно просим его отправить номер #}
    {% switch "название_сценария" %}
{% endif %}
```

## Обработка номера телефона с проверкой на то, что был отправлен контакт из Telegram

Процедура для узла, в котором необходимо обработать пользовательский ввод и проверить отправить пользователь свой контакт из Telegram и только в этом случае сохранить его в профиль клиента. После копирования добавьте названия узлов для следующего шага в сценарии и для повторного ввода номера телефона.

```python
{# проверяем на валидность отправленный номер телефона #}
{% if request.type == "contact" and request.is_own_contact %}
    {# сохраняем в профиль клиента отправленный номер телефона #}
    {% set_attribute "profile_phone_number" request.content %}
    {% switch "название_сценария" %}
{% else %}
    {# отправлен не контакт пользователя, переадресуем пользователя в сценарий где повторно просим его отправить номер #}
    {% switch "название_сценария" %}
{% endif %}
```

## Сохранение имени, email в профиль клиента

* Для сохранения имени в процедуре узла сохранения напишите:

```
{% set_attribute "profile_full_name" request.content %}
```

* Для сохранения email в процедуре узла сохранения напишите:

```
{% set_attribute "profile_email" request.content %}
```

## Регулярные выражения

* Проверка на email:

```
^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$
```

* Проверка на отправку даты ф формате день.месяц.год:

```
(0[1-9]|[12][0-9]|3[01])[.](0[1-9]|1[012])[.](19|20)\d\d
```

## Проверка подписки на Telegram-канал

Для проверки подписки на Telegram-канал добавьте чат-бот в качестве администратора в Telegram-канал.

В узле проверки подписки укажите данный API-запрос

```
{
    "method": "POST", 
    "url":"https://api.telegram.org/bot{{токен_чат_бота}}/getChatMember?chat_id={{id_telegram_канала}}&user_id={{messenger_id}}"
}
```

Вместо {{токен\_чат\_бота}} напишите токен чат-бота, который добавлен администратором в канал\
Вместо {{id\_telegram\_канала}} напишите id нужного канала, узнать id можно через специальные чат-боты.

В процедуре узла пропишите следующий код:

```
{# проверяем ответ от Telegram для данного пользователя #}
{% if http_response.result.status == "member" or http_response.result.status == "administrator" or http_response.result.status == "creator" %}
    {# пользователь подписан на канал #}
    {% switch "название дальнейшего узла" %}
{% else %}
    {# пользователь не подписан на канал #}
    {% switch "название узла когда пользователь не подписан на канал" %}
{% endif %}
```

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