Загрузка товаров фидом YML (Яндекс.Товары)
Одна ссылка на XML — и весь каталог сайта оказывается в Telegram. Обновляется сам.
Фид — это XML-файл, в котором сайт перечисляет свои товары: название, цену, картинки, наличие. Формат придумал Яндекс для Яндекс.Маркета, он называется YML (Yandex Market Language) и сегодня его умеет отдавать почти любая CMS. TelegaShop читает такой файл по ссылке и раскладывает товары по витрине в Telegram — вручную ничего заводить не нужно.
Коротко: вставьте в настройках магазина ссылку вида
https://ваш-сайт.ру/feed.xml — например
https://container-darom.ru/feed.xml. Товары загрузятся сразу,
дальше каталог сам обновляется каждые 4 часа.
Где взять ссылку на фид
Почти везде выгрузка уже есть, её нужно только включить и скопировать адрес:
| Платформа | Где искать |
|---|---|
| 1С-Битрикс | Маркетинг → Экспорт товаров → Яндекс.Маркет (YML) |
| InSales | Продвижение → Файлы экспорта → Яндекс.Маркет |
| OpenCart / ocStore | Модули → YML-выгрузка (модуль ставится отдельно) |
| Tilda | Настройки сайта → Экспорт каталога → YML |
| МойСклад | Розница → Интеграции → Выгрузка YML |
| Самописный сайт | Попросите разработчика отдать /feed.xml по схеме ниже |
Проверить ссылку просто: откройте её в браузере. Если видите XML с тегами
<offer> — всё в порядке. Если скачивается файл или открывается HTML-страница
магазина, значит адрес не тот.
Как подключить
- Откройте магазин в приложении → Настройки.
- Вставьте адрес фида в поле «Ссылка на YML-фид» и сохраните.
- Импорт стартует сразу. Несколько тысяч товаров загружаются за 10–20 секунд, картинки подтягиваются по мере открытия витрины.
- Дальше фид перечитывается каждые 4 часа. Кнопка «Обновить сейчас» рядом с полем запускает импорт вне очереди.
Как должен выглядеть файл
Минимальный рабочий пример — достаточно скопировать структуру и подставить свои товары:
<?xml version="1.0" encoding="UTF-8"?>
<yml_catalog date="2026-08-15 12:00">
<shop>
<name>Название магазина</name>
<company>ООО «Компания»</company>
<url>https://ваш-сайт.ру</url>
<currencies>
<currency id="RUR" rate="1"/>
</currencies>
<categories>
<category id="1">Контейнеры</category>
</categories>
<offers>
<offer id="10245" available="true">
<name>Морской контейнер 20 футов</name>
<vendor>Контейнеры 20 футов</vendor>
<vendorCode>CNT-20-DV</vendorCode>
<price>185000</price>
<oldprice>199000</oldprice>
<currencyId>RUR</currencyId>
<categoryId>1</categoryId>
<picture>https://ваш-сайт.ру/img/cnt-20-1.jpg</picture>
<picture>https://ваш-сайт.ру/img/cnt-20-2.jpg</picture>
<description>Сухогрузный контейнер, состояние б/у, доставка по России.</description>
<param name="Объём">33 м³</param>
<param name="Состояние">Б/у</param>
<sales_notes>Минимальный заказ — 1 шт.</sales_notes>
</offer>
</offers>
</shop>
</yml_catalog>
Какие теги мы читаем
Всё остальное из стандарта Яндекс.Товаров можно оставить в файле — лишнее просто игнорируется.
| Тег | Что становится в магазине |
|---|---|
offer id | Ключ товара. По нему мы находим товар при следующем импорте — не меняйте его без нужды. Обязателен. |
name | Название товара. Если тега нет, соберём из vendor + model. Обязательно одно из двух. |
price | Цена. Товары с нулевой или пустой ценой пропускаются. Обязателен. |
oldprice | Старая цена — показывается зачёркнутой со значком скидки. Учитывается, только если больше текущей. |
picture | Фотографии, до 6 штук на товар. Обложкой становится последняя картинка из списка — в большинстве выгрузок именно она общая и без водяных знаков. |
vendor | Категория витрины. Мы раскладываем товары по производителю или линейке — так фильтры в Telegram получаются человеческими. Категории создаются сами. |
vendorCode | Артикул, показывается под названием и участвует в поиске по магазину. |
description | Описание. HTML-теги вырезаются, остаётся чистый текст. |
param | Характеристики (до 30 штук). Попадают в описание строками «Название: значение» и становятся фильтрами витрины: какие именно показывать покупателю, выбирается в разделе «Фильтры витрины». |
sales_notes | Условия продажи — тоже уходят в описание. |
available | false — товар остаётся на витрине с пометкой «Нет в наличии» и кнопка покупки гаснет. |
Что происходит при обновлении
- Новый
offer id— создаётся новый товар. - Знакомый id — обновляются название, цена, наличие и описание. Картинки перезаливаются, только если список ссылок изменился.
- Товар пропал из фида — он не удаляется, а скрывается. Вернётся в выгрузку — снова появится на витрине вместе со своей статистикой.
- Опустевшие категории убираются из фильтров автоматически.
Товары, заведённые руками, импорт не трогает: они живут отдельно от фида.
Ограничения
- Размер файла — до 40 МБ, до 20 000 товаров в одном фиде.
- До 6 фотографий на товар.
- Ссылка должна быть публичной: без авторизации, без IP-фильтров, максимум 3 редиректа.
- Мы ходим за файлом с User-Agent
TelegaShopBot/1.0— не блокируйте его в защите сайта. - Варианты товара (размеры, цвета) пока приезжают отдельными карточками — так их отдаёт сам стандарт.
Если что-то пошло не так
Статус последнего импорта виден в настройках магазина под полем ссылки. Самые частые причины:
| Что видно | Что делать |
|---|---|
| «Не удалось скачать файл» | Откройте ссылку в режиме инкогнито. Часто фид закрыт авторизацией или отдаётся только своим IP. |
| «Файл не похож на YML» | По ссылке отдаётся HTML-страница или CSV. Нужен именно XML с <yml_catalog>. |
| «Ошибка разбора XML» | В файле незакодированные символы &, < или обрыв выгрузки. Проверьте фид валидатором Яндекса. |
| Товаров загрузилось меньше, чем на сайте | Пропускаются позиции без id, без названия и с нулевой ценой — проверьте эти поля в выгрузке. |
| Картинки не появились | Хостинг отдаёт изображения только по своему домену (hotlink-защита) либо ссылки ведут на http:// с битым сертификатом. |
Чек-лист перед подключением
- Ссылка открывается в инкогнито и показывает XML.
- У каждого товара есть
id,nameиprice. - В
vendorлежит то, чем удобно фильтровать витрину. - Последняя
picture— та, которую не стыдно показать обложкой. - Файл отдаётся быстрее трёх минут и весит меньше 40 МБ.
Готово — можно вставлять ссылку. Если фид принимает Яндекс.Маркет, примет и TelegaShop. Не получается — напишите в @telegasp_bot, посмотрим вашу выгрузку.