import os import requests import json from dotenv import load_dotenv # Load environment variables load_dotenv() NOTION_API_KEY = os.getenv("NOTION_API_KEY") NOTION_DB_VERTICALS = "2ec88f4285448014ab38ea664b4c2b81" if not NOTION_API_KEY: print("Error: NOTION_API_KEY not found.") exit(1) headers = { "Authorization": f"Bearer {NOTION_API_KEY}", "Notion-Version": "2022-06-28", "Content-Type": "application/json" } # The approved changes from ANALYSIS_AND_PROPOSAL.md for Phase 2 UPDATES = { "Energy - Solar/Wind": { "Pains": """[Primary Product: Security] - Kupfer-Diebstahl: Professionelle Banden plündern abgelegene Parks in Minuten; der Schaden durch Betriebsunterbrechung übersteigt den Materialwert oft weit. - Interventionszeit: Bis der Wachdienst eintrifft ("Blaulicht-Fahrt"), sind die Täter längst verschwunden. - Kostenfalle Falschalarm: Wildtiere oder wetterbedingte Störungen lösen teure, unnötige Polizeieinsätze aus.""", "Gains": """[Primary Product: Security] - Sofort-Verifikation: KI-gestützte Erkennung unterscheidet zuverlässig zwischen Tier und Mensch und liefert Live-Bilder in Sekunden. - Präventive Abschreckung: Autonome Patrouillen signalisieren "Hier wird bewacht" und verhindern den Versuch. - Lückenlose Beweissicherung: Gerichtsfeste Dokumentation von Vorfällen für Versicherung und Strafverfolgung.""" }, "Infrastructure - Public": { "Pains": """[Primary Product: Cleaning Indoor] - Zeitdruck (Turnaround): Zwischen Messe-Ende und Öffnung am nächsten Tag liegen nur wenige Stunden für eine Komplettreinigung. - Kostenspirale: Nacht- und Wochenendzuschläge für manuelles Personal belasten das Budget massiv. - Personalverfügbarkeit: Für Spitzenlasten (Messezeiten) ist kurzfristig kaum ausreichendes Personal zu finden. [Secondary Product: Cleaning Outdoor] - Erster Eindruck: Vermüllte Vorplätze und Zufahrten schaden dem Image der Veranstaltung schon bei Ankunft.""", "Gains": """[Primary Product: Cleaning Indoor] - Planbare Kapazität: Roboter reinigen autonom die Kilometer langen Gänge ("Gang-Reinigung"), Personal fokussiert sich auf Stände und Details. - Kosteneffizienz: Fixe Kosten statt variabler Zuschläge für Nachtarbeit. [Secondary Product: Cleaning Outdoor] - Repräsentative Außenwirkung: Sauberer Empfangsbereich ohne permanenten Personaleinsatz.""" }, "Infrastructure - Transport": { "Pains": """[Primary Product: Cleaning Indoor] - Sicherheits-Checks: Jede externe Reinigungskraft im Sicherheitsbereich erfordert aufwändige Überprüfungen (ZÜP) und Begleitung. - Passagier-Störung: Laute, manuelle Reinigungsmaschinen behindern Laufwege und Durchsagen im 24/7-Betrieb. - Hochfrequenz-Verschmutzung: Kaffee-Flecken und Nässe (Winter) müssen sofort beseitigt werden, um Rutschunfälle zu vermeiden. [Secondary Product: Cleaning Outdoor] - Müll-Aufkommen: Raucherbereiche und Taxi-Spuren verkommen schnell durch Zigarettenstummel und Kleinmüll.""", "Gains": """[Primary Product: Cleaning Indoor] - "Approved Staff": Roboter verbleibt im Sicherheitsbereich – kein täglicher Check-in/Check-out nötig. - Silent Cleaning: Leise, autonome Navigation zwischen Passagieren stört den Betriebsablauf nicht. [Secondary Product: Cleaning Outdoor] - Sauberer Transfer: Gepflegte Außenanlagen als Visitenkarte der Mobilitätsdrehscheibe.""" }, "Retail - Shopping Center": { "Pains": """[Primary Product: Cleaning Indoor] - Food-Court-Chaos: Zu Stoßzeiten kommen Reinigungskräfte mit dem Wischen von verschütteten Getränken und Essensresten kaum nach. - Rutschfallen: Nasse Eingänge (Regen) und verschmutzte Zonen sind Haftungsrisiken für den Betreiber. - Image-Faktor: Ein "grauer" oder fleckiger Boden senkt die Aufenthaltsqualität und damit die Verweildauer der Kunden. [Secondary Product: Cleaning Outdoor] - Parkplatz-Pflege: Müll auf Parkplätzen und in Parkhäusern ist der erste negative Touchpoint für Besucher.""", "Gains": """[Primary Product: Cleaning Indoor] - Reaktionsschnelligkeit: Roboter sind permanent präsent und beseitigen Malheure sofort, bevor sie antrocknen. - Hochglanz-Optik: Konstante Pflege poliert den Steinboden und sorgt für ein hochwertiges Ambiente. [Secondary Product: Cleaning Outdoor] - Willkommens-Kultur: Sauberer Außenbereich lädt zum Betreten ein.""" }, "Leisure - Wet & Spa": { "Pains": """[Primary Product: Cleaning Indoor] - Rutsch-Unfälle: Staunässe auf Fliesen ist die Unfallursache Nummer 1 in Bädern – hohes Haftungsrisiko. - Hygiene-Sensibilität: Im Barfußbereich (Umkleiden/Gänge) erwarten Gäste klinische Sauberkeit; Haare und Fussel sind "Ekel-Faktor". - Personal-Konflikt: Fachangestellte für Bäderbetriebe sollen die Beckenaufsicht führen (Sicherheit), nicht wischen.""", "Gains": """[Primary Product: Cleaning Indoor] - Permanente Sicherheit: Roboter trocknen Laufwege kontinuierlich und minimieren das Rutschrisiko aktiv. - Entlastung der Aufsicht: Bademeister können sich zu 100% auf die Sicherheit der Badegäste konzentrieren. - Hygiene-Standard: Dokumentierte Desinfektion und Reinigung sichert Top-Bewertungen.""" }, "Corporate - Campus": { "Pains": """[Primary Product: Cleaning Indoor] - Repräsentativität: Empfangshallen und Atrien sind das Aushängeschild – sichtbarer Staub oder Schlieren wirken unprofessionell. - Kostendruck Facility: Enorme Flächen (Flure/Verbindungsgänge) erzeugen hohe laufende Reinigungskosten. [Secondary Product: Cleaning Outdoor] - Campus-Pflege: Weitläufige Außenanlagen manuell sauber zu halten, bindet unverhältnismäßig viele Ressourcen.""", "Gains": """[Primary Product: Cleaning Indoor] - Innovations-Statement: Einsatz von Robotik unterstreicht den technologischen Führungsanspruch des Unternehmens gegenüber Besuchern und Bewerbern. - Konstante Qualität: Einheitliches Sauberkeitsniveau in allen Gebäudeteilen, unabhängig von Tagesform oder Krankenstand. [Secondary Product: Cleaning Outdoor] - Gepflegtes Erscheinungsbild: Automatisierte Kehrleistung sorgt für repräsentative Wege und Plätze.""" }, "Reinigungsdienstleister": { "Pains": """[Primary Product: Cleaning Indoor] - Personal-Mangel & Fluktuation: Hohe "No-Show"-Quoten und ständige Neurekrutierung binden Objektleiter massiv und gefährden die Vertragserfüllung. - Margen-Verfall: Steigende Tariflöhne bei gleichzeitigem Preisdruck der Auftraggeber lassen kaum noch Gewinn zu. - Qualitäts-Schwankungen: Wechselndes, ungelernte Personal liefert oft unzureichende Ergebnisse, was zu Reklamationen und Kürzungen führt.""", "Gains": """[Primary Product: Cleaning Indoor] - Kalkulations-Sicherheit: Roboter bieten fixe Kosten statt unkalkulierbarer Krankheits- und Ausfallrisiken. - Wettbewerbsvorteil: Mit Robotik-Konzepten punkten Dienstleister bei Ausschreibungen als Innovationsführer. - Entlastung Objektleitung: Weniger Personal-Management bedeutet mehr Zeit für Kundenpflege und Qualitätskontrolle.""" } } def get_page_id(vertical_name): # Try to find the page with a filter on "Vertical" property url = f"https://api.notion.com/v1/databases/{NOTION_DB_VERTICALS}/query" payload = { "filter": { "property": "Vertical", "title": { "equals": vertical_name } } } response = requests.post(url, headers=headers, json=payload) if response.status_code == 200: results = response.json().get("results", []) if results: return results[0]["id"] return None def update_page(page_id, pains, gains): url = f"https://api.notion.com/v1/pages/{page_id}" payload = { "properties": { "Pains": { "rich_text": [{"text": {"content": pains}}] }, "Gains": { "rich_text": [{"text": {"content": gains}}] } } } response = requests.patch(url, headers=headers, json=payload) if response.status_code == 200: print(f"✅ Updated {page_id}") else: print(f"❌ Failed to update {page_id}: {response.text}") def main(): print("Starting update Phase 2...") for vertical, content in UPDATES.items(): print(f"Processing '{vertical}'...") page_id = get_page_id(vertical) if page_id: update_page(page_id, content["Pains"], content["Gains"]) else: print(f"⚠️ Vertical '{vertical}' not found in Notion.") if __name__ == "__main__": main()