Skip to content
cccskills
FreePublished on GitHub

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 or managing outreach campaigns.

The English summary is being prepared. Showing the original description.

Works withGmail
See how to install

Files included (8)

  • SKILL.md7.3 KB
  • .clawhub/origin.json153 B
  • campaign.py15.5 KB
  • post-demo.md461 B
  • primary.md461 B
  • re-engagement.md1.4 KB
  • secondary.md461 B
  • webhook_handler.py3.9 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Campaign Orchestrator Skill

Multi-channel follow-up campaign orchestrator for ShapeScale sales. Executes scheduled SMS + Email sequences with CRM integration and auto-termination on replies.

Overview

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.

Key Features

  • Multi-channel: SMS (Dialpad) + Email (Gmail)
  • Scheduled: Cron-based execution with configurable delays
  • Personalized: Templates filled from Attio CRM data
  • Auto-terminating: Replies stop all future scheduled steps
  • Logged: All activities recorded in Attio

Setup

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:

  • Dialpad webhook is configured to hit this server
  • Attio has company/contact records for leads
  • Gmail API access enabled for sales email

Usage

Start a Campaign

# 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"

Pre-Campaign Checklist (MANDATORY)

Before starting ANY campaign, verify:

  1. Customer Status Check

    • Search memory/CRM for "already a customer" or "purchased" flags
    • Check exclusion list in campaigns.json
    • Verify email domain not in customer database
  2. Email Formatting Check (for email steps)

    • Preview template renders as proper paragraphs
    • 2-4 sentences per paragraph, blank line between
    • No single-sentence orphan paragraphs
    • No hard line breaks mid-paragraph
  3. Tone Check

    • No apologetic language ("no worries", "sorry to bother")
    • No easy outs ("if not relevant, no problem")
    • Professional, not needy

NEVER campaign to existing customers unless explicitly requested for upsell.

Check Campaign Status

# Status for specific lead
python3 campaign.py status "Apex Fitness"

# All active campaigns
python3 campaign.py list

Stop a Campaign

# Manual termination (lead replied, not interested, etc.)
python3 campaign.py stop "Apex Fitness" --reason "replied_interested"

Remove a Lead

# Remove lead from campaigns (opted out, not interested)
python3 campaign.py remove "Apex Fitness"

Check for Responses

# 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)

View Pending Steps

# Show all pending campaign steps sorted by time
python3 campaign.py pending
# Useful for seeing what's due soon across all campaigns

Template Management

# List available templates
python3 campaign.py templates

# Preview a template
python3 campaign.py preview "primary"

Campaign Templates

TemplateTimingChannelPurpose
primary+4 hoursSMSRecap demo, share recording
secondary+1 dayEmailPricing, detailed ROI
tertiary+4 daysSMSQuick check-in
quaternary+7 daysEmailFinal follow-up, case study
post-demo+0 hoursSMSImmediate thank you

Template Variables

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

Architecture

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

State Management

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": {...}
  }
}

Cron Integration

Campaign steps are executed via Clawdbot's cron system:

  • Executor job: Runs every 5 minutes to check for due steps
  • Per-campaign jobs: Created for each scheduled step

The scheduler script creates and manages these jobs automatically.

Webhook Handling

When Dialpad receives a reply to a campaign message:

  1. Dialpad sends webhook to server
  2. webhook_handler.py parses the reply
  3. Looks up which campaign the original message belonged to
  4. Marks campaign as terminated
  5. Logs the reply to Attio

Integration Points

Dialpad SMS

python3 /home/art/niemand/skills/dialpad/send_sms.py --to "+14155551234" --message "..."

Gmail (via gog)

gog-shapescale --account martin@shapescale.com send-email --to "lead@company.com" --subject "..." --body "..."

Attio CRM

attio note companies "company-uuid" "Campaign message sent: {message}"

Examples

Full Campaign Workflow

# 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

Monitoring Active Campaigns

# List all active
/campaign list

# Output:
# 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

Troubleshooting

Campaign not sending:

  • Check cron is running: crontab -l
  • Check logs: journalctl -u moltbot or campaign logs
  • Verify API keys: echo $DIALPAD_API_KEY

Webhook not terminating:

  • Verify Dialpad webhook URL is configured
  • Check webhook handler is running
  • Check campaigns.json for matching lead

Template variables not filling:

  • Verify lead exists in Attio with required fields
  • Check template syntax: {variable} not { variable }

License

Part of shapescale-moltbot-skills. See parent repository.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Set up and use 1Password CLI (op). Use when installing the CLI, enabling desktop app integration, signing in (single or multi-account), or reading/injecting/running secrets via op.

The English summary is being prepared. Showing the original description.

danstrem2/clawdbot-skill-master-pack2Updated Feb 1, 2026

Expert in building 3D experiences for the web - Three.js, React Three Fiber, Spline, WebGL, and interactive 3D scenes. Covers product configurators, 3D portfolios, immersive websites, and bringing depth to web experiences. Use when: 3D website, three.js, WebGL, react three fiber, 3D experience.

The English summary is being prepared. Showing the original description.

danstrem2/clawdbot-skill-master-pack2Updated Feb 1, 2026

When the user wants to plan, design, or implement an A/B test or experiment. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," or "hypothesis." For tracking implementation, see analytics-tracking.

The English summary is being prepared. Showing the original description.

danstrem2/clawdbot-skill-master-pack2Updated Feb 1, 2026

accli

Free

This skill should be used when interacting with Apple Calendar on macOS. Use it for listing calendars, viewing events, creating/updating/deleting calendar events, and checking availability/free-busy times. Triggers on requests like "check my calendar", "schedule a meeting", "what's on my schedule", "am I free tomorrow", or any calendar-related operations.

The English summary is being prepared. Showing the original description.

danstrem2/clawdbot-skill-master-pack2Updated Feb 1, 2026

This skill should be used when the user asks to "attack Active Directory", "exploit AD", "Kerberoasting", "DCSync", "pass-the-hash", "BloodHound enumeration", "Golden Ticket", "Silver Ticket", "AS-REP roasting", "NTLM relay", or needs guidance on Windows domain penetration testing.

The English summary is being prepared. Showing the original description.

danstrem2/clawdbot-skill-master-pack2Updated Feb 1, 2026

ActiveCampaign CRM integration for lead management, deal tracking, and email automation. Use for syncing demo leads, managing clinic sales pipeline, and triggering follow-up sequences.

The English summary is being prepared. Showing the original description.

danstrem2/clawdbot-skill-master-pack2Updated Feb 1, 2026

See all skills by danstrem2

Report a problem with this skill