-- Phase 4: IM Bot Integration - Migration SQL -- Creates: im_bot_routes, im_bot_langbot_config, im_bot_daily_stats -- Alters: channels.platform ENUM to add personal_wechat, wecom -- 1. Extend channels platform ENUM to include personal_wechat and wecom ALTER TABLE channels MODIFY COLUMN platform ENUM( 'feishu', 'wechat', 'dingtalk', 'whatsapp', 'telegram', 'slack', 'personal_wechat', 'wecom' ) NOT NULL; -- 2. IM Bot Routing Rules - map channels to agents with filters CREATE TABLE IF NOT EXISTS im_bot_routes ( id VARCHAR(36) NOT NULL PRIMARY KEY, channel_id VARCHAR(36) NOT NULL COMMENT 'FK to channels.id', agent_id VARCHAR(64) DEFAULT NULL COMMENT 'FK to market_apps.id (VARCHAR(36))', route_name VARCHAR(100) NOT NULL DEFAULT 'default', match_type ENUM('all', 'keyword', 'regex', 'sender') NOT NULL DEFAULT 'all', match_pattern TEXT DEFAULT NULL COMMENT 'Keyword list or regex pattern', priority INT NOT NULL DEFAULT 0 COMMENT 'Higher = matched first', fallback_agent_id VARCHAR(64) DEFAULT NULL, is_active TINYINT(1) NOT NULL DEFAULT 1, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_route_channel (channel_id), INDEX idx_route_agent (agent_id), INDEX idx_route_active (is_active, priority) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- 3. LangBot Gateway Configuration CREATE TABLE IF NOT EXISTS im_bot_langbot_config ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL DEFAULT 'default', gateway_url VARCHAR(500) NOT NULL COMMENT 'LangBot API base URL', api_key VARCHAR(255) DEFAULT NULL COMMENT 'LangBot REST API key', webhook_secret VARCHAR(255) DEFAULT NULL COMMENT 'HMAC-SHA256 signing secret', bot_uuid VARCHAR(100) DEFAULT NULL COMMENT 'LangBot HTTP Bot UUID', callback_url VARCHAR(500) DEFAULT NULL COMMENT 'Our callback URL for LangBot responses', sync_channels TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Auto-sync channels to LangBot', status ENUM('active', 'inactive', 'error') NOT NULL DEFAULT 'inactive', last_sync_at DATETIME DEFAULT NULL, last_error TEXT DEFAULT NULL, config_json JSON DEFAULT NULL COMMENT 'Additional LangBot configuration', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- 4. Daily Statistics per Channel CREATE TABLE IF NOT EXISTS im_bot_daily_stats ( id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, channel_id VARCHAR(36) NOT NULL, stat_date DATE NOT NULL, messages_in INT NOT NULL DEFAULT 0, messages_out INT NOT NULL DEFAULT 0, unique_users INT NOT NULL DEFAULT 0, avg_response_time_ms INT NOT NULL DEFAULT 0, error_count INT NOT NULL DEFAULT 0, tokens_used INT NOT NULL DEFAULT 0, UNIQUE KEY uk_channel_date (channel_id, stat_date), INDEX idx_stat_date (stat_date) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- 5. Insert default LangBot config INSERT INTO im_bot_langbot_config (name, gateway_url, status) VALUES ('default', 'http://localhost:5300', 'inactive') ON DUPLICATE KEY UPDATE name = name;