# Переменная “Вложение”

Переменные “Вложение” позволяют сохранять ссылки на скачивание для файлов, отправляемых пользователями при общении с ботом.

## Создание переменной

Чтобы создать новую переменную, нужно&#x20;

1. Открыть любой сценарий, нажать “Переменные” и во всплывшем окне - “Добавить переменную”.

<figure><img src="/files/HnYHxYLHbmNV641m36T5" alt=""><figcaption></figcaption></figure>

2. В поле “Тип переменной” выбрать “Вложение”.

<figure><img src="/files/83krUqstX8XZKxfWd2tQ" alt="" width="263"><figcaption></figcaption></figure>

3. В поле “Уровень доступа” выбираем нужный параметр.&#x20;

{% hint style="info" %}
**Глобальная переменная** нужна, чтобы дать возможность всем пользователям бота или определённому его сегменту скачивать один и тот же файл. **Пользовательская** - чтобы сохранять индивидуальные ссылки на файлы от каждого клиента.
{% endhint %}

4. Указать название переменной&#x20;
5. Нажимаем “Создать”.

<figure><img src="/files/lZyvluhz16mTie1ygotV" alt="" width="263"><figcaption></figcaption></figure>

## Настройка сценария

Чтобы ссылки для скачивания сохранялись в нашу переменную и пользователи понимали, что им нужно делать, нам потребуется добавить в сценарий следующую последовательность действий:

* сообщение от бота с предложением отправить файлы
* обработка файла (сохранение ссылки на скачивание)
* добавление ссылки в нужную базу данных (если требуется)

Для этого после блока “Отправить сообщение” мы выбираем блок “Обработать сообщение” (в нём должна стоять галочка “Ждать сообщение от пользователя”).

<figure><img src="/files/PkiU8IvNI4QghBAF9SeV" alt=""><figcaption></figcaption></figure>

Если количество присылаемых файлов может разниться, то лучше в поле “Количество вложений” оставить 1.

{% hint style="info" %}
В случае, если нужно сохранить в переменную больше одного вложения (значение поля "Количество вложение" > 1), то:

* Нужно использовать переменную типа “Массив”
* Бот будет ждать ровно столько вложений, сколько мы здесь напишем (это может быть удобно, когда нам обязательно нужно получить, например, 3 фотографии объекта)
  {% endhint %}

В поле “Выберите типы вложений” ставим галочки возле типов, которые мы хотим сохранять (если не указать ничего, то бот будет сохранять всё). В поле “Переменная” выбираем нужную. Также мы можем выбрать максимальный размер файла, который готовы принять (в килобайтах или мегабайтах).

<figure><img src="/files/DtlquI9nkc2FrQWd3QIO" alt="" width="325"><figcaption></figcaption></figure>

<figure><img src="/files/MufPQwWJrh8PK6smTlsE" alt="" width="324"><figcaption></figcaption></figure>

<figure><img src="/files/EzGuiNLTx0HJ2Qm330Ve" alt="" width="319"><figcaption></figcaption></figure>

{% hint style="info" %}
Стоит указать действие бота для случаев, когда пользователи будут присылать не подходящие под критерий сообщения. Например, чтобы бот снова и снова просил прислать фото. Для этого нужно от значка ⚠️ провести стрелку к нужному блоку.
{% endhint %}

<figure><img src="/files/gNSJO1lP5l6jEp77XiAk" alt="" width="299"><figcaption></figcaption></figure>

<figure><img src="/files/Wmlf3w0FYft8xplXcR9k" alt="" width="241"><figcaption></figcaption></figure>

Теперь, если пользователи будут присылать боту изображение, то переменная %Файл% сможет сразу отправлять ссылку, по которой его можно будет скачать:

<figure><img src="/files/p5xwnCLWHT9qv2jIVYn1" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/h0clPb2eUn9Nji5yq8Da" alt="" width="400"><figcaption></figcaption></figure>

{% hint style="info" %}
Если человек пришлёт несколько картинок, то бот сохранит первую.
{% endhint %}

## Дополнительная обработка

На самом деле в переменной %Файл% в момент обработки вложения сохраняются и другие данные, а именно:

* тип вложения (изображение)
* имя файла (создаётся автоматически)
* ссылка на изображение в хорошем качестве (которую мы уже получили в ответ)
* ссылка на превью

И выглядит это так:

<figure><img src="/files/h0clPb2eUn9Nji5yq8Da" alt="" width="400"><figcaption></figcaption></figure>

В некоторых случаях поэтому нам нужно будет дополнительно извлекать URL файла для скачивания (например, если мы собираем обратную связь и не знаем заранее, сколько фотографий пришлёт клиент).

Тогда ссылку на изображение в хорошем качестве можно сохранить в переменную типа “Строка”. Назовём её %Ссылка на фото% и создадим так же, как создали переменную %Файл%, только вместо “Вложение” в типе переменной укажем “Строка”.

После создания нужной переменной ссылку в неё можно сохранить или в блоке “Установить переменную”, или в блоке “Выполнить SmartQuery” (достаточно выбрать один по вкусу).

* В блоке “Установить переменную” нужно в части слева от знака равенства выбрать переменную %Ссылка на фото%, а справа - ввести формулу {{ %Файл%\['url'] }}
* В блоке “Выполнить SmartQuery” будет всё то же самое, но без {{ }}

<figure><img src="/files/W09eHLlshDHatClSQcct" alt="" width="325"><figcaption><p>Блок "Установить переменную"</p></figcaption></figure>

<figure><img src="/files/lXSFLfQXYso6sMNzMIRC" alt="" width="319"><figcaption><p>Блок "Выполнить SmartQuery"</p></figcaption></figure>

И теперь, если мы после сохранения переменной %Ссылка на фото% добавим шаг “Отправить сообщение” с этой переменной, то в ответ на сообщение с картинкой, как и в прошлом случае, получим ссылку на неё. Однако других данных в ней уже не будет, и мы вольны делать с ней всё, что захотим.

<figure><img src="/files/UbQEv1w5bPqFfQ5fVjsl" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/czA1J523rcFaeFtv9oUr" alt="" width="401"><figcaption></figcaption></figure>

Осталось придумать, в каких случаях бот будет сохранять ссылки на файлы и куда их дальше отправлять. Например, заносить в Google-таблицу или пересылать администратору.

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

А может, сперва сохранить несколько ссылок в один массив и потом уже пересылать его, куда будет нужно.

## Как отправить изображение из переменной не ссылкой

{% hint style="info" %}
Отправить изображение вложением можно через Telegram API. Официальная документация доступна по [ссылке](https://core.telegram.org/bots/api#sendphoto).
{% endhint %}

1. Добавляем в наш сценарий блок «Отправить HTTP-запрос»

   <figure><img src="/files/SFFHbPRH4SESIgjwjsbI" alt=""><figcaption></figcaption></figure>
2. В поле URL пишем строку:

   ```
   https://api.telegram.org/bot{BOT_TOKEN}/sendPhoto
   ```

   Где вместо {BOT\_TOKEN} указываем токен нашего бота

   <figure><img src="/files/UoA7WWj0XngcMs3qeMNF" alt=""><figcaption></figcaption></figure>
3. Добавляем два параметра:

   1. chat\_id = %user\_id% (если хотим отправить пользователю в лс)
   2. photo = %Переменная-вложение% (указываем название нашей переменной)

   <figure><img src="/files/YHuhXKZilPGfXPQaoFMw" alt=""><figcaption></figcaption></figure>
4. Публикуем сценарий и тестируем

   <figure><img src="/files/8HvYmmRFJt1y5yVqwOdn" alt=""><figcaption></figcaption></figure>
5. Готово! Изображения успешно отправляются :thumbsup:

Также можно добавить сохранение статуса ответа и проверку на успешную отправку сообщения, чтобы ваши сценарии были настроены более надёжно. Подробнее вы можете прочитать об этом в [статье про HTTP-запросы](https://docs.smartbotpro.ru/scenarii/integracii/http-zaprosy).


---

# 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.smartbotpro.ru/scenarii/peremennye/peremennaya-vlozhenie.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.
