feat(bot): add last_7 date_mode y next_endpoint_key para texto+PDF en cadena

- last_7: fecha_desde = hoy-7 días, fecha_hasta = hoy (para ausentismos semana)
- next_endpoint_key en executeApiReport: si la primera llamada retorna JSON texto
  con status=1, envía el texto al usuario y luego ejecuta el endpoint siguiente
  (ej: produccion_total → texto inmediato + PDF a continuación)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-07-28 21:59:16 -05:00
co-authored by Claude Sonnet 4.6
parent 0df08bf953
commit e3d9aac26d
+16 -1
View File
@@ -1227,6 +1227,9 @@ class NormalBot
} elseif ($dateMode === 'last_month') {
$extraQuery['fecha_desde'] = date('Y-m-01', strtotime('first day of last month'));
$extraQuery['fecha_hasta'] = date('Y-m-t', strtotime('last day of last month'));
} elseif ($dateMode === 'last_7') {
$extraQuery['fecha_desde'] = date('Y-m-d', strtotime('-7 days'));
$extraQuery['fecha_hasta'] = date('Y-m-d');
}
$extraQuery['telefono'] = $context['from'];
$extraQuery['nombre'] = $context['name'] ?? '';
@@ -1268,10 +1271,22 @@ class NormalBot
return self::sendText('Error al obtener el reporte. Intenta de nuevo.' . $nav, $context['from'], $company);
}
// Si el ERP devuelve JSON (ej: sin_datos), informar al usuario en texto
// Si el ERP devuelve JSON (ej: sin_datos o texto), informar al usuario en texto
if (str_starts_with($contentType ?? '', 'application/json')) {
$json = json_decode($content, true);
$msg = $json['mensaje'] ?? ($json['message'] ?? 'No hay datos disponibles para el período solicitado.');
$nextKey = $params['next_endpoint_key'] ?? '';
if ($nextKey !== '' && ($json['status'] ?? '0') === '1') {
// Enviar texto primero, luego solicitar el reporte complementario (PDF/Excel)
self::sendText($msg, $context['from'], $company);
$nextParams = array_merge($params, [
'endpoint_key' => $nextKey,
'caption' => $params['next_caption'] ?? '',
'filename' => $params['next_filename'] ?? 'reporte.pdf',
]);
unset($nextParams['next_endpoint_key'], $nextParams['next_caption'], $nextParams['next_filename']);
return self::executeApiReport($nextParams, $context, $company, $ctxId);
}
ConversationContext::reset($ctxId);
return self::sendText('️ ' . $msg . $nav, $context['from'], $company);
}