Sincronización CRM on Demand con Skype

Página creada Laine Mogaburu
 
SEGUIR LEYENDO
Sincronización CRM on Demand con Skype
Sincronización CRM on Demand con Skype

  TITULACIÓN: Ingeniería Técnica en Informática de Sistemas.

                                           AUTOR: Jordi Rodríguez Montilla
                                            DIRECTOR: Pere Millán Marco
                                                FECHA: Septiembre 2012
Sincronización CRM on Demand con Skype
Jordi Rodríguez Montilla            PFC: Sincronización CRM On Demand Con Skype

ÍNDICE

1 – DESCRIPCIÓN DE LA EMPRESA,.…………………………………………………3

2 – UBICACIÓN DENTRO DE LA EMPRESA..………………………………………...4

3 – DESCRPCIÓN DE LA FAENA REALIZADA……………………………………….5

      3.1 – OBJETIVOS DEL PROYECTO..……………………………………………5

      3.2 – ESPECIFICACIONES DEL PROYECTO………………………………….6
             Especificaciones del hardware y el sistema operativo.
             Entorno de programación utilizado.
             Librería Skype.
             Consumos de servicios Crm On Demand.
             Llamada Skype desde Crm On Demand.
             Parámetros de configuración.
             Generación ejecutable.

      3.3 – DISEÑO..……………………………………………………………………….15
             Localización y configuración.
             Funcionamiento de la aplicación.
             Llamadas perdidas.
             Llamadas rechazadas.
             Llamadas erróneas.
             Llamadas aceptadas.

      3.4 - DESARROLLO………………………………………………………………...22

      3.5 – EVALUACIÓN..……………………………………………………………….32

      3.6- RECURSOS UTILIZADOS……………………………………………………34

      3.7 – MANUALES..………………………………………………………………….35
             Funcionamiento.
             Instalación de la aplicación.

4 – APORTACIONES A MIS CONOCIMIENTOS..………………………………………37

5 - APORTACIONES DE LOS ESTUDIOS REALIZADOS AL PROYECTO..........…...38

6 – CONCLUSIONES………………………………………………………………………..39

                                                                       Página 2
Sincronización CRM on Demand con Skype
Jordi Rodríguez Montilla                        PFC: Sincronización CRM On Demand Con Skype

1 - Descripción de la empresa.

       Trabajo en Qualita Solutions and Consulting, cuya actividad principal es la de ofrecer
soluciones para mejorar la gestión y el estudio de su negocio. Las soluciones con las que trabajamos
son de Oracle.

   Para mejorar la gestión del negocio utilizamos las siguientes aplicaciones:

   1- Oracle JD Edwards, que es un planificador de recursos empresariales. Contiene diferentes
      módulos, como puede ser finanzas, recursos humanos, producción, distribución, entre otros.

   2- Oracle CRM On Demand es la aplicación para captar clientes y realizar su seguimiento. Su
      gran baza es que está instalado en los servidores de Oracle y se paga por el consumo que
      realizamos sobre él.

   3- Oracle Obiee. Es la herramienta de Business Intelligence de Oracle en la que se realizarán
      todos los análisis de mercado.

  En Qualita llevamos a cabo tanto la instalación de las aplicaciones, como su parametrización,
módulos personalizados e incluso aplicaciones de soporte.

                                                                                          Página 3
Sincronización CRM on Demand con Skype
Jordi Rodríguez Montilla                         PFC: Sincronización CRM On Demand Con Skype

2 - UBICACIÓN DENTRO DE LA EMPRESA.

        Dentro de la empresa, desarrollo las tareas de consultor técnico. Mis tareas principales son
analizar y desarrollar aplicaciones. Estas aplicaciones pueden consistir en una simple carga de datos
hasta una aplicación de Windows mobile para realizar el packing de una empresa. También realizo
instalaciones de Servidores y aplicaciones, cargas de datos a la aplicación Business Intelligence
mediante ETL o PL/SQL.

        La empresa se compone por los socios, que tienen un rol de toma de decisiones y venta del
producto; finanzas, que se encarga de cobrar las facturas; el departamento de márketing, que realiza
la estrategia para que todo brille; consultores funcionales especializados en diferentes módulos de la
aplicación y los consultores técnicos que realizan el desarrollo de las aplicaciones y su puesta en
marcha.

       El seguimiento del proyecto lo ha realizado Marc Solá, jefe de consultoría. Él se ha
encargado de la parte de funcionalidad de la aplicación y yo he llevado a cabo todo el desarrollo.

                                          Dirección

           Consultor-
                                            Finanzas                      Márketing
              ía

                                                                                            Página 4
Sincronización CRM on Demand con Skype
Jordi Rodríguez Montilla                        PFC: Sincronización CRM On Demand Con Skype

3 – DESCRIPCIÓN DEL TRABAJO REALIZADO.

3.1 - OBJETIVOS DEL PROYECTO.

        El objetivo del proyecto es realizar una comunicación entre un aplicativo VOIP que tiene la
utilidad de poder realizar llamadas sobre ip y la aplicación de relación con el cliente CRM On
Demand de Oracle. Para realizar el proyecto tenía que escoger un servicio de VOIP que no
requiriese una instalación de hardware. Entre Google Talk, Voip Buster y Skype, elegí Skype, ya
que es uno de los sistemas de VOIP más utilizados, con buenos precios y tenía una librería para
poder realizar su integración.

        La aplicación Crm On Demand de Oracle es una herramienta cuya principal utilidad es la de
tener una relación con los clientes. Una forma de dar una mayor respuesta en nuestro negocio es
poder tener un contacto directo con ellos. La base del Crm On Demand de Oracle no tiene un
sistema de integración entre el cliente y un sistema de VOIP. Por lo tanto, en Qualita apostamos por
realizar una aplicación de comunicación.

       La aplicación supondrá un beneficio para el comercial ya que tendrá automatizado todo el
proceso de llamadas y para tener un mayor control sobre él, ya que tendremos controladas las
posibles pérdidas de llamadas.

                                                                                          Página 5
Sincronización CRM on Demand con Skype
Jordi Rodríguez Montilla                        PFC: Sincronización CRM On Demand Con Skype

3.2 - ESPECIFICACIONES DEL PROYECTO.

     Hemos desarrollado una aplicación permanente de escucha entre Skype y la aplicación Crm
On Demand de Oracle, que se iniciará automáticamente al iniciar nuestra sesión.

       Nuestra aplicación estará todo el rato escuchando las acciones de Skype. Nosotros hemos
controlado las llamadas perdidas, rechazadas, fallidas y aceptadas.

       Realizarán las siguientes acciones:

       1- Llamada recibida/enviada perdida: Cada vez que se realice o se reciba una llamada
          perdida, ésta se grabará en el Crm On Demand como una actividad finalizada con el
          asunto “llamada perdida” y obtendremos un mensaje con lo ocurrido.
       2- Llamada recibida/enviada rechazada: Si colgamos a un cliente o éste nos cuelga a
          nosotros se grabará como una actividad finalizada con el asunto “llamada rechazada” y
          obtendremos un mensaje con lo ocurrido.
       3- Llamada enviada fallida. Si se produce algún problema al intentar realizar la llamada o
          al recibirla, ésta se grabará como una actividad finalizada con el asunto “llamada fallida”
          y obtendremos un mensaje con lo ocurrido.
       4- Llamada recibida/enviada aceptada. Si aceptamos o nos aceptan una llamada, nuestra
          aplicación la detectará y se abrirá un formulario con el nombre “cliente” para una mejor
          atención, y un campo de texto dónde introduciremos el motivo de la llamada. Una vez
          realizamos el registro de la llamada, ésta la podemos guardar como una actividad
          finalizada en el contacto o en la oportunidad

        Una vez explicado el funcionamiento de la aplicación, cabe destacar que hemos creado un
formulario dentro de nuestra aplicación en .NET para poder modificar los parámetros de conexión
en el consumo de servicios. Éstos se componen de servidor, usuario y contraseña. Estos parámetros
de configuración se guardarán en un fichero xml. Para conservar nuestra privacidad hemos
realizado una encriptación de nuestra contraseña.

ESPECIFICACIONES DEL HARDWARE Y EL SISTEMA OPERATIVO.

       Para realizar el proyecto he utilizado la herramienta de desarrollo Microsoft Visual Studio
2010. Los sistemas operativos que soporta son los siguientes:

       Windows XP (x86) con Service Pack 3, todas las ediciones excepto Starter Edition.
       Windows Vista (x86 y x64) con Service Pack 2, todas las ediciones excepto Starter Edition.
       Windows 7 (x86 y x64).
       Windows Server 2003 (x86 y x64) con Service Pack 2.
       Windows Server 2003 R2 (x86 y x64) todas las ediciones.
       Windows Server 2008 (x86 y x64) con Service Pack 2, todas las ediciones.
       Windows Server 2008 R2 (x64), todas las ediciones.

Las arquitecturas soportadas:

       32 bits (x86)
       64 bits (x64)

                                                                                           Página 6
Sincronización CRM on Demand con Skype
Jordi Rodríguez Montilla                         PFC: Sincronización CRM On Demand Con Skype

Y el hardware soportado:

       Equipo con un procesador a 1,6 GHz o más rápido.
       1024 MB de RAM (1,5 GB si se ejecuta en una máquina virtual).
       3 GB de espacio disponible en el disco duro.
       Unidad de disco duro de 5400 rpm.
       Tarjeta de vídeo compatible con DirectX 9 con una resolución de pantalla de 1024 x 768 o
       superior.

ENTORNOS DE PROGRAMACIÓN DISPONIBLES.

       Los lenguajes de programación que teníamos disponibles eran Php , C# y Visual Basic.
Realizarlo con Php no era posible a causa de que el Php es un lenguaje que se ejecuta en el servidor
y no en nuestro ordenador. Por lo tanto, no podríamos realizar la escucha de nuestro Skype.
Entonces, el entorno de programación escogido fue .NET con el lenguaje C#, que es un lenguaje
orientado a objetos.

LIBRERÍA SKYPE.

      La librería Skype4com está realizada para poder desarrollar aplicaciones de comunicación
con Skype.

       Para realizar nuestra aplicación hemos instalado en nuestro ordenador la herramienta de
desarrollo Microsoft Visual Studio 2010. Nos permitirá realizar una aplicación de escritorio para los
sistemas operativos Windows.

        Para obtener la librería Skype, nos tendremos que dar de alta como desarrollador de Skype.
Una vez dado de alta, tendremos derecho a descargarnos la librería Skype. Ahora procederemos a
incluirla en nuestro proyecto añadiéndola como una referencia.

                                                                                           Página 7
Sincronización CRM on Demand con Skype
Jordi Rodríguez Montilla                        PFC: Sincronización CRM On Demand Con Skype

ACTIVAR EL EVENTO DE ESCUCHA DE SKYPE.

        Para poder realizar la escucha permanente de Skype en nuestra aplicación, tendremos que
activar un evento Skype de escucha al iniciarse la aplicación, de la siguiente manera:

cSkype = new SkypeClass();
((_ISkypeEvents_Event)cSkype).CallStatus += Skype_CallStatus;
cSkype.Attach(8, false);

Cada vez que se detecte una acción en el Skype se detectará en la siguiente función:

private static void Skype_CallStatus(SKYPE4COMLib.Call aCall, TCallStatus aStatus)
{
}

       Para saber en todo momento lo que está sucediendo en nuestras escuchas, lo realizaremos
con la variable de entrada del tipo CallStatus. Cada vez que entre en nuestra función de escuchas,
ésta nos dirá lo que está sucediendo, nosotros sólo capturaremos las llamadas fallidas, rechazadas,
perdidas y aceptadas.

switch (aStatus)
{
       case TCallStatus.clsInProgress:
       case TCallStatus.clsMissed:
       case TCallStatus.clsFailed:
       case TCallStatus.clsRefused:
}

Para identificar si la llamada es enviada o recibida, lo detectaremos con TCallStatus.clsRouting que
nos indicará que la llamada es enviada.

CONSUMOS DE SERVICIOS CRM ON DEMAND.

Obtener la estructura de datos para realizar la conexión.

      Para obtener un servicio en Crm On Demand necesitaremos conectarnos al Crm On Demand
como administrador. Vamos a administración de servicios web y escogeremos el objeto que
queremos trabajar para descargarlo.

                                                                                          Página 8
Sincronización CRM on Demand con Skype
Jordi Rodríguez Montilla                      PFC: Sincronización CRM On Demand Con Skype

Una vez descargado, procederemos a introducirlo en nuestra aplicación .net añadiéndolo como una
Web Reference.

       De esta manera obtendremos la estructura para poder interactuar con el objeto Contact de
nuestro Crm On Demand.

                                                                                       Página 9
Sincronización CRM on Demand con Skype
Jordi Rodríguez Montilla                        PFC: Sincronización CRM On Demand Con Skype

       Una vez obtenida la estructura para poder acceder al objeto contacto, lo que realizaremos
será una conexión al Crm On Demand.

Realizar la autentificación al Crm On Demand.

        Para poder realizar la conexión nos tendremos que autentificar indicando Servidor, usuario y
contraseña. Al autentificarnos nos dará un id de sesión, que utilizaremos cada vez que queramos
realizar una consulta al servicio. El id obtenido sólo estará operativo durante 20 minutos por
motivos de seguridad.

LLAMADAS SKYPE DESDE CRM ON DEMAND.

        Para poder realizar la llamada del Crm On Demand al Skype he creado dos campos de tipo
enlace web, que redireccionarán a una página web con una función JavaScript, que llamará a
nuestro contacto, y uno de tipo texto breve, que contendrá la dirección del Skype al que queremos
llamar.

                                                                                         Página 10
Jordi Rodríguez Montilla                        PFC: Sincronización CRM On Demand Con Skype

      Para poder agregar campos dentro del Crm, tendremos que llevar a cabo los siguientes pasos:

   1- Iremos a administrador, personalización de aplicaciones, configuración de registros del
      objeto contacto, configuración del campo contacto y agregaremos un nuevo campo.

   2- Al agregar los campos, tendremos que escoger un nombre para mostrar y el tipo de campo,
      tal y como se muestra en la imagen siguiente.

   3- Una vez creados los campos, tendremos que insertarlos en el formulario del objeto contacto.
      Para ello, es necesario ir a diseño de la página contacto, crear un nuevo diseño e insertar los
      campos en su sitio correspondiente, como se muestra en la siguiente imagen.

                                                                                          Página 11
Jordi Rodríguez Montilla                         PFC: Sincronización CRM On Demand Con Skype

    4- Una vez diseñada, para poder visualizarla, tendremos que asignarle un rol. Para ello, iremos
       a administración de roles y la pondremos en el rol de las personas que utilicen la aplicación.

        Una vez insertados los campos, realizaremos la redirección en los campos tipo enlace web.
Para ello, tendremos que ir a editarlos y pasar por parámetros la dirección de Skype o el teléfono y
el id, ya que una vez llamado a Skype volveremos al formulario de contactos. Un ejemplo de cómo
personalizar un enlace web:

       Una vez creado el enlace web, crearemos nuestra función para realizar la llamada Skype. La
función recibirá los parámetros nombre Skype o número de teléfono y el id para volver a nuestro
formulario de contacto. Para realizar las llamadas a skype, se realizan de la siguiente manera:

· Para el teléfono:

window.location.href = "callto://+" + call;

· Y para el nombre Skype:

window.location.href = "skype:" + skype + "?call";
                                                                                          Página 12
Jordi Rodríguez Montilla                        PFC: Sincronización CRM On Demand Con Skype

      Para poder volver al formulario de contactos, tenemos una dirección url donde sólo le tene-
mos que indicar el id del contacto. Un ejemplo es el siguiente:

top.location.href="https://secure-
vmsomxl-
ma.crmondemand.com/OnDemand/user/ContactDetail?OMTGT=ContactDetailForm&OMTHD=C
ontactDetailNav&OCTYPE=&ContactDetailForm.Id=" + id;

GENERACIÓN EJECUTABLE.

       Para obtener el ejecutable que nos permitirá instalar nuestra aplicación de call center en los
ordenadores, tenemos que generar un ejecutable. Para ello, crearemos un nuevo proyecto de tipo
Setup Project:

Una vez creado, tendremos un menú a la izquierda donde podremos configurar nuestras propiedades,
como el autor, la empresa que ha realizado el proyecto e incluso si lo queremos para plataformas de
32 o 64 bits.

                                                                                          Página 13
Jordi Rodríguez Montilla                       PFC: Sincronización CRM On Demand Con Skype

       Una vez configurados nuestros parámetros, procederemos a introducir nuestro proyecto en la
carpeta de configuración. Escogeremos el Primary output, que es nuestro proyecto por defecto.

       Una vez insertado el proyecto, procederemos a introducir la librería de Skype4COM.lib, el
xml de configuración y el icono de nuestra aplicación. Nos quedará de la siguiente manera:

      Éstos serían los parámetros mínimos para generar nuestro ejecutable. También podemos
conseguir que se cree un menú de programa e incluso un acceso directo al escritorio.

                                                                                      Página 14
Jordi Rodríguez Montilla                       PFC: Sincronización CRM On Demand Con Skype

        Una vez realizada toda la configuración, procederemos a ejecutar nuestro proyecto de tipo
setup. Éste nos generará el ejecutable de instalación.

                                                                                      Página 15
Jordi Rodríguez Montilla                      PFC: Sincronización CRM On Demand Con Skype

3.3 - DISEÑO.

       Nuestra aplicación se iniciará al encenderse el ordenador. La tendremos localizada en la
barra de herramientas con un icono verde que tiene dibujado un teléfono verde.

       Si nos posicionamos sobre él y apretamos al botón derecho, se mostrará un menú con la
opción de configurar. Si apretamos sobre ella, se nos abrirá un formulario donde podremos
configurar el servidor, nombre de usuario y contraseña.

     Una vez configurado nuestro usuario, estaremos conectados a Skype con el Crm On
Demand.

FUNCIONAMIENTO DE LA APLICACIÓN.

       A continuación explicaré caso por caso todo el funcionamiento de las llamadas recibidas y
enviadas que realiza nuestra aplicación para comunicarse con Skype.

                                                                                      Página 16
Jordi Rodríguez Montilla                        PFC: Sincronización CRM On Demand Con Skype

LLAMADA RECIBIDA/ENVIADA ERRÓNEA.

       Si al enviar o recibir una llamada se produce algún error, se grabará como una actividad
dentro del contacto, con el asunto y descripción de llamada errónea.

LLAMADA ENVIADA RECHAZADA O PERDIDA.

        Si realizamos una llamada a un contacto desde Skype y éste nos rechaza o no nos contesta la
llamada, se mostrará un mensaje de llamada rechazada y se grabará dentro del contacto como una
actividad del tipo llamada, con el asunto “llamada enviada rechazada”.

                                                                                        Página 17
Jordi Rodríguez Montilla                      PFC: Sincronización CRM On Demand Con Skype

LLAMADA RECIBIDA RECHAZADA.

       Este apartado es importante para saber el seguimiento que tiene el usuario con nuestros
contactos. Si recibimos una llamada de un contacto dentro de nuestro Crm On Demand y lo
rechazamos, se grabará dentro del contacto como una actividad con el asunto “llamada rechazada”.

                                                                                      Página 18
Jordi Rodríguez Montilla                         PFC: Sincronización CRM On Demand Con Skype

LLAMADA RECIBIDA ACEPTADA.

       Al recibir una llamada de un contacto dado de alta en el Crm On Demand, se abrirá un
formulario con el nombre de la persona a la que pertenece y la compañía en la que opera. Mientras
atiendo su llamada, puedo poner el motivo de la llamada. Una vez finalizada la conversación,
guardaré todos los datos y éstos se guardarán como una Actividad finalizada del tipo llamada,
dentro del contacto o en la oportunidad del contacto, el asunto y la descripción que hemos escrito, la
hora de inicio y de fin.

                                                                                           Página 19
Jordi Rodríguez Montilla                      PFC: Sincronización CRM On Demand Con Skype

LLAMADA ENVIADA ACEPTADA.

        Al realizar una llamada a un contacto de nuestro Crm On Demand y que éste la acepte,
automáticamente tendremos abierto un formulario con el nombre de la persona a la que pertenece y
la compañía en la que trabaja. Una vez atendida la llamada, pondremos el motivo de nuestra
llamada y la guardaremos en nuestro Crm On Demand. Éstos se guardarán como una actividad del
tipo llamada, dentro del contacto llamado, o en una de las oportunidades.

                                                                                     Página 20
Jordi Rodríguez Montilla                          PFC: Sincronización CRM On Demand Con Skype

LLAMADA RECIBIDA PERDIDA.

        Otro punto para observar la eficiencia del trabajador en las respuestas con los contactos: si al
recibir una llamada no la aceptamos, ésta se grabará en el contacto de nuestro Crm On Demand,
como una actividad del tipo llamada, con el asunto “llamada recibida perdida”.

                                                                                             Página 21
Jordi Rodríguez Montilla   PFC: Sincronización CRM On Demand Con Skype

                                                             Página 22
Jordi Rodríguez Montilla                         PFC: Sincronización CRM On Demand Con Skype

3.4 - DESARROLLO

        Para desarrollar nuestro proyecto, he intentado realizar una estructuración en cuanto
a estructura de datos, acceso a los objetos (ya sean procedentes de un servicio web o de un xml),
encriptación y formularios. Para la parte de objetos en un formulario, como puede ser un textBox o
la definición de las variables, también he utilizado una nomenclatura.

La estructura de la aplicación es la siguiente

       A continuación pasaré a explicar la estructuración del proyecto.

ESTRUCTURA DE DATOS (Ed)

        Dentro de la definición de estructura de datos sólo he definido una, la estructura de datos de
constantes, que contendrá el nombre del servidor, el usuario y la contraseña. Sólo he realizado una
estructura de datos, ya que al crear la referencia web ya tengo definida toda la estructura del
contacto.

FORMULARIOS

       Tenemos definidos tres formularios: el formulario principal, el de configuración y el de
llamada aceptada.

                                                                                           Página 23
Jordi Rodríguez Montilla                         PFC: Sincronización CRM On Demand Con Skype

Formulario principal

        Al ser una aplicación en .NET del tipo forms, el formulario principal será donde cargaremos
toda la aplicación. Al iniciar la aplicación, se iniciará el programa en la barra de herramientas, con
el icono y el botón de configuración. A continuación, pasaremos a leer el fichero de configuración
que contendrá las variables de servidor, usuario y contraseña. Para finalizar, iniciaremos el evento
de escucha de Skype.

            private void fCallCenter_Load(object sender, EventArgs e)
        {
              try
              {
                ContextMenu.MenuItems.Add("Configurar", new EventHand-
ler(this.bConfigurar_Click));
                ContextMenu.MenuItems[0].DefaultItem = true;

                    nApp.Icon = new Icon("callll.ico");
                    nApp.ContextMenu = this.ContextMenu;
                    nApp.Text = "Configurar";
                    nApp.Visible = true;

                    constantes = Xml.CargarConfiguracion();

                    cSkype = new SkypeClass();
                    ((_ISkypeEvents_Event)cSkype).CallStatus += Skype_CallStatus;
                    cSkype.Attach(8, false);
              }
              catch { }
        }

Ahora pasaremos a explicar la escucha del evento Skype. Cada vez que se detecte un evento de
Skype, entraremos en la función Skype_CallStatus. En esta función lo que realizaremos es la
escucha de Skype. Nosotros detectaremos los casos de si es llamada enviada, aceptada, perdida,
errónea y rechazada. Dependiendo del tipo de llamada, inicializaremos nuestros objetos y
enviaremos a dar de alta en el Crm On Demand como una actividad en los casos de llamada fallida,
errónea o rechazada y en el caso de llamada aceptada abriremos el formulario correspondiente con
el objeto inicializado.

private static void Skype_CallStatus(SKYPE4COMLib.Call aCall, TCallStatus aStatus)
        {
            try
            {
                Contact.ContactData contact;
                Contact.ActivityData activity = new Contact.ActivityData();
                string sSkype = aCall.PartnerHandle;
                string sSubj = "";
                bool btlf = false;

                    Regex regexNumeros = new Regex("[0-9]");
                    if (regexNumeros.IsMatch(sSkype.ToString()))
                        btlf = true;

                    switch (aStatus)
                    {
                        case TCallStatus.clsInProgress:
                            fDescription fDesc = new fDescription();
                            if (bEnviada == false)
                                sSubj = "Llamada Recibida Aceptada.";
                            else

                                                                                           Página 24
Jordi Rodríguez Montilla                     PFC: Sincronización CRM On Demand Con Skype

                             sSubj = "Llamada Enviada Aceptada.";
                         fDesc.LoadDescription(sSkype, sSubj, btlf);
                         fDesc.Show();
                         bEnviada = false;
                         break;
                     case TCallStatus.clsMissed:
                         if (btlf == false)
                             contact = Crm.GetUser(sSkype, "");
                         else
                             contact = Crm.GetUser("", sSkype);
                         activity.OwnerId = contact.OwnedById;
                         activity.Activity = "Cita";
                         activity.Status = "Completado";
                         activity.Type = "Llamada";
                         if (bEnviada == false)
                             sSubj = "Llamada Recibida Perdida.";
                         else
                             sSubj = "Llamada Enviada Perdida.";
                         activity.Subject = sSubj;
                         activity.Description = sSubj;
                         Crm.SetCall(activity, contact);
                         bEnviada = false;
                         nApp.ShowBalloonTip(500, "Llamada Perdida.", "Llamada Perdida.",
ToolTipIcon.Info);
                         break;
                     case TCallStatus.clsFailed:
                         if (btlf == false)
                             contact = Crm.GetUser(sSkype, "");
                         else
                             contact = Crm.GetUser("", sSkype);
                         activity.OwnerId = contact.OwnedById;
                         activity.Activity = "Cita";
                         activity.Status = "Completado";
                         activity.Type = "Llamada";
                         if (bEnviada == false)
                             sSubj = "Llamada Recibida Fallida.";
                         else
                             sSubj = "Llamada Enviada Fallida.";
                         activity.Subject = sSubj;
                         activity.Description = sSubj;
                         Crm.SetCall(activity, contact);
                         bEnviada = false;
                         nApp.ShowBalloonTip(500, "Llamada Fallida.", "Llamada Fallida.",
ToolTipIcon.Info);
                         break;
                     case TCallStatus.clsRefused:
                         if (btlf == false)
                             contact = Crm.GetUser(sSkype, "");
                         else
                             contact = Crm.GetUser("", sSkype);
                         activity.OwnerId = contact.OwnedById;
                         activity.Activity = "Cita";
                         activity.Status = "Completado";
                         activity.Type = "Llamada";
                         if (bEnviada == false)
                             sSubj = "Llamada Recibida Rechazada.";
                         else
                             sSubj = "Llamada Enviada Rechazada.";
                         activity.Subject = sSubj;
                         activity.Description = sSubj;
                         Crm.SetCall(activity, contact);
                         bEnviada = false;

                                                                                   Página 25
Jordi Rodríguez Montilla                       PFC: Sincronización CRM On Demand Con Skype

                         nApp.ShowBalloonTip(500, "Llamada Rechazada.", "Llamada Rechazada.",
ToolTipIcon.Info);
                         break;
                     case TCallStatus.clsRouting:
                         bEnviada = true;
                         break;
                     default:
                         break;
                }
            }
            catch { }
        }

Formulario de configuración

       El formulario de configuración es donde podremos modificar los siguientes parámetros del
Crm On Demand: nombre del servidor, usuario y contraseña del usuario. Al formulario podremos
acceder situándonos en la barra de herramientas, buscando el icono de nuestra aplicación, pulsando
botón derecho y accediendo a configuración.

       Una vez accedamos, se nos abrirá un formulario donde se cargarán los parámetros de
servidor, usuario y contraseña que contiene el formulario Xml y saldremos del formulario.

        public fConfiguration()
        {
            InitializeComponent();
            try
            {

                                                                                       Página 26
Jordi Rodríguez Montilla                        PFC: Sincronización CRM On Demand Con Skype

                tServidor.Text = !string.IsNullOrEmpty(fCallCenter.constantes.Servidor) ?
fCallCenter.constantes.Servidor : "";
                tUsuario.Text = !string.IsNullOrEmpty(fCallCenter.constantes.Usuario) ?
fCallCenter.constantes.Usuario : "";
                tContransenya.Text = !string.IsNullOrEmpty(fCallCenter.constantes.Pwd) ?
fCallCenter.constantes.Pwd : "";
            }
            catch { }
        }

       Si realizamos alguna modificación al formulario y pulsamos “guardar” se modificarán los
parámetros de configuración en el fichero Xml. Para realizar la modificación, iremos a la capa ADO
(acceso de datos) y llamaremos a la función GuardarConfiguración.

        private void bAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                Xml.GuardarConfiguracion(tServidor.Text, tUsuario.Text, tContransenya.Text);
                this.Close();
            }
            catch { }
        }

       Al pulsar el botón “cancelar” saldremos del formulario sin guardar los cambios.

Formulario de llamada aceptada

        Al realizar una llamada o recibirla de un contacto que tenemos en nuestro Crm On Demand,
si la aceptan o la aceptamos, se nos abrirá el formulario para guardar la consulta. En el formulario
nos aparecerá el nombre del contacto que llama o llamamos, la compañía a la que pertenece, un
campo donde podremos poner el motivo de la llamada y finalmente el botón “guardar”, que
realizará el alta de la actividad en el Crm On Demand.

     Al apretar el botón “guardar” realizaremos el alta del Crm On Demand, que irá a la capa
ADO (acceso a datos) para realizar el alta de la activada.

                                                                                         Página 27
Jordi Rodríguez Montilla                     PFC: Sincronización CRM On Demand Con Skype

 private void bColgar_Click(object sender, EventArgs e)
        {
            Contact.ActivityData activity = new Contact.ActivityData();

            if (contact != null)
            {
                activity.OwnerId = contact.OwnedById;
                activity.Activity = "Cita";
                activity.Status = "Completado";
                activity.Type = "Llamada";
                activity.Subject = sSubj;
                activity.Description = this.rDescription.Text;
                Crm.SetCall(activity, contact);
            }
            this.Close();
        }

ACCESO A OBJETOS DE DATOS (ADO)

       En el apartado de ADO es donde accederemos a los datos Crm On Demand y al fichero xml
de configuración, tanto para consultar, modificar o insertar. Primero pasaremos a explicar las
funciones que contiene el acceso al Crm On Demand.

Acceso Crm On Demand

         En el acceso al Crm On Demand tenemos dos funciones. La SetCall es donde realizaremos
el alta en el Crm On Demand de la actividad en el contacto que corresponda.

public static void SetCall(Contact.ActivityData iActivity, Contact.ContactData iContact)
        {
            Contact.Contact lConnection = new Contact.Contact();
            Contact.ContactInsert_Input query_input = new Contact.ContactInsert_Input();
            Contact.ContactInsert_Output query_output = new Contact.ContactInsert_Output();

            Contact.ActivityData[] lActivity = new Contact.ActivityData[1];
            lActivity[0] = iActivity;

            Contact.ListOfActivityData objListaActivity = new Contact.ListOfActivityData();
            objListaActivity.Activity = lActivity;

            Contact.ContactData[] lContact = new Contact.ContactData[1];
            iContact.ListOfActivity = objListaActivity;
            lContact[0] = iContact;

            Contact.ListOfContactData objListaContact = new Contact.ListOfContactData();
            objListaContact.Contact = lContact;
            query_input.ListOfContact = objListaContact;

            Session mSession = IniciarSesion();
            lConnection.Url = mSession.GetURL();
            lConnection.CookieContainer = mSession.GetCookieContainer();
            query_output = lConnection.ContactInsert(query_input);
            mSession.Destroy();
        }

       La otra función que tenemos es la de GetUser, que a partir del nombre o el teléfono
buscaremos el contacto con el que estamos interactuando en el Skype.

                                                                                    Página 28
Jordi Rodríguez Montilla                        PFC: Sincronización CRM On Demand Con Skype

public static Contact.ContactData GetUser(String sNomSkype, String sTlfSkype)
        {
            if (!string.IsNullOrEmpty(sNomSkype) || !string.IsNullOrEmpty(sTlfSkype))
            {
                Contact.Contact lConnection = new Contact.Contact();
                Contact.ContactQueryPage_Input query_input = new Con-
tact.ContactQueryPage_Input();
                Contact.ContactQueryPage_Output query_output = new Con-
tact.ContactQueryPage_Output();

                    Contact.ContactQuery consulta = new Contact.ContactQuery();
                    consulta.Id = new Contact.queryType();
                    consulta.Id.Value = "";
                    consulta.ContactFirstName = new Contact.queryType();
                    consulta.ContactFirstName.Value = "";
                    consulta.ContactLastName = new Contact.queryType();
                    consulta.ContactLastName.Value = "";
                    consulta.AccountName = new Contact.queryType();
                    consulta.AccountName.Value = "";
                    consulta.ContactFullName = new Contact.queryType();
                    consulta.ContactFullName.Value = "";

                    if (sNomSkype != "")
                    {
                        consulta.stSkype = new Contact.queryType();
                        consulta.stSkype.Value = "='" + sNomSkype + "'";
                    }
                    else if(sTlfSkype != "")
                    {
                        consulta.CellularPhone = new Contact.queryType();
                        consulta.CellularPhone.Value = "='" + sTlfSkype + "'";
                    }
                    consulta.OwnedById = new Contact.queryType();
                    consulta.OwnedById.Value = "";

                    query_input.ListOfContact = new Contact.ListOfContactQuery();
                    query_input.ListOfContact.Contact = consulta;
                    query_input.ListOfContact.startrownum = "0";

                    Session mSession = IniciarSesion();
                    lConnection.Url = mSession.GetURL();
                    lConnection.CookieContainer = mSession.GetCookieContainer();
                    query_output = lConnection.ContactQueryPage(query_input);
                    mSession.Destroy();
                    if (query_output.ListOfContact.Contact != null)
                        return query_output.ListOfContact.Contact[0];
                    else
                        return null;
             }
             else
                    return null;
        }

Acceso Xml

        En el fichero Xml tendremos los siguientes datos: nombre de servidor, usuario y la
contraseña encriptada. Para realizar el acceso a los datos tendremos dos funciones.
CargarConfiguración es donde realizaremos la lectura del fichero y la posterior inicialización de la
clase constantes.

                                                                                         Página 29
Jordi Rodríguez Montilla                        PFC: Sincronización CRM On Demand Con Skype

        public static Constantes CargarConfiguracion()
        {
            fCallCenter.xDoc.Load("Configuracion.xml");
            fCallCenter.configuraciones = fCallCen-
ter.xDoc.GetElementsByTagName("configuraciones");
            fCallCenter.configuracion = ((XmlEle-
ment)fCallCenter.configuraciones[0]).GetElementsByTagName("configuracion");
            Constantes config = new Constantes();

             foreach (XmlElement nodo in fCallCenter.configuracion)
             {
                 config.Servidor = @nodo.GetAttribute("Server");
                 config.Usuario = @nodo.GetAttribute("Usuari");
                 config.Pwd = Crypt.Decrypt(@nodo.GetAttribute("Pwd"));
             }
             return config;
        }

       La clase GuardarConfiguración, que es la función que se llama desde el formulario de
configuración y realizaremos la modificación en el fichero Xml de los parámetros: nombre del
servidor, usuario y contraseña.

public static void GuardarConfiguracion(string sServidor, string sUsuario, string sContra-
senya)
        {
            foreach (XmlElement nodo in fCallCenter.configuracion)
            {
                nodo.SetAttribute("Server", !string.IsNullOrEmpty(sServidor) ? sServidor :
"");
                fCallCenter.constantes.Servidor = !string.IsNullOrEmpty(sServidor) ? sServi-
dor : "";
                nodo.SetAttribute("Usuari", !string.IsNullOrEmpty(sUsuario) ? sUsuario : "");
                fCallCenter.constantes.Usuario = !string.IsNullOrEmpty(sUsuario) ? sUsuario :
"";
                nodo.SetAttribute("Pwd", !string.IsNullOrEmpty(sContrasenya) ?
Crypt.Encrypt(sContrasenya) : "");
                fCallCenter.constantes.Pwd = !string.IsNullOrEmpty(sContrasenya) ? sContra-
senya : "";
            }

             fCallCenter.xDoc.Save("Configuracion.xml");
        }

SESION CRM ON DEMAND

        Para poder conectarnos al Crm On Demand necesitamos obtener un id de sesión. Cabe
destacar que, por razones de seguridad, el id de sesión sólo será operativo 20 minutos. Para obtener
el id de sesión tenemos la clase Session. Para poder realizar la conexión, crearemos una instancia de
la clase Session y especificaremos los campos de servidor, usuario y contraseña de nuestro usuario
del Crm On Demand.

       Session mSession = new Session();

       mSession.server = @fCallCenter.constantes.Servidor;
       mSession.username = @fCallCenter.constantes.Usuario;
       mSession.password = @fCallCenter.constantes.Pwd;
       mSession.Establish();

                                                                                          Página 30
Jordi Rodríguez Montilla                        PFC: Sincronización CRM On Demand Con Skype

ENCRIPTACIÓN

        Al realizar la configuración de los parámetros de acceso al Crm On Demand accedemos a
los datos a través de un fichero Xml. Este fichero contiene la contraseña de nuestro usuario de Crm
On Demand. Para que no esté visible, he procedido a realizar una encriptación de la contraseña.

       Para poder realizar la encriptación, dispongo de la función Cript(), que pasaremos por pará-
metro la contraseña sin encriptar y la devolverá encriptada. Ésta función la utilizaremos cuando
realicemos la escritura de la contraseña en el Xml.

        Para desencriptar tenemos la función Decrypt(), que le pasaremos por parámetro la contra-
seña encriptada y nos la devolverá desencriptada. Esta función la utilizaremos cuando tengamos que
iniciar sesión en el Crm On Demand.

PÁGINA HTML CON JAVASCRIPT

       Para poder realizar una llamada desde mi Crm On Demand a Skype, tuve que buscar una
solución que me permitiese realizar la llamada desde la página de contactos, con las limitaciones del
Crm On Demand a la hora de realizar su personalización. Opté por poner un campo del tipo enlace
web, que realizase una llamada a una página web con una función javascript y realizase la llamada a
Skype.

       Para realizar la llamada a Skype con un número de teléfono realizamos la siguiente función:

window.location.href = "skype:" + skype + "?call";

       Y para una llamada del tipo contacto de Skype, ésta otra:

window.location.href = "callto://+" + call;

        Los parámetros de la página web son enviados por la dirección web. Una vez realizada la
llamada, se comprobará si es una llamada del tipo teléfono o nombre de Skype y, dependiendo del
tipo de llamada, se realizará la llamada a Skype.

        function SendParam() {
            try {
                var parameters = location.search.substring(3).split("&");
                var temp = parameters[0].split("=");

                 temp = parameters[0].split("=");
                 id = unescape(temp[1]);
                 temp = parameters[1].split("=");
                 call = unescape(temp[1]);
                 temp = parameters[2].split("=");
                 skype = unescape(temp[1]);
                 if (call != "")
                     CallTlfSkype(id, call);
                 else if (skype != "")
                     CallSkype(id, skype);
                 else
                     Error(id);
             }
             catch (err) { }
        }

                                                                                          Página 31
Jordi Rodríguez Montilla                    PFC: Sincronización CRM On Demand Con Skype

        function CallTlfSkype(id,call) {
            window.location.href = "callto://+" + call;
            top.location.href = "https://secure-
vmsomxlma.crmondemand.com/OnDemand/user/ContactDetail?OMTGT=ContactDetailForm&OMTHD=ContactD
etailNav&OCTYPE=&ContactDetailForm.Id=" + id;
        }

        function Error(id) {
            top.location.href = "https://secure-
vmsomxlma.crmondemand.com/OnDemand/user/ContactDetail?OMTGT=ContactDetailForm&OMTHD=ContactD
etailNav&OCTYPE=&ContactDetailForm.Id=" + id;
        }

        function CallSkype(id,skype) {
            window.location.href = "skype:" + skype + "?call";
            top.location.href = "https://secure-
vmsomxlma.crmondemand.com/OnDemand/user/ContactDetail?OMTGT=ContactDetailForm&OMTHD=ContactD
etailNav&OCTYPE=&ContactDetailForm.Id=" + id;
        }
        SendParam();

                                                                                  Página 32
Jordi Rodríguez Montilla                         PFC: Sincronización CRM On Demand Con Skype

3.5 - EVALUACIÓN

       El proyecto se ha realizado en diferentes fases, explicadas a continuación:

   1- Comunicación Crm On Demand con Skype.
   2- Más funcionalidad.
   3- Parámetros de configuración.

1- Comunicación Crm On Demand con Skype

       El Crm On Demand es una aplicación que se encuentra instalada en los servidores de Oracle.
Para averiguar si podíamos conectar el Crm On Demand con Skype, realizamos una primera versión
muy simple, que realizase una llamada desde el Crm On Demand a Skype y efectuara una alta de
una actividad en el Crm On Demand. Al no tener la opción de poder añadir un botón al Crm On
Demand que ejecute una función javascript, tuvimos que buscar otra solución para realizar una
llamada. La solución fue añadir un enlace web que llamase a una web con una función javascript,
diese de alta una actividad en el Crm On Demand y volver a la página del Crm On Demand. Una
vez realizado con éxito este apartado, fuimos a crear la aplicación de verdad.

2- Más funcionalidad

        Para añadir más funcionalidad, he creado una aplicación de escritorio tipo cliente con la
librería Skype4com para realizar la escucha.

        Para añadir la librería tuve bastantes problemas, a causa de que es una librería que contiene
advertencias y la tuve que recompilar para poder añadirla a mi proyecto. Una vez añadida, creé el
evento de escucha para Skype y observé los parámetros que devolvía para poder identificar lo que
estaba sucediendo. Una vez identificados los 5 casos bidireccionales que quería controlar:

       1-   Llamada aceptada
       2-   Llamada rechaza
       3-   Llamada perdida
       4-   Llamada errónea
       5-   Quien realiza la llamada,

fuimos a realizar la comunicación con el Crm On Demand. La primera prueba fue aceptar una
llamada, ir a consultar la persona a quien realizamos la llamada o nos realiza la llamada y abrir un
formulario para explicar la causa de la llamada. Si no encontramos a la persona dentro del
formulario, nos grabará la actividad como un error. Para realizar la prueba, arrancamos la aplicación,
nos conectamos al Crm On Demand y efectuamos la llamada. Una vez aceptada, comprobamos que
se abrió el formulario para detallar la descripción. Una vez finalizada la llamada, pondremos el
motivo de la llamada y guardaremos. Para comprobar que todo se ha realizado correctamente,
accedemos a las actividades finalizadas del contacto y observamos que el resultado ha sido
satisfactorio.

        En el siguiente test, realizaremos una llamada desde el cliente y la dejaremos sonar. Pasado
un buen rato, tendremos guardada una actividad de llamada perdida, guardada por el contacto que
ha realizado la llamada.

                                                                                          Página 33
Jordi Rodríguez Montilla                       PFC: Sincronización CRM On Demand Con Skype

        Ahora pasaremos a rechazar las llamadas, tanto las del cliente como las nuestras hacia el
cliente. Una vez realizadas las pruebas, tenemos las actividades de rechazo guardadas
satisfactoriamente.

       Para finalizar, realizaremos una llamada con el Skype del cliente apagado. Podemos
observar que la actividad guardada es del tipo errónea.

                                                                                      Página 34
Jordi Rodríguez Montilla                       PFC: Sincronización CRM On Demand Con Skype

3.6 – RECURSOS UTILIZADOS

       Para poder desarrollar una aplicación de .NET la gente de Microsoft nos facilita un enlace
donde podemos consultar toda la documentación necesaria:

http://msdn.microsoft.com/es-es/library/vstudio/dd831853%28v=vs.100%29

       Para realizar la conexión al Crm On Demand consumiendo servicios web, encontré la
información necesaria en la página oficial de Oracle:

www.oracle.es

      Para descargarme la librería de Skype y saber como funcionaba, tuve que darme de alta
como desarrollador en:

www.developer.skype.com

                                                                                      Página 35
Jordi Rodríguez Montilla                        PFC: Sincronización CRM On Demand Con Skype

3.7 - MANUALES

      En primer lugar explicaremos cómo realizamos la instalación de la aplicación en nuestro
ordenador y, posteriormente, cómo nos desenvolveremos por nuestra aplicación.

INSTALACIÓN DE LA APLICACIÓN.

       Una vez generado el ejecutable, podremos instalarlo en todos los ordenadores que cumplan
los requisitos mínimos. Si el ordenador no tiene instalado el framework correspondiente a nuestra
versión, nos pedirá si lo queremos ejecutar. Por defecto se instalará en Archivos de Programa en la
carpeta Qualita, que se creará si no lo estaba previamente.

FUNCIONAMIENTO DE LA APLICACIÓN

       La aplicación la tenemos situada en la barra de herramientas, con la apariencia de un círculo
verde con un teléfono blanco.

       Para poder configurar nuestra aplicación de comunicación entre Skype y Crm On Demand,
tendremos que ponernos encima del icono y apretar el botón secundario del ratón.

       En el formulario de configuración podremos observar los tres parámetros a configurar: el
servidor del Crm On Demand, el usuario y la contraseña. Si modificamos y no guardamos, los
cambios no se realizarán. Para que tengan validez, tenemos que guardar.

                                                                                         Página 36
Jordi Rodríguez Montilla                       PFC: Sincronización CRM On Demand Con Skype

       Una vez hemos realizado la configuración de nuestro Crm On Demand, ya podemos
empezar a utilizar nuestra aplicación. Para ello, es necesario acceder al formulario de contacto,
poner el nombre del Skype al que queremos llamar en el campo “Skype” y apretar “call” para
efectuar la llamada.

       Para poder visualizar las actividades referentes al Crm On Demand, tendremos que ir a
contactos. Dentro de contactos, al apartado de actividades finalizadas, que es donde quedan
grabadas.

                                                                                      Página 37
Jordi Rodríguez Montilla                        PFC: Sincronización CRM On Demand Con Skype

4 – APORTACIONES A MIS CONOCIMIENTOS

       Las aportaciones a mis conocimientos las explicaré a continuación:

       1-   Consumo de servicios web
       2-   Parametrización Crm On Demand
       3-   Librería Skype
       4-   .NET

1-Consumo de servicios web

       Para poder conectar con el Crm On Demand sólo teníamos una manera, y era realizando el
consumo de servicios web. Los servicios web se crearon para poder realizar una serialización y
poder obtener una comunicación con diferentes entornos remotos.

2-Parametrización Crm On Demand

        Para poder llamar a Skype tuve que realizar una parametrización del objeto contacto. Para
ello, tuve que abrirme paso con la herramienta de parametrización propia del Crm On Demand. Una
vez conseguido, tuve que crear un rol para poder visualizar mi parametrización. Éstos son muy
importantes ya que, dependiendo del rol que tengamos, podemos ver una página de contactos u otra.

3-Librería Skype

      Para tener una comunicación, tenía la librería Skype4com, una librería realizada por la gente
de Skype. Esta librería permite realizar una escucha de todas las acciones de Skype y detectar en
todo momento lo que está sucediendo.

4-.NET

        La única manera de poder comunicar con Skype realizando una aplicación Cliente era
con .NET. Tenía la opción de escoger entre Visual Basic o C#. Evidentemente, mi elección fue C#
que, a diferencia de Visual Basic, es un lenguaje orientado a objetos.

                                                                                         Página 38
Jordi Rodríguez Montilla                        PFC: Sincronización CRM On Demand Con Skype

5 – APORTACIONES DE LOS ESTUDIOS REALIZADOS AL PROYECTO

        He tenido diferentes tipos de aportaciones dentro de la carrera al proyecto, tanto a nivel de
conocimientos como a nivel de valerse por sí mismo. Ahora procederemos a explicar los diferentes
puntos.

       1-   Adaptación a un lenguaje de programación.
       2-   Metódico
       3-   Uso de librerías.
       4-   Encriptación.

1-Adaptación a un lenguaje de programación

       En la universidad tenemos la asignatura de programación, en la cual nos explican los
conceptos básicos de la programación para poder valernos por nosotros mismos. En el resto de
asignaturas, en las que hemos utilizado un lenguaje de programación diferente, nos hemos tenido
que valer por nosotros mismos. Por lo tanto, la adaptación al lenguaje C# no fue muy complicada.

2-Metódico

       Uno de los valores que nos enseñan en la universidad es a ser lo más ordenado y eficiente
posible.

3-Uso de Librerías

        Para poder realizar la comunicación con Skype, he utilizado la librería Skype4com. Es una
librería que no sé cómo la han realizado, pero sí que tengo claro lo que quiero obtener de ella, una
práctica muy utilizada en diferentes asignaturas.

4-Encriptación

       En la universidad había utilizado más de una herramienta para poder encriptar una
contraseña y poderla recuperar. El concepto ha sido el mismo.

                                                                                          Página 39
Jordi Rodríguez Montilla                         PFC: Sincronización CRM On Demand Con Skype

6 - CONCLUSIONES.

       La realización del proyecto se ha compuesto de diferentes fases que enumeraré y explicaré a
continuación.

   1-   Elegir un sistema de Voip que no requiera instalación.
   2-   Mejorar la aplicación con más funciones de actividad.
   3-   Parámetros de configuración.
   4-   Modelo de diseño.

1-Elegir un sistema de Voip que no requiera instalación

       En la empresa se quería interactuar entre una aplicación de Voip y el Crm On Demand. El
sistema de Voip tenía que cumplir el requerimiento de no tener que realizar una instalación de
hardware. La aplicación elegida fue Skype, ya que es una de las aplicaciones Voip más utilizadas:
puedes obtener un número de teléfono para que te llamen y tiene las tarifas bastante reducidas.

       Una vez elegida la aplicación, me propuse crear una primera demostración. Para ello tenía
que intentar comunicar el Skype con el Crm On Demand. El Crm On Demand es poco flexible en
cuanto a parametrización. Mi primera idea fue poner un botón en la página contactos para realizar la
llamada a Skype, pero no pude llevarlo a cabo ya que no existe esta opción. Entonces encontré la
opción de poder poner un enlace web y hacer la llamada web.

        Al realizar la llamada web llamaba a una página ASP pasando los parámetros del usuario.
Éste lo llamaba por Skype y daba de alta en el Crm On Demand, que efectuaba una llamada.

        Al realizar un primer test con éxito, se optó por hacer una implementación más extensa.

2- Mejorar la aplicación con más funciones de actividad.

       Una vez conseguida la comunicación entre Skype y el Crm On Demand buscamos la manera
de conseguir más funcionalidad en nuestra aplicación. Para ello, teníamos la librería Skype4com,
que nos permitía saber en todo momento lo que realizaba nuestro Skype. Ahora sí que teníamos una
manera de conseguir una buena comunicación entre Skype y el Crm On Demand.

       Se escogió crear una aplicación de escritorio, debido a que nuestra aplicación se tenía que
ejecutar en cliente para escuchar las acciones de Skype.

       Una vez efectuado un testeo de la librería, escogí las siguientes opciones, tanto para
llamadas enviadas como recibidas.

   1- Llamada aceptada: en ella podría saber en todo momento la persona que me llama o realizó
      la llamada y poner el motivo de la llamada.
   2- Llamada rechazada: indicaremos si hemos colgado o han colgado.
   3- Llamada perdida: detectaremos si no hemos contestado a una llamada.
   4- Llamada fallida: si se produce algún error, queda grabado.

       La verdad es que los puntos de llamada rechazada y perdida son buenos, ya que ayudan a
evaluar el compromiso de la persona que atiende las llamadas.

                                                                                         Página 40
Jordi Rodríguez Montilla                        PFC: Sincronización CRM On Demand Con Skype

       Una vez llegados a este punto, sólo veo un inconveniente, y se encuentra en el acceso del
Crm On Demand para consultar o insertar una tarea, ya que los accesos a servicios web son muy
seguros pero lentos.

3-Parámetros de configuración

        Ahora que nuestra aplicación tiene una muy buena conexión entre el Crm On Demand y
Skype, está lista para instalarse en los call Centers de la empresa. Sólo hay un inconveniente, cada
persona tiene su usuario y contraseña para el Crm On Demand. Para ello, creamos un formulario de
configuración que escribiría en un fichero Xml el usuario, la contraseña y el servidor. Una vez
realizado este paso, teníamos un problema de confidencialidad con la contraseña, y es cuando
optamos por encriptar la contraseña.

4-Modelo de diseño

        Para evitar repeticiones de código, y si hay un problema, detectar rápido dónde se encuentra
el error.

       Ésta ha sido una buena práctica. Un ejemplo claro es el de insertar una actividad. Nosotros
tenemos diferentes tipos de activad: llamada aceptada, errónea, rechazada y perdida. Pero realmente
sólo realizamos una inserción a una actividad desde la capa de acceso a datos. Al optimizar
podemos ir más rápidos, ser más limpios y detectar antes un error y, lo que es más importante, si
viene otra persona, que pueda corregir el error con facilidad.

                                                                                         Página 41
Jordi Rodríguez Montilla   PFC: Sincronización CRM On Demand Con Skype

                                                             Página 42
También puede leer