[2ff88f42] Add update_verticals_phase2.py for Notion Pains & Gains update
This commit is contained in:
@@ -0,0 +1,162 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user