Comment envoyer des notifications vocales

L'appel téléphonique est une méthode prioritaire pour diffuser des alertes critiques. Dans ce guide, vous apprendrez à automatiser les notifications vocales vers une liste de destinataires, à diffuser un message personnalisé et à enregistrer la confirmation de l'utilisateur via le clavier (DTMF).

Conditions préalables

Initialiser votre dossier de projet

  1. Créez l'environnement dans lequel votre code et vos clés de sécurité seront conservés.
  2. Ouvrez votre terminal et créez un nouveau répertoire :
mkdir voice-notifications && cd voice-notifications
  1. Initialiser le projet et installer le SDK et Express de Vonage :
npm init -y npm install @vonage/server-sdk express

Exposez votre serveur local

Vonage needs to send webhooks to your local machine. Use ngrok to expose your server:

ngrok http 3000

ngrok will forward your local port 3000 to a public URL like https://{random-id}.ngrok.app.

Important: Keep this terminal window open while developing and testing. If you close ngrok, you’ll need to update your webhook URLs with the new address.

Copy this URL. You’ll need it when configuring your Vonage application in the next step.

Note: The free version of ngrok generates a new random URL each time you restart it. For a consistent URL during development, consider using ngrok reserved domains or upgrading to a paid plan.

Créer une application Vonage

Générez vos informations d'identification via le tableau de bord et enregistrez-les dans le dossier que vous venez de créer.

  1. Connectez-vous au tableau de bord de Vonage.

  2. Aller à Applications > Créer une nouvelle application.

  3. Authentification : Cliquez sur Générer des clés publiques et privées.

    • Un fichier nommé private.key sera téléchargé.
    • Déplacer ceci private.key de votre dossier Téléchargements dans votre voice-notifications dossier.
  4. Capacités : Activer la voix.

  5. Dans les paramètres vocaux, définissez les webhooks suivants :

    • URL de la réponse : https://{random-id}.ngrok.app/answer (Méthode :
      GET
      )
    • URL de l'événement : https://{random-id}.ngrok.app/event (Méthode :
      POST
      )
  6. Cliquez sur Enregistrer les modifications en bas.

Créer le serveur Webhook (server.js)

Lorsque Vonage répond à un appel, il récupère un numéro d'identification de l'appelant. Objet de contrôle d'appel (NCCO) de votre answer_url. Ce tableau JSON définit le "script" que l'appel suit. Créer un fichier nommé server.js et mettre en place le webhook pour fournir le NCCO :


const express = require('express');
const app = express();
app.use(express.json());

app.get('/answer', (req, res) => {
  // NCCO defines what the recipient hears
  res.json([
    {
      action: 'talk',
      text: 'This is a priority notification. Please press 1 to confirm receipt.'
    },
    {
      action: 'input',
      type: [ 'dtmf' ],
      dtmf: { maxDigits: 1 }
    }
  ]);
});

app.post('/event', (req, res) => {
  // Capture the button press
  if (req.body.dtmf && req.body.dtmf.digits === '1') {
    console.log(`✅ Confirmation received from UUID: ${req.body.uuid}`);
  }
 if (status) {
    console.log(`Call Status Update: ${status} (UUID: ${req.body.uuid})`);
  }
  res.status(204).send();
});

app.listen(3000, () => console.log('🚀 Webhook server listening on port 3000'));

Créer le script de diffusion (broadcast.js)

Créer un fichier nommé broadcast.js. Ce script déclenche les appels sortants.


const { Vonage } = require('@vonage/server-sdk');

// --- 1. CONFIGURATION ---
const API_KEY = "YOUR_API_KEY";
const API_SECRET = "YOUR_API_SECRET";
const APP_ID = "YOUR_APP_ID";
const VONAGE_NUMBER = "YOUR_VONAGE_NUMBER";
const TUNNEL_URL = "https://{random-id}.ngrok.app" // From the ngrok step above

// --- 2. PLACEHOLDER PROTECTION ---
const config = { API_KEY, API_SECRET, APP_ID, VONAGE_NUMBER, TUNNEL_URL };
Object.keys(config).forEach(key => {
    if (config[key].includes("YOUR")) {
        console.error(`❌ ERROR: The ${key} placeholder has not been updated!`);
        process.exit(1);
    }
});

const vonage = new Vonage({
  apiKey: API_KEY,
  apiSecret: API_SECRET,
  applicationId: APP_ID,
  privateKey: './private.key'
});

const recipients = [
  { name: 'Alice', number: '15551234567' }
];

async function broadcast() {
  for (const person of recipients) {
    try {
      const result = await vonage.voice.createOutboundCall({
        to: [{ type: 'phone', number: person.number }],
        from: { type: 'phone', number: VONAGE_NUMBER },
        answer_url: [`${TUNNEL_URL}/answer`],
        event_url: [`${TUNNEL_URL}/event`]
      });
      console.log(`☎️  Calling ${person.name}... (UUID: ${result.uuid})`);
    } catch (err) {
      console.error(`❌ Failed to call ${person.name}:`, err.message);
    }
  }
}

broadcast();

Remplacer YOUR_VONAGE_NUMBER avec n'importe lequel de vos numéros Vonage. Si vous avez un nouveau compte Vonage sans numéro, vous pouvez utiliser le numéro de test 123456789 comme identifiant de l'appelant, et appeler le numéro que vous avez initialement fourni lors de l'inscription. Veuillez noter que cette fonction n'est disponible que pour les comptes de démonstration ou d'essai jusqu'à ce que vous ajoutiez du crédit à votre compte.

Testez votre notification

  1. Démarrez votre serveur : Exécuter node server.js dans le dossier de votre projet.
  2. Lancez la diffusion : Dans un autre terminal, exécutez node broadcast.js. Votre téléphone sonnera, diffusera le message et enregistrera votre confirmation sur la console lorsque vous appuierez sur le "1".

Prochaines étapes

Personnalisation : Changer synthèse vocale ou utiliser la fonction flux dans votre BCN pour lire des fichiers MP3 préenregistrés au lieu de la synthèse vocale.

L'IA vocale : Écouter la réponse du destinataire avec de la parole au texte ou connecter un robot vocal avec WebSocket.

Répondeurs téléphoniques : Utilisation détection du répondeur téléphonique pour laisser un message vocal.

Évolutivité : Pour les listes importantes, mettre en place un système de file d'attente pour respecter les règles de Vonage. Limites de taux.