🎯 Visión general
Esta guía te guía a través del diseño y modelado de unSistema de control de llamadas telefónicasutilizandoDiagramas de máquina de estado UML. Se centra en elciclo de vida de la llamada saliente, ilustrando cómo una línea telefónica cambia entre estados en respuesta a acciones del usuario y eventos de red.
El diagrama captura tanto loscaminos exitosos (configuración exitosa de la llamada) como loscaminos problemáticos (errores, tiempos de espera agotados, líneas ocupadas), enfatizando la robustez, el manejo de excepciones y las transiciones de estado claras, principios clave en los sistemas de comunicación en tiempo real.
🧩 Conceptos fundamentales en las máquinas de estado UML
Antes de adentrarte en el diagrama, comprende estos conceptos fundamentales de UML:
| Concepto | Descripción |
|---|---|
| Estado | Una condición durante la cual un objeto satisface ciertas condiciones o realiza acciones. |
| Transición | Un cambio de un estado a otro, desencadenado por un evento. |
| Evento | Una ocurrencia que provoca una transición (por ejemplo, descolgado, número válido). |
| Transición autónoma | Una transición que comienza y termina en el mismo estado (por ejemplo, dígito(n) mientras en Marcando). |
| Estado pseudo | Puntos de control especiales como Inicial o Final que no son estados reales. |
| Estado compuesto | Un estado que contiene subestados (por ejemplo, Error estado con Tono de ocupado, Tono de ocupado rápido, Mensaje grabado). |
| Condición de guarda | Una expresión booleana que debe ser verdadera para que ocurra una transición. |
✅ Consejo profesional: Utilice
evento [guarda] / acciónsintaxis en UML para documentar desencadenantes, condiciones y efectos secundarios.
🔄 Ciclo de vida de llamada saliente: Desglose paso a paso
1. Fase de iniciación y marcado
🔹 Estado pseudo inicial → Ocupado
-
El sistema comienza en el Estado pseudo inicial.
-
Aún no hay actividad; el teléfono está colgado.
🔹 Ocupado → Tonada de marcado (colgado)
-
Evento:
colgado(el usuario levanta el auricular) -
Transición:
colgado → Tonada de marcado -
Acción: Generar tonada de marcado; prepararse para la entrada de dígitos.
📌 Este es el primer cambio de estado visible en el ciclo de vida de la llamada.
🔹 Tonada de marcado → Marcando (dígito(n))
-
Evento:
dígito(n)(el usuario ingresa un dígito) -
Transición:
dígito(n) → Marcando -
Estado: Entrar
Marcandomodo.
🔹 Transición auto: Marcando → Marcando (dígito(n))
-
Evento:
dígito(n)(varios dígitos ingresados) -
Guarda: Ninguno (siempre permitido)
-
Acción: Añadir dígito al número que se está marcando.
-
Propósito: Permitir la entrada continua de dígitos sin salir del
Marcadoestado.
💡 Las transiciones autónomas son esenciales para manejar secuencias de entrada como números de teléfono.
2. Lógica de conexión y manejo de excepciones
🔹 Marcado → Conectando (númeroVálido)
-
Evento:
númeroVálido(número completo validado) -
Transición:
númeroVálido → Conectando -
Acción: Iniciar la configuración de la llamada con la red.
🔹 Marcado → Mensaje grabado (númeroInválido)
-
Evento:
númeroInválido(por ejemplo, longitud incorrecta, prefijo inválido) -
Transición:
númeroInválido → Mensaje grabado -
Acción: Reproducir mensaje grabado: “El número que marcó no está en servicio.”
🔹 Conectando → Tonada de ocupado (númeroOcupado)
-
Evento:
númeroOcupado -
Transición:
númeroOcupado → tonoOcupado -
Acción: Reproducir tono de ocupado; informar al usuario que la línea está ocupada.
🔹 Conectando → tonoRápidoOcupado (trunkBusy)
-
Evento:
trunkOcupado -
Transición:
trunkOcupado → tonoRápidoOcupado -
Acción: Reproducir tono rápido de ocupado; indicar congestión de red.
⚠️ Nota: Estos son estados de error que interrumpen el flujo normal. Deben manejarse de forma adecuada.
3. Mecanismo de tiempo de espera y advertencia
🔹 Marcando → Advertencia (tiempo de espera)
-
Evento:
tiempo de esperadespués de 30 segundos de inactividad -
Transición:
tiempo de espera → Advertencia -
Acción: Reproducir pitido de advertencia; notificar al usuario que continúe o cuelgue.
🔹 Advertencia → Tiempo de espera (tiempo de espera)
-
Evento:
tiempo de esperade nuevo después de 10 segundos -
Transición:
timeout → Tiempo de espera agotado -
Acción: Cancelar el intento de llamada; volver a
Ocupado.
⏱️ La lógica de tiempo de espera evita la espera indefinida y mejora la experiencia del usuario.
4. Llamada activa y desconexión
🔹 Conectando → Sonando (enrutado)
-
Evento:
enrutado(la red enruta correctamente la llamada) -
Transición:
enrutado → Sonando -
Acción: Enviar señal de sonido a la parte llamada.
🔹 Sonando → Conectado (la llamada fue contestada)
-
Evento:
la llamada fue contestada -
Transición:
la llamada fue contestada → Conectado -
Acción: Establecer conexión de audio; iniciar grabación de llamada (si está habilitada).
🔹 Conectado → Desconectado (colgado o la llamada finalizó)
-
Dos caminos para la desconexión:
-
El usuario cuelga:
colgado → Desconectado -
La otra parte cuelga:
calledPhoneHangsUp → Desconectado
-
🔄 Ambas transiciones conducen a
Desconectadoantes de alcanzarEstado final.
🔹 Desconectado → Estado final
-
Evento: Ninguno (implícito o mediante una acción de limpieza)
-
Transición:
Desconectado → Final -
Acción: Limpiar recursos, registrar la duración de la llamada, actualizar estadísticas.
✅ El Estado final indica el final del ciclo de vida de la llamada.
🎨 Principios de diseño visual para claridad
Para hacer que las máquinas de estado complejas sean legibles y mantenibles:
| Principio | Implementación |
|---|---|
| Camino principal feliz | Mantenga el flujo principal (Inactivo → Tonos de marcado → Marcando → Conectando → Sonando → Conectado) como una línea limpia vertical o horizontal. |
| Saque ramas hacia afuera para excepciones | Coloque los estados de error (Tonos de ocupado, Tonos de ocupado rápido, Mensaje grabado) como ramas laterales. |
| Agrupe estados relacionados | Use estados compuestos para condiciones de error (ver más abajo). |
| Use los estados pseudo con sabiduría | Inicial y Final debe marcarse claramente. |
| Evite transiciones cruzadas | Evite que las flechas se solapen; use regiones ortogonales si es necesario. |
🔧 Técnicas avanzadas de modelado
✅ Estado compuesto: Agrupación de “Error”
En lugar de listar BusyTone, FastBusyTone, y RecordedMessage como estados separados, agrúpelos bajo un estado compuesto llamado Error:
[Error]
├── BusyTone
├── FastBusyTone
└── MensajeGrabado
-
Acción de entrada: Reproduzca tono de error o mensaje.
-
Acción de salida: Volver a
DialToneoOcupadodespués de la respuesta del usuario.
✅ Beneficio:Reduce el desorden visual y mejora la escalabilidad.
✅ Condiciones de guardia (mejoras opcionales)
Agregue condiciones de guardia para refinar las transiciones:
dígito(n) [number.length < 15] → Marcando
número válido [number.isInternational] → Conectando
🛠️ Las condiciones de guardia evitan transiciones inválidas y apoyan la lógica condicional.
📌 Conclusiones clave: mejores prácticas para máquinas de estado complejas
| Práctica | ¿Por qué importa |
|---|---|
| Modelar caminos desfavorables | Los sistemas reales fallan. Diseñar para número inválido, tiempo de espera agotado, troncal ocupada garantiza la confiabilidad. |
| Use expresiones de acción | Incluya / registrarIntentoDeLlamada() o / reproducirTonada() para mostrar efectos secundarios. |
| Mantenga los eventos descriptivos y orientados a acciones | Use colgado, enrutado, el teléfono llamado respondeen lugar dee1, e2. |
| Nombra los estados claramente | EvitaEstado1, Estado2. UsaMarcando, Sonando, Conectado. |
| Documenta las suposiciones | Por ejemplo, «Tiempo de espera después de 30 segundos de inactividad» debe indicarse en los comentarios. |
💻 Generación de código: PlantUML y Mermaid
Aquí tienesbloques de código listos para usarpara generar este diagrama en el formato preferido.
✅ Código PlantUML
@startuml
[*] –> Inactivo
Inactivo –> TonosDeMarcado : descolgado
TonosDeMarcado –> Marcando : dígito(n)
Marcando –> Marcando : dígito(n) ‘ Transición auto
Marcando –> Conectando : númeroVálido
Marcando –> MensajeGrabado : númeroInválido
Marcando –> Advertencia : tiempo de espera agotado
Advertencia –> Tiempo de espera : tiempo de espera agotado
Conectando –> Sonando : redirigido
Conectando –> TonosOcupado : númeroOcupado
Conectando –> TonosOcupadoRápido : troncalOcupado
Sonando –> Conectado : teléfonoLlamadoContesta
Conectado –> Desconectado : colgado
Conectado –> Desconectado : teléfonoLlamadoCuelga
Desconectado –> [*] : limpiar
estado “Error” como ErrorState {
estado “TonosOcupado” como TonosOcupado
estado “TonosOcupadoRápido” como TonosOcupadoRápido
estado “MensajeGrabado” como MensajeGrabado
}
‘ Acciones internas
Inactivo : entrada / Esperar liberación
TonoMarcado : entrada / Reproducir tono de marcado
Marcando : entrada / Recopilar dígitos
Conectando : entrada / Enrutar llamada
Sonando : entrada / Sonar teléfono remoto
Conectado : entrada / Establecer sesión de llamada
Desconectado : entrada / Terminar sesión
@enduml
📥 Cómo usar: Pegar en PlantUML en vivo o su complemento de IDE.
✅ Código Mermaid

stateDiagram-v2
[*] --> Idle
Idle --> DialTone : offHook
DialTone --> Dialing : dígito(n)
Dialing --> Dialing : dígito(n) ' Transición auto
Dialing --> Connecting : númeroVálido
Dialing --> RecordedMessage : númeroInválido
Dialing --> Warning : tiempoAgotado
Warning --> Timeout : tiempoAgotado
Connecting --> Ringing : enrutado
Connecting --> BusyTone : númeroOcupado
Connecting --> FastBusyTone : troncalOcupado
Ringing --> Connected : teléfonoLlamadoContestó
Connected --> Disconnected : offHook
Connected --> Disconnected : teléfonoLlamadoColgó
Disconnected --> [*] : limpieza
state Error {
BusyTone
FastBusyTone
RecordedMessage
}
Connecting --> BusyTone : númeroOcupado
Connecting --> FastBusyTone : troncalOcupado
Dialing --> RecordedMessage : númeroInválido
note right of BusyTone
Reproducir tono de ocupado estándar
end note
note right of FastBusyTone
Reproducir tono de ocupado rápido (congestión de red)
end note
note right of RecordedMessage
Reproducir mensaje grabado: "Número no en servicio."
end note
note right of Timeout
Intento de llamada cancelado después de 40 segundos
end note
📥 Cómo usar: Pegue en Editor en vivo de Mermaid o herramientas de Markdown compatibles (VS Code, Obsidian, etc.).
📚 Resumen y reflexiones finales
Este Sistema de control de llamadas telefónicas máquina de estados es un ejemplo del mundo real de cómo UML puede modelar sistemas complejos y basados en eventos con alta confiabilidad.
✅ Lo que hace efectivo este diagrama:
-
Claro camino feliz con un flujo lógico.
-
Comprehensive manejo de errores.
-
Uso de transiciones auto, estados compuestos, y condiciones.
-
Claridad visual mediante agrupación y anotación.
🛠️ ¿Cuándo usar este patrón?
-
Sistemas de telefonía
-
Control de dispositivos IoT
-
Gestión de sesiones de usuario
-
Motores de flujo de trabajo
-
Sistemas embebidos con lógica de estado finito
📝 ¿Quieres ampliar esto?
Considera agregar:
-
Grabación de llamadas estado (con
iniciarGrabación,detenerGrabacióneventos) -
Reenvío de llamadas lógica (enrutamiento condicional)
-
Espera de llamadas soporte (estados paralelos)
-
Transferencia de llamadas como un subestado de
Conectado -
Historial de estado (historial superficial/profundo) para reingreso tras una interrupción
📌 Recomendación final
Modela siempre ambos caminos: éxito y fallo.
Una máquina de estados que solo maneja los «caminos felices» es incompleta y propensa a errores en producción.
Utiliza esta guía como un modelo para modelar cualquier sistema en tiempo real donde transiciones de estado, eventos, y resiliencia ante errores importa.
✅ ¿Listo para generar, visualizar o ampliar?
👉 Copie el PlantUML o Mermaid código anterior e intégrelo en su documentación, diagramas de arquitectura o documentos de diseño de sistemas.
Hágamelo saber si desea una versión PDF, diagrama interactivo, o integración en un modelo de sistema más grande (por ejemplo, con diagramas de componentes o diagramas de secuencia)!
📘 “Las mejores sistemas no son solo correctos: anticipan los fallos.”
— Diseñando con máquinas de estado UML











