119 lines
4.6 KiB
SQL
119 lines
4.6 KiB
SQL
-- ============================================
|
|
-- 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);
|