Campaigns¶
The Konigle SDK provides campaign management for sending messages across multiple channels. Currently supports email campaigns with comprehensive execution tracking, scheduling, and revenue attribution.
The email campaign can be spread over a specified duration to manage sending rates and optimize deliverability.
Creating Campaigns¶
Basic Email Campaign¶
import konigle
from konigle.models.comm import CampaignCreate
client = konigle.Client(api_key="your-api-key")
# Create a basic email campaign
campaign_data = CampaignCreate(
name="Weekly Newsletter",
channel_type="email",
email_channel="channel_123",
email_template="template_456",
audience="audience_789",
description="Weekly newsletter for all subscribers",
utm_code="weekly-newsletter-2024"
)
campaign = client.campaigns.create(campaign_data)
print(f"Created campaign: {campaign.id}")
print(f"Name: {campaign.name}")
print(f"Status: {campaign.status}")
Scheduled Campaign¶
from datetime import datetime, timedelta
# Schedule campaign for future delivery
scheduled_time = datetime.now() + timedelta(days=1)
campaign_data = CampaignCreate(
name="Product Launch Announcement",
channel_type="email",
email_channel="channel_123",
email_template="template_456",
audience="audience_789",
scheduled_at=scheduled_time,
execution_duration_minutes=60, # Spread sends over 60 minutes
utm_code="product-launch-2024"
)
campaign = client.campaigns.create(campaign_data)
print(f"Campaign scheduled for: {campaign.scheduled_at}")
Note that this will not put the campaign in scheduled status immediately. You
need to call the schedule method after creation to set it to scheduled status.
Campaign with Custom Sender Information¶
# Override default channel sender information
campaign_data = CampaignCreate(
name="Special Promotion",
channel_type="email",
email_channel="channel_123",
email_template="template_456",
audience="audience_789",
from_email="promo@company.com",
from_name="Sales Team",
reply_to_email="support@company.com",
reply_to_name="Customer Support",
utm_code="special-promo"
)
campaign = client.campaigns.create(campaign_data)
Note that the from_email must be a verified email identity or must belong to a
verified domain identity in the account.
Quick Email Campaign Creation¶
Create a complete email campaign with audience and template in one step:
from konigle.models.comm import CampaignCreateEmail
# Create campaign, audience, and template all at once
campaign_data = CampaignCreateEmail(
campaign_name="Flash Sale Announcement",
email_channel="my-channel",
contact_tags=["customer", "active"],
subject="24-Hour Flash Sale - 50% Off!",
body_html="<h1>Flash Sale!</h1><p>Get 50% off all products.</p>",
body_text="Flash Sale! Get 50% off all products.",
description="Flash sale campaign for active customers",
utm_code="flash-sale-2024",
audience_name="Active Customers",
template_name="Flash Sale Template"
)
campaign = client.campaigns.new_email_campaign(campaign_data)
print(f"Created campaign: {campaign.name}")
print(f"Status: {campaign.status}")
Listing Campaigns¶
from konigle.filters.comm import CampaignFilters
# List all campaigns with pagination
campaigns = client.campaigns.list(page=1, page_size=20)
print(f"Total campaigns: {campaigns.count}")
for campaign in campaigns.payload:
print(campaign.model_dump_json(indent=2))
# Filter by status
active_filters = CampaignFilters(
status="running",
ordering="-created_at"
)
active_campaigns = client.campaigns.list(filters=active_filters)
print(f"Active campaigns: {active_campaigns.count}")
# Search campaigns
search_filters = CampaignFilters(
q="newsletter"
)
campaigns = client.campaigns.list(filters=search_filters)
# Filter by audience
audience_filters = CampaignFilters(
audience="premium-customers"
)
premium_campaigns = client.campaigns.list(filters=audience_filters)
Getting Campaign Details¶
# Get campaign with execution details
campaign = client.campaigns.get("campaign_123456789")
print(f"Campaign Details:")
print(campaign.model_dump_json(indent=2))
# Check execution metrics
if campaign.execution:
exec = campaign.execution
print(f"\nExecution Status: {exec.status}")
print(f"Total contacts: {exec.total_contacts}")
print(f"Sent: {exec.total_sent}")
print(f"Delivered: {exec.total_delivered}")
print(f"Bounced: {exec.total_bounced}")
if exec.total_opened:
print(f"Opened: {exec.total_opened}")
if exec.total_clicked:
print(f"Clicked: {exec.total_clicked}")
Note that open and click tracking is not available as of now
Updating Campaigns¶
Campaigns can only be updated when in draft or scheduled status (except name and description which can be updated anytime):
from konigle.models.comm import CampaignUpdate
# Update campaign information
update_data = CampaignUpdate(
name="Updated Newsletter Title",
description="Updated description",
utm_code="updated-newsletter-2024"
)
updated_campaign = client.campaigns.update(
"campaign_123456789",
update_data
)
# Update scheduling (only in draft/scheduled status)
schedule_update = CampaignUpdate(
scheduled_at=datetime.now() + timedelta(hours=2),
execution_duration_minutes=120
)
campaign = client.campaigns.update("campaign_123456789", schedule_update)
# Update sender information
sender_update = CampaignUpdate(
from_email="new-sender@company.com",
from_name="Marketing Team"
)
campaign = client.campaigns.update("campaign_123456789", sender_update)
Campaign Status Management¶
Starting a Campaign¶
# Start a campaign (works for draft or scheduled campaigns)
campaign = client.campaigns.start("campaign_123456789")
print(f"Campaign started: {campaign.status}")
Pausing a Campaign¶
# Pause a running campaign
campaign = client.campaigns.pause("campaign_123456789")
print(f"Campaign paused: {campaign.status}")
Resuming a Campaign¶
# Resume a paused campaign
campaign = client.campaigns.resume("campaign_123456789")
print(f"Campaign resumed: {campaign.status}")
Cancelling a Campaign¶
# Cancel a campaign (works for draft, scheduled, or running)
campaign = client.campaigns.cancel("campaign_123456789")
print(f"Campaign cancelled: {campaign.status}")
Scheduling a Campaign¶
from datetime import datetime, timedelta
# Schedule a draft campaign for future delivery
scheduled_time = datetime.now() + timedelta(days=2)
campaign = client.campaigns.schedule(
"campaign_123456789",
scheduled_time.isoformat()
)
print(f"Campaign scheduled for: {campaign.scheduled_at}")
# Reschedule an already scheduled campaign
new_time = datetime.now() + timedelta(hours=6)
campaign = client.campaigns.schedule(
"campaign_123456789",
new_time.isoformat()
)
# Schedule using the scheduled_at that was already set on the campaign
campaign = client.campaigns.schedule("campaign_123456789", None)
Sending Test Emails¶
# Send a test email to verify campaign content and formatting
result = client.campaigns.send_test_email(
"campaign_123456789",
"test@example.com"
)
print(f"Test email sent: {result}")
Tracking Campaign Revenue¶
from decimal import Decimal
from konigle.models.comm import CampaignAddLTV
# Record revenue from a campaign purchase
ltv_data = CampaignAddLTV(
contact_email="customer@example.com",
value=Decimal("149.99"),
currency="USD"
)
campaign = client.campaigns.add_ltv("campaign_123456789", ltv_data)
print(f"Campaign LTV: {campaign.ltv} {campaign.ltv_currency}")
# Track aggregate campaign revenue (without specific contact)
aggregate_ltv = CampaignAddLTV(
value=Decimal("299.99"),
currency="USD"
)
campaign = client.campaigns.add_ltv("campaign_123456789", aggregate_ltv)
Deleting Campaigns¶
# Delete a campaign
success = client.campaigns.delete("campaign_123456789")
if success:
print("Campaign deleted successfully")
else:
print("Failed to delete campaign")
Async Operations¶
import asyncio
import konigle
from konigle.models.comm import CampaignCreate
async def manage_campaigns():
async with konigle.AsyncClient(api_key="your-api-key") as client:
# Create campaign
campaign_data = CampaignCreate(
name="Async Campaign",
channel_type="email",
email_channel="channel_123",
email_template="template_456",
audience="audience_789",
utm_code="async-test"
)
campaign = await client.campaigns.create(campaign_data)
# List campaigns
from konigle.filters.comm import CampaignFilters
filters = CampaignFilters(q="async")
campaigns = await client.campaigns.list(filters=filters)
# Start campaign
started = await client.campaigns.start(campaign.id)
# Get campaign details
details = await client.campaigns.get(campaign.id)
# Pause campaign
paused = await client.campaigns.pause(campaign.id)
# Schedule campaign
from datetime import datetime, timedelta
scheduled_time = datetime.now() + timedelta(hours=2)
scheduled = await client.campaigns.schedule(
campaign.id,
scheduled_time.isoformat()
)
# Send test email
test_result = await client.campaigns.send_test_email(
campaign.id,
"test@example.com"
)
# Delete campaign
await client.campaigns.delete(campaign.id)
asyncio.run(manage_campaigns())
CLI Commands¶
The Konigle CLI provides comprehensive campaign management commands.
Campaign Creation¶
# Create a basic campaign
konigle comm campaigns create \
--name "Weekly Newsletter" \
--audience "audience_789" \
--email-channel "channel_123" \
--email-template "template_456" \
--description "Weekly newsletter for subscribers" \
--utm-code "weekly-newsletter"
# Create scheduled campaign
konigle comm campaigns create \
--name "Product Launch" \
--audience "audience_789" \
--email-channel "channel_123" \
--email-template "template_456" \
--scheduled-at "2024-12-25T10:00:00" \
--execution-duration 60 \
--utm-code "product-launch"
# Create campaign with custom sender
konigle comm campaigns create \
--name "Special Promotion" \
--audience "audience_789" \
--email-channel "channel_123" \
--email-template "template_456" \
--from-email "promo@company.com" \
--from-name "Sales Team" \
--reply-to-email "support@company.com" \
--utm-code "special-promo"
Quick Email Campaign Creation¶
# Create complete email campaign in one step
konigle comm campaigns new-email-campaign \
--name "Flash Sale" \
--email-channel "my-channel" \
--tag "customer" \
--tag "active" \
--subject "24-Hour Flash Sale!" \
--body-html "<h1>Flash Sale!</h1><p>50% off all products.</p>" \
--body-text "Flash Sale! 50% off all products." \
--utm-code "flash-sale" \
--audience-name "Active Customers" \
--template-name "Flash Sale Template"
# Create scheduled email campaign
konigle comm campaigns new-email-campaign \
--name "Weekly Digest" \
--email-channel "my-channel" \
--tag "newsletter" \
--subject "Weekly Digest" \
--body-html "<h1>This Week's Updates</h1>" \
--scheduled-at "2024-12-15T09:00:00" \
--execution-duration 30
Campaign Listing¶
# List all campaigns
konigle comm campaigns list
# List with pagination
konigle comm campaigns list --page 2 --page-size 5
# Search campaigns
konigle comm campaigns list --search "newsletter"
# Filter by status
konigle comm campaigns list --status "running"
# Filter by audience
konigle comm campaigns list --audience "premium-customers"
Campaign Details¶
Campaign Updates¶
# Update campaign name
konigle comm campaigns update campaign_123456789 \
--name "Updated Campaign Name"
# Update scheduling
konigle comm campaigns update campaign_123456789 \
--scheduled-at "2024-12-20T15:00:00" \
--execution-duration 90
# Update sender information
konigle comm campaigns update campaign_123456789 \
--from-email "new@company.com" \
--from-name "New Team"
# Update UTM code
konigle comm campaigns update campaign_123456789 \
--utm-code "updated-campaign-2024"
Campaign Status Management¶
# Start a campaign
konigle comm campaigns start campaign_123456789
# Pause a running campaign
konigle comm campaigns pause campaign_123456789
# Resume a paused campaign
konigle comm campaigns resume campaign_123456789
# Cancel a campaign with confirmation
konigle comm campaigns cancel campaign_123456789
# Cancel without confirmation
konigle comm campaigns cancel campaign_123456789 --yes
Campaign Scheduling¶
# Schedule a campaign for future delivery
konigle comm campaigns schedule campaign_123456789 \
--scheduled-at "2024-12-20T10:00:00"
# Reschedule an already scheduled campaign
konigle comm campaigns schedule campaign_123456789 \
--scheduled-at "2024-12-25T15:30:00"
# Schedule using the scheduled_at already set on the campaign
konigle comm campaigns schedule campaign_123456789
Sending Test Emails¶
# Send a test email to verify campaign content
konigle comm campaigns send-test-email campaign_123456789 \
--email "test@example.com"
# Using short option
konigle comm campaigns send-test-email campaign_123456789 \
-e "marketing@example.com"
Campaign Revenue Tracking¶
# Add revenue from a specific contact purchase
konigle comm campaigns add-ltv campaign_123456789 \
--contact-email "customer@example.com" \
--value 149.99 \
--currency "USD"
# Add aggregate revenue
konigle comm campaigns add-ltv campaign_123456789 \
--value 299.99 \
--currency "USD"