Greach 2011 - Ringio, o como hacer realidad una aplicación de telefonía con Grails

Post on 25-May-2015

1.283 views 0 download

description

Ponencia de Mamen González en Greach 2011 "Ringio, o como hacer realidad una aplicación de telefonía con Grails"

Transcript of Greach 2011 - Ringio, o como hacer realidad una aplicación de telefonía con Grails

Mamen González4 Noviembre 2011

Ringio o cómo hacer realidad una

aplicación de telefonía en Grails

ÍNDICE

1. ¿Qué es Ringio?

2. Características

3. Ringio en acción

4. Arquitectura

5. Evolución de la arquitectura: Ringio over Rayo

6. Ventajas de RoR

7. ¿Por qué Grails?

8. Conclusiones

1 - ¿Qué es Ringio?

3

Ringio es una centralita telefónica virtual, integrada con CRMs, que ayuda a las PYMES a

mejorar la calidad de atención al cliente.

2 - Características

4

- Producto SaaS en la nube

- Configurable a través de la web

- Aplicaciones para escritorio y smartphones

- Permite utilizar cualquier teléfono

- Integración con CRMs y redes sociales

- Control de llamada (Call Control) y Respuesta de Voz Interactiva (IVR)

- Evita que se pierdan llamadas: callblast

3 – Ringio en acción (1/2) – Llamada entrante

http://www.screencast.com/t/EqQz2ElaZD

3 – Ringio en acción (2/2) – Llamada saliente

http://www.screencast.com/t/dFIVFNSfpz

Ringio Clients

CRM plugins

4 – Arquitectura

7

Ringio Core

BDAPI REST

Aplicación CCXML

Servidor ejabberd

Aplicaciones cliente móvil & escritorio

Ringio Server

HTTP

XMPP

Ringio Core

BD

Ringio Server

HTTP

XMPP

Servidor ejabberd

5 – Evolución de la arquitectura: Ringio over Rayo

8

Ringio over Rayo

Ringio Core

BD

Aplicación CCXML

Ringio Server

HTTP

Servidor ejabberd

JSR 309 JSR 289

server

clientXMPP

XMPP

6 – Ventajas de RoR

9

call.answer()

call.output(‘Hello Greach!’)

call.input(ringioMainMenuInput)

call.disconnect()

call.hold()

call.mute()

outgoingCall.join()

call.isHold()

call.unMute()

call.isMute()

call.unHold()

Call controlen Groovy / Java

Abstracción de los detalles de implementación

Facilita el desarrollo y la depuración

No es necesario utilizar CCXML / VoiceXML

<transition event="personal"> <var name="srcParticipant" expr="getSourceParticipant(participants)"/> <var name="dstParticipant" expr="getDestinationParticipant(participants)"/> <if cond="srcParticipant.isBlackListed"> <dialogstart src="blackDlgPath()" type="TYPE" dialogid="blacklistedDlg" connectionid="getSrcConnId(participants)" parameters="voxeoUrls"/> <assign name="state" expr="'release'"/> <elseif cond="srcParticipant.isVIP &amp;&amp; dstParticipant.isCheckedIn"/> <dialogstart src="welcomeDlgPath()" type="TYPE" dialogid="welcomeDlg" connectionid="getSrcConnId(participants)" parameters="participants extensionSelected voxeoUrls"/> <assign name="state" expr="'waitingForUser'"/> <elseif cond="!dstParticipant.isIdle || !dstParticipant.isCheckedIn"/> <dialogstart src="userNotAvailPath()" type="TYPE" dialogid="userNotAvailableDlg" connectionid="getSrcConnId(participants)" parameters="participants voxeoUrls"/> <assign name="state" expr="'vmailorcallback'"/> <else/> <dialogstart src="welcomeDlgPath()" type="TYPE" dialogid="welcomeDlg" connectionid="getSrcConnId(participants)" parameters="participants extensionSelected voxeoUrls"/> <assign name="state" expr="'waitingForUser'"/> </if> </transition>

Flujo más legible

7 – ¿Por qué Grails? (1/5)

10

Desarrollo más ágil

• Scaffolding

• Convención sobre configuración

• Facilidades para configuración de entornos

• Se escribe menos en Groovy que en Java

7 – ¿Por qué Grails? (2/5)

11

Facilidad para crear servicios JSON

• En Ringio hacemos un uso extenso de JSON (comunicaciones con Voxeo, con aplicaciones desktop / móvil, API REST…)

• parsers y converters de Grails:

render. participant as JSONJSON.parse(response)

7 – ¿Por qué Grails? (3/5)

12

Sistema de plugins

• El plugin ringobon-base contiene el modelo de datos y los servicios básicos.

• El módulo Ringio Server está dividido en varios submódulos independientes que utilizan ese plugin.

7 – ¿Por qué Grails? (4/5)

13

Acceso a librerías Java

• Se pueden usar APIs Java

• En Ringio usamos, entre otras:

XMPP, Google Contacts, Voxeo Rayo…

7 – ¿Por qué Grails? (5/5)

14

GORM

• Facilidades para realizar consultas mediante Criteria, Dynamic finders o HQL. Ejemplos:

User.findAllByAccount(account)

Conversation.findAll()

• Facilidades para almacenar datos de auditoría (fechas de creación, actualización…)

8 – Conclusiones

15

Nuestra experiencia con Grails ha sido muy satisfactoria.

ágiles desarrollando

rápidos en la adaptación a los cambios

De ahí que en Paradigma Tecnológico se hayan implementado más proyectos en Grails

16

Q&A

17

¡¡Gracias!!@gmamenl@mpermar