https://d226lax1qjow5r.cloudfront.net/blog/blogposts/forward-a-call-via-voice-proxy-with-ruby-on-rails-dr/voice-proxy-ruby.png

Renvoyer un appel via Voice Proxy avec Ruby on Rails

Publié le May 13, 2021

Temps de lecture : 9 minutes

Même si la plupart de nos activités quotidiennes se déroulent à l'aide d'applications, les appels téléphoniques n'en restent pas moins indispensables. Chaque fois que nous faisons des affaires par le biais d'un appel téléphonique, nous exposons notre numéro de téléphone privé à d'autres personnes. Cela peut poser des risques pour la vie privée et la sécurité de toutes les parties concernées. Cependant, en utilisant un proxy vocal, vous pouvez atténuer ce problème et passer des appels téléphoniques en toute confiance.

Un proxy vocal est une méthode par laquelle les appels téléphoniques sont acheminés vers leur destination finale via un numéro de téléphone intermédiaire. Le numéro de téléphone final est masqué derrière le numéro intermédiaire, ce qui permet de préserver sa confidentialité. Dans ce tutoriel, nous allons créer une application Ruby on Rails pour transférer des appels vocaux via un proxy vocal en utilisant l'API Voice de Nexmo.

Conditions préalables

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.

Pour suivre ce tutoriel, vous aurez besoin d'un Account Nexmo. Inscrivez-vous maintenant si vous n'avez pas encore de compte.

En outre, vous aurez également besoin

Renvoyer un appel vocal via Voice Proxy avec Rails

Nous allons accomplir les tâches suivantes pour transférer un appel vocal avec l'API Voice de Nexmo via un proxy vocal :

  1. Créer une application Rails

  2. Exposer notre application à l'extérieur pour que Nexmo puisse communiquer avec elle

  3. Configurer notre Account Nexmo, acheter un numéro de téléphone Nexmo et créer une application Nexmo Voice

  4. Créer le contrôleur, la vue et les routes Rails

Créer une application Rails

A partir de la ligne de commande, exécutez ce qui suit :

rails new forward-voice-proxy --database=postgresql

La commande ci-dessus créera une nouvelle application Rails avec PostgreSQL comme base de données par défaut. Ouvrez la nouvelle application Rails dans l'éditeur de code de votre choix et ajoutez les balises dotenv-rails et nexmo à votre fichier Gemfile dans le répertoire racine du projet :

# Gemfile

gem 'nexmo'
gem 'dotenv-rails`

Nous sommes maintenant prêts à installer nos dépendances gem dans notre application. Nous le faisons en lançant bundle install depuis le terminal. Nous pouvons également exécuter rake db:migrate à ce stade depuis le terminal pour configurer la base de données. Nous n'utiliserons pas la base de données dans ce tutoriel pour persister les données, mais vous pouvez ajouter cette fonctionnalité à votre propre application, si vous préférez.

À ce stade, nous allons configurer ngrok afin d'obtenir notre URL accessible de l'extérieur, qui sera utilisée par Nexmo pour communiquer avec notre application.

Exposer l'application

Il y a plusieurs façons de rendre notre serveur de développement local accessible à l'extérieur, mais l'une des façons les plus simples est d'utiliser ngrok. Vous pouvez lire cet article pour une explication plus détaillée du fonctionnement de ngrok. Cependant, pour nos besoins, nous avons juste besoin de le faire fonctionner et de copier l'URL qu'il nous fournit.

Pour démarrer ngrok, ouvrez une nouvelle fenêtre de terminal et exécutez la commande suivante :

ngrok http 3000

Vous verrez maintenant une interface d'enregistrement ngrok dans votre fenêtre de terminal. En haut de l'interface se trouve une ligne qui commence par Forwarding et qui contient deux URL. La première est l'URL de ngrok accessible de l'extérieur, qui se termine par ngrok.io suivie de http://localhost:3000qui est votre serveur de développement local. Maintenant, lorsque vous ou Nexmo contacte l'URL ngrok.io l'URL sera transmise à votre serveur local.

Veillez à copier l ngrok.io dans un endroit sûr. Nous l'utiliserons lors de la prochaine étape de configuration de notre compte Nexmo, de notre numéro de téléphone et de l'application Voice.

Créer un compte Nexmo avec un numéro de téléphone et une application Voice

Pour que notre application vocale fonctionne, nous avons besoin d'un compte Nexmo, d'un numéro de téléphone approvisionné par Nexmo, d'une application Nexmo et, enfin, nous devons lier notre application à notre numéro de téléphone.

Vous pouvez créer un compte Nexmo gratuitement et, en prime, votre compte sera crédité de 2 euros pour commencer à utiliser votre nouvelle application. Rendez-vous sur <${CUSTOMER_DASHBOARD_URL}/sign-up> dans votre navigateur web et suivez les étapes de l'inscription. Une fois que vous aurez terminé, vous serez dans votre tableau de bord Nexmo.

Dans le menu de gauche, cliquez sur l'élément Voice menu dans le menu de gauche. Les quatre options suivantes s'affichent sous APPLICATIONS:

Voice Menu Options

Cliquez sur l'option Create an application et vous serez dirigé vers une page où vous pourrez créer une nouvelle application Nexmo.

Complétez le formulaire avec les informations suivantes :

  • Application name champ de texte entrer voice-proxy-forwarding-demo

  • Event URL Dans le champ de texte, entrez l'URL de votre ngrok : https://[ngrok url here]/event

  • Answer URL Dans le champ de texte, entrez à nouveau l'URL de votre ngrok : https://[ngrok url here]/webhooks/answer

Une fois que vous avez terminé, cliquez sur le bouton bleu Create Application bleu.

Vous avez maintenant créé une application Nexmo Voice. La prochaine étape consiste à acheter un numéro de téléphone Nexmo et à le lier à cette application.

Dans le tableau de bord Nexmo, cliquez sur l'élément de menu Numbers dans le menu de gauche. Vous verrez apparaître trois options :

Numbers menu

Cliquez sur l'option Buy numbers et vous serez dirigé vers une page où vous pourrez choisir un pays, des caractéristiques, un type et les quatre chiffres que vous souhaitez voir figurer sur le numéro.

Buy numbers

Pour ce qui nous concerne : choisissez le pays dans lequel vous vous trouvez actuellement, afin que l'appel soit un appel local pour vous ; choisissez Voice pour les caractéristiques et mobile ou fixe pour le type. Vous n'avez pas besoin d'entrer quoi que ce soit dans le Number pour le champ de texte. Lorsque vous cliquez sur Searchvous verrez une liste de numéros de téléphone disponibles.

Choisissez-en un en cliquant sur le bouton orange Buy et en cliquant à nouveau sur le bouton orange Buy à la demande de confirmation.

Une fois que vous possédez le numéro, vous pouvez maintenant le lier à votre voice-proxy-forwarding-demo Voice. Pour ce faire, cliquez sur l'icône d'engrenage à côté du numéro de téléphone et vous verrez le menu suivant :

Edit numbers

Sélectionnez l'application voice-proxy-forwarding-demo Application dans la liste déroulante et cliquez sur le bouton bleu Ok bleu. Votre numéro de téléphone Numbers est maintenant lié à votre application Voice et prêt à accepter et à transférer les appels téléphoniques entrants via le proxy vocal.

Notre dernière étape avant d'être prêt à exécuter notre application est de définir nos actions de contrôleur Rails et nos Routes.

Créer un contrôleur et des routes Rails

Créez un fichier Controller appelé call_controller.rb dans /app/controllers/. À l'intérieur du contrôleur, nous allons définir une action de contrôleur unique et trois variables constantes. L'action contiendra l'objet de contrôle d'appel Nexmo Call Control Object (NCCO) les instructions pour transférer l'appel téléphonique via un proxy vocal vers notre numéro personnel. Les trois variables constantes contiendront respectivement notre URL ngrok, notre numéro Nexmo et notre numéro personnel.

# 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

Enfin, nous devons définir la route dans routes.rb afin que notre application Rails sache où diriger la requête Nexmo GET vers la requête Nexmo. Allez-y et ouvrez /config/routes.rb et ajoutez ce qui suit :

# routes.rb

get '/webhooks/answer', to: 'call#answer'

Vous remarquerez que le chemin d'accès à la requête GET est le même URL que celui que nous avons fourni lorsque nous avons configuré notre application Nexmo Voice dans le Nexmo Dashboard.

Notre application est prête à fonctionner ! Nous vous félicitons !

Exécution de l'application

Pour lancer votre application, il vous suffit d'exécuter la commande suivante à partir de la ligne de commande :

rails s

Cela lancera votre serveur Rails. Dans une autre fenêtre de terminal, assurez-vous que ngrok est également lancé. Maintenant, appelez le numéro de téléphone de Numbers et vous entendrez votre application vous dire : "Veuillez patienter pendant que nous transférons votre appel", puis votre appel sera transféré via un proxy vocal.

Que faire si vous souhaitez que votre application transfère votre appel sans l'annoncer ? Il vous suffit de supprimer l'instruction talk NCCO de la route #answer dans le contrôleur. Dans ce cas, la méthode finale du contrôleur ressemblera à ce qui suit :

# call_controller.rb

def answer
    render json:
    [
        {
            :action => 'connect',
            :eventUrl => [],
            :from => NEXMO_NUMBER,
            :endpoint => [
                {  
                    :type => 'phone',
                    :number => PERSONAL_NUMBER
                }
            ]
        }
    ]
end

Pour en savoir plus

Si vous souhaitez en savoir plus, vous pouvez consulter les documents suivants :

Partager:

https://a.storyblok.com/f/270183/384x384/e5480d2945/ben-greenberg.png
Ben GreenbergAnciens de Vonage

Ben est un développeur en seconde carrière qui a auparavant passé une décennie dans les domaines de la formation pour adultes, de l'organisation communautaire et de la gestion d'organisations à but non lucratif. Il a travaillé comme défenseur des développeurs pour Vonage. Il écrit régulièrement sur l'intersection du développement communautaire et de la technologie. Originaire de Californie du Sud et ayant longtemps vécu à New York, Ben réside aujourd'hui près de Tel Aviv, en Israël.