[31988f42] Lead-Engine: Produktivsetzung und Anfrage per Teams

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.
This commit is contained in:
2026-03-09 08:21:33 +00:00
parent 14237727b9
commit a9b7dbaaca
12 changed files with 375 additions and 94 deletions

View File

@@ -50,6 +50,21 @@ st.title("🚀 Lead Engine: TradingTwins")
# Sidebar Actions
st.sidebar.header("Actions")
if st.sidebar.button("🚀 Trigger Test-Lead (Teams)"):
try:
import requests
# The feedback server runs on port 8004 inside the same container
response = requests.get("http://localhost:8004/test_lead")
if response.status_code == 202:
st.sidebar.success("Test lead triggered successfully!")
st.toast("Check Teams for the notification.")
else:
st.sidebar.error(f"Error: {response.status_code} - {response.text}")
except Exception as e:
st.sidebar.error(f"Failed to trigger test: {e}")
st.sidebar.divider()
if st.sidebar.button("1. Ingest Emails (Mock)"):
from ingest import ingest_mock_leads
init_db()
@@ -246,6 +261,24 @@ if not df.empty:
# Always display the draft from the database if it exists
if row.get('response_draft'):
st.text_area("Email Entwurf", value=row['response_draft'], height=400)
if st.button("🧪 Test-Versand (an floke.com@gmail.com)", key=f"test_send_{row['id']}"):
try:
import requests
payload = {
"company_name": row['company_name'],
"contact_name": row['contact_name'],
"opener": row['response_draft']
}
response = requests.post("http://localhost:8004/test_specific_lead", json=payload)
if response.status_code == 202:
st.success("Specific test lead triggered!")
st.toast("Check Teams for the notification.")
else:
st.error(f"Error: {response.status_code} - {response.text}")
except Exception as e:
st.error(f"Failed to trigger test: {e}")
st.button("📋 Copy to Clipboard", key=f"copy_{row['id']}", on_click=lambda: st.write("Copy functionality simulated"))
else:
st.info("Sync with Company Explorer first to generate a response.")