botserver/migrations/6.2.4-campaigns/up.sql

120 lines
4.6 KiB
MySQL
Raw Normal View History

-- ============================================
-- Campaigns - Multichannel Marketing Platform
-- Version: 6.2.4
-- ============================================
-- 1. Marketing Campaigns
CREATE TABLE marketing_campaigns (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
org_id uuid NOT NULL,
bot_id uuid NOT NULL,
name varchar(100) NOT NULL,
status varchar(20) DEFAULT 'draft', -- draft, scheduled, running, paused, completed
channel varchar(20) NOT NULL, -- email, whatsapp, instagram, facebook, multi
content_template jsonb DEFAULT '{}',
scheduled_at timestamptz,
sent_at timestamptz,
completed_at timestamptz,
metrics jsonb DEFAULT '{}',
budget double precision,
created_at timestamptz DEFAULT now(),
updated_at timestamptz
);
-- 2. Marketing Lists (saved recipient lists)
CREATE TABLE marketing_lists (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
org_id uuid NOT NULL,
bot_id uuid NOT NULL,
name varchar(100) NOT NULL,
list_type varchar(20) NOT NULL, -- static, dynamic
query_text text, -- SQL filter or broadcast.bas path
contact_count integer DEFAULT 0,
created_at timestamptz DEFAULT now(),
updated_at timestamptz
);
-- 3. Marketing List Contacts (junction for static lists)
CREATE TABLE marketing_list_contacts (
list_id uuid REFERENCES marketing_lists(id) ON DELETE CASCADE,
contact_id uuid REFERENCES crm_contacts(id) ON DELETE CASCADE,
added_at timestamptz DEFAULT now(),
PRIMARY KEY (list_id, contact_id)
);
-- 4. Marketing Recipients (track delivery per contact)
CREATE TABLE marketing_recipients (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
campaign_id uuid REFERENCES marketing_campaigns(id) ON DELETE CASCADE,
contact_id uuid REFERENCES crm_contacts(id) ON DELETE CASCADE,
deal_id uuid REFERENCES crm_deals(id) ON DELETE SET NULL,
channel varchar(20) NOT NULL,
status varchar(20) DEFAULT 'pending', -- pending, sent, delivered, failed
sent_at timestamptz,
delivered_at timestamptz,
failed_at timestamptz,
error_message text,
response jsonb,
created_at timestamptz DEFAULT now()
);
-- 5. Marketing Templates
CREATE TABLE marketing_templates (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
org_id uuid NOT NULL,
bot_id uuid NOT NULL,
name varchar(100) NOT NULL,
channel varchar(20) NOT NULL,
subject varchar(200),
body text,
media_url varchar(500),
ai_prompt text,
variables jsonb DEFAULT '[]',
approved boolean DEFAULT false,
meta_template_id varchar(100),
created_at timestamptz DEFAULT now(),
updated_at timestamptz
);
-- 6. Email Tracking
CREATE TABLE email_tracking (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
recipient_id uuid REFERENCES marketing_recipients(id) ON DELETE CASCADE,
campaign_id uuid REFERENCES marketing_campaigns(id) ON DELETE CASCADE,
message_id varchar(100),
open_token uuid UNIQUE,
open_tracking_enabled boolean DEFAULT true,
opened boolean DEFAULT false,
opened_at timestamptz,
clicked boolean DEFAULT false,
clicked_at timestamptz,
ip_address varchar(45),
user_agent varchar(500),
created_at timestamptz DEFAULT now()
);
-- 7. WhatsApp Business Config
CREATE TABLE whatsapp_business (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
bot_id uuid NOT NULL UNIQUE,
phone_number_id varchar(50),
business_account_id varchar(50),
access_token varchar(500),
webhooks_verified boolean DEFAULT false,
created_at timestamptz DEFAULT now(),
updated_at timestamptz
);
-- 8. Add deal_id column to marketing_campaigns (link campaigns to deals)
ALTER TABLE marketing_campaigns ADD COLUMN deal_id uuid REFERENCES crm_deals(id) ON DELETE SET NULL;
-- Indexes
CREATE INDEX idx_marketing_campaigns_org_bot ON marketing_campaigns(org_id, bot_id);
CREATE INDEX idx_marketing_campaigns_status ON marketing_campaigns(status);
CREATE INDEX idx_marketing_lists_org_bot ON marketing_lists(org_id, bot_id);
CREATE INDEX idx_marketing_recipients_campaign ON marketing_recipients(campaign_id);
CREATE INDEX idx_marketing_recipients_contact ON marketing_recipients(contact_id);
CREATE INDEX idx_marketing_recipients_deal ON marketing_recipients(deal_id);
CREATE INDEX idx_email_tracking_token ON email_tracking(open_token);
CREATE INDEX idx_email_tracking_campaign ON email_tracking(campaign_id);