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

Como receber chamadas telefônicas com Ruby on Rails

Publicado em September 11, 2025

Tempo de leitura: 4 minutos

Agora que seu aplicativo Ruby on Rails já consegue fazer chamadas telefônicas e acompanhar o status das chamadas por meio de eventos de chamada, o próximo passo é lidar com as chamadas recebidas. Afinal, como seus clientes ficarão satisfeitos se não puderem retornar suas chamadas? Neste artigo, vamos mostrar exatamente como configurar isso.

Neste tutorial, você aprenderá como receber uma chamada telefônica, implementando um endpoint de webhook no Ruby on Rails.

>> Resumo Pule esta parte e veja todo o códigos do Guia de Início Rápido no GitHub.

Pré-requisitos

Para comprar um número de telefone virtual, acesse seu painel da API e siga as etapas mostradas abaixo.

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

  1. Acesse seu painel da API

  2. Acesse CRIAR E GERENCIAR > Numbers > Comprar números.

  3. Selecione os atributos necessários e, em seguida, clique em “Pesquisar”

  4. Clique no botão “Comprar” ao lado do número desejado e confirme sua compra

  5. Para confirmar que você adquiriu o número virtual, acesse o menu de navegação à esquerda, na seção “CRIAR E GERENCIAR”, clique em “Numbers” e, em seguida, em “Seus números”

Como funciona uma chamada recebida?

Quando alguém liga para o seu número virtual da Vonage, a Voice API precisa saber o que fazer a seguir: deve reproduzir uma saudação, transferir a chamada para outro número, iniciar a gravação ou fazer outra coisa?

É aí que entra o Answer Webhook.

Assim que uma chamada recebida é atendida, a Vonage envia uma solicitação HTTP para o answer_url que você configurou nas configurações do seu aplicativo. Esse webhook avisa ao seu servidor: “Ei, você tem uma chamada, o que deve acontecer agora?”. Seu servidor responde com um NCCO (um objeto Vonage Call) que define as ações que a Voice API deve realizar para a chamada.

Saiba mais sobre Configurações do Answer Webhook.

Como disponibilizar publicamente nosso aplicativo Ruby on Rails com o Ngrok

Nosso aplicativo Ruby on Rails está rodando em modo de desenvolvimento na porta 3000, então podemos acessá-lo localmente em localhost:3000. No entanto, isso só funciona no nosso computador!

Você pode usar o ngrok para expor com segurança seu servidor local ao público via HTTP. Então, agora, em uma aba separada do seu servidor Rails, abra um túnel ngrok na porta 3000.

ngrok http 3000

Certifique-se de adicionar sua URL do ngrok como config.host no arquivo development.rb. Usaremos a variável de ambiente VONAGE_SERVER_HOSTNAMEpara tornar nosso aplicativo mais dinâmico.

Para obter mais ajuda, consulte como começar a usar o ngrok no Rails.

# config/environments/development.rb

Rails.application.configure do
   config.hosts << ENV['VONAGE_SERVER_HOSTNAME']

Agora, no nosso arquivo .env, defina 'VONAGE_SERVER_HOSTNAME' com a sua URL do ngrok.

# .env

# ngrok URL, don't include the protocol (https://)
VONAGE_SERVER_HOSTNAME=''

Também precisaremos editar nosso aplicativo Vonage (dos artigos anteriores) no painel de controle para adicionar a URL do ngrok aos nossos webhooks. No campo “URL de resposta”, adicione sua URL do ngrok seguida de /inbound_calls. Certifique-se de que a solicitação esteja sendo enviada 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.

Como lidar com webhooks de eventos de resposta no Rails

Agora que a Vonage está encaminhando o conteúdo da chamada telefônica para o /inbound_calls , vamos atualizar nosso aplicativo e criar uma rota para lidar com isso.

# config/routes.rb


Rails.application.routes.draw do
 resources :inbound_calls, only: [:create]


	...previous routes...

Quando uma chamada for feita para o seu número virtual da Vonage, a Vonage notificará seu aplicativo enviando um webhook. Uma carga útil típica para uma chamada recebida terá mais ou menos esta aparência.

{
  "from": "442079460000",
  "to": "447700900000",
  "uuid": "aaaaaaaa-bbbb-cccc-dddd-0123456789ab",
  "conversation_uuid": "CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab"
}

Como armazenar uma chamada telefônica no Rails

Agora que temos todas as informações necessárias com base no nosso modelo de chamada, conforme definido anteriormente, podemos criar uma lógica para armazenar nossa chamada recebida. Também enviaremos de volta um NCCO simples com um robô para responder ao nosso interlocutor, para que ele saiba que a chamada está funcionando. Vamos gerar um novo controlador para lidar com isso.

rails g controller InboundCalls create

Dentro do nosso controlador, teremos um simples método de criação que analisa o webhook e insere uma chamada em nosso banco de dados.

# 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

Embora não seja realmente necessário armazenar e atualizar os detalhes da chamada, é útil acompanhar o status atual das chamadas, suas durações e quaisquer outras informações que possam ser úteis para seu aplicativo. Esta ação retorna um novo Objeto de Controle de Chamada da Vonage (NCCO) que reproduzirá uma mensagem de voz simples para o destinatário, conforme especificado. Explore outras ações do NCCO, como gravar, conectarou inserir para criar fluxos de chamadas avançados.

OK, agora inicie seu servidor, certifique-se de que o ngrok esteja em execução e faça uma chamada de voz para o seu número da Vonage para testar a saudação!

>> Veja como todo o código se encaixa no arquivo completo inbound_calls_controller.rb .

Conclusão

Parabéns! Você criou com sucesso um aplicativo Ruby on Rails Voice capaz de receber chamadas telefônicas usando um webhook da Vonage. Com isso, você concluiu a parte dedicada ao Voice do Guia de Início Rápido do Ruby on Rails. Vamos adicionar Recursos de Comunicação Avançada (RCS) com a Messages API da Vonage em tutoriais futuros.

Se você tiver alguma dúvida ou quiser solicitar um recurso para o aplicativo Quickstart, participe da conversa no Slack da Vonage no Slack da Comunidade Vonage ou entre em contato pelo X (antigo Twitter). Adoraríamos saber o que você vai criar a seguir!

Compartilhar:

https://a.storyblok.com/f/270183/384x384/e4e7d1452e/benjamin-aronov.png
Benjamin AronovDeveloper Advocate

Benjamin Aronov is a developer advocate at Vonage. He is a proven community builder with a background in Ruby on Rails. Benjamin enjoys the beaches of Tel Aviv which he calls home. His Tel Aviv base allows him to meet and learn from some of the world's best startup founders. Outside of tech, Benjamin loves traveling the world in search of the perfect pain au chocolat.