Files
html/api/growth-conversion-advisor.php
opus a632ef9b6e
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
auto-sync-0220
2026-04-22 02:20:02 +02:00

228 lines
16 KiB
PHP

<?php
// GROWTH ENGINE · Deep Conversion Advisor API V2 · Wave 229
// LIVE data: Paperclip leads + Dark Scout intel + WePredict forecast + LLM recommendations
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
function load_secrets() {
$s = [];
if (!is_readable('/etc/weval/secrets.env')) return $s;
foreach (file('/etc/weval/secrets.env', FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES) as $l) {
if (empty(trim($l))||$l[0]==='#') continue;
$p = strpos($l,'='); if ($p) $s[trim(substr($l,0,$p))] = trim(substr($l,$p+1)," \t\"'");
}
return $s;
}
// === 1) Live Paperclip leads ===
$leads_agg = ['total' => 0, 'active_customer' => 0, 'lead' => 0, 'by_industry' => [], 'by_country' => [], 'avg_mql' => 0, 'top_leads' => []];
try {
$pg = @pg_connect('host=10.1.0.3 port=5432 dbname=paperclip user=admin password=admin123 connect_timeout=3');
if ($pg) {
$r = @pg_query($pg, 'SELECT company, contact_name, email, industry, country, status, mql_score, sql_qualified, notes FROM weval_leads ORDER BY mql_score DESC');
if ($r) {
while ($row = pg_fetch_assoc($r)) {
$leads_agg['total']++;
$st = $row['status'] ?: 'unknown';
if (!isset($leads_agg[$st])) $leads_agg[$st] = 0;
$leads_agg[$st]++;
$ind = $row['industry'] ?: 'Other';
$leads_agg['by_industry'][$ind] = ($leads_agg['by_industry'][$ind] ?? 0) + 1;
$co = $row['country'] ?: 'XX';
$leads_agg['by_country'][$co] = ($leads_agg['by_country'][$co] ?? 0) + 1;
$leads_agg['avg_mql'] += (int)$row['mql_score'];
if (count($leads_agg['top_leads']) < 10) {
$leads_agg['top_leads'][] = [
'company' => $row['company'],
'contact' => $row['contact_name'],
'industry' => $ind,
'country' => $co,
'status' => $st,
'mql' => (int)$row['mql_score'],
'sql_qualified' => $row['sql_qualified']==='t',
'notes' => $row['notes'],
];
}
}
if ($leads_agg['total']>0) $leads_agg['avg_mql'] = round($leads_agg['avg_mql']/$leads_agg['total'],1);
pg_close($pg);
}
}
} catch (Throwable $e) {
$leads_agg['error'] = $e->getMessage();
}
// === 2) Dark Scout intel history ===
$scout = ['total_scans' => 0, 'recent' => [], 'presets' => [], 'top_categories' => []];
$scout_path = __DIR__ . '/dark-scout-intel-log.json';
if (is_file($scout_path)) {
$raw = @json_decode(file_get_contents($scout_path), true);
if (is_array($raw)) {
$scout['total_scans'] = count($raw);
$scout['recent'] = array_slice(array_reverse($raw), 0, 5);
$cats_total = [];
foreach ($raw as $s) {
$p = $s['preset'] ?? 'misc';
$scout['presets'][$p] = ($scout['presets'][$p] ?? 0) + 1;
foreach (($s['categories'] ?? []) as $c => $n) {
$cats_total[$c] = ($cats_total[$c] ?? 0) + $n;
}
}
arsort($cats_total);
$scout['top_categories'] = array_slice($cats_total, 0, 6, true);
}
}
// === 3) WePredict forecast ===
$predict = ['load_next_hour' => null, 'alert' => null, 'cache_hit_pct' => null, 'patterns' => null, 'recommended_actions' => []];
$ch = curl_init('http://127.0.0.1/api/dsh-predict-api.php');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true, CURLOPT_TIMEOUT=>5]);
$pred_raw = curl_exec($ch);
curl_close($ch);
if ($pred_raw) {
$pd = json_decode($pred_raw, true);
if ($pd && isset($pd['load'])) {
$predict['load_next_hour'] = $pd['load']['predicted_next_hour'] ?? null;
$predict['alert'] = $pd['load']['alert'] ?? false;
$predict['cache_hit_pct'] = $pd['cache']['hit_rate_pct'] ?? null;
$predict['patterns'] = $pd['cache']['patterns_count'] ?? null;
$predict['recommended_actions'] = $pd['load']['recommended_actions'] ?? [];
}
}
// === 4) Sovereign IA catalog (enriched with live flags) ===
$sovereign = [
['id'=>'wepredict','name'=>'WePredict','url'=>'/wepredict.html','category'=>'prediction','capability'=>'16 cockpits · 64 predictions','maturity'=>85,'live_state'=>"load={$predict['load_next_hour']}, alert=".($predict['alert']?'yes':'no'),'use_for_conversion'=>'Deal close probability, churn warning'],
['id'=>'dark_scout','name'=>'Dark Scout V83','url'=>'/v83-dark-scout-enriched.html','category'=>'intel','capability'=>'Dark web + clearnet monitoring','maturity'=>78,'live_state'=>"{$scout['total_scans']} scans history, ".count($scout['presets'])." presets",'use_for_conversion'=>'Competitor pricing, intent signals'],
['id'=>'wevia_master','name'=>'WEVIA Master','url'=>'/wevia-master.html','category'=>'orchestrator','capability'=>'269 tools Resolver · 20 exec intents','maturity'=>90,'live_state'=>'live SSE ready','use_for_conversion'=>'Multi-agent prospect replies'],
['id'=>'arena','name'=>'WEVAL Arena','url'=>'/weval-arena.html','category'=>'command-center','capability'=>'409 options · 715 agents','maturity'=>80,'live_state'=>'live multi-model','use_for_conversion'=>'Best LLM per use case'],
['id'=>'ethica_b2b','name'=>'Ethica B2B HCP','url'=>'https://consent.wevup.app','category'=>'data','capability'=>'157K HCPs · 87% email coverage','maturity'=>82,'live_state'=>'consent pilot ready','use_for_conversion'=>'Pharma prospecting MENA/EU/US'],
['id'=>'wevads_brain','name'=>'WEVADS Brain','url'=>'/brain-tower.html','category'=>'email-engine','capability'=>'9 winners · triple MTA','maturity'=>95,'live_state'=>'PMTA+Kumo+Postfix up','use_for_conversion'=>'Cold outreach 95%+ delivery'],
['id'=>'blade_ai','name'=>'Blade AI','url'=>'/blade-ai.html','category'=>'ai-agent','capability'=>'Web agent · 232 tasks','maturity'=>75,'live_state'=>'heartbeat ok','use_for_conversion'=>'Auto-fill proposals, demo prep'],
['id'=>'paperclip','name'=>'Paperclip PM','url'=>'/paperclip.html','category'=>'project-mgmt','capability'=>'weval_leads · 48 rows live','maturity'=>65,'live_state'=>"{$leads_agg['total']} leads, avg MQL {$leads_agg['avg_mql']}",'use_for_conversion'=>'Deal progression tracking'],
['id'=>'oss_stack','name'=>'OSS Sovereign Stack','url'=>'/api/oss-manifest.php','category'=>'toolchain','capability'=>'10 OSS · 1748 MB','maturity'=>85,'live_state'=>'pandasai+Ollama+WeasyPrint+DocuSeal','use_for_conversion'=>'Proposals + data analysis + automation'],
];
// === 5) Opportunities with live deal progression enrichment ===
$opps_raw = [
['id'=>'vistex-cosumar','lead_slug'=>'vistex','name'=>'Vistex SAP · Cosumar close','effort'=>3,'impact'=>9,'revenue_mad'=>450000,'status'=>'in_progress','time_days'=>14,'needs'=>['Lead addendum 0.8 DH counter','Portal demo'],'wevia_tools'=>['wevia_master','paperclip']],
['id'=>'ethica-ma-contract','lead_slug'=>'ethica','name'=>'Ethica Morocco · Kaouther signing','effort'=>2,'impact'=>8,'revenue_mad'=>200000,'status'=>'in_progress','time_days'=>7,'needs'=>['Pilot consent ecm.py approval','Senders Arsenal'],'wevia_tools'=>['ethica_b2b','wevads_brain','wevia_master']],
['id'=>'carrefour-retail','name'=>'Carrefour Morocco · CDC response','effort'=>5,'impact'=>8,'revenue_mad'=>350000,'status'=>'idea','time_days'=>21,'needs'=>['CDC spec','WeasyPrint proposal','Demo'],'wevia_tools'=>['oss_stack','wevia_master']],
['id'=>'api-hcp-package','name'=>'API HCP Maghreb · productize','effort'=>4,'impact'=>7,'revenue_mad'=>600000,'status'=>'in_progress','time_days'=>28,'needs'=>['Pricing tiers','Swagger docs','Stripe'],'wevia_tools'=>['ethica_b2b','arena']],
['id'=>'weval-saas-freemium','name'=>'WEVAL SaaS Freemium launch','effort'=>6,'impact'=>9,'revenue_mad'=>800000,'status'=>'plan','time_days'=>45,'needs'=>['Landing','Stripe','Onboarding','Free+Pro tier'],'wevia_tools'=>['wevia_master','blade_ai','oss_stack']],
['id'=>'pharma-cloud-productize','name'=>'WEVAL Pharma Cloud productize','effort'=>5,'impact'=>8,'revenue_mad'=>500000,'status'=>'plan','time_days'=>30,'needs'=>['Package Ethica+WEVADS+Analytics','White-label','Partners'],'wevia_tools'=>['ethica_b2b','wevads_brain','wepredict']],
['id'=>'linkedin-outbound','name'=>'LinkedIn outbound sequence','effort'=>1,'impact'=>5,'revenue_mad'=>80000,'status'=>'idea','time_days'=>3,'needs'=>['Selenium Blade','9 winners copy','Reply capture'],'wevia_tools'=>['blade_ai','wevads_brain']],
['id'=>'stripe-consulting-pack','name'=>'Stripe Consulting Maghreb','effort'=>2,'impact'=>6,'revenue_mad'=>150000,'status'=>'idea','time_days'=>10,'needs'=>['Landing+calendly','Case studies','Stripe partner'],'wevia_tools'=>['wevia_master']],
['id'=>'seo-module-hub','name'=>'SEO Module Hub commercialization','effort'=>2,'impact'=>4,'revenue_mad'=>100000,'status'=>'plan','time_days'=>14,'needs'=>['Clients list','Pricing'],'wevia_tools'=>['paperclip']],
['id'=>'huawei-refund','lead_slug'=>'huawei','name'=>'Huawei Cloud refund (billing)','effort'=>3,'impact'=>3,'revenue_mad'=>50000,'status'=>'in_progress','time_days'=>21,'needs'=>['Distributor switch','Docs'],'wevia_tools'=>['wevia_master']],
];
// Enrich opps with live paperclip lead data
foreach ($opps_raw as &$o) {
if (!empty($o['lead_slug'])) {
foreach ($leads_agg['top_leads'] as $l) {
if (stripos(strtolower($l['company']), $o['lead_slug']) !== false) {
$o['live_lead'] = ['mql'=>$l['mql'], 'sql_qualified'=>$l['sql_qualified'], 'status'=>$l['status'], 'notes'=>$l['notes'], 'contact'=>$l['contact'], 'email'=>$l['company']];
break;
}
}
}
}
unset($o);
// === 6) Eisenhower matrix ===
$qw = $bb = $fi = $tk = [];
foreach ($opps_raw as $o) {
if ($o['effort']<=3 && $o['impact']>=7) $qw[] = $o;
elseif ($o['effort']>=4 && $o['impact']>=7) $bb[] = $o;
elseif ($o['effort']<=3 && $o['impact']<7) $fi[] = $o;
else $tk[] = $o;
}
// === 7) Competitors enriched with Dark Scout intel ===
$competitors = [
['category'=>'SAP Consulting Maghreb','competitors'=>['Vistex','Valoris','Capgemini MA'],'weval_edge'=>'SAP Ecosystem Partner · AI-augmented · sovereign 0€','threat'=>'medium','scout_preset'=>'sap_maroc'],
['category'=>'Pharma HCP Data MENA','competitors'=>['IQVIA','Veeva','Doctolib Pro'],'weval_edge'=>'157K HCPs · consent-first · 87% email','threat'=>'low','scout_preset'=>'pharma_intel'],
['category'=>'E-signatures MENA','competitors'=>['DocuSign','Yousign','HelloSign'],'weval_edge'=>'DocuSeal self-hosted · 0€ · data sovereignty MENA','threat'=>'high','scout_preset'=>null],
['category'=>'Email deliverability','competitors'=>['Mailgun','Sendgrid','Mailjet'],'weval_edge'=>'PMTA+Kumo+Postfix triple · 95%+ · own IPs','threat'=>'medium','scout_preset'=>null],
['category'=>'AI orchestration SMB','competitors'=>['Make.com','Zapier','n8n cloud'],'weval_edge'=>'WEVIA Master · 17 providers cascade · 0€ inference','threat'=>'low','scout_preset'=>'ai_consulting'],
];
foreach ($competitors as &$c) {
if (!empty($c['scout_preset']) && isset($scout['presets'][$c['scout_preset']])) {
$c['scout_scans'] = $scout['presets'][$c['scout_preset']];
}
}
unset($c);
// === 8) Capacity plan from WePredict ===
$capacity = [
'load_next_hour' => $predict['load_next_hour'],
'alert' => $predict['alert'],
'cache_health' => $predict['cache_hit_pct'] === 100 ? 'excellent' : ($predict['cache_hit_pct'] >= 80 ? 'good' : 'needs attention'),
'plan_recommendation' => $predict['alert'] ? 'SCALE UP: consider restart php-fpm or add workers' : 'OK: capacity normal, can absorb more deals',
'patterns_learned' => $predict['patterns'],
];
// === 9) LLM-powered recommendations (Cerebras/Groq/Mistral cascade) ===
$llm_reco = null;
if (($_GET['llm'] ?? '') === '1') {
$secrets = load_secrets();
$top_opps_names = array_slice(array_map(function($o){return $o['name'].' ('.$o['effort'].'e/'.$o['impact'].'i)';}, $opps_raw), 0, 8);
$leads_summary = "$leads_agg[total] leads, avg MQL {$leads_agg['avg_mql']}, " . implode(', ', array_map(function($k,$v){return "$k=$v";}, array_keys($leads_agg['by_country']), $leads_agg['by_country']));
$prompt = "You are WEVAL growth advisor. Given:\n- Opportunities: ".implode("; ", $top_opps_names)."\n- Leads: $leads_summary\n- Dark Scout: {$scout['total_scans']} intel scans\n- WePredict: load {$predict['load_next_hour']}, cache {$predict['cache_hit_pct']}%\n\nSuggest 3 TOP conversion actions this week with concrete steps. JSON format: {actions:[{rank:N, title:str, steps:[str,str,str], timeline:str, revenue_est_mad:N}]}";
$payload = json_encode(['model'=>'llama-3.3-70b','messages'=>[['role'=>'user','content'=>$prompt]],'max_tokens'=>1500,'temperature'=>0.3]);
$providers = [
['url'=>'https://api.cerebras.ai/v1/chat/completions','key'=>$secrets['CEREBRAS_API_KEY']??'','name'=>'Cerebras'],
['url'=>'https://api.groq.com/openai/v1/chat/completions','key'=>$secrets['GROQ_KEY']??'','name'=>'Groq','model_override'=>'llama-3.3-70b-versatile'],
['url'=>'https://api.mistral.ai/v1/chat/completions','key'=>$secrets['MISTRAL_KEY']??'','name'=>'Mistral','model_override'=>'mistral-small-latest'],
];
foreach ($providers as $prov) {
if (empty($prov['key'])) continue;
$p = $payload;
if (isset($prov['model_override'])) $p = preg_replace('/"model":"[^"]+"/', '"model":"'.$prov['model_override'].'"', $payload, 1);
$ch = curl_init($prov['url']);
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true, CURLOPT_POST=>true, CURLOPT_TIMEOUT=>25,
CURLOPT_HTTPHEADER=>['Content-Type: application/json','Authorization: Bearer '.$prov['key']],
CURLOPT_POSTFIELDS=>$p]);
$r = curl_exec($ch);
$c = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($c === 200) {
$d = json_decode($r, true);
$text = $d['choices'][0]['message']['content'] ?? '';
if ($text) {
$llm_reco = ['provider' => $prov['name'], 'raw' => $text];
break;
}
}
}
}
// === 10) Output ===
echo json_encode([
'ts' => date('c'),
'wave' => 229,
'version' => 'deep-conversion-advisor-v2-live',
'live_leads' => $leads_agg,
'live_scout' => $scout,
'live_predict' => $predict,
'capacity_plan' => $capacity,
'sovereign_ia' => $sovereign,
'sovereign_ia_count' => count($sovereign),
'opportunities' => $opps_raw,
'matrix' => ['quick_wins'=>$qw, 'big_bets'=>$bb, 'fill_ins'=>$fi, 'thankless'=>$tk],
'matrix_revenue' => [
'quick_wins_mad' => array_sum(array_map(function($o){return $o['revenue_mad'];}, $qw)),
'big_bets_mad' => array_sum(array_map(function($o){return $o['revenue_mad'];}, $bb)),
],
'competitors' => $competitors,
'recommendations' => [
['rank'=>1,'action'=>'Close Vistex Cosumar (7j)','why'=>"450K MAD · lead MQL 95 · SQL qualified · status active_customer",'deps'=>'Lead addendum 0.8 DH counter'],
['rank'=>2,'action'=>'Sign Ethica Morocco pilot (7j)','why'=>"200K MAD · lead MQL 100 · TN market showcase",'deps'=>'ecm.py consent approval'],
['rank'=>3,'action'=>'Launch LinkedIn outbound (3j)','why'=>"Low effort · 48 leads to activate · Blade+WEVADS",'deps'=>'Selenium sequencer + 9 winners'],
['rank'=>4,'action'=>'Productize API HCP Maghreb (28j)','why'=>"600K MAD annual recurring · Stripe ready",'deps'=>'Pricing tiers + Swagger public'],
['rank'=>5,'action'=>'Launch WEVAL SaaS Freemium (45j)','why'=>"800K MAD big bet · full stack showcase",'deps'=>'Landing + billing + onboarding'],
],
'llm_reco' => $llm_reco,
], JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);