Campaign Orchestrator
Multi-channel follow-up campaign orchestrator for ShapeScale sales. Schedules and executes SMS + Email sequences with CRM logging and auto-termination on replies. Use when following up with demo leads
Multi-channel follow-up campaign orchestrator for ShapeScale sales. Schedules and executes SMS + Email sequences with CRM logging and auto-termination on replies. Use when following up with demo leads
Real data. Real impact.
Growing
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
Multi-channel follow-up campaign orchestrator for ShapeScale sales. Executes scheduled SMS + Email sequences with CRM integration and auto-termination on replies.
A Campaign is a defined sequence of steps (SMS/Email) that executes over time. When a lead replies to any message, the campaign automatically terminates.
Environment variables required:
DIALPAD_API_KEY=your_dialpad_api_key ATTIO_API_KEY=your_attio_api_key GOG_KEYRING_PASSWORD=your_google_password # For Gmail access
Also ensure:
# Start primary follow-up campaign for a lead python3 campaign.py start "primary" --lead "Apex Fitness"Start with custom delay override (hours)
python3 campaign.py start "primary" --lead "Apex Fitness" --delay 2
Start with Attio deal/company ID
python3 campaign.py start "post-demo" --lead "Apex Fitness" --attio-id "deal-uuid"
Before starting ANY campaign, verify:
Customer Status Check
Email Formatting Check (for email steps)
Tone Check
NEVER campaign to existing customers unless explicitly requested for upsell.
# Status for specific lead python3 campaign.py status "Apex Fitness"All active campaigns
python3 campaign.py list
# Manual termination (lead replied, not interested, etc.) python3 campaign.py stop "Apex Fitness" --reason "replied_interested"
# Remove lead from campaigns (opted out, not interested) python3 campaign.py remove "Apex Fitness"
# Check if lead has responded to any prior messages python3 campaign.py check "Apex Fitness" # Shows response status for each completed step # Warns if responses detected (safe to proceed or terminate)
# Show all pending campaign steps sorted by time python3 campaign.py pending # Useful for seeing what's due soon across all campaigns
# List available templates python3 campaign.py templatesPreview a template
python3 campaign.py preview "primary"
| Template | Timing | Channel | Purpose |
|---|---|---|---|
| +4 hours | SMS | Recap demo, share recording |
| +1 day | Pricing, detailed ROI | |
| +4 days | SMS | Quick check-in |
| +7 days | Final follow-up, case study | |
| +0 hours | SMS | Immediate thank you |
Templates support variable substitution:
{name} - Lead first name {company} - Company name {deal_value} - Deal value from Attio {owner} - Sales owner name {demo_notes} - Notes from demo conversation {checkout_link} - Personalized checkout URL
campaign-orchestrator/ ├── SKILL.md # This file ├── campaign.py # Main CLI (start, stop, status, list) ├── webhook_handler.py # Processes reply → termination ├── primary.md # SMS follow-up template ├── secondary.md # Email template ├── post-demo.md # Immediate follow-up template └── state/ └── campaigns.json # Campaign state persistence
Campaign state is stored in
<workspace>/state/campaigns.json:
{ "campaigns": { "Apex Fitness": { "template": "primary", "attio_id": "deal-uuid", "started": "2026-01-27T13:00:00Z", "steps_completed": ["sms_primary"], "next_step": "email_secondary", "next_scheduled": "2026-01-28T13:00:00Z", "status": "active" } }, "templates": { "primary": {...}, "secondary": {...} } }
Campaign steps are executed via Clawdbot's cron system:
The scheduler script creates and manages these jobs automatically.
When Dialpad receives a reply to a campaign message:
webhook_handler.py parses the replypython3 /home/art/niemand/skills/dialpad/send_sms.py --to "+14155551234" --message "..."
gog-shapescale --account martin@shapescale.com send-email --to "lead@company.com" --subject "..." --body "..."
attio note companies "company-uuid" "Campaign message sent: {message}"
# 1. After demo, start campaign /campaign start "post-demo" --lead "Dr. Smith's Clinic"2. Check status next day
/campaign status "Dr. Smith's Clinic"
Output: Step 1 sent, Step 2 scheduled for tomorrow
3. Lead replies "interested"
Webhook automatically terminates campaign
Logs reply to Attio
4. Manual follow-up if needed
/campaign start "secondary" --lead "Dr. Smith's Clinic" --delay 0
# List all active /campaign listOutput:
Active Campaigns:
- Apex Fitness (primary) - Step 2/4, next: email
- Dr. Smith's Clinic (post-demo) - Complete
- Wellness Center (tertiary) - Step 1/3, next: sms
Campaign not sending:
cron is running: crontab -ljournalctl -u moltbot or campaign logsecho $DIALPAD_API_KEYWebhook not terminating:
campaigns.json for matching leadTemplate variables not filling:
{variable} not { variable }Part of shapescale-moltbot-skills. See parent repository.
No automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.