fix: apply-menus hace merge en vez de reemplazar config completo
Antes sobreescribía todo el config_json con solo los flows base, borrando nlu, whisper_*, gemini_*, flows custom y menus custom. Ahora solo actualiza los flows/menus definidos en el script y preserva todo lo demás que tenga la empresa en la BD. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
976f61b682
commit
060041c855
+30
-10
@@ -167,6 +167,10 @@ $menuConfig = [
|
||||
],
|
||||
];
|
||||
|
||||
// Claves de flows y menus definidas en este script (las únicas que se actualizan)
|
||||
$baseFlowKeys = array_keys($menuConfig['flows']);
|
||||
$baseMenuKeys = array_keys($menuConfig['menus']);
|
||||
|
||||
$companies = CompanyRepository::findAll(true);
|
||||
$count = 0;
|
||||
|
||||
@@ -179,27 +183,43 @@ foreach ($companies as $company) {
|
||||
}
|
||||
}
|
||||
|
||||
$preserveKeys = ['greeting', 'fallback', 'ai_prompt', 'ai_model', 'ai_temperature', 'ai_provider', 'approval_webhook', 'ignore_prefixes', 'ai_max_tokens'];
|
||||
foreach ($preserveKeys as $key) {
|
||||
if (array_key_exists($key, $existing)) {
|
||||
$menuConfig[$key] = $existing[$key];
|
||||
// Partir del config existente para preservar TODO lo custom (nlu, whisper_*, gemini_*, etc.)
|
||||
$merged = $existing;
|
||||
|
||||
// Actualizar SOLO los flows base definidos aquí; los flows custom se preservan
|
||||
foreach ($menuConfig['flows'] as $key => $flow) {
|
||||
$merged['flows'][$key] = $flow;
|
||||
}
|
||||
|
||||
// Actualizar SOLO los menus base; los menus custom se preservan
|
||||
foreach ($menuConfig['menus'] as $key => $menu) {
|
||||
$merged['menus'][$key] = $menu;
|
||||
}
|
||||
|
||||
// Actualizar commands, per_type y otros campos estructurales del template
|
||||
foreach (['commands', 'per_type'] as $structKey) {
|
||||
if (isset($menuConfig[$structKey])) {
|
||||
$merged[$structKey] = $menuConfig[$structKey];
|
||||
}
|
||||
}
|
||||
|
||||
if (!isset($menuConfig['greeting'])) {
|
||||
$menuConfig['greeting'] = '¡Bienvenido! Escribe *menu* para ver las opciones disponibles.';
|
||||
// Aplicar defaults solo si no existen
|
||||
if (!isset($merged['greeting'])) {
|
||||
$merged['greeting'] = '¡Bienvenido! Escribe *menu* para ver las opciones disponibles.';
|
||||
}
|
||||
if (!isset($menuConfig['fallback'])) {
|
||||
$menuConfig['fallback'] = 'No entendí. Escribe *menu* para ver las opciones disponibles.';
|
||||
if (!isset($merged['fallback'])) {
|
||||
$merged['fallback'] = 'No entendí. Escribe *menu* para ver las opciones disponibles.';
|
||||
}
|
||||
|
||||
CompanyRepository::save([
|
||||
'id' => (int)$company['id'],
|
||||
'config_json' => json_encode($menuConfig, JSON_UNESCAPED_UNICODE),
|
||||
'config_json' => json_encode($merged, JSON_UNESCAPED_UNICODE),
|
||||
]);
|
||||
|
||||
$name = $company['display_name'] ?: $company['name'];
|
||||
echo "✔ {$name} actualizada\n";
|
||||
$customFlows = count(array_diff(array_keys($merged['flows'] ?? []), $baseFlowKeys));
|
||||
$customMenus = count(array_diff(array_keys($merged['menus'] ?? []), $baseMenuKeys));
|
||||
echo "✔ {$name} actualizada (preservados: {$customFlows} flows custom, {$customMenus} menus custom)\n";
|
||||
$count++;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user