Meta Marketing API v26.0: zmiany z 27.10.2026 i skrypt audytu istniejących integracji

Spis treści
Meta udostępniła Graph API i Marketing API v26.0 29 lipca 2026 r. Kilka zmian obejmie również starsze wspierane wersje Marketing API od 27 października 2026 r. Oprócz przypiętej wersji znaczenie ma więc termin wejścia w życie każdej zmiany. Artykuł omawia sześć zmian istotnych dla automatyzacji reklam; pełny opis wydania zawiera także inne pozycje.
1. Zakres wersji i termin wymagają osobnej kontroli
Meta dokumentuje zarówno zmiany związane z konkretną wersją, jak i zmiany obejmujące wiele wersji. Drugi przypadek należy do opisanego procesu publikacji, dlatego twierdzenie o pierwszym złamaniu gwarancji wersjonowania byłoby mylące. Marketing API i Graph API mają również różne harmonogramy wycofywania. Data końca Graph API v25.0 nie wyznacza końca Marketing API v25.0.
Według stanu z 24 października 2026 r. Marketing API v24.0 przekroczyła już podaną datę końca wsparcia: 6 października 2026 r. Pozostanie przy niewspieranej wersji nie stanowi rozwiązania migracyjnego. Inwentaryzacja powinna obejmować aktualną tabelę wersji oraz komunikaty dotyczące poszczególnych zmian.
2. Sześć zmian i rzeczywisty zakres zastosowania
- Szacunki emisji:
daily_outcomes_curve,budget_guardrailiestimate_dauznikają z odpowiedzi endpointów delivery estimate w v26.0, a od 27 października także w pozostałych wspieranych wersjach. Meta nie wskazuje zamiennika. Kontroli wymagają odczyty na poziomie konta i zestawu reklam oraz obliczenia korzystające z tych danych. - Kampanie Web + App: kreacji z
applink_treatment=web_onlynie można już przypisać do reklamy w kampanii korzystającej z miejsc konwersji Website i App. Nie oznacza to ogólnego zakazu kierowania na witryny. Dokumentacja wskazuje automatyczne kierowanie lub zgodną konfigurację ręczną. Zakres: v26.0, następnie wszystkie wspierane wersje Marketing API od 27 października. - Reklamy z ankietami: zmiana obejmuje
poll_specoraz komponenty ankiet podinteractive_components_specprzy tworzeniu lub zmienianiu reklam i kreacji. Aktualizacje pozostawiające kreację bez zmian mogą nadal działać. Zakres: v26.0, następnie pozostałe wspierane wersje od 27 października. - Messenger Stories: wartość
storyzostaje usunięta zmessenger_positionsbez błędu. Historyczne dane targetowania mogą nadal zawierać tę wartość. Ręczne umiejscowienia wymagają korekty; Advantage+ Placements nie wymagają działania z powodu tego usunięcia. Zakres: v26.0, od 27 października wszystkie wspierane wersje Marketing API, także wywołania bez numeru wersji. - Instagram Explore Feed: jawne żądanie tego umiejscowienia powoduje błąd od v26.0. Komunikat nie przypisuje tej zmianie wspólnego terminu 27 października dla wszystkich wersji. Faktycznie wysyłane wartości wymagają sprawdzenia w dokumentacji umiejscowień; sama etykieta widoczna w interfejsie nie określa bezpiecznie wartości API.
- Advantage+ audience: tworzenie określonych zestawów reklam Housing, Employment lub Financial Products and Services z targetowaniem innym niż szerokie i dopuszczającym rozszerzenie wymaga jawnej wartości 1 albo 0 w
targeting_automation.advantage_audience. Konfiguracje szerokie i domyślne nie są objęte ogólnym obowiązkiem. Reguła zaczyna obowiązywać w v26.0; rozszerzenie na wszystkie wersje nastąpi po wycofaniu Marketing API v25.0, bez ustalonej daty na dzień kontroli.
Poprawna odpowiedź HTTP nie dowodzi zachowania żądanego zestawu umiejscowień. Oprócz błędów kontrola powinna obejmować konfigurację i faktycznie używane umiejscowienia. Wielkość ewentualnego wpływu na wyniki zależy od konta i nie wynika z samego changeloga.

3. Lokalny skrypt wskazujący miejsca do sprawdzenia
Poniższy skrypt Python rekurencyjnie przegląda wyeksportowane obiekty i tablice JSON. Wyszukuje jawne odwołania do usuniętych pól, Messenger Stories, umiejscowień Instagram, kierowania web-only oraz potencjalnie istotnych struktur kreacji. Trafienie jest wskazówką do kontroli, a nie dowodem przyszłego błędu API. Komponent interaktywny nie musi być ankietą, a kreacja web-only wymaga kontekstu kampanii.
Skrypt nie wyprowadza reguł szczególnych kategorii reklam z wymyślonego pola vertical. Kategoria kampanii, szerokie lub ograniczone targetowanie, możliwość rozszerzenia, wersja API i operacja wymagają oddzielnej oceny. JSON zapisany wewnątrz ciągu znaków wymaga wcześniejszego zdekodowania. Kontrola obejmuje wyłącznie pliki bezpośrednio w wybranym katalogu.
#!/usr/bin/env python3
"""Local review hints only; no API calls and no automatic fixes."""
import json
import pathlib
import re
import sys
REMOVED = {"daily_outcomes_curve", "budget_guardrail", "estimate_dau"}
def scan(node, path="$", found=None):
found = [] if found is None else found
if isinstance(node, dict):
for key, value in node.items():
here = f"{path}.{key}"
if key in REMOVED:
found.append((here, "REMOVED_FIELD_REFERENCE", key))
if key == "fields":
# Flat field lists only; nested Graph field syntax needs review.
fields = value.split(",") if isinstance(value, str) else value
if isinstance(fields, list):
for field in fields:
if isinstance(field, str):
for token in re.findall(r"[A-Za-z_][A-Za-z_0-9]*", field):
if token in REMOVED:
found.append((here, "REMOVED_FIELD_REQUEST", token))
else:
found.append((here, "INVALID_FIELDS_SHAPE", "review"))
if key == "messenger_positions":
if not isinstance(value, list):
found.append((here, "INVALID_PLACEMENT_SHAPE", "review"))
elif "story" in value:
found.append((here, "MESSENGER_STORY", "review manual placement"))
if key == "instagram_positions":
found.append((here, "INSTAGRAM_PLACEMENT_REVIEW", "check Explore Feed mapping"))
if key == "applink_treatment" and value == "web_only":
found.append((here, "WEB_APP_CONTEXT_REVIEW", "check campaign conversion locations"))
if key in {"poll_spec", "interactive_components_spec"}:
found.append((here, "CREATIVE_REVIEW", "check poll use and operation"))
scan(value, here, found)
elif isinstance(node, list):
for index, value in enumerate(node):
scan(value, f"{path}[{index}]", found)
return found
def main(directory):
files = sorted(pathlib.Path(directory).glob("*.json"))
if not files:
print("INPUT_ERROR: no JSON files", file=sys.stderr)
return 2
findings, errors = 0, 0
for file in files:
try:
node = json.loads(file.read_text(encoding="utf-8"))
if not isinstance(node, (dict, list)):
raise ValueError("expected JSON object or array")
except (OSError, ValueError) as exc:
print(json.dumps({"file": file.name, "error": type(exc).__name__}))
errors += 1
continue
for path, kind, detail in scan(node):
print(json.dumps({"file": file.name, "path": path, "kind": kind, "detail": detail}))
findings += 1
print(json.dumps({"files": len(files), "review_hints": findings, "input_errors": errors}))
return 2 if errors else (1 if findings else 0)
if __name__ == "__main__":
if len(sys.argv) != 2:
raise SystemExit("usage: audit_v26.py DIRECTORY")
raise SystemExit(main(sys.argv[1]))Uruchomienie: python3 audit_v26.py /srv/adops/adset_configs. Kod wyjścia 1 oznacza wskazówki do kontroli, 2 błąd wejścia, a 0 tylko brak trafień w zakresie tych reguł. Pusty katalog jest błędem. Zadanie wdrożeniowe musi zachować kod wyjścia; dopisanie poprawnie zakończonego || echo ukryłoby błąd. Ścieżki i fragmenty konfiguracji mogą ujawniać strukturę wewnętrzną, dlatego wyniki wymagają logów z ograniczonym dostępem.
4. Uzupełnienie inwentaryzacji i weryfikacja
- Ustalić wersję API, endpoint, operację i odpowiedzialny zespół dla każdej integracji. Uwzględnić szablony, odbiorców danych raportowych i reklamy utworzone bezpośrednio w interfejsie.
- Wykonać inwentaryzację konta wyłącznie do odczytu, łącząc reklamy, kreacje, zestawy reklam i kampanie. Lokalny eksport nie obejmuje automatycznie późniejszych zmian w interfejsie.
- Ocenić każde trafienie zgodnie z zakresem opisanym powyżej. Usunąć przestarzałe ręczne umiejscowienia, zastąpić objęte zmianą kierowanie Web + App i sprawdzić konkretny przypadek audience przed zmianą flagi.
- Prześledzić usunięte pola delivery estimate w transformacjach i pulpitach. Nadal istniejąca kolumna dopuszczająca null może ukryć utratę metryki; brak wartości nie oznacza zera.
- Sprawdzić zatwierdzone zmiany w kontrolowanym środowisku testowym oraz porównać odpowiedzi i faktyczną konfigurację wokół terminu. Tworzenie lub emisja reklam testowych może powodować koszty; lokalny skrypt nie wywołuje API.
Pełny changelog v26.0 obejmuje również starsze mechanizmy protokołu, Pages, Commerce i dodatkowe funkcje Marketing API. Sześć kontroli nie wystarcza do potwierdzenia gotowości całej integracji.
5. Osobna kontrola wymiaru geograficznego
Przejście z DMA na Comscore jest niezależne od październikowego terminu. Supermetrics dokumentuje zmianę własnego konektora Facebook Ads: dotychczasowy wymiar DMA przestaje zwracać wyniki od 22 czerwca 2026 r. i zostaje zastąpiony przez Comscore market. Jest to dowód dotyczący tego konektora, a nie dowód utraty wierszy w każdej hurtowni lub identycznej zmiany we wszystkich endpointach Meta.
Poniższa diagnostyka wyszukuje wiersze faktów bez użytecznego dopasowania w przykładowym starym wymiarze. NOT EXISTS zapobiega mnożeniu wyświetleń przez duplikaty w wymiarze. Brak nazwy geograficznej również pozostaje niedopasowany. Nazwy tabel i kolumn są przykładowe; zapytanie mierzy luki mapowania, a nie przyczynę migracji platformy.
SELECT f.report_date, f.geo_name, SUM(f.impressions) AS impressions
FROM meta_geo_daily AS f
WHERE f.report_date >= '2026-06-01'
AND NOT EXISTS (
SELECT 1 FROM dim_dma AS d
WHERE d.dma_name = f.geo_name
AND d.dma_code IS NOT NULL
)
GROUP BY f.report_date, f.geo_name
ORDER BY impressions DESC
LIMIT 25;Oprócz 25 największych trafień znaczenie ma udział niedopasowanych wyświetleń w całości. Mapowanie produkcyjne wymaga udokumentowanych identyfikatorów obszarów, systemu geograficznego i okresów obowiązywania zamiast samych nazw. Ponowne przetworzenie historii zależy od zachowanych danych źródłowych i dostępnych mapowań. Tabele przejścia mogą wspierać zdefiniowane porównania, lecz różne granice obszarów wymagają jawnego zaznaczenia ograniczeń.
Pytania i odpowiedzi
Czy poprawny wynik skryptu potwierdza gotowość?
Nie. Brakujące eksporty, kontekst kampanii, niewspierane wersje, JSON wewnątrz ciągów znaków oraz zmiany poza zakresem kontroli pozostają otwarte. Nadal potrzebna jest inwentaryzacja konta wyłącznie do odczytu, udokumentowana ocena każdego trafienia zależnego od kontekstu i kontrolowana weryfikacja.
Czy przypięcie do v25.0 omija październikowy termin?
Nie dla czterech zmian z jawnym terminem obejmującym wiele wersji: pól delivery estimate, objętego zmianą kierowania Web + App, reklam z ankietami i Messenger Stories. Explore Feed oraz szczególny obowiązek Advantage+ audience mają inne reguły wersjonowania.