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

* [Обработка номера телефона](#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 %}
```

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


---

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