https://d226lax1qjow5r.cloudfront.net/blog/blogposts/build-voicemail-node-red-voice-api-dr/voicemail-featured-image.png

Créez votre propre boîte vocale avec Node-RED et l'API Voice de Nexmo

Publié le May 24, 2021

Temps de lecture : 14 minutes

Note : Certains des outils ou méthodes décrits dans cet article peuvent ne plus être pris en charge ou ne plus être d'actualité. Pour un contenu mis à jour ou une assistance, consultez nos derniers articles ou contactez-nous sur le site Communauté Vonage Slack

J'ai évité la messagerie vocale pendant la majeure partie de ma vie. La plupart du temps pour une raison simple : je n'arrivais jamais à saisir la totalité du message.

Je me serais estimé chanceux s'ils avaient bredouillé un numéro que j'aurais pu rappeler, si la boîte vocale avait été vide ou s'ils avaient dépassé leur prénom. Dans la plupart des cas, cela se passait comme suit :

"Bonjour Julia, c'est Ted, je suis avec je_ne_vais_vraiment_pas_prendre_le_nom. Je suis désolé que nous n'ayons pas pu nous entendre sur ce sujet - si tu es comme moi, je suis sûr que tu es tirée dans de nombreuses directions différentes et que tu es très occupée. Mais fais-moi plaisir, quand tu recevras ce message, rappelle-moi et laisse-moi un message pour me dire ce que tu as décidé de faire à propos de ma proposition. Quoi qu'il en soit, il serait bon que je le sache. Merci d'avance et j'attends votre appel..."

Ted... Mosby ? Crilly ? Peut-être, Cassidy ? Nous ne le saurons jamais.

Heureusement, créer sa propre boîte vocale dans Node-RED est à la fois plus rapide et plus facile que de déchiffrer ces messages. Suivez-nous pour voir comment cela fonctionne !

Ce que vous allez construire

Ce tutoriel fait partie du programme Série "Premiers pas avec Nexmo et Node-RED". de la série "Premiers pas avec Nexmo et Node-RED".

Ces articles vous montrent comment commencer à utiliser les API Nexmo telles que SMS, Voice et Verify. N'hésitez pas à vous y référer au fur et à mesure, ou au cas où vous souhaiteriez ajouter une autre fonctionnalité.

Dans ce tutoriel, nous allons créer un service de messagerie vocale simple qui permet aux appelants de joindre votre numéro Numbers et de laisser un message.

Le message vocal enregistré sera alors récupéré sur les serveurs de Nexmo et envoyé à votre adresse électronique.

Dépendances

Conditions préalables

Avant de commencer, vous aurez besoin de quelques éléments :

  • Node.js et Node-RED installés, si vous développez localement

  • Un moyen d'exposer votre serveur à l'internet. Cela signifie que vous utilisez une version hébergée de Node-RED, ou que vous utilisez un service de tunneling comme ngrok - pour vous familiariser avec ce service Démarrer avec Ngrok dans Node-RED tutoriel

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.

Obtenir ses diplômes

Pour utiliser les nœuds Nexmo dans Node-RED, vous devrez fournir vos identifiants, il est donc préférable de les garder à portée de main. Allez dans votre tableau de bord pour trouver votre clé API et votre secret, et notez-les.

Ensuite, vous aurez besoin d'un numéro virtuel compatible avec Voice vocal. Allez dans Numbers > Acheter des Numbers pour en obtenir un.

buy number nexmo dashboardbuy number nexmo dashboard

Configuration de l'éditeur Node-RED

Accédez à votre éditeur Node-RED en pointant votre navigateur sur http://localhost:1880.

Une fois l'éditeur ouvert, vous devez installer les nœuds Nexmo nodesle nœud nœud Ngrok(si vous n'utilisez pas une version hébergée de Node-RED) et le nœud par défaut Email par défaut. Vous pouvez le faire sous la palette Gérer la palette en recherchant les paquets correspondants et en cliquant sur installer :

  • Nexmo : node-red-contrib-nexmo

  • Ngrok : node-red-contrib-ngrok

  • Courriel : node-red-node-email

Après avoir redémarré Node-RED, vous devriez voir tous ces nœuds apparaître sur le côté gauche de votre écran - dans votre palette de nœuds, parmi d'autres nœuds par défaut.

Exposer votre serveur local à l'Internet

Si vous n'utilisez pas une version hébergée de Node-RED, l'API Voice de Nexmo aura besoin d'un autre moyen d'accéder à vos points de terminaison webhook. rendre votre serveur local accessible via l'internet public. Si vous exécutez Node-RED sur un serveur web public au lieu de votre machine locale, vous êtes prêt à passer à l'étape [Créer une application Nexmo Voice].

Un moyen pratique d'y parvenir est d'utiliser un service de tunnelisation tel que ngroket qu'il existe un nœud que vous venez d'ajouter à votre palette.

Il prend les cordes sur et off pour démarrer/arrêter le tunnel, et affiche l'adresse de l'hôte ngrok dans le champ msg.payload. Consultez notre tutoriel sur Débuter avec Ngrok dans Node-RED pour en savoir plus.

Importer du Presse-papiers l'extrait ci-dessous, ou essayez de construire ce chemin vous-même.

[
    {
        "id": "faed0f7.1e524f",
        "type": "inject",
        "z": "5b8bbfc3.1a9f18",
        "name": "",
        "topic": "",
        "payload": "on",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 190,
        "y": 100,
        "wires": [
            [
                "8a01baeb.6756d"
            ]
        ]
    },
    {
        "id": "11051fa9.75bd1",
        "type": "inject",
        "z": "5b8bbfc3.1a9f18",
        "name": "",
        "topic": "",
        "payload": "off",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 190,
        "y": 160,
        "wires": [
            [
                "8a01baeb.6756d"
            ]
        ]
    },
    {
        "id": "8a01baeb.6756d",
        "type": "ngrok",
        "z": "5b8bbfc3.1a9f18",
        "port": "1880",
        "creds": "5a9e2b8c.173a2c",
        "region": "ap",
        "subdomain": "",
        "name": "",
        "x": 400,
        "y": 140,
        "wires": [
            [
                "93fd5675.743c1"
            ]
        ]
    },
    {
        "id": "93fd5675.743c1",
        "type": "debug",
        "z": "5b8bbfc3.1a9f18",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "x": 620,
        "y": 140,
        "wires": []
    },
    {
        "id": "5a9e2b8c.173a2c",
        "type": "ngrokauth",
        "z": ""
    }
]

À ce stade, votre éditeur devrait ressembler à ceci :

ngrok pathngrok path

La dernière étape avant de cliquer sur Déployerouvrez les propriétés du nœud ngrok et spécifiez le numéro de port (1880 pour Node-RED) et la région.

Vous pouvez également ajouter votre authtoken si vous avez déjà un compte ngrok. Ne vous inquiétez pas si ce n'est pas le cas, sautez cette étape pour l'instant. Le nœud vous avertira qu'il n'est pas entièrement configuré, mais ce n'est pas un problème.

ngrok propertiesngrok properties

Frapper Déployer et cliquez sur l'icône sur inject puis naviguez vers l'URL affichée dans la zone de débogage (YOUR_URL pour référence future) pour trouver votre éditeur Node-RED à une adresse publique.

ngrok node-redngrok node-red

Créer une application Nexmo Voice

L'API Voice de Nexmo utilise les Applications Nexmo pour contenir les informations de sécurité et de configuration nécessaires pour se connecter aux terminaux Nexmo.

Dans la palette Nexmo Node-RED, plusieurs nœuds ont la capacité de créer ces Applications : getrecording, earmuff, mute, hangup, transfer, createcall, playaudio, playtts et playdtmf.

Faites glisser l'un de ces nœuds dans votre espace de travail, puis double-cliquez dessus pour ouvrir les propriétés du nœud.

A côté de l'application Nexmo Credentialssélectionnez "Add new nexmovoiceapp..." dans le menu déroulant et cliquez sur le bouton "Editer". Remplissez les détails ci-dessous et cliquez sur Créer une nouvelle application.

KEY DESCRIPTION
Name Choose a name for your Voice Application, for example "Nexmo Voice Application".
API Key Your Nexmo API key, shown in your account overview.
API Secret Your Nexmo API secret, shown in your account overview.
Answer URL YOUR_URL/answer, you'll be hosting a Nexmo Call Control Object (NCCO) here. - more about this later on.
Event URL YOUR_URL/event, you'll need to reference this when setting up the event handler.

Node-RED va alors créer une nouvelle Applications Nexmo sur votre Account et remplir les champs App ID et Private Key. Après cette étape, n'hésitez pas à supprimer le nœud Nexmo que vous avez utilisé, car un nœud de configuration a été créé et contient toutes les informations d'identification Nexmo dont ce flux a besoin. nexmovoiceapp config a été créé et contient toutes les informations d'identification Nexmo dont ce flux a besoin.

create voice appcreate voice app

Configurer un numéro à appeler

Ensuite, vous devrez lier votre numéro virtuel à cette application.

Trouvez l'Application Voice que vous venez de créer dans votre Nexmo Dashboard en naviguant vers Voice > Vos Applications.

Cliquez sur le nom de cette application, puis sous l'onglet Numbers cliquez sur l'onglet Lien à côté du numéro virtuel que vous avez loué précédemment.

Si le numéro que vous souhaitez utiliser est déjà lié à une autre application, cliquez sur Gérer le numéro et configurez-le pour qu'il transfère les appels entrants vers votre application.

link numberlink number

Conseil supplémentaire : Utilisez un nœud comment pour noter le numéro Numbers lié à votre application, vous l'aurez ainsi toujours à portée de main.

Traiter les appels entrants

Lorsque vous recevez un appel entrant vers votre numéro virtuel, l'API Voice de Nexmo envoie une demande à un point de terminaison que vous définissez. GET à un point de terminaison que vous définissez, YOUR_URL/answeret attend un ensemble d'instructions sur la manière de traiter l'appel.

Tout d'abord, mettons en œuvre ce point final.

Définir le point de terminaison Webhook pour les appels entrants

Ajouter un voice webhook et un nœud return ncco à votre espace de travail, et connectez-les ensemble pour définir un point de terminaison webhook. Ensuite, ouvrez les propriétés du nœud voice webhook et sélectionnez GET en tant que Method et tapez /answer dans le champ URL puis appuyez sur Déployer.

inbound webhookinbound webhook

C'est très bien ! Vous avez maintenant un webhook qui renvoie un NCCO à l'API de Nexmo. A ce stade, il ne contient pas d'instructions, alors ajoutons-en !

Construire l'objet de contrôle d'appel Nexmo (NCCO)

Les instructions attendues par l'API Nexmo se présentent sous la forme d'un Nexmo Call Control Objectégalement connu sous le nom de NCCO.

Il y a beaucoup d'actions différentes disponibles, trouvez les nœuds correspondants sous la palette Nexmo dans votre éditeur Node-RED ou consultez la section Référence NCCO pour en savoir plus.

Dans ce cas, vous voudrez probablement accueillir l'appelant puis commencer à enregistrer le message. Pour ce faire, vous devrez ajouter un nœud talk suivi d'un nœud record nœud.

Ajoutez-les à votre espace de travail, puis connectez-les entre les boutons voice webhook et return ncco entre les nœuds

talk

Ensuite, ouvrez l'éditeur de nœuds talk et définissez le champ Text{} au message que vous souhaitez lire à l'appelant. Par exemple : "Bonjour ! Vous avez joint X, veuillez laisser un message".

Si vous êtes nostalgique des messages vocaux de l'ancienne école, vous êtes prêt. D'un autre côté, vous pouvez également personnaliser l'expérience en sélectionnant un numéro d'identification de l'appelant. Voice Name ou en utilisant des balises balises SSMLafin que votre voix ressemble davantage à celle d'une personne qu'à celle d'un robot.

record

Dans les propriétés du record remplir le champ URL {} avec YOUR_URL/record. Il s'agit de l'eventURL auquel Nexmo renverra un ensemble de paramètres, une fois l'enregistrement terminé.

Si vous jetez un coup d'œil sur le site Référence NCCO vous vous rendrez vite compte que le numéro d'appel n'en fait pas partie.

Heureusement, nous pouvons récupérer le numéro de téléphone de l'appelant à partir de la answerURL et le transmettre en tant que paramètre de requête.

Mettre à jour le champ URL {} en YOUR_URL/record?from={{msg.call.from}}. De cette manière, nous pourrons accéder à la valeur de from par l'intermédiaire de l'eventURL de l'enregistrement en référençant msg.req.query.from.

Avant de passer à l'étape suivante, assurez-vous que vous avez sélectionné POST comme Method, MP3 en tant que Format et que vous avez défini une valeur pour End On Silence (par exemple 3).

voicemail recordvoicemail record

Si vous souhaitez voir le BCN généré, rendez-vous à l'adresse suivante YOUR_URL/answer. Vous y verrez un ensemble d'actions, ou "instructions", au format JSON que Nexmo utilisera pour contrôler le flux d'appels.

Prêt à aller plus loin ? Composez le numéro de votre Numbers pour le voir à l'œuvre !

voicemail NCCOvoicemail NCCO

Enregistrement de la recherche

À ce stade, l'appelant est accueilli par un message TTS suivi d'un signal sonore et son message est enregistré. L'étape suivante consiste à récupérer l'enregistrement sur les serveurs Nexmo.

Enregistrement eventURL

Tout d'abord, définissons l'URL de l'événement d'enregistrement où nous attendons que les paramètres d'enregistrement soient envoyés à la fin de l'enregistrement.

Ajoutez un http in à votre espace de travail, puis connectez un nœud http response ainsi qu'à un nœud debug à ce nœud. De cette manière, vous pouvez commencer à enregistrer des événements dans la zone de débogage et obtenir un peu plus d'informations sur ce qui se passe réellement.

Ouvrez les http in et sélectionnez POST en tant que Method et remplissez le champ URL avec /record.

Le nœud http response doit avoir 200 défini comme Status codemais ne vous inquiétez pas, c'est aussi la valeur par défaut.

Bien que les données d'enregistrement arrivent sous la forme de msg.payloadnous avons toujours la valeur from stockée dans msg.req.query.from. Veillez à sélectionner complete msg object dans l'éditeur du nœud debug dans l'éditeur du nœud Output.

Obtenir un enregistrement

Pour récupérer l'enregistrement, nous utiliserons le nœud getrecording Nexmo.
Ajoutez-en un à votre canevas, connectez-le au nœud /record http in et ouvrez son éditeur de nœuds.

Vous verrez deux champs :

  1. Nexmo Credentials - sélectionnez l'application vocale que vous avez créée précédemment dans le menu déroulant.

  2. Filename {} - Remarquez le signe {} dans l'étiquette, ce qui signifie que ce champ prend en charge le format Mustache templating et que sa valeur peut être définie de manière dynamique. Cela nous donne l'occasion parfaite d'inclure le numéro de l'appelant et un horodatage dans le nom du fichier. recordings/{{msg.req.query.from}}_{{msg.payload.timestamp}}.mp3.

Notez que ce nœud n'écrit pas l'audio sur le disque, le champ filename est là pour définir la valeur de msg.filename. Ensuite, vous pouvez emprunter différentes voies : télécharger l'audio sur votre propre serveur, suivre un nœud file et le télécharger sur votre ordinateur, ou utiliser un nœud e-mail et vous l'envoyer à vous-même.

Envoyer l'enregistrement à une adresse électronique

Pour cet exemple, nous utiliserons le nœud Node-RED e-mail par défaut, qui envoie le msg.payload en tant qu'e-mail, avec un objet de msg.topic.

Dans notre cas, msg.payload est un tampon binaire (l'enregistrement) et il sera converti en pièce jointe. Si vous souhaitez ajouter un corps à votre courrier électronique, définissez-le en tant que msg.description en utilisant un nœud change dans le flux avant le nœud e-mail avant le nœud

Le nom du fichier sera msg.filenameque nous avons déjà spécifié.

Connecter un change dans getrecordingsuivi d'un nœud e-mail nœud. Vous trouverez les deux dans votre palette de nœuds, change sous fonction et e-mail sous social. Voyons maintenant comment les configurer.

change

Ouvrez les propriétés du change et définissez deux règles à l'aide de la fonction set pour définir deux règles.

Tout d'abord, définissons msg.topicl'objet de l'e-mail.

Dans le champ supérieur, remplacer payload par topicpuis sélectionnez expression dans la liste déroulante to dans la liste déroulante, qui utilise la méthode JSONata qui utilise le langage de requête et d'expression JSONata. Pour inclure le numéro de l'appelant dans l'objet de l'e-mail, remplissez ce champ avec quelque chose comme 'Voicemail from ' & msg.req.query.from.

Cliquez sur le bouton ajouter pour définir une deuxième règle. Cette fois-ci, nous allons définir la valeur de msg.descriptionle corps du message. Vous pouvez à nouveau utiliser une expression, ou simplement une chaîne de caractères comme "Hey, you've got voicemail !".

voicemail changevoicemail change

Appuyer sur Terminé une fois que vous avez terminé, et passons au nœud e-mail nœud !

e-mail

Dans l'éditeur de nœuds e-mail il y a trois champs à remplir : To - l'adresse électronique du destinataire, Userid et Password - vos données de connexion à l'adresse électronique.

voicemail emailvoicemail email

Une fois que vous avez terminé, cliquez sur Terminé et Déployer. Votre boîte vocale est opérationnelle !

Enregistrer les événements d'appel

Une dernière chose avant de partir ! Il est très utile de voir les événements de vos appels dans la zone de débogage et d'avoir une meilleure compréhension de ce qui se passe réellement, alors ajoutons un webhook d'événement !

Connecter un nœud http in à un nœud http response ainsi qu'à un nœud debug afin que vous puissiez visualiser les événements d'appel dans la zone de débogage.

Dans le nœud http in sélectionnez POST en tant que Method et remplissez le champ URL avec /event.

Le nœud http response doit avoir 200 défini comme Status codemais ne vous inquiétez pas, c'est aussi la valeur par défaut.

voicemail flowvoicemail flow

Appelez maintenant votre numéro Numbers et suivez les événements de votre appel dans la barre latérale de débogage !

Essayez-le !

Et voilà ! Vous avez créé votre propre service de messagerie vocale et, avec un peu de chance, vous n'aurez plus jamais à vous soucier d'une autre boîte vocale gênante. Appelez votre numéro Numbers et un courriel vous sera envoyé dans les plus brefs délais.

Quelle est la prochaine étape ?

Pour en savoir plus

Essayer un autre tutoriel

Partager:

https://a.storyblok.com/f/270183/372x373/36054b72d0/julia-biro.png
Julia BiroDéfenseur des développeurs

Julia s'engage à aider ses collègues développeurs en créant des tutoriels, des guides et des ressources pratiques. Grâce à son expérience en matière de sensibilisation et d'éducation, elle vise à rendre la technologie plus accessible et à améliorer l'expérience globale des développeurs. Vous pouvez souvent la trouver lors d'événements communautaires locaux.