Sincronización CRM on Demand con Skype
←
→
Transcripción del contenido de la página
Si su navegador no muestra la página correctamente, lea el contenido de la página a continuación
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
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
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
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
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
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
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
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
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
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