AI Competitor: monitoring cen konkurencji
Instalacja i konfiguracja monitoringu cen konkurencji w PrestaShop 8 i 9: profile konkurentów, indeksowanie katalogu, ekstrakcja AI, alerty i analityka.
Wprowadzenie
AI Competitor monitoruje ceny konkurencji bezpośrednio z panelu PrestaShop. Definiujesz konkurenta raz, wraz z nazwą i selektorami; moduł może następnie pobrać pełną listę jego produktów z jego sitemapy, dopasować ją do Twojego katalogu, odczytywać ceny w regularnych odstępach, wykrywać istotne zmiany, powiadamiać Cię e-mailem i proponować cenę dostosowaną do Twojej strategii.
Zgodny z PrestaShop 8.0 do 9.x, PHP 7.4 do 8.3, natywny multisklep. Bez zależności Composera, bez zewnętrznej biblioteki JavaScript.
Instalacja
- W panelu otwórz Moduły → Menedżer modułów → Wgraj moduł.
- Wgraj plik
dfaicompetitor.zip. - Moduł tworzy swoje tabele oraz menu Katalog → AI Competitor, które obejmuje sześć stron: pulpit, konkurenci, monitorowane adresy URL, katalog konkurenta, raporty i analityka, import/eksport.
Po instalacji generowany jest unikalny token cron. Znajdziesz go na pulpicie modułu.
Aktualizacja z wersji 1.0.x
Po prostu wgraj nowy ZIP na istniejącą instalację. Skrypt aktualizacji tworzy nowe tabele, dodaje brakujące kolumny, a przede wszystkim generuje profil konkurenta dla każdej już używanej nazwy konkurenta i przypisuje do niego odpowiednie adresy URL. Twoje dane zostają zachowane i nie trzeba niczego wprowadzać ponownie.
Ponowna instalacja paczki z tym samym numerem wersji co już zainstalowana nie uruchamia skryptu aktualizacji, a opcache PHP może nadal serwować stare pliki. Po każdym wgraniu sprawdzaj numer wersji wyświetlany na pulpicie.
Konfiguracja początkowa
Otwórz Katalog → AI Competitor. Pulpit zbiera statystyki i pięć bloków konfiguracji.
Dostawca AI
Awaryjna ekstrakcja AI jest opcjonalna, ale zalecana: przejmuje pracę, gdy witryna konkurenta nie udostępnia ani danych strukturalnych, ani użytecznego selektora. Obsługiwani są trzej dostawcy:
- Mistral AI (domyślnie), najtańszy, zalecany model:
mistral-small-latest - Anthropic Claude, najlepsza precyzja na złożonych stronach, zalecany model:
claude-haiku-4-5-20251001 - OpenAI, dobry kompromis, zalecany model:
gpt-4o-mini
Wpisz klucz API wybranego dostawcy. Jest wyświetlany zamaskowany; przy kolejnym zapisie zostaw pole puste, aby zachować zapisany klucz. Płacisz bezpośrednio dostawcy, bez narzutu DataFirefly.
Alerty
- E-mail powiadomień: odbiorca zbiorczych alertów i raportu tygodniowego.
- Próg zmiany w procentach, domyślnie 3 %. Poniżej nie powstaje żaden alert.
- Dzień raportu tygodniowego, domyślnie poniedziałek.
Scraping
- Adresy URL na partię crona: liczba adresów odczytywanych przy każdym przebiegu, domyślnie 20.
- Domyślny interwał w godzinach, stosowany do nowych adresów, domyślnie 24 h.
- Limit czasu HTTP i User-Agent. Dostarczony User-Agent identyfikuje robota z nazwy (
DataFireflyBot); niektóre witryny dopuszczają nazwanego robota, którego inaczej by zablokowały. - Przechowywanie historii w dniach, domyślnie 180.
Indeksowanie katalogu
- Stron na partię: liczba kart konkurenta otwieranych w jednym przebiegu, domyślnie 15.
- Sekund na partię: budżet czasu każdego przebiegu, domyślnie 20. Utrzymuj go poniżej swojego
max_execution_timew PHP. - Próg dopasowania: minimalne podobieństwo tytułów do zaakceptowania automatycznego dopasowania, domyślnie 82.
- Automatycznie monitoruj dopasowania: tworzy monitorowany adres URL, gdy tylko zindeksowana strona zostanie dopasowana do jednego z Twoich produktów. Domyślnie wyłączone.
- Kontynuuj indeksowanie z crona: domyślnie włączone.
Strategia korekty
Trzy strategie wyznaczają sugerowaną cenę, zawsze liczoną od najtańszego konkurenta:
- Zrównanie: ta sama cena co u najtańszego konkurenta.
- Podcięcie o X %: X % poniżej, domyślnie 1 %.
- Premium o X %: X % powyżej, dla świadomego pozycjonowania w wyższym segmencie.
Zdefiniować konkurenta
Od wersji 1.1.0 konkurent jest osobnym wpisem, a nie etykietą wpisywaną ponownie przy każdym adresie. Otwórz Katalog → AI Competitor → Konkurenci → Dodaj. Formularz ma trzy zakładki.
Tożsamość
Nazwa wyświetlana wszędzie, domena bez schematu (przyklad.pl), waluta, interwał odczytu, opcja wymuszonej ekstrakcji AI oraz pole na notatki. To domena pozwala modułowi automatycznie przypisać nowy adres URL do właściwego konkurenta.
Selektory
Selektory CSS ceny, nazwy produktu, SKU, obrazu i dostępności. Zostaw je puste, jeśli witryna publikuje JSON-LD, co robi większość nowoczesnych sklepów. Obsługiwana składnia: znacznik, .klasa, #identyfikator, [atrybut=wartość], potomek i bezpośrednie dziecko. Przykład: div.product-price > span.amount
To główna korzyść z wpisu konkurenta: gdy witryna przebuduje motyw i zepsuje selektor, poprawiasz go tutaj raz, a poprawka rozchodzi się na wszystkie adresy tego konkurenta, które nie mają własnego selektora.
Indeksowanie katalogu
Adres sitemapy (zostaw pusty, aby odczytać dyrektywy Sitemap: z robots.txt domeny), adres startowej strony kategorii, selektor linków produktowych i selektor linku do następnej strony, wzorce adresów do zatrzymania lub odrzucenia, opóźnienie między dwoma żądaniami, limit produktów i poszanowanie robots.txt.
Wzorce przyjmują zwykły podciąg albo wyrażenie regularne ograniczone ukośnikami. W polskim sklepie /produkt/ jako wzorzec do zatrzymania często wystarcza, aby wyodrębnić karty produktów z sitemapy zawierającej też bloga i strony CMS.
Zindeksować katalog konkurenta
Otwórz Katalog → AI Competitor → Katalog konkurenta, wybierz konkurenta, źródło odkrywania i limit produktów, po czym uruchom indeksowanie.
Dostępne są dwa źródła:
- Sitemapa, zalecana. Moduł czyta skonfigurowaną sitemapę albo tę ogłoszoną przez robots.txt, podąża rekurencyjnie za indeksami sitemap i zatrzymuje adresy pasujące do Twoich wzorców.
- Strony kategorii, gdy żadna sitemapa nie nadaje się do użytku. Moduł startuje z adresu listingu, zbiera linki produktowe przez selektor konkurenta i podąża za linkiem do następnej strony.
Po odkrywaniu następuje faza wzbogacania, która otwiera każdą stronę, wyciąga tytuł, SKU, EAN, markę, cenę, dostępność i obraz, a następnie próbuje dopasowania do Twojego katalogu.
Indeksowanie postępuje partiami ograniczonymi czasowo, sterowanymi przez otwartą stronę z paskiem postępu, i wznawia się przy każdym przebiegu crona. Sitemapa z dziesiątkami tysięcy adresów jest przetwarzana bez osiągnięcia max_execution_time w PHP. Możesz zamknąć stronę: praca trwa dalej po stronie crona.
Dopasowanie do Twojego katalogu
Moduł próbuje trzech dróg, w kolejności malejącej pewności:
- EAN13, szukany w Twoich produktach i ich wariantach. Pewne dopasowanie, wynik 100.
- Referencja, referencja dostawcy lub MPN. Wynik 95.
- Podobieństwo tytułu, z wagą dającą większe znaczenie numerom modeli i markom niż słowom pospolitym, oraz karą, gdy oba tytuły znacznie różnią się długością. Wynik musi przekroczyć skonfigurowany próg, domyślnie 82.
Każdy wiersz katalogu pokazuje metodę i wynik dopasowania. Wątpliwe dopasowanie poprawia się ręcznie: pole dopasowania podpowiada z Twojego katalogu, po nazwie lub referencji. Przyciski Dopasuj ponownie uruchamiają operację na niedopasowanych wierszach albo na wszystkich, co przydaje się po poprawieniu referencji po Twojej stronie.
Dopasowany wiersz staje się monitorowanym adresem URL przyciskiem Monitoruj albo masowo, akcją grupową na zaznaczeniu. Utworzony adres dziedziczy nazwę, selektory, walutę i interwał konkurenta.
Dodać adres URL ręcznie
Indeksowanie nie zastępuje pojedynczego wpisu. Otwórz Katalog → AI Competitor → Monitorowane adresy URL → Dodaj:
- Konkurent: wpis, po którym adres odziedziczy ustawienia. Zostaw puste, aby wpisać wszystko ręcznie.
- Produkt: wybrany z Twojego katalogu.
- URL: pełny adres karty produktu konkurenta.
- Nazwa konkurenta, selektor CSS, waluta, interwał: uzupełniane z konkurenta, gdy zostawisz je puste.
Jeśli nie wybierzesz konkurenta, moduł szuka tego, którego domena odpowiada wpisanemu adresowi, i przypisuje do niego adres. Przycisk Scrape przy każdym wierszu uruchamia natychmiastowy odczyt, przydatny do sprawdzenia adresu zaraz po utworzeniu.
Jak działa ekstrakcja
Dla każdego adresu moduł próbuje czterech metod kaskadowo i zatrzymuje się na pierwszej skutecznej:
- JSON-LD: dane strukturalne Product/Offer, obecne w zdecydowanej większości sklepów internetowych. Cena, waluta, dostępność, a przy indeksowaniu także tytuł, SKU, GTIN i marka, są odczytywane wprost bez konfiguracji.
- OpenGraph: znaczniki meta product price amount.
- Selektor CSS: ten z wpisu konkurenta albo własny adresu, jeśli go ma.
- AI: oczyszczony fragment HTML trafia do Twojego dostawcy, który zwraca cenę, walutę i stan magazynowy. Obsługiwane są międzynarodowe formaty cen (1 299,90 tak samo jak 1.234,56 czy $49.99).
Zawsze zaczynaj bez selektora CSS: JSON-LD wystarcza w większości przypadków. Dodawaj selektor albo wymuszoną AI tylko wtedy, gdy kolumna Status pokazuje no_price.
Import i eksport
Strona Import / Eksport służy do przeniesienia konfiguracji z jednego sklepu do drugiego.
Konkurenci w JSON
Eksport tworzy plik z nazwami, domenami, selektorami i ustawieniami indeksowania. Zaznacz konkurentów do uwzględnienia albo nie zaznaczaj nikogo, aby wyeksportować wszystkich. Przy imporcie dopasowanie odbywa się najpierw po nazwie, potem po domenie; pole wyboru decyduje, czy istniejący konkurent zostanie zaktualizowany, czy pominięty, a tryb podglądu zapowiada wynik bez zapisu.
Monitorowane adresy URL w CSV
Oczekiwane kolumny: product_id, product_reference, competitor_name, competitor_domain, url, price_selector, currency_iso, use_ai_extraction, scrape_interval_hours, active.
Obowiązkowe są tylko competitor_name i url, plus product_id lub product_reference, aby wiedzieć, do którego produktu należy adres. Nieznana nazwa konkurenta automatycznie tworzy jego wpis, dzięki czemu jeden plik wystarcza do uruchomienia całej instalacji. Separator jest wykrywany automatycznie, a import startuje w trybie podglądu, raportując wiersz po wierszu, co zostałoby utworzone, zaktualizowane lub pominięte.
Katalog konkurenta w CSV
Eksport wszystkiego, co znalazło indeksowanie, wraz z dopasowanym produktem, metodą i wynikiem. Pole wyboru ogranicza eksport do samych dopasowanych wierszy. Przydatne do audytu offline lub do przekazania działowi zakupów.
Skonfigurować cron
Praca cykliczna opiera się na punkcie końcowym zabezpieczonym tokenem, pokazanym na pulpicie. Zaplanuj jego wywołanie co 30 minut:
*/30 * * * * curl -s "https://twoj-sklep.pl/index.php?fc=module&module=dfaicompetitor&controller=cron&token=TWOJ_TOKEN" > /dev/null
Przy każdym przebiegu cron odczytuje partię adresów, których interwał upłynął, wysyła oczekujące e-maile alertów, wyprawia raport tygodniowy we właściwym dniu, posuwa o jedną partię trwające indeksowanie katalogu i czyści historię poza skonfigurowanym okresem przechowywania. Odpowiedzią jest podsumowanie w JSON.
Token można w każdej chwili wygenerować na nowo z pulpitu, wtedy istniejące zadania cron trzeba zaktualizować. Dostępne jest też ręczne uruchomienie przyciskiem Run cron now.
Alerty
Generowanych jest pięć typów alertów, każdy z wagą:
- price_drop / price_rise: zmiana powyżej progu. Zmiana o 10 % lub więcej staje się critical.
- undercut: konkurent schodzi poniżej Twojej ceny sprzedaży brutto. Zawsze critical.
- out_of_stock / back_in_stock: zmiany dostępności wykryte przez dane strukturalne albo AI.
- scrape_error: dopiero po 3 kolejnych niepowodzeniach, aby wyeliminować szum przejściowych awarii.
Alerty są łączone w jedną wiadomość zbiorczą na każdy przebieg crona.
Raporty i analityka
Ekran Raporty i analityka mieści się w czterech zakładkach, za stale widocznym paskiem wskaźników: porównywane produkty, udział produktów, w których jesteś najtańszy, średnia różnica wobec najniższej ceny rynkowej, otwarte alerty, kondycja scrapingu. Wybór okresu obejmuje 7, 30 lub 90 dni.
Przegląd
Twoja pozycja rynkowa w formie paska (najtańszy, pośrodku, najdroższy), produkty, na których tracisz cenowo, uszeregowane według malejącej różnicy, te z zapasem na podwyżkę, tabela per konkurent pokazująca, kto podcina Cię najczęściej, oraz streszczenie napisane przez AI. Okazje eksportują się do CSV.
Alerty
Lista filtrowana według typu, wagi, stanu i tekstu, z wykresem dziennego wolumenu według wagi. Każdy wiersz potwierdza się lub otwiera ponownie bez przeładowania strony, a licznik otwartych alertów aktualizuje się na pasku.
Analiza produktu
Wybierz monitorowany produkt: moduł rysuje Twoją cenę wobec ceny każdego konkurenta w danym okresie, pokazuje sugestię korekty z ceną obecną i proponowaną obok siebie oraz wymienia źródła z przyciskiem natychmiastowego odczytu przy każdym.
Od wersji 1.1.0 każdy odczyt zapisuje też Twoją własną cenę z danej chwili. To pozwala odtworzyć historię różnic. W sklepie zaktualizowanym z wersji 1.0.x krzywa Twojej ceny jest dokładna dopiero od odczytów po aktualizacji; wcześniej moduł używa Twojej bieżącej ceny jako wartości zastępczej.
Kondycja
Adresy, które zawodzą, ze statusem, liczbą kolejnych niepowodzeń, ostatnim błędem i przyciskiem ponowienia, plus wskaźnik skuteczności per konkurent. To pierwsze miejsce do sprawdzenia, gdy jakaś liczba wygląda podejrzanie: konkurent, którego scraping padł, zniekształca średnie.
Sugestia ceny
W zakładce analizy produktu moduł pokazuje Twoją obecną cenę, minimum, średnią i maksimum konkurentów, źródła oraz sugerowaną cenę zgodnie z Twoją strategią. Przycisk Zastosuj zapisuje cenę na produkcie PrestaShop.
Zastosowanie nigdy nie jest automatyczne. To świadomy wybór, aby uniknąć spirali obniżek między konkurentami wyposażonymi w to samo narzędzie. Przeliczenie z ceny brutto na netto odbywa się automatycznie według stawki podatku produktu.
Rozwiązywanie problemów
Indeksowanie nie znajduje żadnej strony
Sprawdź najpierw, czy domena konkurenta jest wpisana bez schematu i bez www.. Następnie otwórz https://domena/robots.txt w przeglądarce: jeśli nie zawiera żadnej dyrektywy Sitemap:, wpisz adres sitemapy ręcznie we wpisie konkurenta. Jeśli sitemapa istnieje, ale nic nie zostaje zatrzymane, Twój wzorzec filtrowania jest zapewne zbyt wąski: opróżnij go, aby zobaczyć, co wraca, a potem zawęź.
Indeksowanie znajduje strony, które nie są produktami
Wpisz jako wzorzec do zatrzymania segment wspólny dla kart produktów witryny, na przykład /produkt/ lub /p/, a jako wzorzec do odrzucenia to, co zaśmieca wynik, na przykład /blog/. Następnie wyczyść katalog konkurenta i uruchom ponownie.
Wiele stron pozostaje niedopasowanych
Sprawdź najpierw, czy karty konkurenta udostępniają SKU lub EAN: bez wspólnego identyfikatora zadziała tylko podobieństwo tytułu. Wpisz selektor SKU we wpisie konkurenta, uruchom indeksowanie ponownie, a potem użyj Dopasuj ponownie. Jeśli Twoje tytuły bardzo różnią się od tytułów konkurenta, obniż próg dopasowania do 75 i sprawdź uzyskane dopasowania, zanim tak to zostawisz.
Status „no_price”
Żadna z metod nie znalazła ceny. Sprawdź adres w przeglądarce, dodaj selektor CSS ceny we wpisie konkurenta albo włącz wymuszoną ekstrakcję AI.
Status „error” lub „blocked”
error oznacza, że strona nie odpowiedziała (HTTP 400 i wyżej albo przekroczenie limitu czasu). blocked oznacza, że robots.txt witryny zabrania tego adresu naszemu robotowi. W pierwszym przypadku dostosuj User-Agent, zwiększ limit czasu albo rozszerz interwał. W drugim jest to decyzja odwiedzanej witryny, którą sam musisz ocenić.
Ekstrakcja AI nie działa
Sprawdź, czy klucz API jest ważny i czy model istnieje u Twojego dostawcy. Błędy wywołań AI są zapisywane w Parametry zaawansowane → Logi z prefiksem [dfaicompetitor].
E-maile nie docierają
Przetestuj konfigurację e-mail PrestaShop w Parametry zaawansowane → E-mail. Moduł korzysta z natywnego systemu poczty z własnymi szablonami FR i EN.
Dobre praktyki i zgodność
- Zostaw włączone poszanowanie robots.txt. Obowiązuje przy odkrywaniu i przy czytaniu kart, honoruje opublikowany
Crawl-delayi stosuje regułę pierwszeństwa standardu: gdy pasują zarównoAllow, jak iDisallow, wygrywa dłuższa reguła. - Przy pierwszym indeksowaniu nieznanej witryny zachowaj opóźnienie między żądaniami co najmniej sekundy i rozsądny limit produktów.
- Rozszerz interwały odczytu: 6 do 24 h na adres w zupełności wystarcza do monitoringu cen.
- Zachowaj rozpoznawalny User-Agent. To uczciwa praktyka oczekiwana w obserwacji konkurencji, a niektóre witryny tolerują nazwanego robota, którego inaczej by zablokowały.
- Odczyt publicznych cen jest w Europie zasadniczo dozwolony, ale pozostajesz odpowiedzialny za wykorzystanie zebranych danych i za ocenę regulaminów odwiedzanych witryn.