Entorno de desarrollo visual de conversaciones telefónicas
Descripción del proyecto
Proyecto que desarrollé en C# usando el entorno de IDE OpenSource SharpDevelop
El objetivo era crear entorno de desarrollo para programar de forma visual aplicaciones teléfonicas que siguieran el flujo de posibles conversaciones de los usuarios (para call-centers)
Partes de proyecto
Los puntos críticos para desarrollar esta aplicación desde cero fueron
los siguientes.
Diseño de una Interfaz amigable
Decidí crear una interfaz muy típica de entornos de desarrollo con:
- paneles acoplables por el usuario
- barra de herramientas
- menú de acciones
- área de trabajo
Área de trabajo
Tal vez la más complicada ya que tuve que programar el comportamiento de los bloques que se arrastraban a este área, calcular cómo se dibujaría cada elemento y calcular cómo se colocarían las flechas que unen los bloques para formar un flujo de conversación
Subrutinas y Variables
Para facilitar la programación de la conversación, el programa también era capaz de generar subrutinas o bloques personalizados que a su vez contenían otros flujos internos. Una especie de programación orientada a objetos.
Y un sistema de variables del sistema o personalizables por el usuario añadiendo un intérprete de JavaScript para poder realizar funciones más complejas
Motor de ejecución
Era el corazón de la aplicación donde se tenía que interpretar el flujo compuesto por todos los bloque emplazados por el usuario y realizar las acciones correspondientes.
También integraba un Text-to-Speech para poder hablar al usuario y/o repetir entradas de números que el usuario tecleaba en su teléfono.
Todo ello con una gestión interna para avisar al usuario de posibles errores.
Resumen
Fue un proyecto muy interesante que requería la unión de muchos conocimientos técnicos:
- Gran capacidad de análisis de los requisitos del cliente
- Estructurar correctamente el proyecto
- Idear un diseño bonito pero a la vez usable de la aplicación
- Organizar la estructura interna del proyecto en módulos
- Programar cada módulo para que conseguir el resultado final