Updated all Notion Verticals with sharpened Pains/Gains based on internal strategy (Ops vs Infra focus). Updated SuperOffice Connector README to reflect the 'Static Magic' architecture.
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.")
|