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