Los eventos de tipo ORIGINATE se lanzan cuando se realiza una solicitud de llamada mediante un componente Click2Dial. Por ejemplo, cuando realiza una llamada desde la consola BLF en el panel de control, primero suena la terminal que tenga configurado el usuario como terminal de origen, cuando éste atiende se genera una nueva llamada con el número marcado como destino.
El evento ORIGINATE se dispara cuando la terminal esta ringueando, ante un error y cuando la terminal se contetra

En este tutorial vamos a hacer una demostración de cómo configurar un evento originate desde el panel de control que nos envíe el nombre de la cuenta cuando se realice una llamada mediante un click2Dial, y cómo lo podemos recibir en un servidor local. 

Configuración del entorno 

Debemos tener un servidor local que acepte solicitudes http, para esta demostración vamos a poner un ejemplo de un servidor Tomcat y un ejemplo de servidor Nodejs que corra una pequeña aplicación que será la que reciba los eventos que se enviarán.

Ngrok 

Para poder ejecutar la aplicación en nuestra pc y que desde el panel de control tengamos acceso a ella vamos a usar la aplicación Ngrok, que nos permite enrutar una solicitud a una URL pública a nuestro servidor local.

Puede aprender cómo descargar y configurar Ngrok en el siguiente enlace.

Una vez tengamos instalado y configurado Ngrok podemos iniciar un túnel de la siguiente forma:

Al iniciar deberíamos ver la siguiente pantalla:

Podemos ver que en la  quinta y sexta fila nos está diciendo que cualquier solicitud realizada a http://0645c3df.ngrok.io va a ser recibida por nuestro servidor local en http://localhost:8080.  Ésta URL será la que vamos a configurar en nuestro evento. 

A continuación se va demostrar cómo ejecutar un servidor que reciba nuestras solicitudes, vamos a poner un ejemplo en Tomcat y otro en Nodejs, no hace falta que haga los dos, cualquiera de ellos debería alcanzar para este tutorial.

Servidor Tomcat 

Una vez hecho el túnel, tenemos que ejecutar nuestro servidor Tomcat y aceptar solicitudes en el puerto 8080. Vamos a construir un proyecto web llamado "test" que contenga un Servlet que nos muestre cómo podemos recibir los eventos:

package test;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/TestEvento")
public class TestServlet extends HttpServlet {
  private static final long serialVersionUID = 1L;

  protected void doGet(HttpServletRequest request,
                       HttpServletResponse response)
                   throws ServletException, IOException {
    System.out.println("Prueba de evento - Nombre de cuenta: "
                        + request.getParameter("cuenta"));
  }

  protected void doPost(HttpServletRequest request,
                        HttpServletResponse response)
                    throws ServletException, IOException {
    doGet(request, response);
  }
}

Iniciamos el servidor:

Una vez que estén ejecutándose el servidor Tomcat y el Ngrok ya tenemos nuestro entorno listo para la prueba. 

Servidor Nodejs

Para realizar esta demostración debemos tener instalado previamente npm y nodejs.

Una vez realizado el túnel con Ngrok, debemos ejecutar un servidor que acepte solicitudes http, para eso vamos a utilizar el framework express.
Abrimos una terminal y nos paramos en la ruta donde vamos a tener nuestro proyecto. Una vez ahí ejecutamos los siguientes comandos:

npm init
npm install express --save

Ésto creará una estructura de proyecto node. Dentro de él creamos un archivo que vamos a llamar index.js con el siguiente contenido:

var express = require('express');
var app = express();

app.get('/test/TestEvento', function (req, res) {
  console.log("Prueba de evento - Nombre de cuenta: " + req.query.cuenta);
  res.send();
});

app.listen(8080,function () {
 console.log("Escuchando en el puerto 8080...");
});

Luego volvemos a la terminal y ejecutamos (siempre en el directorio del proyecto):

node index.js

Ahora deberíamos tener nuestro servidor listo para recibir solicitudes de eventos.

Configuración del evento 

Ahora debemos configurar el evento desde el panel de control. Para eso entramos al Panel de Control y vamos a agregar un nuevo evento desde Configuración -> Eventos -> Agregar.

Seleccionamos la opción personalizado:

En la pestaña Petición ingresamos la configuración del requerimiento HTTP:

Nota: en el campo Host debemos ingresar la url que nos proporcionó ngrok (sólo el host, sin "http://") 

Luego en la pestaña Parámetros ingresamos lo siguiente:

Una vez creado el evento hay que agregarlo en la configuración de la cuenta deseada. Para ello vamos a Configuración -> Cuentas, aquí tenemos que buscar nuestra cuenta, la que tengamos asociada a nuestra terminal. Una vez encontrada pulsamos en Modificar sobre la cuenta:

Luego pulsamos en la pestaña eventos y luego Agregar. Sólo para este ejemplo, vamos a agregar como condición para que se envíe el evento, que la llamada originada sea contestada: La configuración debería quedar como sigue: 

De ahora en más cada vez que se genere un evento ORIGINATE y la llamada sea contestada vamos a recibir un requerimiento HTTP en nuestra aplicación Java.

Para probarlo podemos ir a la sección Consolas BLF -> Todas las terminales, allí tendremos que tener configurada nuestra terminal que sonará cuando hagamos una solicitud click2Dial, puede aprender cómo hacerlo en este enlace

Marcamos un número para realizar una llamada, por ejemplo 52630000 (sin costo) y nuestra terminal debería sonar: 

Atendemos, y entonces se iniciará la llamada al número marcado, pero lo que nos interesa es que se haya disparado el evento que configuramos, eso lo podemos ver en nuestro Tomcat que debería mostrarlo de la siguiente forma:

En nuestra aplicación Nodejs se debe ver de la siguiente forma:


Podemos ver que hemos recibido el evento desde nuestra aplicación y pudimos hacer algo con él.

Variables Disponibles en el evento ORIGINATE

En el evento ORIGINATE solo estan disponibles las siguientes variables para ser usadas en en los templates

{{ origterminalid }}: Id de la terminal SIP que origino la llamada
{{ origterminalname }}: Nombre de la terminal SIP que origino la llamada
{{ accountid }}: Id de la cuenta que origino la llamada
{{ accountname }} Nombre de la cuenta que origino la llamada
{{ origstatus }} Estado del la originación. Posibles valores:

RINGING - la terminal esta ringueando
REJECTED - El usuario rejectó la llamada
NOTREGISTERED - La terminal no esta registrada
ANSWER - El usuario contesto la llamada
ERROR - No existe la terminal, error interno, etc
NOANSWER - No contesto la llamada y originate dio timeout

{{ origto }} Destino marcado click2Dial



 

¿Encontró su respuesta?