{
  "$schema": "internal://fixxo/outreach-config/v1",
  "version": "1.0",
  "updated": "2026-09",
  "note": "Machine-readable outreach config. Every channel entry declares the consent it requires; the runtime must call can_contact(phone, channel) before any send. Never bypass.",

  "quiet_hours": { "start_local": 8, "end_local": 21, "resolve_from": "recipient_timezone" },

  "channels": {
    "call": {
      "who_speaks": "human",
      "cold_allowed": true,
      "consent_required": "pnc_plus_dnc",
      "ai_disclosure": false,
      "recording_consent": "state_dependent",
      "notes": "Manually dialed B2B only. No autodialer, no predictive dialer."
    },
    "ai_call": {
      "who_speaks": "ai",
      "cold_allowed": false,
      "consent_required": "pewc",
      "ai_disclosure": true,
      "recording_consent": "required_where_state_law_demands",
      "blocked_states": ["WA"],
      "blocked_reason": "RCW 80.36.400 prohibits ADAD commercial solicitation",
      "notes": "FCC 24-17: AI voice = artificial voice. Marketing to wireless needs prior express WRITTEN consent."
    },
    "ai_copilot": {
      "who_speaks": "human",
      "cold_allowed": true,
      "consent_required": "pnc_plus_dnc",
      "ai_disclosure": false,
      "notes": "AI listens, never speaks. Compliant everywhere. This is the default mode."
    },
    "sms": {
      "who_speaks": "ai_and_human",
      "cold_allowed": false,
      "consent_required": "pewc_or_inbound_trigger",
      "ai_disclosure": true,
      "notes": "TCPA + WA CEMA. Never text a cold number."
    },
    "mms": { "cold_allowed": false, "consent_required": "pewc", "notes": "Not used. Marketing MMS excluded by brand." },
    "email": {
      "who_speaks": "human_approved_ai_draft",
      "cold_allowed": true,
      "consent_required": "can_spam_optout",
      "ai_disclosure": false,
      "notes": "CAN-SPAM is opt-out. WA recipients need a subject-line review pass (CEMA)."
    },
    "voicemail": {
      "cold_allowed": false,
      "consent_required": "pewc",
      "blocked_states": ["WA"],
      "notes": "Ringless voicemail to a cold number is treated as an artificial-voice call."
    }
  },

  "disclosure_lines": {
    "ai_voice_open": "Hi, this is an AI assistant calling on behalf of Fixxo. I'm calling about recruiting licensed plumbers in {city}. You can say 'stop' at any time and I won't call again. Do you have thirty seconds?",
    "ai_sms_open": "Hi — this is Fixxo's AI assistant. I can answer questions or get you to a person. What would help? Reply HUMAN any time.",
    "identification": "Fixxo — F-I-X-X-O — a home-repair platform in {city}.",
    "recording_ask": "Is it alright if I record this call for quality?",
    "recording_default": "off"
  },

  "sequences": [
    {
      "key": "S1",
      "channel": "sms",
      "consent_required": "pewc_or_inbound_trigger",
      "trigger": "interested_call",
      "steps": [
        { "n": 1, "delay_minutes": 2,  "template": "post_call_link" },
        { "n": 2, "delay_hours": 24,   "template": "post_call_faq" },
        { "n": 3, "delay_days": 3,     "template": "post_call_slot" },
        { "n": 4, "delay_days": 7,     "template": "post_call_close" }
      ]
    },
    {
      "key": "S3",
      "channel": "sms",
      "consent_required": "existing_relationship",
      "trigger": "onboarding_in_progress",
      "steps": [
        { "n": 1, "trigger": "application_incomplete", "template": "onboarding_missing_field" },
        { "n": 2, "trigger": "docs_requested",          "template": "onboarding_docs" },
        { "n": 3, "trigger": "verification_passed",     "template": "onboarding_verified" },
        { "n": 4, "trigger": "credential_expiring",     "template": "onboarding_renewal" }
      ]
    },
    {
      "key": "E1",
      "channel": "email",
      "consent_required": "can_spam_optout",
      "audience": "registry_verified_business",
      "steps": [
        { "n": 1, "day": 0,  "subject": "Question about lead costs at {{business}}", "template": "e1_question" },
        { "n": 2, "day": 3,  "subject": "No fee to quote — the Fixxo model in 40 words", "template": "e1_model" },
        { "n": 3, "day": 7,  "subject": "{{trade}} work in {{city}} — verification takes 15 min", "template": "e1_ask" },
        { "n": 4, "day": 14, "subject": "Closing the file on {{business}}", "template": "e1_close" }
      ]
    },
    {
      "key": "E2",
      "channel": "email",
      "consent_required": "can_spam_optout",
      "audience": "women_owned_partner",
      "steps": [
        { "n": 1, "day": 0,  "subject": "Partner opportunity for {{business}} — {{city}}", "template": "e2_women_intro" },
        { "n": 2, "day": 4,  "subject": "What priority matching means in practice", "template": "e2_detail" },
        { "n": 3, "day": 10, "subject": "Leaving this with you", "template": "e2_close" }
      ]
    }
  ],

  "suppression_keywords": [
    "STOP","STOPALL","UNSUBSCRIBE","CANCEL","END","QUIT","REMOVE","OPTOUT","OPT OUT",
    "DON'T TEXT ME","DO NOT CONTACT","TAKE ME OFF","UNSUB"
  ],

  "dispositions": [
    "no_answer","voicemail_left","callback_requested","interested","booked_verification",
    "sent_link","not_a_fit","too_busy","already_has_leads","do_not_call","wrong_number","human_requested"
  ],

  "hard_guardrails": [
    "No send without can_contact(phone, channel) returning true.",
    "No AI voice to a Washington number for solicitation.",
    "No recording without captured all-party consent (WA, CA).",
    "No volume or income promises, ever.",
    "No emoji in any channel.",
    "No false scarcity or invented statistics.",
    "Suppression writes synchronously and is global across channels.",
    "The AI disclosure line is non-configurable.",
    "Every call and message is logged with its consent basis."
  ]
}
