#!/usr/bin/env bash # WEVAL — Wire Chatbot→Sales Conversion Tracking # Crée table chatbot_conversions + API endpoint /api/chatbot-conversion-track.php # Doctrine #5 zero écrasement — skip si déjà existant set -euo pipefail PG_PASS="admin123" PG_HOST="10.1.0.3" PG_USER="admin" PG_DB="adx_system" # 1. Créer table chatbot_conversions (idempotent) psql_cmd() { PGPASSWORD="$PG_PASS" timeout 10 psql -h "$PG_HOST" -U "$PG_USER" -d "$PG_DB" -c "$1" 2>&1 } TABLE_EXISTS=$(PGPASSWORD="$PG_PASS" timeout 10 psql -h "$PG_HOST" -U "$PG_USER" -d "$PG_DB" -tAc "SELECT 1 FROM pg_tables WHERE tablename='chatbot_conversions'" 2>&1 || echo "") if [ "$TABLE_EXISTS" != "1" ]; then psql_cmd "CREATE TABLE IF NOT EXISTS chatbot_conversions ( id BIGSERIAL PRIMARY KEY, session_id TEXT NOT NULL, event TEXT NOT NULL, vertical TEXT, source TEXT, data JSONB, url TEXT, referrer TEXT, ip INET, user_agent TEXT, ts TIMESTAMPTZ DEFAULT NOW() );" psql_cmd "CREATE INDEX IF NOT EXISTS idx_chatbot_conv_session ON chatbot_conversions(session_id);" psql_cmd "CREATE INDEX IF NOT EXISTS idx_chatbot_conv_vertical ON chatbot_conversions(vertical);" psql_cmd "CREATE INDEX IF NOT EXISTS idx_chatbot_conv_event ON chatbot_conversions(event);" psql_cmd "CREATE INDEX IF NOT EXISTS idx_chatbot_conv_ts ON chatbot_conversions(ts DESC);" echo "TABLE_CREATED: chatbot_conversions with 4 indexes" else echo "TABLE_EXISTS: chatbot_conversions (skip creation — doctrine #5)" fi # 2. Créer API endpoint /api/chatbot-conversion-track.php ENDPOINT="/var/www/html/api/chatbot-conversion-track.php" if [ -f "$ENDPOINT" ]; then echo "ENDPOINT_EXISTS: $ENDPOINT (skip — doctrine #5)" else cat > "$ENDPOINT" <<'PHP' false, 'error' => 'event required']); exit; } $ip = $_SERVER['HTTP_CF_CONNECTING_IP'] ?? ($_SERVER['HTTP_X_FORWARDED_FOR'] ?? ($_SERVER['REMOTE_ADDR'] ?? null)); if ($ip && strpos($ip, ',') !== false) $ip = trim(explode(',', $ip)[0]); $ua = substr($_SERVER['HTTP_USER_AGENT'] ?? '', 0, 500); try { $pdo = new PDO('pgsql:host=10.1.0.3;port=5432;dbname=adx_system', 'admin', 'admin123', [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_TIMEOUT => 3 ]); $stmt = $pdo->prepare('INSERT INTO chatbot_conversions (session_id, event, vertical, source, data, url, referrer, ip, user_agent) VALUES (?, ?, ?, ?, ?::jsonb, ?, ?, ?, ?)'); $stmt->execute([ $session_id, $event, $vertical, $source, $data ? json_encode($data) : null, $url, $referrer, $ip, $ua ]); echo json_encode(['ok' => true, 'session_id' => $session_id, 'event' => $event]); } catch (Exception $e) { error_log('[chatbot-conv-track] ' . $e->getMessage()); echo json_encode(['ok' => false, 'error' => 'store_failed']); } PHP chown www-data:www-data "$ENDPOINT" chmod 644 "$ENDPOINT" echo "ENDPOINT_CREATED: $ENDPOINT" fi # 3. Sanity check COUNT=$(PGPASSWORD="$PG_PASS" timeout 10 psql -h "$PG_HOST" -U "$PG_USER" -d "$PG_DB" -tAc "SELECT COUNT(*) FROM chatbot_conversions" 2>&1 || echo "N/A") echo "CONVERSIONS_STORED_COUNT: $COUNT" echo "WIRE_OK"