From ca5043520156cc99b75ccf8f97bc515d32863f14 Mon Sep 17 00:00:00 2001 From: anjali20006 Date: Mon, 15 Jun 2026 12:52:33 +0530 Subject: [PATCH 1/3] feat: add spintax support for email templates --- backend/campaigns/tasks.py | 4 + backend/campaigns/utils.py | 25 +- frontend/campaign-builder.html | 4761 ++++++++++++++++++-------------- 3 files changed, 2642 insertions(+), 2148 deletions(-) diff --git a/backend/campaigns/tasks.py b/backend/campaigns/tasks.py index fca4300..e42bd47 100644 --- a/backend/campaigns/tasks.py +++ b/backend/campaigns/tasks.py @@ -10,6 +10,7 @@ from .sms_service import send_sms, initiate_call from .models import CampaignLead, SequenceStep from leads.models import BlockedDomain, normalize_domain +from .utils import parse_spintax logger = logging.getLogger(__name__) @@ -458,6 +459,9 @@ def send_email_step(campaign_lead_id, step_id): return subject, body = personalize_email(step.template_subject, step.template_body, clead.lead) + + subject = parse_spintax(subject) + body = parse_spintax(body) account = clead.campaign.connected_account if account: diff --git a/backend/campaigns/utils.py b/backend/campaigns/utils.py index cb8dfb8..e8ca0b8 100644 --- a/backend/campaigns/utils.py +++ b/backend/campaigns/utils.py @@ -1,12 +1,35 @@ from django.core.signing import Signer, BadSignature +import random +import re signer = Signer() + def generate_unsubscribe_token(lead_id): return signer.sign(str(lead_id)) + def verify_unsubscribe_token(token): try: return signer.unsign(token) except BadSignature: - return None \ No newline at end of file + return None + + +def parse_spintax(text): + if not text: + return text + + pattern = r"\{([^{}]+)\}" + + while re.search(pattern, text): + text = re.sub( + pattern, + lambda match: random.choice( + match.group(1).split("|") + ), + text, + count=1, + ) + + return text \ No newline at end of file diff --git a/frontend/campaign-builder.html b/frontend/campaign-builder.html index b2c76c4..f93f953 100644 --- a/frontend/campaign-builder.html +++ b/frontend/campaign-builder.html @@ -1,1559 +1,1798 @@ - + - - - + + LeadOrbit - Campaign Builder - - - - - - - - - - - - - + + + + + + + + + + + + + Campaign Builder - LeadOrbit - - - - + + + + - - - +
-
- - - - - -
-
-
-
Sequence
-
Lead list
-
Launch
-
- +
+ + + + + +
+
+
+
+ Sequence +
+
+ Lead list +
+
+ Launch +
+ +
- -
- -
+ +
+ +
- -
-
-
- -

Click a step to edit its content

-
-
+ +
+
+
+ +

Click a step to edit its content

+
+