Форма на Тильде принимает не только имя, телефон и e‑mail, но и файлы: сканы паспорта для брони, техническое задание в .docx, фото товара на возврат, макет для печати. С кастомными доработками форм Тильды я работаю не первый год, и вопрос от клиентов звучит почти всегда одинаково: скопилось 60-80 заявок с вложениями, а как забрать файлы из форм Тильды разом, а не открывать каждое письмо по очереди. Штатными средствами Тильды пачкой это не сделать, но через API и небольшой скрипт задача решается за один вечер.
По теме статьи
Готовое решение
Подарочные сертификаты Тильда без процента с продаж
Покупатель оплачивает сертификат как обычный товар, получает код на почту и гасит его в корзине. Работает на вашем хостинге, без процента с продаж.
от30 000 ₽
Кастомный скрипт
Когда стандартных блоков не хватает
Доработка сайтов на Тильде: скрипты для корзины, промокоды, зоны доставки, интеграции с CRM и Telegram. Простой скрипт от 3 000
от3 000 ₽
Куда Тильда сохраняет файлы из формы после отправки
Когда посетитель прикрепляет файл к полю формы, он не остаётся на его устройстве и не улетает напрямую в почту. Тильда сначала загружает его на собственное хранилище (домен вида static.tildacdn.com или похожий), присваивает файлу уникальную ссылку и уже эту ссылку добавляет в данные заявки как обычный текстовый параметр. Дальше эта ссылка расходится сразу в несколько мест.
| Куда попадает ссылка на файл | Что там видно |
|---|---|
| E‑mail-уведомление о новой заявке | Кликабельная ссылка среди остальных полей формы |
| Раздел «Заявки» в панели управления сайтом | Ссылка в отдельной колонке таблицы заявок |
| Вебхук или интеграция (Google Таблицы, CRM, Albato) | Текст ссылки в ячейке или поле, сам файл не копируется |
Важный момент: сам файл при этом физически один, он лежит только на серверах Тильды. В Google Таблицу, amoCRM или Bitrix24 при интеграции прилетает не файл, а строка с адресом, по которому его можно открыть. Если хранилище Тильды окажется недоступно или ссылка протухнет, файл нигде больше не сохранится, если вы не скачали его заранее.
Как скачать вложение из одной заявки вручную
Для разовой задачи штатных средств хватает. Заходим в панель сайта, открываем раздел с формами, находим нужную заявку в списке отправленных, и в колонке с полем «Файл» видим кликабельную ссылку. Клик открывает файл в новой вкладке, дальше сохраняем его как обычно через браузер.
Единственное неудобство: имена файлов Тильда обезличивает, вложение с названием «Договор.pdf» на выходе превращается в набор символов и цифр. Если заявок пять, переименовать руками не проблема. Если их полсотни и файлы нужно разложить по клиентам, ручная работа быстро превращается в отдельную задачу на полдня.
Почему в Тильде нет кнопки «скачать всё одним архивом»
Экспорт заявок в CSV или XLS в панели Тильды есть, но он выгружает только текстовые поля: имя, телефон, комментарий. Поле с файлом в этом экспорте превращается в текстовую ссылку внутри ячейки, сам файл в архив не попадает ни при каком тарифе, включая Business. Это не баг и не ограничение платного плана, а особенность архитектуры: конструктор хранит вложения отдельно от текстовых данных заявки и не умеет упаковывать их в zip по запросу.
Поэтому вариантов остаётся два: либо открывать каждую ссылку вручную, либо написать код, который сделает это за вас.
Бесплатный материал
🎁 Полезный скрипт в подарок
Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.
Без спама. Отписка в 1 клик.
Выгрузка файлов из форм Тильды через API и скрипт на Python
У Тильды есть открытое API, и метод getformsdata как раз возвращает все заявки по форме вместе со значениями всех полей, включая ссылки на файлы. Для работы понадобится publickey и secretkey из раздела «Аккаунт → API» в личном кабинете и ID проекта, который виден в адресной строке при редактировании сайта.
Структура ответа простая: массив записей, в каждой записи поля формы как ключи, а значение поля с файлом это либо одна ссылка, либо несколько ссылок через запятую, если в форме разрешена загрузка нескольких файлов сразу. Дальше нужно просто пройтись по всем записям и скачать каждую ссылку на диск.
import requests
import os
PUBLIC_KEY = "ваш_publickey"
SECRET_KEY = "ваш_secretkey"
PROJECT_ID = "1234567"
def get_forms_data():
url = (
"https://api.tildacdn.info/v1/getformsdata/"
f"?publickey={PUBLIC_KEY}&secretkey={SECRET_KEY}&projectid={PROJECT_ID}"
)
return requests.get(url).json()
def download_files(data, folder="uploads"):
os.makedirs(folder, exist_ok=True)
for record in data.get("records", []):
for field, value in record.items():
if isinstance(value, str) and value.startswith("https://") and "tildacdn" in value:
filename = value.split("/")[-1]
file_bytes = requests.get(value).content
with open(os.path.join(folder, filename), "wb") as f:
f.write(file_bytes)
if __name__ == "__main__":
forms_data = get_forms_data()
download_files(forms_data)
Если заявок сотни, между запросами стоит добавить небольшую паузу: CDN Тильды при частых обращениях подряд начинает отдавать ошибки, и часть файлов молча пропускается. Ещё удобно сразу переименовывать файлы в скрипте по имени клиента и дате заявки, иначе на выходе получите папку с обезличенными именами вроде набора хэшей, в которой ничего не найти.
Если такую выгрузку нужно встроить в постоянный процесс, а не запускать скрипт руками раз в квартал, обычно быстрее заказать разработку кастомного скрипта под конкретную форму, чем разбираться с документацией Tilda API с нуля.
Автоматическая выгрузка новых файлов через вебхук и n8n
API-скрипт хорош для разовой выгрузки накопившихся заявок, но для текущей работы удобнее не запрашивать данные по расписанию, а получать файл сразу в момент отправки формы. Для этого в настройках формы указывается адрес вебхука, куда Тильда при каждой заявке отправляет POST-запрос со всеми полями, включая ссылки на файлы.
В n8n такой сценарий собирается без единой строчки кода: нода Webhook принимает данные заявки, нода HTTP Request скачивает файл по ссылке из тела запроса, а следующая нода сохраняет его в Yandex Object Storage или на собственный сервер, попутно подставляя в имя файла телефон или дату заявки из тех же полей формы. С момента отправки формы до появления файла в хранилище проходит несколько секунд, и ничего не нужно запускать вручную.
Куда сохранять файлы клиентов и что учитывать с персональными данными
Сканы паспортов, фото банковских карт при возврате, брифы с контактами заказчика, всё это персональные данные, и по 152-ФЗ их нужно хранить на серверах, которые физически находятся в России. Здесь легко ошибиться: складывать вложения в Google Drive или Dropbox быстро и просто, но с точки зрения закона такое хранение персональных данных российских клиентов на зарубежных серверах уже нарушение.
На практике для такой задачи хватает Yandex Object Storage, VK Cloud или обычного VPS у российского провайдера. Доступ к личному кабинету Тильды при этом разработчику давать не обязательно, для выгрузки файлов достаточно publickey, secretkey и ID проекта из раздела API, полные права на редактирование сайта для этого не нужны.
Частые вопросы
Сколько времени файлы, отправленные через форму Тильды, хранятся на сервере?
Официального срока хранения Тильда не публикует, на практике ссылки на файлы остаются рабочими долго. Но я всегда советую не полагаться на это и выгружать вложения к себе в течение недели после получения заявки, а не откладывать на потом.
Можно ли ограничить тип и размер файла, который клиент прикрепляет к форме?
Да, в настройках поля с файлом можно указать допустимые расширения и включить требование к формату. По умолчанию у Тильды есть верхний лимит на вес одного файла, увеличить его штатными настройками нельзя, только через доработку самой формы.
Что делать, если ссылка на файл в заявке выдаёт ошибку 404?
Чаще всего это значит, что файл удалили из хранилища вручную или при переносе проекта на другой домен, либо ссылка сформировалась некорректно из-за сбоя во время отправки формы. Восстановить такой файл через панель Тильды нельзя, поэтому регулярная выгрузка вложений к себе снижает риск потерять их совсем.
Нужно ли давать разработчику доступ к личному кабинету Тильды, чтобы выгрузить файлы?
Нет, для работы через API достаточно publickey и secretkey из раздела «Аккаунт → API» и ID проекта. Эти данные дают доступ только к чтению заявок и файлов конкретного проекта, полный доступ к редактированию сайта для выгрузки не требуется.