feat: expandir tab Por Categoría en bot-config

- Toggle "Pedir finca al inicio" por categoría → maneja greeting/greeting_flow
- Campo editable de greeting_flow (pre-llena ask_finca al activar el toggle)
- Selector de menú inicial (greeting_menu, visible cuando NO pide finca)
- Selector de flujo de respaldo (fallback_flow) por categoría
- Datalist con flows y menús disponibles para autocompletar
- save-per-type actualiza greeting, greeting_flow, greeting_menu y fallback_flow
  preservando menus/flows/commands del seed en cada categoría
- Cat 1: sin finca, configura greeting_menu desde admin
- Cat 2/3: pide finca activado, greeting_flow = ask_finca

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-07-30 23:14:49 -05:00
co-authored by Claude Sonnet 4.6
parent 0ddab6adcf
commit 909c6be32f
2 changed files with 138 additions and 27 deletions
+35 -9
View File
@@ -660,22 +660,48 @@ $routes = [
$config = json_decode($company['config_json'] ?? '{}', true) ?: [];
$rawPt = $config['per_type'] ?? [];
$rawPt = $config['per_type'] ?? [];
$perType = (is_array($rawPt) && count(array_filter(array_keys($rawPt), 'is_string')) > 0)
? $rawPt : [];
$perTypeMenus = $_POST['per_type_menu'] ?? [];
$ptAskFinca = $_POST['per_type_ask_finca'] ?? [];
$ptGreetFlow = $_POST['per_type_greeting_flow'] ?? [];
$ptMenus = $_POST['per_type_menu'] ?? [];
$ptFallback = $_POST['per_type_fallback'] ?? [];
foreach ([1, 2, 3] as $cat) {
$mk = trim($perTypeMenus[$cat] ?? '');
$key = (string)$cat;
if ($mk !== '') {
$perType[$key] = array_merge($perType[$key] ?? [], ['greeting_menu' => $mk]);
$key = (string)$cat;
$current = $perType[$key] ?? []; // preserve menus/flows/commands from seed
$askFinca = ($ptAskFinca[$cat] ?? '0') === '1';
if ($askFinca) {
$gf = trim($ptGreetFlow[$cat] ?? 'ask_finca');
$current['greeting'] = '';
$current['greeting_flow'] = $gf !== '' ? $gf : 'ask_finca';
unset($current['greeting_menu']);
} else {
unset($perType[$key]['greeting_menu']);
if (empty($perType[$key])) unset($perType[$key]);
$current['greeting'] = null;
unset($current['greeting_flow']);
$mk = trim($ptMenus[$cat] ?? '');
if ($mk !== '') {
$current['greeting_menu'] = $mk;
} else {
unset($current['greeting_menu']);
}
}
$fb = trim($ptFallback[$cat] ?? '');
if ($fb !== '') {
$current['fallback_flow'] = $fb;
} else {
unset($current['fallback_flow']);
}
$perType[$key] = $current;
}
$config['per_type'] = empty($perType) ? new stdClass() : $perType;
$config['per_type'] = $perType;
CompanyRepository::save(['id' => $companyId, 'config_json' => json_encode($config, JSON_UNESCAPED_UNICODE)]);
echo json_encode(['ok' => true]);