fix: pluviometria se quedaba muda tras elegir la fecha
El selector de fecha que agregue a collect_for_each responde por lista, pero el bloque __foreach de processInteractive solo contemplaba confirmar y cancelar: la fecha caia en la resolucion de menus estaticos, no coincidia con ninguno y el flujo moria sin mensaje. Hasta ahora collect_for_each solo recibia numeros escritos, por eso nunca hizo falta ese ruteo. Solo se desvia mientras se espera la fecha, para no secuestrar la navegacion por menus durante el resto del bucle. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
c0fb2dc089
commit
f06a400d16
@@ -1826,6 +1826,12 @@ class NormalBot
|
||||
ConversationContext::reset($ctxId);
|
||||
return self::sendText("❌ Registro cancelado.\n\nEscribe *menu* para volver.", $context['from'], $company);
|
||||
}
|
||||
// La fecha previa al bucle se elige de una lista, así que llega por acá
|
||||
// y no como texto. Sin esto el flujo se quedaba mudo tras elegirla.
|
||||
$fe = $meta['__foreach'];
|
||||
if (!empty($fe['ask_date']) && ($fe['fecha'] ?? null) === null) {
|
||||
return self::handleForeachInput($meta, $input, $context, $company, $ctxId, $flows);
|
||||
}
|
||||
}
|
||||
|
||||
// Standard button/row resolution against static menus
|
||||
|
||||
@@ -349,6 +349,28 @@ check('los ids son los de finca', array_column($body['fincas'], 'id'), ['4', '7
|
||||
check('sin fecha usa hoy',
|
||||
$armarBody(['collected' => []], 'x', 'y')['fecha'], date('Y-m-d'));
|
||||
|
||||
echo "\nRuteo de respuestas interactivas en collect_for_each\n";
|
||||
|
||||
/** Espejo del bloque __foreach de processInteractive() */
|
||||
$rutaFe = function (array $fe, string $input): string {
|
||||
if ($input === '__foreach_confirm') return 'enviar';
|
||||
if ($input === '__foreach_cancel') return 'cancelar';
|
||||
if (!empty($fe['ask_date']) && ($fe['fecha'] ?? null) === null) return 'foreach-input';
|
||||
return 'menus';
|
||||
};
|
||||
|
||||
$esperandoFecha = ['ask_date' => true, 'fecha' => null];
|
||||
$conFecha = ['ask_date' => true, 'fecha' => '2026-08-04'];
|
||||
|
||||
// El bug: elegir la fecha caía en la resolución de menús y moría en silencio
|
||||
check('elegir la fecha llega al flujo', $rutaFe($esperandoFecha, '2026-08-04'), 'foreach-input');
|
||||
check('"otra fecha" también', $rutaFe($esperandoFecha, '__fe_other'), 'foreach-input');
|
||||
check('confirmar sigue enviando', $rutaFe($esperandoFecha, '__foreach_confirm'), 'enviar');
|
||||
check('cancelar sigue cancelando', $rutaFe($esperandoFecha, '__foreach_cancel'), 'cancelar');
|
||||
// Con la fecha resuelta no debe secuestrar la navegación por menús
|
||||
check('con fecha ya elegida no interfiere', $rutaFe($conFecha, 'submenu_ciclos'), 'menus');
|
||||
check('un foreach sin fecha tampoco', $rutaFe(['ask_date' => false], 'submenu_ciclos'), 'menus');
|
||||
|
||||
echo "\nask_finca\n";
|
||||
$af = $flows['ask_finca'];
|
||||
check('no repregunta si ya hay finca', $af['skip_if_set'] ?? false, true);
|
||||
|
||||
Reference in New Issue
Block a user