feat: labores diarias fase 2; el bot repite lo que responde el ERP

Quinto flujo de carga: fecha, labor, lote, trabajadores y cantidad. El catalogo
de novedades lo filtra el ERP por fase, asi que el bot no decide cual
corresponde. El trabajador vinculado se pre-llena y el supervisor elige.

Ademas, collect_and_post descartaba la respuesta del POST y decia "listo" aunque
el ERP hubiera rechazado parte. Ahora repite lo que contesta: cuantos entraron,
quien ya tenia jornal, que quedo afuera.

Y from_phone respeta el tipo del campo: multi_select espera un arreglo aunque el
perfil traiga un solo tercero.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-08-19 20:32:42 -05:00
co-authored by Claude Sonnet 4.6
parent 356c157811
commit 8399a86972
3 changed files with 107 additions and 4 deletions
+23 -4
View File
@@ -1072,9 +1072,11 @@ class NormalBot
if (empty($perfil['es_supervisor'])) {
foreach ($fields as $f) {
$origen = $f['from_phone'] ?? '';
if ($origen !== '' && !empty($perfil[$origen])) {
$collected[$f['key']] = (string)$perfil[$origen];
}
if ($origen === '' || empty($perfil[$origen])) continue;
// multi_select espera un arreglo aunque el perfil traiga uno solo
$collected[$f['key']] = ($f['type'] ?? '') === 'multi_select'
? [(string)$perfil[$origen]]
: (string)$perfil[$origen];
}
}
@@ -1600,7 +1602,24 @@ class NormalBot
return self::sendText('⚠️ Error al guardar los datos. Intenta de nuevo.' . $nav, $context['from'], $company);
}
return self::sendText($cap['success_text'] . $nav, $context['from'], $company);
// El ERP suele responder algo que el usuario necesita saber: cuántos
// lotes entraron, quién ya tenía jornal, qué quedó afuera. Sin esto el
// bot decía "listo" sobre registros que no se guardaron.
$texto = $cap['success_text'];
$resp = json_decode((string)$response, true);
if (is_array($resp)) {
$detalle = trim((string)($resp['mensaje'] ?? ''));
if ($detalle !== '' && ($resp['status'] ?? '1') !== '1') {
$texto = '⚠️ ' . $detalle;
} elseif ($detalle !== '') {
$texto .= "\n" . $detalle;
}
if (!empty($resp['rechazados'])) {
$texto .= "\n\n_" . count($resp['rechazados']) . ' sin procesar_';
}
}
return self::sendText($texto . $nav, $context['from'], $company);
}
// ── Submit form (end of multi-step collection) ───────────────────────────