195 lines
9.8 KiB
Python
195 lines
9.8 KiB
Python
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
|
||
UPDATES = {
|
||
"Automotive - Dealer": {
|
||
"Pains": """[Primary Product: Security]
|
||
- Teile-Diebstahl: Organisierte Banden demontieren nachts Katalysatoren und Räder – enormer Schaden und Versicherungsstress.
|
||
- Vandalismus: Zerkratzte Neuwagen auf dem Außenhof mindern den Verkaufswert drastisch.
|
||
- Personalkosten: Lückenlose menschliche Nachtbewachung ist für viele Standorte wirtschaftlich kaum darstellbar.
|
||
|
||
[Secondary Product: Cleaning Outdoor]
|
||
- Image-Verlust: Ein verschmutzter Außenbereich (Laub, Müll) passt nicht zum Premium-Anspruch der ausgestellten Fahrzeuge.
|
||
- Manueller Aufwand: Verkaufspersonal oder teure Hausmeisterdienste binden Zeit mit unproduktivem Fegen.""",
|
||
"Gains": """[Primary Product: Security]
|
||
- Abschreckung & Intervention: Permanente Roboter-Präsenz wirkt präventiv; bei Alarm schaltet sich sofort eine Leitstelle auf.
|
||
- Asset-Schutz: Reduktion von Versicherungsschäden und Selbstbehalten durch lückenlose Dokumentation.
|
||
|
||
[Secondary Product: Cleaning Outdoor]
|
||
- Premium-Präsentation: Der Hof ist bereits morgens bei Kundenöffnung makellos sauber.
|
||
- Automatisierung: Täglich gereinigte Flächen ohne manuellen Eingriff."""
|
||
},
|
||
"Industry - Manufacturing": {
|
||
"Pains": """[Primary Product: Cleaning Indoor]
|
||
- Prozess-Sicherheit: Staub und Abrieb auf Fahrwegen gefährden empfindliche Sensorik (z.B. von FTS) und die Produktqualität.
|
||
- Arbeitssicherheit: Rutschgefahr durch feine Staubschichten oder ausgelaufene (nicht-chemische) Flüssigkeiten erhöht das Unfallrisiko.
|
||
- Ressourcen-Verschwendung: Hochbezahlte Fachkräfte müssen Maschinen stoppen, um ihr Umfeld zu reinigen.
|
||
|
||
[Secondary Product: Transport]
|
||
- Intransparenz & Suchzeiten: Facharbeiter unterbrechen die Wertschöpfung für unproduktive Materialbeschaffung ("C-Teile holen").
|
||
- Mikrostillstände: Fehlendes Material an der Linie stoppt den Takt.""",
|
||
"Gains": """[Primary Product: Cleaning Indoor]
|
||
- Konstante Bodenqualität: Definierte Sauberkeitsstandards (Audit-Ready) rund um die Uhr.
|
||
- Unfallschutz: Reduktion von Arbeitsunfällen durch rutschfreie Verkehrswege.
|
||
|
||
[Secondary Product: Transport]
|
||
- Just-in-Time Logistik: Automatisierter Nachschub hält die Fachkraft wertschöpfend an der Maschine.
|
||
- Fluss-Optimierung: Stabilisierung der Taktzeiten und OEE durch verlässliche Materialflüsse."""
|
||
},
|
||
"Healthcare - Hospital": {
|
||
"Pains": """[Primary Product: Cleaning Indoor]
|
||
- Hygienerisiko & Kreuzkontamination: Manuelle Reinigung ist oft fehleranfällig und variiert stark in der Qualität (Gefahr für Patienten).
|
||
- Dokumentationspflicht: Der Nachweis RKI-konformer Reinigung bindet wertvolle Zeit und ist bei Personalmangel lückenhaft.
|
||
- Personalnot: Fehlende Reinigungskräfte führen zu gesperrten Bereichen oder sinkendem Hygienelevel.
|
||
|
||
[Secondary Product: Service]
|
||
- Berufsfremde Tätigkeiten: Pflegekräfte verbringen bis zu 30% der Schichtzeit mit Hol- und Bringdiensten (Essen, Wäsche, Labor).
|
||
- Physische Überlastung: Lange Laufwege in großen Kliniken erhöhen die Erschöpfung des Fachpersonals.""",
|
||
"Gains": """[Primary Product: Cleaning Indoor]
|
||
- Validierbare Hygiene: Robotergarantierte, protokollierte Desinfektionsleistung – audit-sicher auf Knopfdruck.
|
||
- 24/7 Verfügbarkeit: Konstantes Hygienelevel auch nachts und am Wochenende, unabhängig vom Dienstplan.
|
||
|
||
[Secondary Product: Service]
|
||
- Zeit für Patienten: Rückgewinnung von ca. 2,5 Stunden Fachkraft-Kapazität pro Schicht für die Pflege.
|
||
- Mitarbeiterzufriedenheit: Reduktion der Laufwege ("Schrittzähler") entlastet das Team spürbar."""
|
||
},
|
||
"Logistics - Warehouse": {
|
||
"Pains": """[Primary Product: Cleaning (Sweeper/Dry)]
|
||
- Grobschmutz & Palettenreste: Holzspäne und Verpackungsreste gefährden Reifen von Flurförderzeugen und blockieren Lichtschranken.
|
||
- Staubbelastung: Aufgewirbelter Staub legt sich auf Waren und Verpackungen (Reklamationsgrund) und schadet der Gesundheit.
|
||
- Manuelle Bindung: Mitarbeiter müssen große Flächen manuell kehren, statt zu kommissionieren.
|
||
|
||
[Secondary Product: Cleaning (Wet)]
|
||
- Hartnäckige Verschmutzungen: Eingefahrene Spuren, die durch reines Kehren nicht lösbar sind.""",
|
||
"Gains": """[Primary Product: Cleaning (Sweeper/Dry)]
|
||
- Anlagenschutz: Sauberer Boden verhindert Störungen an Fördertechnik und Sensoren durch Staub/Teile.
|
||
- Staubfreie Ware: Produkte verlassen das Lager in sauberem Zustand (Qualitätsanspruch).
|
||
|
||
[Secondary Product: Cleaning (Wet)]
|
||
- Grundsauberkeit: Gelegentliche Nassreinigung für Tiefenhygiene in Fahrgassen."""
|
||
},
|
||
"Retail - Food": {
|
||
"Pains": """[Primary Product: Cleaning Indoor]
|
||
- "Malheur-Management": Zerbrochene Gläser oder ausgelaufene Flüssigkeiten (Haverien) bilden sofortige Rutschfallen und binden Personal.
|
||
- Optischer Eindruck: Grauschleier und verschmutzte Böden senken das Frische-Empfinden der Kunden massiv.
|
||
- Personal-Engpass: Marktpersonal soll Regale füllen und kassieren, nicht mit der Scheuersaugmaschine fahren.
|
||
|
||
[Secondary Product: Service]
|
||
- Fehlende Beratung: Kunden finden Produkte nicht und brechen den Kauf ab, da kein Personal greifbar ist.""",
|
||
"Gains": """[Primary Product: Cleaning Indoor]
|
||
- Sofortige Sicherheit: Roboter beseitigt Rutschgefahren autonom und schnell.
|
||
- Frische-Optik: Permanent glänzende Böden ("Lobby-Effekt") unterstreichen die Qualität der Lebensmittel.
|
||
|
||
[Secondary Product: Service]
|
||
- Umsatz-Boost: Roboter führt Kunden direkt zum gesuchten Produkt oder bewirbt Aktionen aktiv am POS."""
|
||
},
|
||
"Hospitality - Gastronomy": {
|
||
"Pains": """[Primary Product: Cleaning Indoor]
|
||
- Klebrige Böden: Verschüttete Getränke und Speisereste wirken unhygienisch und stören das Ambiente.
|
||
- Randzeiten-Problem: Nach Schließung ist es schwer, Personal für die Grundreinigung zu finden (Nachtzuschläge).
|
||
|
||
[Secondary Product: Service]
|
||
- "Teller-Taxi": Servicekräfte verbringen 80% der Zeit mit Laufen (Küche <-> Gast) statt mit Verkaufen/Betreuung.
|
||
- Personalmangel: Zu wenig Kellner führen zu langen Wartezeiten, kalten Speisen und genervten Gästen.""",
|
||
"Gains": """[Primary Product: Cleaning Indoor]
|
||
- Makelloses Ambiente: Sauberer Boden als Visitenkarte des Restaurants.
|
||
- Zuverlässigkeit: Die Grundreinigung findet jede Nacht garantiert statt.
|
||
|
||
[Secondary Product: Service]
|
||
- Mehr Umsatz am Gast: Servicekraft hat Zeit für Empfehlungen (Wein, Dessert) und Upselling.
|
||
- Entlastung: Roboter übernimmt das schwere Tragen (Tabletts), Personal bleibt im Gastraum präsent."""
|
||
},
|
||
"Leisure - Outdoor Park": {
|
||
"Pains": """[Primary Product: Cleaning Outdoor]
|
||
- Immersion-Breaker: Müll und Laub auf den Wegen stören die perfekte Illusion ("Heile Welt") des Parks.
|
||
- Enorme Flächen: Kilometerlange Wegenetze binden ganze Kolonnen von Reinigungskräften.
|
||
- Sicherheit: Rutschgefahr durch nasses Laub oder Abfall.
|
||
|
||
[Secondary Product: Service]
|
||
- Versorgungslücken: An abgelegenen Attraktionen fehlt oft Gastronomie-Angebot.""",
|
||
"Gains": """[Primary Product: Cleaning Outdoor]
|
||
- Perfekte Inszenierung: Unsichtbare Reinigung in den frühen Morgenstunden sichert das perfekte Erlebnis bei Parköffnung.
|
||
- Effizienz: Ein Roboter schafft die Flächenleistung mehrerer manueller Kehrer.
|
||
|
||
[Secondary Product: Service]
|
||
- Mobiler Verkauf: Roboter bringen Getränke/Eis direkt zu den Warteschlangen (Zusatzumsatz)."""
|
||
},
|
||
"Energy - Grid & Utilities": {
|
||
"Pains": """[Primary Product: Security]
|
||
- Sabotage & Diebstahl: Kupferdiebstahl in Umspannwerken verursacht Millionenschäden und Versorgungsausfälle.
|
||
- Reaktionszeit: Entlegene Standorte sind für Interventionskräfte oft zu spät erreichbar.
|
||
- Sicherheitsrisiko Mensch: Alleinarbeit bei Kontrollgängen in Hochspannungsbereichen ist gefährlich.""",
|
||
"Gains": """[Primary Product: Security]
|
||
- First Responder Maschine: Roboter ist bereits vor Ort, verifiziert Alarm und schreckt Täter ab.
|
||
- KRITIS-Compliance: Lückenlose, manipulationssichere Dokumentation aller Vorfälle für Behörden.
|
||
- Arbeitsschutz: Roboter übernimmt gefährliche Routinekontrollen (z.B. Thermografie an Trafos)."""
|
||
}
|
||
}
|
||
|
||
def get_page_id(vertical_name):
|
||
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...")
|
||
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()
|