102 lines
3.9 KiB
Bash
Executable File
102 lines
3.9 KiB
Bash
Executable File
#!/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'
|
|
<?php
|
|
// WEVAL — Chatbot→Sales Conversion Tracking Endpoint
|
|
// Non-blocking insert + JSON response
|
|
header('Content-Type: application/json');
|
|
header('Access-Control-Allow-Origin: *');
|
|
header('Access-Control-Allow-Methods: POST, OPTIONS');
|
|
header('Access-Control-Allow-Headers: Content-Type');
|
|
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(204); exit; }
|
|
|
|
$input = json_decode(file_get_contents('php://input'), true) ?: [];
|
|
$event = $input['event'] ?? '';
|
|
$session_id = $input['session_id'] ?? ('anon-' . substr(md5(($_SERVER['REMOTE_ADDR']??'') . date('Ymd')), 0, 16));
|
|
$vertical = $input['vertical'] ?? null;
|
|
$source = $input['source'] ?? null;
|
|
$data = $input['data'] ?? null;
|
|
$url = $input['url'] ?? ($_SERVER['HTTP_REFERER'] ?? null);
|
|
$referrer = $input['referrer'] ?? null;
|
|
|
|
if (empty($event)) {
|
|
http_response_code(400);
|
|
echo json_encode(['ok' => 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"
|