Implementiert: * **End-to-End Test-Button pro Lead:** Ein neuer Button "🧪 Test-Versand (an floke.com@gmail.com)" wurde in der Lead-Detailansicht hinzugefügt, um spezifische Leads sicher zu testen. * **Verbesserte E-Mail-Generierung:** * Der LLM-Prompt wurde optimiert, um redundante Termin-Vorschläge und Betreffzeilen im generierten E-Mail-Text zu vermeiden. * Der E-Mail-Body wurde umstrukturiert für eine klarere und leserlichere Integration des LLM-generierten Textes und der dynamischen Terminvorschläge. * **HTML-Signatur mit Inline-Bildern:** * Ein Skript zum Extrahieren von HTML-Signaturen und eingebetteten Bildern aus -Dateien wurde erstellt und ausgeführt. * Die -Funktion wurde überarbeitet, um die neue HTML-Signatur und alle zugehörigen Bilder dynamisch als Inline-Anhänge zu versenden. * **Bugfixes und verbesserte Diagnosefähigkeit:** * Der für wurde durch Verschieben der Funktion in den globalen Bereich behoben. * Die im Kalender-Abruf wurde durch die explizite Übergabe der Zeitzoneninformation an die Graph API korrigiert. * Fehlende Uhrzeit in Teams-Nachrichten behoben. * Umfassendes Logging wurde in kritischen Funktionen (, , ) implementiert, um die Diagnosefähigkeit bei zukünftigen Problemen zu verbessern.
65 lines
2.4 KiB
Python
65 lines
2.4 KiB
Python
import requests
|
|
import json
|
|
import os
|
|
from datetime import datetime
|
|
|
|
# Default-Webhook (Platzhalter) - sollte in .env stehen
|
|
DEFAULT_WEBHOOK_URL = os.getenv("TEAMS_WEBHOOK_URL", "")
|
|
|
|
def send_approval_card(job_uuid, customer_name, time_string, webhook_url=DEFAULT_WEBHOOK_URL, api_base_url="http://localhost:8004"):
|
|
"""
|
|
Sendet eine Adaptive Card an Teams mit Approve/Deny Buttons.
|
|
"""
|
|
|
|
# Die URL unserer API (muss von außen erreichbar sein, z.B. via ngrok oder Server-IP)
|
|
|
|
|
|
card_payload = {
|
|
"type": "message",
|
|
"attachments": [
|
|
{
|
|
"contentType": "application/vnd.microsoft.card.adaptive",
|
|
"contentUrl": None,
|
|
"content": {
|
|
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
|
|
"type": "AdaptiveCard",
|
|
"version": "1.4",
|
|
"body": [
|
|
{
|
|
"type": "TextBlock",
|
|
"text": f"🤖 Automatisierte E-Mail an {customer_name} (via Trading Twins) wird um {time_string} Uhr ausgesendet.",
|
|
"weight": "Bolder",
|
|
"size": "Medium"
|
|
},
|
|
{
|
|
"type": "TextBlock",
|
|
"text": f"Wenn Du bis {time_string} Uhr NICHT reagierst, wird die generierte E-Mail automatisch ausgesendet.",
|
|
"isSubtle": True,
|
|
"wrap": True
|
|
}
|
|
],
|
|
"actions": [
|
|
{
|
|
"type": "Action.OpenUrl",
|
|
"title": "✅ JETZT Aussenden",
|
|
"url": f"{api_base_url}/send_now/{job_uuid}"
|
|
},
|
|
{
|
|
"type": "Action.OpenUrl",
|
|
"title": "❌ STOP Aussendung",
|
|
"url": f"{api_base_url}/stop/{job_uuid}"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
]
|
|
}
|
|
|
|
try:
|
|
response = requests.post(webhook_url, json=card_payload)
|
|
response.raise_for_status()
|
|
return True
|
|
except Exception as e:
|
|
logging.error(f"Fehler beim Senden an Teams: {e}")
|
|
return False
|