{
  "schemaVersion": "1.0",
  "item": {
    "slug": "campaign-orchestrator",
    "name": "Campaign Orchestrator",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/kesslerio/campaign-orchestrator",
    "canonicalUrl": "https://clawhub.ai/kesslerio/campaign-orchestrator",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/campaign-orchestrator",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=campaign-orchestrator",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "campaign.py",
      "post-demo.md",
      "primary.md",
      "re-engagement.md",
      "secondary.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/campaign-orchestrator"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/campaign-orchestrator",
    "agentPageUrl": "https://openagent3.xyz/skills/campaign-orchestrator/agent",
    "manifestUrl": "https://openagent3.xyz/skills/campaign-orchestrator/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/campaign-orchestrator/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Campaign Orchestrator Skill",
        "body": "Multi-channel follow-up campaign orchestrator for ShapeScale sales. Executes scheduled SMS + Email sequences with CRM integration and auto-termination on replies."
      },
      {
        "title": "Overview",
        "body": "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."
      },
      {
        "title": "Key Features",
        "body": "Multi-channel: SMS (Dialpad) + Email (Gmail)\nScheduled: Cron-based execution with configurable delays\nPersonalized: Templates filled from Attio CRM data\nAuto-terminating: Replies stop all future scheduled steps\nLogged: All activities recorded in Attio"
      },
      {
        "title": "Setup",
        "body": "Environment variables required:\n\nDIALPAD_API_KEY=your_dialpad_api_key\nATTIO_API_KEY=your_attio_api_key\nGOG_KEYRING_PASSWORD=your_google_password  # For Gmail access\n\nAlso ensure:\n\nDialpad webhook is configured to hit this server\nAttio has company/contact records for leads\nGmail API access enabled for sales email"
      },
      {
        "title": "Start a Campaign",
        "body": "# Start primary follow-up campaign for a lead\npython3 campaign.py start \"primary\" --lead \"Apex Fitness\"\n\n# Start with custom delay override (hours)\npython3 campaign.py start \"primary\" --lead \"Apex Fitness\" --delay 2\n\n# Start with Attio deal/company ID\npython3 campaign.py start \"post-demo\" --lead \"Apex Fitness\" --attio-id \"deal-uuid\""
      },
      {
        "title": "Pre-Campaign Checklist (MANDATORY)",
        "body": "Before starting ANY campaign, verify:\n\nCustomer Status Check\n\nSearch memory/CRM for \"already a customer\" or \"purchased\" flags\nCheck exclusion list in campaigns.json\nVerify email domain not in customer database\n\n\n\nEmail Formatting Check (for email steps)\n\nPreview template renders as proper paragraphs\n2-4 sentences per paragraph, blank line between\nNo single-sentence orphan paragraphs\nNo hard line breaks mid-paragraph\n\n\n\nTone Check\n\nNo apologetic language (\"no worries\", \"sorry to bother\")\nNo easy outs (\"if not relevant, no problem\")\nProfessional, not needy\n\nNEVER campaign to existing customers unless explicitly requested for upsell."
      },
      {
        "title": "Check Campaign Status",
        "body": "# Status for specific lead\npython3 campaign.py status \"Apex Fitness\"\n\n# All active campaigns\npython3 campaign.py list"
      },
      {
        "title": "Stop a Campaign",
        "body": "# Manual termination (lead replied, not interested, etc.)\npython3 campaign.py stop \"Apex Fitness\" --reason \"replied_interested\""
      },
      {
        "title": "Remove a Lead",
        "body": "# Remove lead from campaigns (opted out, not interested)\npython3 campaign.py remove \"Apex Fitness\""
      },
      {
        "title": "Check for Responses",
        "body": "# Check if lead has responded to any prior messages\npython3 campaign.py check \"Apex Fitness\"\n# Shows response status for each completed step\n# Warns if responses detected (safe to proceed or terminate)"
      },
      {
        "title": "View Pending Steps",
        "body": "# Show all pending campaign steps sorted by time\npython3 campaign.py pending\n# Useful for seeing what's due soon across all campaigns"
      },
      {
        "title": "Template Management",
        "body": "# List available templates\npython3 campaign.py templates\n\n# Preview a template\npython3 campaign.py preview \"primary\""
      },
      {
        "title": "Campaign Templates",
        "body": "TemplateTimingChannelPurposeprimary+4 hoursSMSRecap demo, share recordingsecondary+1 dayEmailPricing, detailed ROItertiary+4 daysSMSQuick check-inquaternary+7 daysEmailFinal follow-up, case studypost-demo+0 hoursSMSImmediate thank you"
      },
      {
        "title": "Template Variables",
        "body": "Templates support variable substitution:\n\n{name}      - Lead first name\n{company}   - Company name\n{deal_value} - Deal value from Attio\n{owner}     - Sales owner name\n{demo_notes} - Notes from demo conversation\n{checkout_link} - Personalized checkout URL"
      },
      {
        "title": "Architecture",
        "body": "campaign-orchestrator/\n├── SKILL.md              # This file\n├── campaign.py           # Main CLI (start, stop, status, list)\n├── webhook_handler.py    # Processes reply → termination\n├── primary.md            # SMS follow-up template\n├── secondary.md          # Email template\n├── post-demo.md          # Immediate follow-up template\n└── state/\n    └── campaigns.json    # Campaign state persistence"
      },
      {
        "title": "State Management",
        "body": "Campaign state is stored in <workspace>/state/campaigns.json:\n\n{\n  \"campaigns\": {\n    \"Apex Fitness\": {\n      \"template\": \"primary\",\n      \"attio_id\": \"deal-uuid\",\n      \"started\": \"2026-01-27T13:00:00Z\",\n      \"steps_completed\": [\"sms_primary\"],\n      \"next_step\": \"email_secondary\",\n      \"next_scheduled\": \"2026-01-28T13:00:00Z\",\n      \"status\": \"active\"\n    }\n  },\n  \"templates\": {\n    \"primary\": {...},\n    \"secondary\": {...}\n  }\n}"
      },
      {
        "title": "Cron Integration",
        "body": "Campaign steps are executed via Clawdbot's cron system:\n\nExecutor job: Runs every 5 minutes to check for due steps\nPer-campaign jobs: Created for each scheduled step\n\nThe scheduler script creates and manages these jobs automatically."
      },
      {
        "title": "Webhook Handling",
        "body": "When Dialpad receives a reply to a campaign message:\n\nDialpad sends webhook to server\nwebhook_handler.py parses the reply\nLooks up which campaign the original message belonged to\nMarks campaign as terminated\nLogs the reply to Attio"
      },
      {
        "title": "Dialpad SMS",
        "body": "python3 /home/art/niemand/skills/dialpad/send_sms.py --to \"+14155551234\" --message \"...\""
      },
      {
        "title": "Gmail (via gog)",
        "body": "gog-shapescale --account martin@shapescale.com send-email --to \"lead@company.com\" --subject \"...\" --body \"...\""
      },
      {
        "title": "Attio CRM",
        "body": "attio note companies \"company-uuid\" \"Campaign message sent: {message}\""
      },
      {
        "title": "Full Campaign Workflow",
        "body": "# 1. After demo, start campaign\n/campaign start \"post-demo\" --lead \"Dr. Smith's Clinic\"\n\n# 2. Check status next day\n/campaign status \"Dr. Smith's Clinic\"\n# Output: Step 1 sent, Step 2 scheduled for tomorrow\n\n# 3. Lead replies \"interested\"\n# Webhook automatically terminates campaign\n# Logs reply to Attio\n\n# 4. Manual follow-up if needed\n/campaign start \"secondary\" --lead \"Dr. Smith's Clinic\" --delay 0"
      },
      {
        "title": "Monitoring Active Campaigns",
        "body": "# List all active\n/campaign list\n\n# Output:\n# Active Campaigns:\n# - Apex Fitness (primary) - Step 2/4, next: email\n# - Dr. Smith's Clinic (post-demo) - Complete\n# - Wellness Center (tertiary) - Step 1/3, next: sms"
      },
      {
        "title": "Troubleshooting",
        "body": "Campaign not sending:\n\nCheck cron is running: crontab -l\nCheck logs: journalctl -u moltbot or campaign logs\nVerify API keys: echo $DIALPAD_API_KEY\n\nWebhook not terminating:\n\nVerify Dialpad webhook URL is configured\nCheck webhook handler is running\nCheck campaigns.json for matching lead\n\nTemplate variables not filling:\n\nVerify lead exists in Attio with required fields\nCheck template syntax: {variable} not { variable }"
      },
      {
        "title": "License",
        "body": "Part of shapescale-moltbot-skills. See parent repository."
      }
    ],
    "body": "Campaign Orchestrator Skill\n\nMulti-channel follow-up campaign orchestrator for ShapeScale sales. Executes scheduled SMS + Email sequences with CRM integration and auto-termination on replies.\n\nOverview\n\nA Campaign is a defined sequence of steps (SMS/Email) that executes over time. When a lead replies to any message, the campaign automatically terminates.\n\nKey Features\nMulti-channel: SMS (Dialpad) + Email (Gmail)\nScheduled: Cron-based execution with configurable delays\nPersonalized: Templates filled from Attio CRM data\nAuto-terminating: Replies stop all future scheduled steps\nLogged: All activities recorded in Attio\nSetup\n\nEnvironment variables required:\n\nDIALPAD_API_KEY=your_dialpad_api_key\nATTIO_API_KEY=your_attio_api_key\nGOG_KEYRING_PASSWORD=your_google_password  # For Gmail access\n\n\nAlso ensure:\n\nDialpad webhook is configured to hit this server\nAttio has company/contact records for leads\nGmail API access enabled for sales email\nUsage\nStart a Campaign\n# Start primary follow-up campaign for a lead\npython3 campaign.py start \"primary\" --lead \"Apex Fitness\"\n\n# Start with custom delay override (hours)\npython3 campaign.py start \"primary\" --lead \"Apex Fitness\" --delay 2\n\n# Start with Attio deal/company ID\npython3 campaign.py start \"post-demo\" --lead \"Apex Fitness\" --attio-id \"deal-uuid\"\n\nPre-Campaign Checklist (MANDATORY)\n\nBefore starting ANY campaign, verify:\n\nCustomer Status Check\n\nSearch memory/CRM for \"already a customer\" or \"purchased\" flags\nCheck exclusion list in campaigns.json\nVerify email domain not in customer database\n\nEmail Formatting Check (for email steps)\n\nPreview template renders as proper paragraphs\n2-4 sentences per paragraph, blank line between\nNo single-sentence orphan paragraphs\nNo hard line breaks mid-paragraph\n\nTone Check\n\nNo apologetic language (\"no worries\", \"sorry to bother\")\nNo easy outs (\"if not relevant, no problem\")\nProfessional, not needy\n\nNEVER campaign to existing customers unless explicitly requested for upsell.\n\nCheck Campaign Status\n# Status for specific lead\npython3 campaign.py status \"Apex Fitness\"\n\n# All active campaigns\npython3 campaign.py list\n\nStop a Campaign\n# Manual termination (lead replied, not interested, etc.)\npython3 campaign.py stop \"Apex Fitness\" --reason \"replied_interested\"\n\nRemove a Lead\n# Remove lead from campaigns (opted out, not interested)\npython3 campaign.py remove \"Apex Fitness\"\n\nCheck for Responses\n# Check if lead has responded to any prior messages\npython3 campaign.py check \"Apex Fitness\"\n# Shows response status for each completed step\n# Warns if responses detected (safe to proceed or terminate)\n\nView Pending Steps\n# Show all pending campaign steps sorted by time\npython3 campaign.py pending\n# Useful for seeing what's due soon across all campaigns\n\nTemplate Management\n# List available templates\npython3 campaign.py templates\n\n# Preview a template\npython3 campaign.py preview \"primary\"\n\nCampaign Templates\nTemplate\tTiming\tChannel\tPurpose\nprimary\t+4 hours\tSMS\tRecap demo, share recording\nsecondary\t+1 day\tEmail\tPricing, detailed ROI\ntertiary\t+4 days\tSMS\tQuick check-in\nquaternary\t+7 days\tEmail\tFinal follow-up, case study\npost-demo\t+0 hours\tSMS\tImmediate thank you\nTemplate Variables\n\nTemplates support variable substitution:\n\n{name}      - Lead first name\n{company}   - Company name\n{deal_value} - Deal value from Attio\n{owner}     - Sales owner name\n{demo_notes} - Notes from demo conversation\n{checkout_link} - Personalized checkout URL\n\nArchitecture\ncampaign-orchestrator/\n├── SKILL.md              # This file\n├── campaign.py           # Main CLI (start, stop, status, list)\n├── webhook_handler.py    # Processes reply → termination\n├── primary.md            # SMS follow-up template\n├── secondary.md          # Email template\n├── post-demo.md          # Immediate follow-up template\n└── state/\n    └── campaigns.json    # Campaign state persistence\n\nState Management\n\nCampaign state is stored in <workspace>/state/campaigns.json:\n\n{\n  \"campaigns\": {\n    \"Apex Fitness\": {\n      \"template\": \"primary\",\n      \"attio_id\": \"deal-uuid\",\n      \"started\": \"2026-01-27T13:00:00Z\",\n      \"steps_completed\": [\"sms_primary\"],\n      \"next_step\": \"email_secondary\",\n      \"next_scheduled\": \"2026-01-28T13:00:00Z\",\n      \"status\": \"active\"\n    }\n  },\n  \"templates\": {\n    \"primary\": {...},\n    \"secondary\": {...}\n  }\n}\n\nCron Integration\n\nCampaign steps are executed via Clawdbot's cron system:\n\nExecutor job: Runs every 5 minutes to check for due steps\nPer-campaign jobs: Created for each scheduled step\n\nThe scheduler script creates and manages these jobs automatically.\n\nWebhook Handling\n\nWhen Dialpad receives a reply to a campaign message:\n\nDialpad sends webhook to server\nwebhook_handler.py parses the reply\nLooks up which campaign the original message belonged to\nMarks campaign as terminated\nLogs the reply to Attio\nIntegration Points\nDialpad SMS\npython3 /home/art/niemand/skills/dialpad/send_sms.py --to \"+14155551234\" --message \"...\"\n\nGmail (via gog)\ngog-shapescale --account martin@shapescale.com send-email --to \"lead@company.com\" --subject \"...\" --body \"...\"\n\nAttio CRM\nattio note companies \"company-uuid\" \"Campaign message sent: {message}\"\n\nExamples\nFull Campaign Workflow\n# 1. After demo, start campaign\n/campaign start \"post-demo\" --lead \"Dr. Smith's Clinic\"\n\n# 2. Check status next day\n/campaign status \"Dr. Smith's Clinic\"\n# Output: Step 1 sent, Step 2 scheduled for tomorrow\n\n# 3. Lead replies \"interested\"\n# Webhook automatically terminates campaign\n# Logs reply to Attio\n\n# 4. Manual follow-up if needed\n/campaign start \"secondary\" --lead \"Dr. Smith's Clinic\" --delay 0\n\nMonitoring Active Campaigns\n# List all active\n/campaign list\n\n# Output:\n# Active Campaigns:\n# - Apex Fitness (primary) - Step 2/4, next: email\n# - Dr. Smith's Clinic (post-demo) - Complete\n# - Wellness Center (tertiary) - Step 1/3, next: sms\n\nTroubleshooting\n\nCampaign not sending:\n\nCheck cron is running: crontab -l\nCheck logs: journalctl -u moltbot or campaign logs\nVerify API keys: echo $DIALPAD_API_KEY\n\nWebhook not terminating:\n\nVerify Dialpad webhook URL is configured\nCheck webhook handler is running\nCheck campaigns.json for matching lead\n\nTemplate variables not filling:\n\nVerify lead exists in Attio with required fields\nCheck template syntax: {variable} not { variable }\nLicense\n\nPart of shapescale-moltbot-skills. See parent repository."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/kesslerio/campaign-orchestrator",
    "publisherUrl": "https://clawhub.ai/kesslerio/campaign-orchestrator",
    "owner": "kesslerio",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/campaign-orchestrator",
    "downloadUrl": "https://openagent3.xyz/downloads/campaign-orchestrator",
    "agentUrl": "https://openagent3.xyz/skills/campaign-orchestrator/agent",
    "manifestUrl": "https://openagent3.xyz/skills/campaign-orchestrator/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/campaign-orchestrator/agent.md"
  }
}