feat: NLU routing + fix greeting para cat2/cat3 + nlu_descriptions
- Cat 2 y cat 3: greeting '' (no null) para que greeting_flow: ask_finca se dispare en el primer mensaje y el usuario seleccione su finca - nlu_enabled: true en config root activa el routing inteligente - NormalBot: step 6 llama AiBot::routeOrChat() antes del fallback_flow; si retorna 'route' ejecuta el flow; si 'chat' responde en texto libre - reset_finca: nuevo flow+función que limpia el meta de finca y relanza ask_finca; el NLU puede enrutar "quiero cambiar de finca" aquí - nlu_description en todos los flows consultables por el NLU; nlu_skip en menus de navegación interna para no exponerlos al modelo - AiBot::buildFlowCatalog: agrega upload_ciclo a isUpload para que cat 2 no vea flujos de subida en el catálogo del NLU Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
7fc36f1ebf
commit
0ddab6adcf
+57
-46
@@ -9,9 +9,10 @@ $db = db();
|
||||
// ─── CONFIG JSON completo (Company 2 y 3 comparten la misma base) ────────────
|
||||
|
||||
$configJson = [
|
||||
'greeting' => '¡Bienvenido a Palmas360! Escribe *menu* para ver las opciones disponibles.',
|
||||
'fallback' => 'No entendí. Escribe *menu* para ver las opciones disponibles.',
|
||||
'commands' => [
|
||||
'greeting' => '¡Bienvenido a Palmas360! Escribe *menu* para ver las opciones disponibles.',
|
||||
'fallback' => 'No entendí. Escribe *menu* para ver las opciones disponibles.',
|
||||
'nlu_enabled' => true,
|
||||
'commands' => [
|
||||
'menu' => 'show_main_menu',
|
||||
'informes' => 'descargar_informes',
|
||||
'info' => 'enviar_informacion',
|
||||
@@ -203,81 +204,89 @@ $configJson = [
|
||||
'meta_group' => 'finca',
|
||||
'meta_key' => 'finca_id',
|
||||
'next_node' => 'show_main_menu',
|
||||
'nlu_description' => 'Seleccionar o cambiar la finca de trabajo',
|
||||
],
|
||||
|
||||
// Acción NLU: limpiar finca y volver a ask_finca
|
||||
'reset_finca' => [
|
||||
'type' => 'function',
|
||||
'function' => 'reset_finca',
|
||||
'nlu_description' => 'Cambiar de finca o seleccionar una finca diferente',
|
||||
],
|
||||
|
||||
// Producción (texto del mes + PDF encadenado)
|
||||
'produccion_total' => ['type' => 'function', 'function' => 'api_report', 'params' => [
|
||||
'produccion_total' => ['type' => 'function', 'function' => 'api_report', 'nlu_description' => 'Producción total facturada del mes actual con PDF del año', 'params' => [
|
||||
'endpoint_key' => 'produccion_total_bot_dn',
|
||||
'date_mode' => 'current_month',
|
||||
'next_endpoint_key' => 'produccion_total_pdf_bot_dn',
|
||||
'next_caption' => '📊 Producción del año (PDF)',
|
||||
'next_filename' => 'produccion_año.pdf',
|
||||
]],
|
||||
'produccion_lotes' => ['type' => 'function', 'function' => 'api_report', 'params' => [
|
||||
'produccion_lotes' => ['type' => 'function', 'function' => 'api_report', 'nlu_description' => 'Producción detallada por lotes en Excel', 'params' => [
|
||||
'endpoint_key' => 'produccion_lotes_bot_dn',
|
||||
'filename' => 'produccion_lotes.xlsx',
|
||||
'caption' => 'Producción por lotes del año',
|
||||
]],
|
||||
|
||||
// Ausentismos
|
||||
'ausentismos_hoy' => ['type' => 'function', 'function' => 'api_report', 'params' => [
|
||||
'ausentismos_hoy' => ['type' => 'function', 'function' => 'api_report', 'nlu_description' => 'Ausentismos de hoy, quién faltó hoy', 'params' => [
|
||||
'endpoint_key' => 'ausentismos_bot_texto_dn',
|
||||
'date_mode' => 'today',
|
||||
]],
|
||||
'ausentismos_semana' => ['type' => 'function', 'function' => 'api_report', 'params' => [
|
||||
'ausentismos_semana' => ['type' => 'function', 'function' => 'api_report', 'nlu_description' => 'Ausentismos de esta semana', 'params' => [
|
||||
'endpoint_key' => 'ausentismos_bot_texto_dn',
|
||||
'date_mode' => 'last_7',
|
||||
]],
|
||||
'ausentismos_mes' => ['type' => 'function', 'function' => 'api_report', 'params' => [
|
||||
'ausentismos_mes' => ['type' => 'function', 'function' => 'api_report', 'nlu_description' => 'Reporte PDF de ausentismos del mes', 'params' => [
|
||||
'endpoint_key' => 'ausentismos_bot_pdf_dn',
|
||||
'date_mode' => 'current_month',
|
||||
'filename' => 'ausentismos_mes.pdf',
|
||||
'caption' => 'Ausentismos del mes',
|
||||
]],
|
||||
|
||||
// Menus de sección
|
||||
'submenu_produccion' => ['type' => 'menu', 'menu' => 'submenu_produccion'],
|
||||
'submenu_ciclos' => ['type' => 'menu', 'menu' => 'submenu_ciclos'],
|
||||
'submenu_ciclos_sanidad' => ['type' => 'menu', 'menu' => 'submenu_ciclos_sanidad'],
|
||||
'submenu_ausentismos' => ['type' => 'menu', 'menu' => 'submenu_ausentismos'],
|
||||
// Menus de sección (nlu_skip: navegación interna, no exponer al NLU)
|
||||
'submenu_produccion' => ['type' => 'menu', 'menu' => 'submenu_produccion', 'nlu_skip' => true],
|
||||
'submenu_ciclos' => ['type' => 'menu', 'menu' => 'submenu_ciclos', 'nlu_skip' => true],
|
||||
'submenu_ciclos_sanidad' => ['type' => 'menu', 'menu' => 'submenu_ciclos_sanidad', 'nlu_skip' => true],
|
||||
'submenu_ausentismos' => ['type' => 'menu', 'menu' => 'submenu_ausentismos', 'nlu_skip' => true],
|
||||
|
||||
// Ciclos — cada uno abre un sub-menú de 3 opciones
|
||||
'ciclo_cosecha' => ['type' => 'menu', 'menu' => 'submenu_ciclo_cosecha'],
|
||||
'ciclo_polinizacion' => ['type' => 'menu', 'menu' => 'submenu_ciclo_polinizacion'],
|
||||
'ciclo_plagas' => ['type' => 'menu', 'menu' => 'submenu_ciclo_plagas'],
|
||||
'ciclo_censo' => ['type' => 'menu', 'menu' => 'submenu_ciclo_censo'],
|
||||
'ciclo_palm' => ['type' => 'menu', 'menu' => 'submenu_ciclo_palm'],
|
||||
'ciclo_tratamiento' => ['type' => 'menu', 'menu' => 'submenu_ciclo_tratamiento'],
|
||||
'ciclo_cosecha' => ['type' => 'menu', 'menu' => 'submenu_ciclo_cosecha', 'nlu_description' => 'Ver ciclos de cosecha (lotes más largos o todos)'],
|
||||
'ciclo_polinizacion' => ['type' => 'menu', 'menu' => 'submenu_ciclo_polinizacion', 'nlu_description' => 'Ver ciclos de polinización'],
|
||||
'ciclo_plagas' => ['type' => 'menu', 'menu' => 'submenu_ciclo_plagas', 'nlu_description' => 'Ver ciclos de plagas'],
|
||||
'ciclo_censo' => ['type' => 'menu', 'menu' => 'submenu_ciclo_censo', 'nlu_description' => 'Ver ciclos de censo'],
|
||||
'ciclo_palm' => ['type' => 'menu', 'menu' => 'submenu_ciclo_palm', 'nlu_description' => 'Ver ciclos de Palmarum (Rhynchophorus)'],
|
||||
'ciclo_tratamiento' => ['type' => 'menu', 'menu' => 'submenu_ciclo_tratamiento', 'nlu_description' => 'Ver ciclos de tratamientos'],
|
||||
|
||||
// Sub-opciones: cosecha
|
||||
'ciclo_cosecha_top' => ['type'=>'function','function'=>'api_report','params'=>['endpoint_key'=>'cosecha_top_texto_bot_dn','date_mode'=>'last_30']],
|
||||
'ciclo_cosecha_todos' => ['type'=>'function','function'=>'api_report','params'=>['endpoint_key'=>'cosecha_todos_dn','date_mode'=>'today','filename'=>'ciclos_cosecha.pdf','caption'=>'Ciclos de Cosecha — todos los lotes']],
|
||||
'ciclo_cosecha_historico'=> ['type'=>'function','function'=>'api_report','params'=>['endpoint_key'=>'cosecha_historico_bot_dn','date_mode'=>'last_30','filename'=>'historico_cosecha.pdf','caption'=>'Histórico Cosecha — últimos 30 días']],
|
||||
'ciclo_cosecha_top' => ['type'=>'function','function'=>'api_report','nlu_description'=>'Lotes de cosecha con ciclos más largos','params'=>['endpoint_key'=>'cosecha_top_texto_bot_dn','date_mode'=>'last_30']],
|
||||
'ciclo_cosecha_todos' => ['type'=>'function','function'=>'api_report','nlu_description'=>'PDF de ciclos de cosecha todos los lotes','params'=>['endpoint_key'=>'cosecha_todos_dn','date_mode'=>'today','filename'=>'ciclos_cosecha.pdf','caption'=>'Ciclos de Cosecha — todos los lotes']],
|
||||
'ciclo_cosecha_historico'=> ['type'=>'function','function'=>'api_report','nlu_description'=>'Histórico de cosecha últimos 30 días','params'=>['endpoint_key'=>'cosecha_historico_bot_dn','date_mode'=>'last_30','filename'=>'historico_cosecha.pdf','caption'=>'Histórico Cosecha — últimos 30 días']],
|
||||
|
||||
// Sub-opciones: polinizacion
|
||||
'ciclo_polinizacion_top' => ['type'=>'function','function'=>'api_report','params'=>['endpoint_key'=>'polinizacion_top_texto_bot_dn','date_mode'=>'last_30']],
|
||||
'ciclo_polinizacion_todos' => ['type'=>'function','function'=>'api_report','params'=>['endpoint_key'=>'polinizacion_todos_dn','date_mode'=>'today','filename'=>'ciclos_polinizacion.pdf','caption'=>'Ciclos de Polinización — todos los lotes']],
|
||||
'ciclo_polinizacion_historico'=> ['type'=>'function','function'=>'api_report','params'=>['endpoint_key'=>'polinizacion_historico_bot_dn','date_mode'=>'last_30','filename'=>'historico_polinizacion.pdf','caption'=>'Histórico Polinización — últimos 30 días']],
|
||||
'ciclo_polinizacion_top' => ['type'=>'function','function'=>'api_report','nlu_description'=>'Lotes de polinización con ciclos más largos','params'=>['endpoint_key'=>'polinizacion_top_texto_bot_dn','date_mode'=>'last_30']],
|
||||
'ciclo_polinizacion_todos' => ['type'=>'function','function'=>'api_report','nlu_description'=>'PDF de ciclos de polinización todos los lotes','params'=>['endpoint_key'=>'polinizacion_todos_dn','date_mode'=>'today','filename'=>'ciclos_polinizacion.pdf','caption'=>'Ciclos de Polinización — todos los lotes']],
|
||||
'ciclo_polinizacion_historico'=> ['type'=>'function','function'=>'api_report','nlu_description'=>'Histórico de polinización últimos 30 días','params'=>['endpoint_key'=>'polinizacion_historico_bot_dn','date_mode'=>'last_30','filename'=>'historico_polinizacion.pdf','caption'=>'Histórico Polinización — últimos 30 días']],
|
||||
|
||||
// Sub-opciones: plagas
|
||||
'ciclo_plagas_top' => ['type'=>'function','function'=>'api_report','params'=>['endpoint_key'=>'plagas_top_texto_bot_dn','date_mode'=>'last_30']],
|
||||
'ciclo_plagas_todos' => ['type'=>'function','function'=>'api_report','params'=>['endpoint_key'=>'plagas_todos_dn','date_mode'=>'today','filename'=>'ciclos_plagas.pdf','caption'=>'Ciclos de Plagas — todos los lotes']],
|
||||
'ciclo_plagas_historico'=> ['type'=>'function','function'=>'api_report','params'=>['endpoint_key'=>'plagas_historico_bot_dn','date_mode'=>'last_30','filename'=>'historico_plagas.pdf','caption'=>'Histórico Plagas — últimos 30 días']],
|
||||
'ciclo_plagas_top' => ['type'=>'function','function'=>'api_report','nlu_description'=>'Lotes de plagas con ciclos más largos','params'=>['endpoint_key'=>'plagas_top_texto_bot_dn','date_mode'=>'last_30']],
|
||||
'ciclo_plagas_todos' => ['type'=>'function','function'=>'api_report','nlu_description'=>'PDF de ciclos de plagas todos los lotes','params'=>['endpoint_key'=>'plagas_todos_dn','date_mode'=>'today','filename'=>'ciclos_plagas.pdf','caption'=>'Ciclos de Plagas — todos los lotes']],
|
||||
'ciclo_plagas_historico'=> ['type'=>'function','function'=>'api_report','nlu_description'=>'Histórico de plagas últimos 30 días','params'=>['endpoint_key'=>'plagas_historico_bot_dn','date_mode'=>'last_30','filename'=>'historico_plagas.pdf','caption'=>'Histórico Plagas — últimos 30 días']],
|
||||
|
||||
// Sub-opciones: censo
|
||||
'ciclo_censo_top' => ['type'=>'function','function'=>'api_report','params'=>['endpoint_key'=>'censo_top_texto_bot_dn','date_mode'=>'last_30']],
|
||||
'ciclo_censo_todos' => ['type'=>'function','function'=>'api_report','params'=>['endpoint_key'=>'censo_todos_dn','date_mode'=>'today','filename'=>'ciclos_censo.pdf','caption'=>'Ciclos de Censo — todos los lotes']],
|
||||
'ciclo_censo_historico'=> ['type'=>'function','function'=>'api_report','params'=>['endpoint_key'=>'censo_historico_bot_dn','date_mode'=>'last_30','filename'=>'historico_censo.pdf','caption'=>'Histórico Censo — últimos 30 días']],
|
||||
'ciclo_censo_top' => ['type'=>'function','function'=>'api_report','nlu_description'=>'Lotes de censo con ciclos más largos','params'=>['endpoint_key'=>'censo_top_texto_bot_dn','date_mode'=>'last_30']],
|
||||
'ciclo_censo_todos' => ['type'=>'function','function'=>'api_report','nlu_description'=>'PDF de ciclos de censo todos los lotes','params'=>['endpoint_key'=>'censo_todos_dn','date_mode'=>'today','filename'=>'ciclos_censo.pdf','caption'=>'Ciclos de Censo — todos los lotes']],
|
||||
'ciclo_censo_historico'=> ['type'=>'function','function'=>'api_report','nlu_description'=>'Histórico de censo últimos 30 días','params'=>['endpoint_key'=>'censo_historico_bot_dn','date_mode'=>'last_30','filename'=>'historico_censo.pdf','caption'=>'Histórico Censo — últimos 30 días']],
|
||||
|
||||
// Sub-opciones: palm
|
||||
'ciclo_palm_top' => ['type'=>'function','function'=>'api_report','params'=>['endpoint_key'=>'palm_top_texto_bot_dn','date_mode'=>'last_30']],
|
||||
'ciclo_palm_todos' => ['type'=>'function','function'=>'api_report','params'=>['endpoint_key'=>'palm_todos_dn','date_mode'=>'today','filename'=>'ciclos_palmarum.pdf','caption'=>'Ciclos de Palmarum — todos los lotes']],
|
||||
'ciclo_palm_historico'=> ['type'=>'function','function'=>'api_report','params'=>['endpoint_key'=>'palm_historico_bot_dn','date_mode'=>'last_30','filename'=>'historico_palmarum.pdf','caption'=>'Histórico Palmarum — últimos 30 días']],
|
||||
'ciclo_palm_top' => ['type'=>'function','function'=>'api_report','nlu_description'=>'Lotes de Palmarum con ciclos más largos','params'=>['endpoint_key'=>'palm_top_texto_bot_dn','date_mode'=>'last_30']],
|
||||
'ciclo_palm_todos' => ['type'=>'function','function'=>'api_report','nlu_description'=>'PDF de ciclos de Palmarum todos los lotes','params'=>['endpoint_key'=>'palm_todos_dn','date_mode'=>'today','filename'=>'ciclos_palmarum.pdf','caption'=>'Ciclos de Palmarum — todos los lotes']],
|
||||
'ciclo_palm_historico'=> ['type'=>'function','function'=>'api_report','nlu_description'=>'Histórico de Palmarum últimos 30 días','params'=>['endpoint_key'=>'palm_historico_bot_dn','date_mode'=>'last_30','filename'=>'historico_palmarum.pdf','caption'=>'Histórico Palmarum — últimos 30 días']],
|
||||
|
||||
// Sub-opciones: tratamiento
|
||||
'ciclo_tratamiento_top' => ['type'=>'function','function'=>'api_report','params'=>['endpoint_key'=>'tratamiento_top_texto_bot_dn','date_mode'=>'last_30']],
|
||||
'ciclo_tratamiento_todos' => ['type'=>'function','function'=>'api_report','params'=>['endpoint_key'=>'tratamiento_todos_dn','date_mode'=>'today','filename'=>'ciclos_tratamientos.pdf','caption'=>'Ciclos de Tratamientos — todos los lotes']],
|
||||
'ciclo_tratamiento_historico'=> ['type'=>'function','function'=>'api_report','params'=>['endpoint_key'=>'tratamiento_historico_bot_dn','date_mode'=>'last_30','filename'=>'historico_tratamientos.pdf','caption'=>'Histórico Tratamientos — últimos 30 días']],
|
||||
'ciclo_tratamiento_top' => ['type'=>'function','function'=>'api_report','nlu_description'=>'Lotes de tratamiento con ciclos más largos','params'=>['endpoint_key'=>'tratamiento_top_texto_bot_dn','date_mode'=>'last_30']],
|
||||
'ciclo_tratamiento_todos' => ['type'=>'function','function'=>'api_report','nlu_description'=>'PDF de ciclos de tratamientos todos los lotes','params'=>['endpoint_key'=>'tratamiento_todos_dn','date_mode'=>'today','filename'=>'ciclos_tratamientos.pdf','caption'=>'Ciclos de Tratamientos — todos los lotes']],
|
||||
'ciclo_tratamiento_historico'=> ['type'=>'function','function'=>'api_report','nlu_description'=>'Histórico de tratamientos últimos 30 días','params'=>['endpoint_key'=>'tratamiento_historico_bot_dn','date_mode'=>'last_30','filename'=>'historico_tratamientos.pdf','caption'=>'Histórico Tratamientos — últimos 30 días']],
|
||||
|
||||
// ciclo_mantenimiento → selección dinámica de grupo (top3 + "Otro")
|
||||
'ciclo_mantenimiento' => [
|
||||
@@ -292,6 +301,7 @@ $configJson = [
|
||||
'meta_key' => 'grupo_id',
|
||||
'next_node' => 'submenu_ciclo_mantenimiento',
|
||||
'append_options' => [['id' => 'select_grupo_mant_otros', 'title' => '➕ Otro grupo']],
|
||||
'nlu_description' => 'Ver ciclos de mantenimiento por grupo (plateo, corona, poda, etc.)',
|
||||
],
|
||||
'select_grupo_mant_otros' => [
|
||||
'type' => 'dynamic_list',
|
||||
@@ -304,19 +314,20 @@ $configJson = [
|
||||
'meta_group' => 'grupo_mant',
|
||||
'meta_key' => 'grupo_id',
|
||||
'next_node' => 'submenu_ciclo_mantenimiento',
|
||||
'nlu_skip' => true,
|
||||
],
|
||||
|
||||
// Sub-opciones: mantenimiento
|
||||
'ciclo_mantenimiento_top' => ['type'=>'function','function'=>'api_report','params'=>['endpoint_key'=>'mantenimiento_top_texto_bot_dn','date_mode'=>'today']],
|
||||
'ciclo_mantenimiento_todos' => ['type'=>'function','function'=>'api_report','params'=>['endpoint_key'=>'mantenimiento_todos_bot_dn','date_mode'=>'today','filename'=>'mantenimiento_todos.pdf','caption'=>'Mantenimiento — todos los lotes']],
|
||||
'ciclo_mantenimiento_top' => ['type'=>'function','function'=>'api_report','nlu_description'=>'Lotes de mantenimiento con ciclos más largos (texto)','params'=>['endpoint_key'=>'mantenimiento_top_texto_bot_dn','date_mode'=>'today']],
|
||||
'ciclo_mantenimiento_todos' => ['type'=>'function','function'=>'api_report','nlu_description'=>'PDF de mantenimiento todos los lotes del grupo seleccionado','params'=>['endpoint_key'=>'mantenimiento_todos_bot_dn','date_mode'=>'today','filename'=>'mantenimiento_todos.pdf','caption'=>'Mantenimiento — todos los lotes']],
|
||||
|
||||
// Upload
|
||||
'enviar_informacion' => ['type' => 'menu', 'menu' => 'submenu_subir_ciclos'],
|
||||
'subir_ciclo_cosecha' => ['type' => 'function', 'function' => 'upload_ciclo', 'params' => ['ciclo' => 'cosecha']],
|
||||
'enviar_informacion' => ['type' => 'menu', 'menu' => 'submenu_subir_ciclos', 'nlu_skip' => true],
|
||||
'subir_ciclo_cosecha' => ['type' => 'function', 'function' => 'upload_ciclo', 'nlu_description' => 'Subir o enviar un ciclo de cosecha', 'params' => ['ciclo' => 'cosecha']],
|
||||
|
||||
// Alias globales
|
||||
'show_main_menu' => ['type' => 'menu', 'menu' => 'show_menu_cat2'],
|
||||
'descargar_informes' => ['type' => 'menu', 'menu' => 'show_menu_cat2'],
|
||||
// Alias globales (nlu_skip: son alias de navegación)
|
||||
'show_main_menu' => ['type' => 'menu', 'menu' => 'show_menu_cat2', 'nlu_skip' => true],
|
||||
'descargar_informes' => ['type' => 'menu', 'menu' => 'show_menu_cat2', 'nlu_skip' => true],
|
||||
],
|
||||
|
||||
// ── Per-type config ─────────────────────────────────────────────────────
|
||||
@@ -357,7 +368,7 @@ $configJson = [
|
||||
'2' => [
|
||||
'greeting_flow' => 'ask_finca',
|
||||
'fallback_flow' => 'show_menu_cat2',
|
||||
'greeting' => null,
|
||||
'greeting' => '',
|
||||
'fallback' => null,
|
||||
'commands' => ['menu' => 'show_menu_cat2'],
|
||||
'menus' => [
|
||||
@@ -390,7 +401,7 @@ $configJson = [
|
||||
'3' => [
|
||||
'greeting_flow' => 'ask_finca',
|
||||
'fallback_flow' => 'show_main_menu',
|
||||
'greeting' => null,
|
||||
'greeting' => '',
|
||||
'fallback' => null,
|
||||
'commands' => ['menu' => 'show_main_menu'],
|
||||
'menus' => [],
|
||||
|
||||
Reference in New Issue
Block a user