
Compartir:
Ben es un desarrollador de segunda carrera que anteriormente pasó una década en los campos de la educación de adultos, la organización comunitaria y la gestión de organizaciones sin ánimo de lucro. Trabajó como defensor de los desarrolladores para Vonage. Escribe regularmente sobre la intersección entre el desarrollo comunitario y la tecnología. Originario del sur de California y residente durante mucho tiempo en Nueva York, Ben reside ahora cerca de Tel Aviv (Israel).
Desvío de llamadas por Voice Proxy con Ruby on Rails
Tiempo de lectura: 9 minutos
Puede que gran parte de nuestra vida cotidiana la llevemos a cabo con aplicaciones, pero aun así, hacer llamadas telefónicas sigue siendo una parte necesaria de nuestro mundo. Cada vez que hacemos negocios a través de una llamada telefónica exponemos nuestro número de teléfono privado a los demás. Esto puede suponer riesgos tanto para la privacidad como para la seguridad de todas las partes implicadas. Sin embargo, con la utilización de un proxy de voz, puede aliviar este problema y hacer llamadas telefónicas con confianza.
Un proxy de voz es un método por el cual las llamadas telefónicas se encaminan a su destino final a través de un número de teléfono intermediario. El número de teléfono final se enmascara detrás del número intermediario, manteniendo así su privacidad. En este tutorial, vamos a crear una aplicación Ruby on Rails para desviar llamadas de voz a través de un proxy de voz utilizando la Voice API de Nexmo.
Requisitos previos
Vonage API Account
To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.
This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.
Para trabajar a través de este tutorial, usted necesitará una Cuenta Nexmo. Regístrate ahora si aún no tienes una Account.
Además, también necesitarás:
ngrok para exponer nuestra aplicación Rails al exterior
Desvío de llamadas de voz mediante proxy de voz con Rails
Vamos a realizar las siguientes tareas para reenviar una llamada de voz con el Nexmo Voice API a través de proxy de voz:
Crear una aplicación Rails
Exponer nuestra aplicación externamente para que Nexmo pueda comunicarse con ella.
Configurar nuestra cuenta Nexmo, adquirir un número de teléfono Nexmo y crear una aplicación Nexmo Voice.
Creación del controlador, la vista y las rutas Rails
Crear una aplicación Rails
Desde la línea de comandos ejecute lo siguiente:
El comando anterior creará una nueva aplicación Rails con PostgreSQL como base de datos por defecto. Abre la nueva aplicación Rails en el editor de código que prefieras y añade las etiquetas dotenv-rails y nexmo a sus gemas Gemfile en el directorio raíz del proyecto:
# Gemfile
gem 'nexmo'
gem 'dotenv-rails`Ahora estamos listos para instalar nuestras dependencias de gemas en nuestra aplicación. Lo hacemos ejecutando bundle install desde el terminal. También podemos ejecutar rake db:migrate para configurar la base de datos. No vamos a utilizar la base de datos en este tutorial para persistir los datos, pero usted podría agregar esa característica a su propia aplicación, si lo prefiere.
En este punto, configuraremos ngrok para obtener nuestra URL accesible externamente, que será utilizada por Nexmo para comunicarse con nuestra aplicación.
Exposición de la aplicación
Hay varias formas de hacer que nuestro servidor de desarrollo local sea accesible externamente, pero una de las formas más sencillas es con ngrok. Puedes leer este artículo para una explicación más detallada de cómo funciona ngrok. Sin embargo, para nuestros propósitos, sólo necesitamos ponerlo en marcha y copiar la URL que nos proporciona.
Para iniciar ngrok, abra una nueva ventana de terminal y ejecute lo siguiente desde la línea de comandos:
Ahora verá una interfaz de registro ngrok en su ventana de terminal. Cerca de la parte superior de la interfaz hay una línea que comienza con Forwarding y contiene dos URLs. La primera es la URL ngrok accesible externamente, que termina con ngrok.io seguido de http://localhost:3000que es tu servidor de desarrollo local. Ahora, cuando tú o Nexmo contacte con la URL ngrok.io URL, lo reenviará a tu servidor local.
Asegúrese de copiar la ngrok.io URL en un lugar seguro. La utilizaremos en el siguiente paso de configuración de nuestra cuenta Nexmo, número de teléfono y aplicación Voice.
Create a Nexmo Account with Phone Number and Voice Application (Crear una cuenta Nexmo con número de teléfono y aplicación de voz)
Para que nuestra aplicación de voz funcione, necesitamos una cuenta Nexmo, un número de teléfono provisto por Nexmo, una aplicación Nexmo y, por último, necesitamos vincular nuestra aplicación a nuestro número de teléfono.
Puede crear una cuenta Nexmo de forma gratuita y, como ventaja añadida, se le abonarán 2 euros en su cuenta para empezar a utilizar su nueva aplicación. Vaya a <${CUSTOMER_DASHBOARD_URL}/sign-up> en su navegador web y siga los pasos de registro. Una vez que hayas terminado estarás en tu panel de Nexmo.
En el menú de la izquierda, haga clic en el Voice menu . Verá las cuatro opciones siguientes bajo APPLICATIONS:

Haga clic en la opción Create an application y accederá a una página en la que podrá configurar una nueva aplicación Nexmo.
Rellene el formulario con lo siguiente:
Application nameintroducir campo de textovoice-proxy-forwarding-demoEvent URLintroduzca su URL ngrok:https://[ngrok url here]/eventAnswer URLintroduzca de nuevo su URL ngrok:https://[ngrok url here]/webhooks/answer
Cuando haya terminado, haga clic en el botón azul Create Application azul.
Ya ha creado una aplicación Nexmo Voice. Nuestro siguiente paso es comprar un número de teléfono Nexmo y vincularlo a esta aplicación.
En el Panel de control de Nexmo, haga clic en el elemento de menú Numbers en el menú de la izquierda. Verá que aparecen tres opciones:

Haga clic en la opción Buy numbers y accederá a una página en la que podrá elegir el país, las características, el tipo y los cuatro dígitos que desea que tenga el número.

Para nuestros propósitos: elija el país en el que se encuentra actualmente, para que la llamada sea una llamada local para usted; elija Voice para las características y móvil o fijo para el tipo. No necesita introducir nada en el campo Number campo de texto. Cuando pulse Searchverás una lista de números de teléfono disponibles.
Elija uno haciendo clic en el botón naranja Buy y volviendo a pulsar el botón naranja Buy una vez más en el mensaje de confirmación.
Una vez que posea el número, podrá vincularlo a su aplicación de voice-proxy-forwarding-demo aplicación Voice. Para ello, haz clic en el icono de engranaje situado junto al número de teléfono y verás el siguiente menú:

Seleccione la voice-proxy-forwarding-demo Applications de la lista desplegable y haga clic en el botón azul Ok azul. Su número de teléfono Nexmo está ahora vinculado a su aplicación Voice y listo para aceptar y reenviar llamadas telefónicas entrantes a través de proxy de voz.
Nuestro último paso antes de estar listos para ejecutar nuestra aplicación es definir nuestras acciones y Rutas del Controlador Rails.
Creación de controladores y rutas Rails
Cree un archivo Controller llamado call_controller.rb en /app/controllers/. Dentro del Controlador vamos a definir una única acción de Controlador y tres variables constantes. La acción contendrá el Objeto de Control de Llamada Nexmo (NCCO) para desviar la llamada telefónica a través de un proxy de voz a nuestro número personal. Las tres variables constantes contendrán nuestra URL ngrok, número Nexmo y número personal, respectivamente.
# call_controller.rb
class CallController < ApplicationController
BASE_URL = 'YOUR NGROK URL GOES HERE'
NEXMO_NUMBER='YOUR NEXMO PROVISIONED NUMBER GOES HERE'
PERSONAL_NUMBER = 'YOUR PERSONAL NUMBER GOES HERE'
def answer
render json:
[
{
"action": "talk",
"text": "Please wait while we forward your call"
},
{
:action => 'connect',
:eventUrl => [],
:from => NEXMO_NUMBER,
:endpoint => [
{
:type => 'phone',
:number => PERSONAL_NUMBER
}
]
}
]
end
end
Por último, tenemos que definir la ruta en routes.rb para que nuestra aplicación Rails sepa a dónde dirigir la petición Nexmo GET . Abrimos /config/routes.rb y añade lo siguiente:
# routes.rb
get '/webhooks/answer', to: 'call#answer'Observará que la ruta para la solicitud GET es la misma URL que proporcionamos cuando configuramos nuestra aplicación Nexmo Voice en el Panel de control de Nexmo.
¡Nuestra aplicación está lista para funcionar! ¡Enhorabuena!
Ejecutar la aplicación
Para ejecutar su aplicación sólo tiene que ejecutar lo siguiente desde la línea de comandos:
Esto iniciará tu servidor Rails. En otra ventana de terminal, asegúrate de que ngrok también se está ejecutando. Ahora, llama a tu número de teléfono Nexmo y oirás que tu aplicación te dice: "Por favor, espere mientras desviamos su llamada", y entonces tu llamada será desviada vía proxy de voz.
¿Y si quieres que tu aplicación desvíe tu llamada sin anunciar que lo está haciendo? Lo único que tiene que hacer es eliminar la instrucción talk NCCO de la ruta #answer en el Controlador. Cuando lo hagas tu método Controller final tendrá el siguiente aspecto:
# call_controller.rb
def answer
render json:
[
{
:action => 'connect',
:eventUrl => [],
:from => NEXMO_NUMBER,
:endpoint => [
{
:type => 'phone',
:number => PERSONAL_NUMBER
}
]
}
]
end
Lecturas complementarias
Si le interesa explorar y leer más, tenga en cuenta lo siguiente:
Compartir:
Ben es un desarrollador de segunda carrera que anteriormente pasó una década en los campos de la educación de adultos, la organización comunitaria y la gestión de organizaciones sin ánimo de lucro. Trabajó como defensor de los desarrolladores para Vonage. Escribe regularmente sobre la intersección entre el desarrollo comunitario y la tecnología. Originario del sur de California y residente durante mucho tiempo en Nueva York, Ben reside ahora cerca de Tel Aviv (Israel).
