90 lines
4.6 KiB
Python
90 lines
4.6 KiB
Python
import os
|
|
import requests
|
|
import json
|
|
from dotenv import load_dotenv
|
|
|
|
load_dotenv()
|
|
|
|
NOTION_API_KEY = os.getenv("NOTION_API_KEY")
|
|
NOTION_DB_ID = "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"
|
|
}
|
|
|
|
# COMPLETE LIST OF UPDATES
|
|
updates = {
|
|
"Infrastructure - Transport": { # Airports, Stations
|
|
"Pains": "Sicherheitsbereiche erfordern personalintensives Screening von externen Reinigungskräften. Verschmutzte Böden (Winter/Salz) erhöhen das Rutschrisiko für Passagiere und Klagerisiken.",
|
|
"Gains": "Autonome Reinigung innerhalb der Sicherheitszonen ohne externe Personalwechsel. Permanente Trocknung von Nässe (Schneematsch) in Eingangsbereichen."
|
|
},
|
|
"Leisure - Indoor Active": { # Bowling, Cinema, Gym
|
|
"Pains": "Personal ist rar und teuer, Gäste erwarten aber Service am Platz. Reinigung im laufenden Betrieb stört den Erlebnischarakter.",
|
|
"Gains": "Service-Roboter als Event-Faktor und Entlastung: Getränke kommen zum Gast, Personal bleibt an der Bar/Theke. Konstante Sauberkeit auch bei hoher Frequenz."
|
|
},
|
|
"Leisure - Outdoor Park": { # Zoos, Theme Parks
|
|
"Pains": "Enorme Flächenleistung (Wege) erfordert viele Arbeitskräfte für die Grobschmutzbeseitigung (Laub, Müll). Sichtbare Reinigungstrupps stören die Immersion der Gäste.",
|
|
"Gains": "Autonome Großflächenreinigung (Kehren) in den frühen Morgenstunden vor Parköffnung. Erhalt der 'heilen Welt' (Immersion) für Besucher."
|
|
},
|
|
"Leisure - Wet & Spa": { # Pools, Thermen
|
|
"Pains": "Hohes Unfallrisiko durch Nässe auf Fliesen (Rutschgefahr). Hoher Aufwand für permanente Desinfektion und Trocknung im laufenden Betrieb bindet Aufsichtspersonal.",
|
|
"Gains": "Permanente Trocknung und Desinfektion kritischer Barfußbereiche. Reduktion der Rutschgefahr und Haftungsrisiken. Entlastung der Bademeister (Fokus auf Aufsicht)."
|
|
},
|
|
"Retail - Shopping Center": { # Malls
|
|
"Pains": "Food-Court ist der Schmutz-Hotspot: Verschüttete Getränke und Essensreste wirken unhygienisch und binden Personal dauerhaft. Dreckige Böden senken die Verweildauer.",
|
|
"Gains": "Sofortige Beseitigung von Malheuren im Food-Court. Steigerung der Aufenthaltsqualität und Verweildauer der Kunden durch sichtbare Sauberkeit."
|
|
},
|
|
"Retail - Non-Food": { # DIY, Furniture
|
|
"Pains": "Riesige Gangflächen verstauben schnell, Personal ist knapp und soll beraten, nicht kehren. Verschmutzte Böden wirken im Premium-Segment (Möbel) wertmindernd.",
|
|
"Gains": "Staubfreie Umgebung für angenehmes Einkaufsklima. Roboter reinigen autonom große Flächen, während Mitarbeiter für Kundenberatung verfügbar sind."
|
|
},
|
|
"Infrastructure - Public": { # Fairs, Schools
|
|
"Pains": "Extrem kurze Turnaround-Zeiten zwischen Messetagen oder Events. Hohe Nachtzuschläge für die Endreinigung der Hallengänge oder Klassenzimmer.",
|
|
"Gains": "Automatisierte Nachtreinigung der Gänge/Flure stellt die Optik für den nächsten Morgen sicher. Kalkulierbare Kosten ohne Nachtzuschlag."
|
|
},
|
|
"Hospitality - Gastronomy": { # Restaurants
|
|
"Pains": "Servicepersonal verbringt Zeit auf Laufwegen statt am Gast ('Teller-Taxi'). Personalmangel führt zu langen Wartezeiten und Umsatzverlust.",
|
|
"Gains": "Servicekräfte werden von Laufwegen befreit und haben Zeit für aktive Beratung und Verkauf (Upselling). Steigerung der Tischumschlagshäufigkeit."
|
|
}
|
|
}
|
|
|
|
def update_vertical(vertical_name, new_data):
|
|
url = f"https://api.notion.com/v1/databases/{NOTION_DB_ID}/query"
|
|
payload = {
|
|
"filter": {
|
|
"property": "Vertical",
|
|
"title": {
|
|
"contains": vertical_name
|
|
}
|
|
}
|
|
}
|
|
resp = requests.post(url, headers=headers, json=payload)
|
|
if resp.status_code != 200: return
|
|
|
|
results = resp.json().get("results", [])
|
|
if not results:
|
|
print(f"Skipping {vertical_name} (Not found)")
|
|
return
|
|
|
|
page_id = results[0]["id"]
|
|
update_url = f"https://api.notion.com/v1/pages/{page_id}"
|
|
update_payload = {
|
|
"properties": {
|
|
"Pains": {"rich_text": [{"text": {"content": new_data["Pains"]}}]},
|
|
"Gains": {"rich_text": [{"text": {"content": new_data["Gains"]}}]}
|
|
}
|
|
}
|
|
requests.patch(update_url, headers=headers, json=update_payload)
|
|
print(f"✅ Updated {vertical_name}")
|
|
|
|
print("Starting FULL Notion Update...")
|
|
for v_name, data in updates.items():
|
|
update_vertical(v_name, data)
|
|
print("Done.")
|