
Compartir:
Benjamin Aronov es desarrollador de Vonage. Es un constructor de comunidades con experiencia en Ruby on Rails. Benjamin disfruta de las playas de Tel Aviv, a la que llama hogar. Su base en Tel Aviv le permite conocer y aprender de algunos de los mejores fundadores de startups del mundo. Fuera de la tecnología, a Benjamin le encanta viajar por el mundo en busca del perfecto pain au chocolat.
Cómo recibir llamadas telefónicas con Ruby on Rails
Tiempo de lectura: 4 minutos
Ahora que tu aplicación Ruby on Rails puede hacer llamadas telefónicas y seguir el estado de las llamadas con eventos de llamada, el siguiente paso es gestionar las llamadas entrantes. Después de todo, ¿cómo de contentos estarán sus clientes si no pueden devolverle las llamadas? En este artículo te mostraremos cómo hacerlo.
En este tutorial aprenderás a recibir una llamada telefónica entrante implementando un endpoint webhook en Ruby on Rails.
>> TL;DR Saltar adelante y encontrar todo el código de inicio rápido en GitHub.
Requisitos previos
Ruby on Rails instalado en su máquina
Número virtual de Vonage
Para comprar un número de teléfono virtual, vaya a su panel API y siga los pasos que se indican a continuación.
Purchase a phone number
Vaya a su Panel API
Vaya a CONSTRUIR Y GESTIONAR > Numbers > Comprar Numbers.
Elija los atributos necesarios y haga clic en Buscar
Pulse el botón Comprar junto al número que desee y valide su compra
Para confirmar que ha adquirido el número virtual, vaya al menú de navegación de la izquierda, en CONSTRUIR Y GESTIONAR, haga clic en Numbers y, a continuación, en Sus Numbers.
¿Cómo funciona una llamada entrante?
Cuando alguien llama a tu número virtual de Vonage, Voice API necesita saber qué hacer a continuación: ¿debe reproducir un saludo, conectar la llamada a otro número, comenzar a grabar o algo más?
Ahí es donde entra en juego el Webhook de respuesta.
En cuanto se contesta una llamada entrante, Vonage realiza una solicitud HTTP a la dirección URL_de_respuesta que configuraste en los ajustes de tu aplicación. Este webhook le dice a tu servidor: "Oye, tienes una llamada, ¿qué debería suceder a continuación?" Tu servidor responde con un NCCO (un objeto de llamada de Vonage) que define las acciones que Voice API debe tomar para la llamada.
Más información sobre Configuración de Webhooks de respuesta.
Cómo exponer públicamente nuestra aplicación Ruby on Rails con Ngrok
Nuestra aplicación Ruby on Rails se ejecuta en desarrollo en el puerto 3000, por lo que podemos acceder a ella localmente en localhost:3000. Sin embargo, ¡eso sólo funciona en nuestro ordenador!
Puede utilizar ngrok para exponer de forma segura su servidor local públicamente a través de HTTP. Así que ahora, en una pestaña separada de tu servidor Rails, abre un túnel ngrok en el puerto 3000.
ngrok http 3000Asegúrate de añadir tu URL ngrok como config.host en tu archivo development.rb. Utilizaremos la variable de entorno VONAGE_SERVER_HOSTNAMEpara hacer nuestra aplicación más dinámica.
Para obtener más ayuda, consulte cómo empezar a usar ngrok en Rails.
# config/environments/development.rb
Rails.application.configure do
config.hosts << ENV['VONAGE_SERVER_HOSTNAME']Ahora en nuestro archivo .env, establece tu 'VONAGE_SERVER_HOSTNAME' a tu URL ngrok.
# .env
# ngrok URL, don't include the protocol (https://)
VONAGE_SERVER_HOSTNAME=''También tendremos que editar nuestra aplicación de Vonage (de los artículos anteriores) en el panel de control para agregar la URL de ngrok en nuestros webhooks. En el campo URL de respuesta, agrega tu URL de ngrok seguida de /llamadas_entrantes. Asegúrese de que la solicitud se envía como POST.
Vonage Voice API configuration showing Answer, Event, and Fallback URLs, including an ngrok URL for answer and event callbacks.
Cómo manejar Webhooks de eventos de respuesta en Rails
Ahora que Vonage está reenviando la carga útil de una llamada telefónica a la carpeta /llamadas_entrantes actualicemos nuestra aplicación y creemos una ruta para manejarla.
# config/routes.rb
Rails.application.routes.draw do
resources :inbound_calls, only: [:create]
...previous routes...Cuando se haya realizado una llamada a tu número virtual de Vonage, Vonage notificará a tu aplicación enviando un webhook. Una carga útil típica para una llamada entrante tendrá este aspecto.
{
"from": "442079460000",
"to": "447700900000",
"uuid": "aaaaaaaa-bbbb-cccc-dddd-0123456789ab",
"conversation_uuid": "CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab"
}
Cómo almacenar una llamada telefónica en Rails
Ahora que tenemos toda la información necesaria basada en nuestro modelo de llamada como se definió anteriormente, podemos crear algo de lógica para almacenar nuestra llamada telefónica entrante. También vamos a enviar de vuelta un simple NCCO con un robot para responder a nuestra persona que llama, para que sepan que la llamada está funcionando. Vamos a generar un nuevo controlador para manejar esto.
rails g controller InboundCalls createDentro de nuestro controlador, tendremos un simple comando crear que analiza el webhook e introduce una llamada en nuestra base de datos.
# app/controllers/inbound_calls_controller.rb
class InboundCallsController < ApplicationController
# We disable CSRF for this webhook call
skip_before_action :verify_authenticity_token
def create
Call.where(conversation_uuid: params[:conversation_uuid])
.first_or_create
.update(
to: params[:to],
from: params[:from],
uuid: params[:uuid],
is_inbound: true
)
render json: [
{
action: 'talk',
voiceName: 'Jennifer',
text: 'Hello, thank you for calling. This is Jennifer from Vonage. Ciao.'
}
]
end
endAunque almacenar y actualizar los detalles de la llamada no es realmente necesario, es útil llevar un registro de los estados actuales de las llamadas, las duraciones y cualquier otra información que pueda beneficiar a tu aplicación. Esta acción devuelve un nuevo objeto de control de llamadas de Vonage (NCCO) que reproducirá un mensaje de voz simple al destinatario según lo especificado. Explora otras acciones NCCO como grabar, conectaro introducir para crear flujos de llamadas avanzados.
Bien, ahora inicia tu servidor, asegúrate de tener ngrok en ejecución y realiza una llamada de voz a tu número de Vonage para probar el saludo.
>> Vea cómo encaja todo el código en el archivo completo inbound_calls_controller.rb completo.
Conclusión
¡Enhorabuena! Has construido con éxito una aplicación Voice de Ruby on Rails que puede recibir llamadas telefónicas entrantes utilizando un webhook de Vonage. De esta forma has completado la parte de Voice del curso de Ruby on Rails. Ahora añadiremos Servicios de comunicación enriquecidos (RCS) con la API Messages API de Vonage en futuros tutoriales.
Si tienes alguna pregunta o quieres solicitar una funcionalidad para la aplicación Quickstart, únete a la conversación en la Comunidad Slack o comunícate en X (antes Twitter). ¡Nos encantaría escuchar lo que construyes a continuación!
Compartir:
Benjamin Aronov es desarrollador de Vonage. Es un constructor de comunidades con experiencia en Ruby on Rails. Benjamin disfruta de las playas de Tel Aviv, a la que llama hogar. Su base en Tel Aviv le permite conocer y aprender de algunos de los mejores fundadores de startups del mundo. Fuera de la tecnología, a Benjamin le encanta viajar por el mundo en busca del perfecto pain au chocolat.