https://a.storyblok.com/f/270183/1368x665/9af4c311b6/25sep_dev-blog_ruby-inbound-call.jpg

Cómo recibir llamadas telefónicas con Ruby on Rails

Publicado el September 11, 2025

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

Para comprar un número de teléfono virtual, vaya a su panel API y siga los pasos que se indican a continuación.

Steps on how to purchase a phone number from the dashboard, from selecting the number and confirming the selection.Purchase a phone number

  1. Vaya a su Panel API

  2. Vaya a CONSTRUIR Y GESTIONAR > Numbers > Comprar Numbers.

  3. Elija los atributos necesarios y haga clic en Buscar

  4. Pulse el botón Comprar junto al número que desee y valide su compra

  5. 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 3000

Asegú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.

Screenshot of Vonage Voice API settings panel with configured webhooks for Answer URL, Event URL using HTTP POST, and Fallback URL, along with region selection options.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 create

Dentro 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
end

Aunque 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:

https://a.storyblok.com/f/270183/384x384/e4e7d1452e/benjamin-aronov.png
Benjamin AronovDefensor del Desarrollador

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.