Ограничения Meta Ads
Коннектор Meta Ads имеет ряд ограничений, связанных как с политиками Meta API, так и с архитектурными особенностями интеграции. Ниже перечислены все значимые ограничения и стратегии их обхода.
1. Rate Limiting (3 запроса/сек)
Ограничение: rate limiter на уровне провайдера ограничивает частоту запросов до 3 запросов в секунду с окном в 1000ms и jitter 100ms.
Реализация: запросы ставятся в очередь и выполняются последовательно с соблюдением интервала. При превышении лимита возвращается HTTP 429 или код ошибки из списка throttle-ошибок.
Стратегия обхода:
- Используйте фильтры для уменьшения количества запросов
- Применяйте кеширование данных
- Для больших объёмов используйте асинхронные отчёты
2. META_MAX_PAGES (лимит страниц)
Ограничение: максимальное количество страниц пагинации настраивается через runtimeConfig.providers.meta.maxPages.
Что происходит при превышении: в лог записывается событие meta_paging_truncated, результаты обрезаются до максимального количества страниц.
Рекомендация: при работе с большими аккаунтами (сотни кампаний и тысячи объявлений) используйте фильтры для сужения выборки или запрашивайте данные частями.
3. Экспоненциальный backoff при троттлинге
Ограничение: при получении throttle-ошибок применяется экспоненциальный backoff:
- Базовая задержка: 60 секунд
- Максимальная задержка: 15 минут
- Приоритет: заголовок
estimated_time_to_regain_accessнад формулойmin(MAX_THROTTLE_BACKOFF_MS, DEFAULT_THROTTLE_BACKOFF_MS * 2^attempt) - Максимальный множитель: 4x от базовой задержки
Per-account quota отслеживание: используется callCount, totalCputime, totalTime — worstPct по максимуму для оценки необходимости ожидания. estimated_time_to_regain_access в секундах × 60 × 1000 → regainMs.
4. 8 кодов троттлинга
Meta API возвращает специфические коды ошибок при превышении лимитов:
| Код | Сообщение | Категория |
|---|---|---|
4 | Application request limit reached | throttle |
17 | User request limit reached | throttle |
32 | Page-level throttling | throttle |
613 | Custom-level throttling | throttle |
80000 | Business use case throttling (Instagram) | throttle |
80003 | Business use case throttling (custom audiences) | throttle |
80004 | Business use case throttling (ads management) | throttle |
80014 | Business use case throttling (ads insights) | throttle |
Все throttle-ошибки retryable — система автоматически повторяет запрос через backoff.
5. Payload Too Large
Ограничение: запрос может быть отклонён с ошибкой payload too large в двух вариантах:
| Код | Описание |
|---|---|
payload-1-99 | Payload too large (code: 1, subcode: 99) |
payload-100-1487534 | Payload too large (code: 100, subcode: 1487534) |
Причина: слишком много полей или метрик в одном запросе.
Решение: разбейте запрос на несколько меньших — запрашивайте метрики группами по 10-15 штук за раз.
6. Деградация креативов
Ограничение: обогащение креативами может деградировать при ошибках API.
Последствия: креативные поля (thumbnail_url, image_url, body, link, download_url, video_id, title) могут отсутствовать в ответе, при этом основные структурные и метрические данные сохраняются.
Причина: креативы запрашиваются отдельным вызовом API, который может упасть независимо от основного запроса.
7. Бюджетные поля в центах
Ограничение: поля daily_budget и lifetime_budget приходят из API в центах.
Конвертация: LightLead автоматически делит значение на 100 для получения суммы в реальной валюте.
campaign_budget = int(daily_budget) / 1008. Период статистики по умолчанию
Ограничение: период статистики по умолчанию — last_30d.
Доступные периоды: today, yesterday, last_7d, last_30d.
Реализация: через функцию resolveGraphDateRange.
9. Транспортные ошибки
При сетевых проблемах возможны транспортные ошибки:
| Код | Описание |
|---|---|
transport-5xx | HTTP 5xx server error |
transport-ECONNABORTED | Connection aborted |
transport-ECONNRESET | Connection reset |
transport-ETIMEDOUT | Connection timed out |
transport-EAI_AGAIN | DNS lookup failed |
Все транспортные ошибки retryable — система автоматически повторяет запрос.
Сводная таблица ограничений
| Ограничение | Значение | Retryable |
|---|---|---|
| Rate limit | 3 запроса/сек | Да |
| META_MAX_PAGES | Конфигурируемый | Нет (truncation) |
| Backoff максимум | 15 минут | Да |
| Backoff множитель | До 4x | Да |
| Throttle кодов | 8 + HTTP 429 | Да |
| Payload too large | 2 варианта | Да (разбить запрос) |
| Креативная деградация | Частичная потеря данных | Нет |
| Бюджет в центах | /100 конвертация | Н/Д |
| Транспортные ошибки | 5 типов | Да |