Brief dla agenta: zbuduj i zweryfikuj pełny AI Travel Scout w n8n

Cel

Zbuduj w n8n pełny system AI Travel Scout na podstawie szkolenia Mateusza Jankowskiego:

  1. formularz zbiera email, opis podróży i częstotliwość monitorowania,
  2. AI parsuje opis do ustrukturyzowanych preferencji,
  3. preferencje trafiają do Data Table,
  4. scheduler cyklicznie znajduje rekordy do obsłużenia,
  5. workflow pyta SerpApi Google Hotels o hotele,
  6. AI rankinguje oferty i wybiera TOP 3 + najlepszy hotel,
  7. AI generuje przewodnik po miejscu,
  8. AI tworzy finalną rekomendację podróży,
  9. Gmail wysyła realny mail testowy,
  10. Data Table zapisuje rekomendację i last_sent_at,
  11. weryfikujesz end-to-end, w tym przez MCP/mail, że wiadomość dotarła.

To jest demo szkoleniowe. Priorytet: pokazać zamkniętą pętlę pracy agenta, nie budować produkcyjny SaaS.

Źródła

Przeczytaj przed pracą:

Granice bezpieczeństwa

Wymagane dostępy

Tryb pracy agenta i subagentów

Nie wykonuj tego jako jednego monolitycznego zadania.

Podziel pracę na małe, niezależne części i deleguj je do subagentów Sonnet. Każdy subagent ma pracować w pętli:

  1. scout / plan - przeczytaj właściwe źródła, zrozum aktualny stan, zaplanuj minimalny zakres,
  2. work - zbuduj lub popraw swoją część,
  3. test - uruchom test swojej części i zbierz dowód,
  4. work - popraw błędy,
  5. test - powtarzaj aż część działa albo masz jasno opisany blocker.

Każdy workflow / moduł musi być niezależnie przetestowany przez subagenta Sonnet, zanim zostanie włączony do testu end-to-end.

Minimalny podział subagentów Sonnet:

Na końcu uruchom osobnego agenta Opus jako finalnego rewiewera całego flow. Opus ma sprawdzić:

Finalne potwierdzenie działania musi pochodzić z testów, nie z deklaracji. Jeśli coś nie działa, raport ma powiedzieć dokładnie gdzie, z jakim błędem i jaki jest następny krok.

Wymagane artefakty końcowe

Zapisz w n8n_demo/outputs/:

  1. travel-scout-final.workflow.json - eksport workflowu/workflowów.
  2. travel-scout-test-report.md - raport z testów.
  3. travel-scout-known-issues.md - braki, ryzyka i rzeczy do ręcznego ustawienia.
  4. travel-scout-demo-summary.md - krótka wersja dla prowadzącego: co pokazać na spotkaniu.
  5. subagents/sonnet-intake-report.md - plan, wykonanie, testy i dowody dla intake.
  6. subagents/sonnet-monitor-ranking-report.md - plan, wykonanie, testy i dowody dla monitoringu/rankingu.
  7. subagents/sonnet-recommendation-gmail-report.md - plan, wykonanie, testy i dowody dla rekomendacji/Gmail.
  8. subagents/sonnet-integration-qa-report.md - walidacja n8n, credentials, connections i execution logs.
  9. subagents/sonnet-mail-data-verification-report.md - weryfikacja maila i Data Table.
  10. opus-final-verification.md - końcowe potwierdzenie Opus, że cały flow działa albo precyzyjny opis blockerów.

Architektura workflowu

Możesz zrobić to jako dwa workflowy albo jeden workflow z dwoma triggerami. Preferowane dla czytelności:

Workflow A: Intake / formularz

Formularz przyjmuje dane użytkownika i zapisuje preferencje do Data Table.

Klocki:

  1. On form submission (formTrigger)
  2. AI Agent: Parse travel request
  3. OpenAI Chat Model
  4. Code: Normalize parsed request
  5. Data Table: Insert row

Workflow B: Monitor / ranking / rekomendacja / mail

Scheduler bierze rekordy z tabeli, sprawdza hotele, rankinguje, tworzy rekomendację i wysyła maila.

Klocki:

  1. Schedule Trigger
  2. Data Table: Take all rows from the table
  3. Code: Add should_monitor_now
  4. IF: Check if we should continue
  5. Set: Prepare query params
  6. HTTP Request: SerpApi Google Hotels
  7. Code: Extract hotels for AI
  8. AI Agent: Rank hotels
  9. OpenAI Chat Model
  10. Code: Parse AI ranking
  11. Data Table: Update request with ranking
  12. Code: Prepare recommendation input
  13. AI Agent: Destination Guide
  14. OpenAI Chat Model
  15. Code: Parse Destination Guide
  16. AI Agent: Travel Advisor
  17. OpenAI Chat Model
  18. Code: Parse Final Recommendation
  19. Gmail: Send Email
  20. Data Table: Update row with recommendation

Data Table

Użyj jednej tabeli demo, np. travel_scout_demo.

Wymagane pola:

Używaj systemowego id, jeśli istnieje. Jeśli w starym imporcie występuje tylko LEGACY_id, użyj LEGACY_id. Nie aktualizuj id, LEGACY_id, LEGACY_createdAt, LEGACY_updatedAt.

Szczegółowy workflow krok po kroku

1. Formularz

Pola formularza:

Wymagania:

2. AI Agent: Parse travel request

Cel: zamień opis użytkownika na JSON preferencji.

Zasady:

Oczekiwany JSON:

{
  "destination_country": "",
  "destination_region": "",
  "suggested_locations": [],
  "travel_type": "",
  "travel_style": "",
  "activities": [],
  "people_count": "",
  "budget": "",
  "trip_duration": "",
  "preferred_dates": "",
  "preferences": [],
  "constraints": [],
  "inspiration_suggestions": [],
  "assumptions": [],
  "missing_information": [],
  "check_in_date": "",
  "check_out_date": "",
  "adults": 2,
  "currency": "PLN"
}

3. Code: Normalize parsed request

Cel:

4. Data Table: Insert row

Wstaw nowy rekord do tabeli demo.

Po teście formularza sprawdź, że w Data Table istnieje rekord z testowym adresem.

5. Schedule Trigger

Do demo ustaw częstotliwość bezpiecznie, np. co minutę, ale aktywuj workflow dopiero do testu. Jeżeli testujesz manualnie w n8n, upewnij się, że ścieżka schedulerowa przechodzi z testowym rekordem.

6. Data Table: Take all rows from the table

Pobierz rekordy z tabeli demo.

7. Code: Add should_monitor_now

Dla każdego rekordu wylicz:

8. IF: Check if we should continue

Przepuść tylko rekordy z should_monitor_now == true.

9. Set: Prepare query params

Przygotuj parametry dla SerpApi Google Hotels:

Jeśli brakuje dat, ustaw bezpieczne daty testowe albo wypisz brak w raporcie. Nie wymyślaj dat jako faktu użytkownika; oznacz fallback jako testowy.

10. HTTP Request: SerpApi Google Hotels

Endpoint:

https://serpapi.com/search

Parametry:

Test:

11. Code: Extract hotels for AI

Weź maks. 10 hoteli z odpowiedzi SerpApi.

Dla każdego zachowaj tylko potrzebne pola:

Dołącz user_preferences.

12. AI Agent: Rank hotels

Cel: oceń hotele względem preferencji i wybierz TOP 3 + best hotel.

Zasady:

Oczekiwany JSON:

{
  "top_hotels": [
    {
      "rank": 1,
      "name": "",
      "score": 0,
      "price_note": "",
      "why_it_fits": "",
      "risks": []
    }
  ],
  "best_hotel": {
    "name": "",
    "why_this_one": "",
    "price_note": ""
  },
  "ranking_summary": "",
  "budget_summary": ""
}

13. Code: Parse AI ranking

Cel:

14. Data Table: Update request with ranking

Aktualizuj ten sam rekord po id albo LEGACY_id.

Zapisz:

Nie aktualizuj pól technicznych ani identyfikatora.

15. Code: Prepare recommendation input

Ten krok jest krytyczny, bo po Data Table Update n8n może nie przekazać pełnego requestu.

Wymagania:

Uwzględnij wskazówki z AI-Travel-Scout-Prompt-4.txt.

16. AI Agent: Destination Guide

Cel: lokalny przewodnik/researcher.

Nie robi:

Odpowiedź wyłącznie JSON:

{
  "destination_intro": "",
  "interesting_facts": [
    {"title": "", "description": ""}
  ],
  "suggested_activities": [
    {"name": "", "why_it_fits": "", "estimated_time": ""}
  ],
  "local_tips": [""],
  "activity_plan_notes": ""
}

17. Code: Parse Destination Guide

18. AI Agent: Travel Advisor

Cel: finalna rekomendacja podróży po polsku.

Wykorzystaj:

Nie rób:

Odpowiedź wyłącznie JSON:

{
  "email_subject": "",
  "email_body": "",
  "recommended_hotel": {
    "name": "",
    "why_this_one": "",
    "price_note": "",
    "pros": [],
    "cons": []
  },
  "alternatives": [
    {"name": "", "why_consider": ""}
  ],
  "destination_highlights": {
    "intro": "",
    "facts": [],
    "activities": []
  },
  "stay_plan": [
    {"day": 1, "title": "", "plan": ""}
  ],
  "final_note": ""
}

19. Code: Parse Final Recommendation

Wymagania:

Treść maila musi mieć konkretne sekcje:

20. Gmail: Send Email

Konfiguracja:

Do testu user_email musi być testowym adresem kontrolowanym przez Tomasza.

21. Data Table: Update row with recommendation

Po Gmail node aktualizuj tabelę danymi z Parse Final Recommendation, nie z bieżącego $json, bo Gmail może nie przekazać wszystkich pól.

Warunek:

Zapisz:

Plan testów

Test 1: Struktura workflowu

Sprawdź, czy istnieją wszystkie wymagane node’y i połączenia.

Test 2: Credentials

Sprawdź, czy node’y mają podpięte credentials:

Nie wypisuj sekretów w raporcie.

Test 3: Intake

Test 4: SerpApi

Test 5: Ranking

Test 6: Destination Guide

Test 7: Travel Advisor i final body

Test 8: Gmail send

Test 9: Mail MCP verification

Przez Gmail/mail MCP:

Test 10: Final table update

Sprawdź w Data Table:

Raport końcowy

travel-scout-test-report.md ma zawierać:

Każdy raport subagenta Sonnet ma zawierać:

opus-final-verification.md ma zawierać niezależny werdykt Opus:

Kryteria DONE

Demo jest gotowe, jeśli: