Files
Brancheneinstufung2/connector-superoffice/generate_marketing_copy.py

127 lines
4.2 KiB
Python

import os
import json
import requests
from dotenv import load_dotenv
# Load environment variables
load_dotenv(override=True)
GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
NOTION_API_KEY = os.getenv("NOTION_API_KEY")
# Configuration
NOTION_DB_INDUSTRIES = "2ec88f4285448014ab38ea664b4c2b81" # ID aus deinen Links
def get_vertical_data(vertical_name):
"""Fetches Pains/Gains for a specific Vertical from Notion."""
url = f"https://api.notion.com/v1/databases/{NOTION_DB_INDUSTRIES}/query"
headers = {
"Authorization": f"Bearer {NOTION_API_KEY}",
"Notion-Version": "2022-06-28",
"Content-Type": "application/json"
}
payload = {
"filter": {
"property": "Vertical",
"title": {
"contains": vertical_name
}
}
}
response = requests.post(url, headers=headers, json=payload)
if response.status_code == 200:
results = response.json().get("results", [])
if results:
page = results[0]
props = page['properties']
# Extract Text from Rich Text fields
pains = props.get('Pains', {}).get('rich_text', [])
gains = props.get('Gains', {}).get('rich_text', [])
pain_text = pains[0]['plain_text'] if pains else "N/A"
gain_text = gains[0]['plain_text'] if gains else "N/A"
return {
"vertical": vertical_name,
"pains": pain_text,
"gains": gain_text
}
return None
def generate_copy_with_gemini(vertical_data, persona_role, persona_pains):
"""
Generates the 3 text blocks using Gemini.
"""
url = f"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key={GEMINI_API_KEY}"
# Der Prompt (Dein Template)
prompt_text = f"""
Du bist ein kompetenter Lösungsberater und brillanter Texter.
AUFGABE: Erstelle 3 Textblöcke (Subject, Introduction_Textonly, Industry_References_Textonly) für eine E-Mail.
--- KONTEXT ---
ZIELBRANCHE: {vertical_data['vertical']}
BRANCHEN-HERAUSFORDERUNGEN (PAIN POINTS): {vertical_data['pains']}
LÖSUNGS-VORTEILE (GAINS): {vertical_data['gains']}
ANSPRECHPARTNER: {persona_role}
PERSÖNLICHE HERAUSFORDERUNGEN DES ANSPRECHPARTNERS: {persona_pains}
REFERENZKUNDEN: "Wir arbeiten bereits mit Marktführern in Ihrer Branche." (Platzhalter)
--- DEINE AUFGABE ---
1. Subject: Formuliere eine kurze Betreffzeile (max. 5 Wörter). Richte sie direkt an einem Pain Point aus.
2. Introduction_Textonly: Formuliere einen Einleitungstext (2 Sätze).
- Fokus: Brücke zwischen Problem und Lösung.
3. Industry_References_Textonly: Formuliere einen Social Proof Satz.
--- FORMAT ---
Antworte NUR mit reinem JSON:
{{
"Subject": "...",
"Introduction_Textonly": "...",
"Industry_References_Textonly": "..."
}}
"""
payload = {
"contents": [{"parts": [{"text": prompt_text}]}],
"generationConfig": {"responseMimeType": "application/json"}
}
try:
response = requests.post(url, json=payload)
if response.status_code == 200:
return json.loads(response.json()['candidates'][0]['content']['parts'][0]['text'])
else:
print(f"Gemini Error: {response.text}")
return None
except Exception as e:
print(f"Error: {e}")
return None
if __name__ == "__main__":
# TEST RUN
# 1. Daten holen (Beispiel: Logistics)
print("Fetching Vertical Data...")
vertical = get_vertical_data("Logistics - Warehouse")
if vertical:
print(f"Loaded: {vertical['vertical']}")
# 2. Persona definieren (Beispiel: Operativer Entscheider)
role = "Logistikleiter / Operations Manager"
role_pains = "Stillstand, Personalmangel, Stress, Unfallgefahr"
# 3. Generieren
print("Generating Copy...")
copy = generate_copy_with_gemini(vertical, role, role_pains)
print("\n--- RESULT ---")
print(json.dumps(copy, indent=2, ensure_ascii=False))
else:
print("Vertical not found.")