Integra Telegram y Avaya

Cuando surgió el problema comercial de crear un mecanismo de alta velocidad para notificar al usuario sobre eventos en el Contact Center (desbordamiento de colas) y un intercambio telefónico (notificación de llamadas perdidas), surgió la idea sobre Telegram.

De hecho, en esta situación, Telegram, esta es solo una de las opciones posibles. Se puede hacer por SMS. Puede hacerlo cursi por correo electrónico, y luego le llegará al usuario en un dispositivo móvil y el servidor saldrá de él. O hágalo directamente en la aplicación en su móvil para que Push se obtenga directamente de él.

Pero cada método tiene sus inconvenientes. Tienes que pagar por SMS. El correo electrónico ciega al usuario constantemente y el usuario deja de responder. Se debe hacer una aplicación separada en el teléfono para cada plataforma, instalar y organizar el registro de tokens en los servidores internos de la compañía. Una solución con Telegram no tiene estas desventajas, aunque la aplicación debería instalarse en un móvil, escritorio o en otro lugar. Sin embargo, Telegram también tiene un signo menos. Este es nuestro querido Roskomnadzor, a quien no le gusta mucho. Esto introduce algunas características adicionales de la implementación.

Entonces

Inspirado por esto y esto, me puse manos a la obra.

Para comenzar, creé un bot en BotFather

imagen

A continuación, ya debería trabajar directamente con la API.

Después de encontrar esta publicación digna, recurrí a Hetzner y organicé mi proxy http para trabajar con la API por solo 3 euros al mes en territorio alemán.

El siguiente paso requerido es crear un grupo que incluya a sus usuarios y al bot de chat recién creado. Esta es la protección contra spam. Lo que le falta a Viber, por ejemplo.

imagen

A continuación, debe averiguar los números de los usuarios requeridos.
Para hacer esto, cada usuario debe lanzar un mensaje al chat. En general, es arbitrario. Pero usamos, por ejemplo, para este propósito el registro de frase y un cierto número. El número será el identificador de la central.

imagen

Ahora pasemos a la API.

Usando el proxy recién creado, hacemos la siguiente solicitud directamente desde el shell del proxy. Si ya ha cambiado su navegador para trabajar con él, puede hacerlo directamente desde el navegador.

root@ubuntu-dsenash ~ # wget https://api.telegram.org/bot553:AAGrXfKHw/getUpdates --2018-06-21 11:11:25-- https://api.telegram.org/bot553:AAGrXfKHw/getUpdates Resolving api.telegram.org (api.telegram.org)... 149.154.167.220, 2001:67c:4e8:f004::9 Connecting to api.telegram.org (api.telegram.org)|149.154.167.220|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 370 [application/json] Saving to: 'getUpdates' getUpdates 100%[==================================================================================>] 370 --.-KB/s in 0s 2018-06-21 11:11:25 (14.1 MB/s) - 'getUpdates' saved [370/370] root@ubuntu-dsenash ~ # cat getUpdates {"ok":true,"result":[{"update_id":90770, "message":{"message_id":43,"from":{"id":3918,"is_bot":false,"first_name":"Dmitry","last_name":"Senashenko","language_code":"ru"},"chat":{"id":3918,"first_name":"Dmitry","last_name":"Senashenko","type":"private"},"date":1529572218,"text":"/register 1000","entities":[{"offset":0,"length":9,"type":"bot_command"}]}}]}root@ubuntu-dsenash ~ # 

En lugar de "553XXXXXXX: AAGrXfKHwhhhhhhhhhhhhhhhhhhhhhhhhhh" se indica lo que recibió de BotFather.

En la respuesta, buscamos el identificador del usuario que dejó el mensaje de registro.
En el texto anterior vemos el mensaje en sí: "/ registrarse 1000"
Y la identificación de usuario buscada: "id": 3918xxxxx "
En lugar de xxxxx, por supuesto, hay números reales.

Ahora puede verificar el funcionamiento del bot y la API directamente desde el shell o desde su navegador con la siguiente solicitud:

api.telegram.org/bot553XXXXXXX : AAGrXfKHwhhhhhhhhhhhhhhhhhhhhhhhhhhh / sendMessage? text = Your_queue_is_overloaded & chat_id = 3918xxxxx

Donde bot553XXXXXXX: AAGrXfKHwhhhhhhhhhhhhhhhhhhhhhhhhhhx es el número de bot y la clave recibida de BotFather, y 3918xxxxx es el número de usuario obtenido del paso anterior.
Puede usar ruso en el texto, pero los espacios deben reemplazarse con% 20.

Como resultado de este comando, el mensaje se recibió en Telegram en el escritorio y en el teléfono móvil al mismo tiempo.

imagen
imagen

El navegador devolvió la siguiente respuesta:
imagen
Entonces la API funciona. Ahora pasaremos a la integración con la central telefónica de Avaya. Para este propósito, usaré Avaya Aura Experience Portal 7.1. Se utiliza para organizar IVR en el ecosistema de Avaya y es una plataforma de servicio inteligente, virtualizada y totalmente software. Su característica importante es la capacidad de insertar código Java, que es lo que necesitamos para integrar con Telegram. No crearé anuncios, pero en mi opinión este es uno de los mejores productos de Avaya y puede escribir cosas realmente sorprendentes en él. Por ejemplo, control de voz de una tetera o transcripción más seria de conversación sobre la marcha .

Este sistema IVR ciertamente no es barato, pero hay algunas peculiaridades. Tiene licencia por puerto. Porque planeamos usarlo extremadamente pronto, un puerto será suficiente. Y un puerto tiene un costo bastante bajo. Y con la virtualización, el sistema requiere solo 2 Core / 4GB RAM / 60GB HDD. En general, se puede instalar en casi cualquier computadora portátil o de escritorio. Bueno, como una cereza en un pastel: este producto tiene un modo de prueba que le permite usarlo gratis durante 30 días.

Para llevar a cabo la tarea, necesitamos organizar una llamada IVR por un evento en la central telefónica y luego configurarla para que envíe el evento correspondiente a la API recién creada.

Si consideramos la tarea de notificar al supervisor sobre el exceso del número de llamadas en la cola al Contact Center, entonces en la central telefónica será necesario modificar el vector principal y crear uno adicional.

LLAMAR A VECTOR

Número: 5 Nombre: Vector para la Habilidad 5

01 ir al paso 5 si las llamadas se pusieron en cola en skill 5 pri m> 5
02 cola a habilidad 5 pri m
03 tiempo de espera 30 segundos escuchando silencio
04 ir al paso 3 si es incondicional
05 ruta al número 1214 con cov n si es incondicional
06 ir al paso 2 si es incondicional

Este vector inmediatamente antes de realizar una llamada en la cola verifica el número de llamadas en esta cola. Si excede 5, la llamada pasa al paso 5, donde se transfiere al número 1214. Este número se enruta a IVR.

En la condición del paso 1, puede verificar una gran cantidad de parámetros que son un indicador de la carga en el Contact Center. Por ejemplo, EWT, la cantidad de agentes disponibles, la cantidad de agentes conectados, la cantidad de llamadas en la cola, el nivel de servicio, etc. y si se supera este o aquel indicador, reenvíe la llamada a IVR.

Una aplicación en IVR comenzará a enviar un mensaje a Telegram e inmediatamente transferirá la llamada al Contact Center a un vector similar, solo sin los pasos 1 y 5.

El tiempo de retraso para dicha llamada de procesamiento será de aproximadamente 100 milisegundos, lo cual es absolutamente insignificante para la persona que llama.

El segundo vector se verá así:

LLAMAR A VECTOR

Número: 6 Nombre: Habilidad 5 Directa

01 habilidad para hacer cola 5 pri m
02 tiempo de espera 30 segundos escuchando silencio
03 ir al paso 2 si es incondicional

Entonces la llamada del evento se redirige a IVR. Pasemos a desarrollar una aplicación en él.

Las aplicaciones para Avaya Aura Experience Portal se desarrollan en Eclipse con el complemento Orchestration Designer instalado. Esto le permite transferir el desarrollo para usuarios no calificados al modo Arrastrar y soltar para mover cuadrados y flechas sin sumergirse en el código Java.

Bueno, los usuarios calificados ya pueden incrustar código Java. Luego, la aplicación se ensambla como un servlet y se implementa en Tomcat, donde el IVR se refiere cuando recibe una llamada.

La aplicación es la siguiente:

imagen
La llamada va al nodo AppRoot, luego las variables se preprocesan y la llamada va al conector de Telegram, que ya es código Java puro. Después de enviar el mensaje, la llamada se transfiere al Contact Center.

Para simplificar la configuración, se utilizan Variables configurables, que le permiten mostrar la configuración de las variables internas de la aplicación en el portal web del portal Experience. Esto es necesario para que al cambiar la configuración no se reconstruya la aplicación.

El bloque variable es el siguiente:

imagen

Cómo las variables configurables usan una variable DNIS con subvariables. Para transferir variables al código Java, se utilizan variables escritas en mayúsculas.

La unidad de procesamiento principal es la siguiente:

imagen

Perdóname amantes del código limpio. El bloque de URL se ve horrible. Estas son las características de Orchestration Designer. Por supuesto, fue más correcto recopilarlo directamente en el código Java en una línea, pero fue importante para mí verificar qué URL ingresa al código Java y tuve que recopilarlo de esta manera.

El conector en sí se ve extremadamente minimalista:

  String response = ""; String str = mySession.getVariable(IProjectVariables.URL).getSimpleVariable().getStringValue(); str = str.replaceAll(" ", "%20"); IVariableField variable = mySession.getVariableField(IProjectVariables.RESPONSEINFO); variable.setValue(str); URL url; try { url = new URL(str); InputStream is = url.openConnection().getInputStream(); BufferedReader reader = new BufferedReader( new InputStreamReader( is ) ); String line = null; response = ""; while( ( line = reader.readLine() ) != null ) { response = response + line; } reader.close(); } catch (IOException e) { e.printStackTrace(); } 

Las funciones mySession.getVariable y mySession.getVariableField son necesarias para transferir información de la aplicación al código Java y devolver una respuesta.

Es decir formamos la URL de acuerdo con el principio anterior y la comenzamos, pasando lo que el servidor devolvió.

Esa es toda la aplicación, y en general la solución completa. El portal web IVR en sí con variables configurables es el siguiente:

imagen

Si alguien está interesado en ver una demostración real del prototipo, puede verlo aquí .

Bueno, había algunas cerezas en el pastel. Más precisamente, incluso dos.

Ya escribí sobre el primero. Para que la solución funcione, debe conectar el servidor de aplicaciones a Telegram a través de un proxy que no se encuentra en Rusia. Espero que este sinsentido termine alguna vez.

Bueno, la segunda cereza. Por supuesto, la conexión al telegrama debe estar encriptada y la conexión pasa por https. Y, por supuesto, se utiliza un certificado no autofirmado. Y este certificado no le da Telegram. Y a diferencia del navegador, el servidor de aplicaciones no puede establecer fácilmente una conexión sin un certificado. Entonces, la guinda del pastel es el proceso de encontrar este certificado y subirlo al servidor de aplicaciones. Después de este procedimiento, todo funcionó mágicamente de inmediato.

Creo que una persona que pasa mi camino con éxito también encontrará este certificado con éxito. Lo principal es que él sabe que necesita ser encontrado.

Gracias por su atencion

Source: https://habr.com/ru/post/es414811/


All Articles