Files
whatsapp/modules/soporte/docs/tecnica/45-bot-menus-y-respuestas.md
Lizandro GuarnizoandClaude Opus 5 bc318db129 Documentación: menús y respuestas del bot, y manual de domicilios
El análisis de completitud cruzando roles contra módulos y tablas contra
documentos encontró dos huecos reales.

Manual de domicilios: recepcionista, lab_recepcion y lab_readonly tienen acceso
a la pantalla administrativa de domicilios, y la única página sobre el tema era
la del portal del enfermero, restringida a enfermeros. Son pantallas distintas
—una ve todo, la otra solo lo propio— y ahora cada una tiene su guía. Los
enfermeros pasan también a ver el manual de formularios, que su rol habilita.

Menús y respuestas automáticas del bot: había cuatro tablas en uso que ninguna
página explicaba. El bot responde solo las preguntas frecuentes mediante
autoresponses (7 configuradas) y ofrece un menú interactivo de 21 opciones en
dos niveles, todo configurable desde la base sin desplegar código. También
quedan documentados el estado de conversación, los envíos masivos y las
encuestas.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-04 12:04:27 -05:00

4.3 KiB

Menús y respuestas automáticas del bot

Buena parte de lo que responde el bot no está en el código: es contenido configurable en la base. Cambiar lo que contesta no requiere tocar PHP ni desplegar.

Respuestas automáticas

autoresponses — dispara una respuesta según lo que escriba el paciente.

Columna Para qué
trigger_type Cómo se dispara: welcome, keyword, contains
trigger_value Las palabras que la activan, separadas por coma
response_text Lo que responde
response_type text o plantilla
template_name Plantilla de Meta, si aplica
menu_id Si en vez de texto debe mostrar un menú
priority Cuál gana si varias coinciden
is_active Permite desactivar sin borrar

Tipos de disparo

Tipo Cuándo actúa
welcome Primer contacto
keyword El mensaje es una de las palabras listadas
contains El mensaje contiene el texto

keyword es más estricto que contains. Para «hola» conviene keyword — si fuera contains se dispararía dentro de cualquier frase que la incluya.

Las que están activas

Cubren saludo, precios, horarios, indicaciones previas, cotización y preparación para frotis. Son las preguntas que más se repiten, resueltas sin intervención humana.

Menús interactivos

menu_options — el árbol de opciones numeradas que el paciente recorre respondiendo con un número.

Columna Para qué
menu_id A qué menú pertenece la opción
option_number El número que marca el paciente
text Lo que se muestra
action_type Qué pasa al elegirla
action_value El destino o el texto de respuesta
is_active Permite ocultar sin borrar

Acciones

action_type Efecto
menu Abre otro menú — action_value es su identificador
end Responde con action_value y cierra
message Envía el texto y sigue en el mismo menú

La estructura actual

  main_menu (1)
   ├─ 1  Agendar toma a domicilio        end
   ├─ 2  Consultar resultados            end
   ├─ 3  Información sobre exámenes ─────► menu informacion_examenes (10)
   │                                        ├─ 1  Pruebas de embarazo      end
   │                                        ├─ 2  Prueba de paternidad     message
   │                                        ├─ 3  Pruebas de aliento       end
   │                                        ├─ 4  Orina de 24 horas        end
   │                                        ├─ 5  Solicitar cotización     end
   │                                        └─ 6  Volver ──────────────────► main_menu
   ├─ 4  Ubicación y horarios             end
   ├─ 5  Ver portafolio                   end
   ├─ 6  Convenios                        end
   └─ 7  Salir                            end

Un menú se apunta por su identificador (main_menu, informacion_examenes), no por su número de fila. Cambiar el orden no rompe los enlaces.

Estado de la conversación

user_states recuerda en qué punto quedó cada paciente: en qué menú está, si espera un dato, o si lo tomó un operador. Es lo que permite que responder «3» signifique algo.

Es la tabla más voluminosa del bot — una fila por contacto activo.

Envíos masivos

broadcast_history registra los envíos a varios destinatarios a la vez.

Fuera de la ventana de 24 horas hay que usar plantilla aprobada. Un envío masivo a contactos que no escribieron recientemente solo puede hacerse con plantilla.

Encuestas

survey_responses guarda las respuestas de satisfacción. La encuesta se envía desde el historial del turnero con la plantilla encuesta_turnero.

Al modificar el bot

  • Primero mire si alcanza con la base. Muchos cambios de comportamiento son una fila en autoresponses o menu_options, sin desplegar nada.
  • Use is_active en vez de borrar. Permite volver atrás y conserva el historial.
  • Cuide priority. Si dos respuestas coinciden, gana la de mayor prioridad; sin ella el resultado depende del orden de la consulta.
  • Verifique el árbol completo después de tocar un menú: una opción que apunta a un menú inexistente deja al paciente sin salida.