[2ff88f42] Finalize SuperOffice Integration: Enhanced Persona model with Influencer role, switched Matrix Generator to Gemini, implemented Noise Reduction for Webhooks, and added E2E test scenarios.
This commit is contained in:
90
connector-superoffice/simulate_sendout_via_appointment.py
Normal file
90
connector-superoffice/simulate_sendout_via_appointment.py
Normal file
@@ -0,0 +1,90 @@
|
||||
import os
|
||||
import requests
|
||||
import json
|
||||
import logging
|
||||
from superoffice_client import SuperOfficeClient
|
||||
from config import settings
|
||||
|
||||
# Setup Logging
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger("simulation-e2e")
|
||||
|
||||
def simulate_sendout(contact_id: int, person_id: int):
|
||||
print(f"🚀 Starting E2E Sendout Simulation for Contact {contact_id}, Person {person_id}...")
|
||||
|
||||
# 1. Initialize SuperOffice Client
|
||||
so_client = SuperOfficeClient()
|
||||
if not so_client.access_token:
|
||||
print("❌ Auth failed. Check .env")
|
||||
return
|
||||
|
||||
# 2. Get Data from Company Explorer
|
||||
# We simulate what the worker would do
|
||||
print(f"📡 Requesting provisioning from Company Explorer...")
|
||||
ce_url = f"{settings.COMPANY_EXPLORER_URL}/api/provision/superoffice-contact"
|
||||
ce_req = {
|
||||
"so_contact_id": contact_id,
|
||||
"so_person_id": person_id,
|
||||
"crm_name": "RoboPlanet GmbH",
|
||||
"crm_website": "www.roboplanet.de",
|
||||
"job_title": "Geschäftsführer" # Explicit job title for persona mapping
|
||||
}
|
||||
ce_auth = (os.getenv("API_USER", "admin"), os.getenv("API_PASSWORD", "gemini"))
|
||||
|
||||
try:
|
||||
resp = requests.post(ce_url, json=ce_req, auth=ce_auth)
|
||||
resp.raise_for_status()
|
||||
provisioning_data = resp.json()
|
||||
except Exception as e:
|
||||
print(f"❌ CE API failed: {e}")
|
||||
return
|
||||
|
||||
print(f"✅ Received Data: {json.dumps(provisioning_data, indent=2)}")
|
||||
|
||||
if provisioning_data.get("status") == "processing":
|
||||
print("⏳ CE is still processing. Please wait 1-2 minutes and try again.")
|
||||
return
|
||||
|
||||
texts = provisioning_data.get("texts", {})
|
||||
if not texts.get("subject"):
|
||||
print("⚠️ No marketing texts found for this combination (Vertical x Persona).")
|
||||
return
|
||||
|
||||
# 3. Write Texts to SuperOffice UDFs
|
||||
print("✍️ Writing marketing texts to SuperOffice UDFs...")
|
||||
udf_payload = {
|
||||
settings.UDF_SUBJECT: texts["subject"],
|
||||
settings.UDF_INTRO: texts["intro"],
|
||||
settings.UDF_SOCIAL_PROOF: texts["social_proof"]
|
||||
}
|
||||
|
||||
success = so_client.update_entity_udfs(person_id, "Person", udf_payload)
|
||||
if success:
|
||||
print("✅ UDFs updated successfully.")
|
||||
else:
|
||||
print("❌ Failed to update UDFs.")
|
||||
return
|
||||
|
||||
# 4. Create Appointment (The "Sendout Proof")
|
||||
print("📅 Creating Appointment as sendout proof...")
|
||||
app_subject = f"[SIMULATION] Mail Sent: {texts['subject']}"
|
||||
app_desc = f"Content Simulation:\n\n{texts['intro']}\n\n{texts['social_proof']}"
|
||||
|
||||
appointment = so_client.create_appointment(
|
||||
subject=app_subject,
|
||||
description=app_desc,
|
||||
contact_id=contact_id,
|
||||
person_id=person_id
|
||||
)
|
||||
|
||||
if appointment:
|
||||
print(f"✅ Simulation Complete! Appointment ID: {appointment.get('AppointmentId')}")
|
||||
print(f"🔗 Check SuperOffice for Contact {contact_id} and look at the activities.")
|
||||
else:
|
||||
print("❌ Failed to create appointment.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Using the IDs we know exist from previous tests/status
|
||||
TEST_CONTACT_ID = 2
|
||||
TEST_PERSON_ID = 2 # Usually same or linked
|
||||
simulate_sendout(TEST_CONTACT_ID, TEST_PERSON_ID)
|
||||
Reference in New Issue
Block a user