Implementierung E-Mail-Dokument-Automatisierung und technischer Check der Versand-Blocker. Workaround via SuperOffice-Aktivitäten etabliert.
72 lines
2.3 KiB
Python
72 lines
2.3 KiB
Python
import os
|
|
import requests
|
|
import json
|
|
import logging
|
|
from dotenv import load_dotenv
|
|
load_dotenv(override=True)
|
|
from superoffice_client import SuperOfficeClient
|
|
from config import settings
|
|
|
|
logging.basicConfig(level=logging.INFO)
|
|
logger = logging.getLogger("mailing-test")
|
|
|
|
def create_mailing(person_id: int):
|
|
client = SuperOfficeClient()
|
|
if not client.access_token:
|
|
print("❌ Auth failed.")
|
|
return
|
|
|
|
# 1. Get Person & Marketing Texts
|
|
person = client._get(f"Person/{person_id}")
|
|
if not person:
|
|
print(f"❌ Person {person_id} not found.")
|
|
return
|
|
|
|
email_address = person.get("Emails", [{}])[0].get("Value")
|
|
if not email_address:
|
|
print(f"❌ Person {person_id} has no email address.")
|
|
return
|
|
|
|
udefs = person.get("UserDefinedFields", {})
|
|
subject = udefs.get(settings.UDF_SUBJECT)
|
|
intro = udefs.get(settings.UDF_INTRO)
|
|
proof = udefs.get(settings.UDF_SOCIAL_PROOF)
|
|
|
|
if not all([subject, intro, proof]):
|
|
print("❌ Marketing texts missing in Person UDFs. Run provisioning first.")
|
|
return
|
|
|
|
full_body = f"{intro}\n\n{proof}\n\nAbmelden: {udefs.get(settings.UDF_UNSUBSCRIBE_LINK)}"
|
|
|
|
# 2. Create a "Shipment" (Individual Mailing)
|
|
# Based on SO Documentation for Marketing API
|
|
# We try to create a Shipment directly.
|
|
|
|
payload = {
|
|
"Name": f"Gemini Outreach: {subject}",
|
|
"Subject": subject,
|
|
"Body": full_body,
|
|
"DocumentTemplateId": 157, # Ausg. E-Mail
|
|
"ShipmentType": "Email",
|
|
"AssociateId": 528, # RCGO
|
|
"ContactId": person.get("Contact", {}).get("ContactId"),
|
|
"PersonId": person_id,
|
|
"Status": "Ready" # This might trigger the internal SO send process
|
|
}
|
|
|
|
print(f"📤 Creating Shipment for {email_address}...")
|
|
try:
|
|
# Endpoints to try: /Shipment or /Mailing
|
|
# Let's try /Shipment
|
|
resp = client._post("Shipment", payload)
|
|
if resp:
|
|
print(f"✅ Shipment created successfully! ID: {resp.get('ShipmentId')}")
|
|
print(json.dumps(resp, indent=2))
|
|
else:
|
|
print("❌ Shipment creation returned no data.")
|
|
except Exception as e:
|
|
print(f"❌ Shipment API failed: {e}")
|
|
|
|
if __name__ == "__main__":
|
|
create_mailing(193036)
|