Passer des appels sortants avec Twilio Voice et OpenAI

Anis MarrouchiAI Bot
Par Anis Marrouchi & AI Bot ·

Chargement du lecteur de synthèse vocale...

Dans ce tutoriel, nous explorerons comment passer des appels sortants en utilisant Twilio Voice et l'API Realtime d'OpenAI avec Node.js. Ce guide vous accompagnera à travers les étapes nécessaires, y compris la configuration de votre projet, l'installation des dépendances et l'écriture du code serveur.

Prérequis

Avant de commencer, assurez-vous d'avoir les éléments suivants :

  • Node.js 18+ installé sur votre machine.
  • Un compte Twilio et un numéro Twilio avec des capacités vocales.
  • Un compte OpenAI avec une clé API et un accès à l'API Realtime.
  • Ngrok ou une autre solution de tunneling pour exposer votre serveur local à Internet.

Étape 1 : Configurer votre projet

Commencez par créer un nouveau répertoire pour votre projet et initialiser un projet Node.js.

mkdir outbound-calling-speech-assistant-openai-realtime-api-node
cd outbound-calling-speech-assistant-openai-realtime-api-node
npm init -y; npm pkg set type="module"

Étape 2 : Installer les dépendances

Installez les packages requis pour votre projet.

npm install fastify ws dotenv @fastify/formbody @fastify/websocket twilio

Étape 3 : Créer les fichiers du projet

Créez les fichiers nécessaires pour votre projet, y compris index.js pour votre code serveur et .env pour les variables d'environnement.

touch .env index.js

Ajoutez vos identifiants API au fichier .env :

TWILIO_ACCOUNT_SID="votre_twilio_account_sid"
TWILIO_AUTH_TOKEN="votre_twilio_auth_token"
PHONE_NUMBER_FROM="votre_numero_twilio"
DOMAIN="votre_domaine_ngrok"
OPENAI_API_KEY="votre_cle_api_openai"

Étape 4 : Écrire le code serveur

Ouvrez index.js et commencez par importer les modules nécessaires et configurer les variables d'environnement.

import Fastify from 'fastify';
import WebSocket from 'ws';
import dotenv from 'dotenv';
import fastifyFormBody from '@fastify/formbody';
import fastifyWs from '@fastify/websocket';
import twilio from 'twilio';
 
dotenv.config();
 
const { TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, PHONE_NUMBER_FROM, DOMAIN, OPENAI_API_KEY } = process.env;
 
const client = twilio(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN);
const fastify = Fastify();
fastify.register(fastifyFormBody);
fastify.register(fastifyWs);

Définir un filtre de numéro

Créez une fonction pour vérifier si un numéro est autorisé à être appelé.

async function isNumberAllowed(to) {
  try {
    const incomingNumbers = await client.incomingPhoneNumbers.list({ phoneNumber: to });
    if (incomingNumbers.length > 0) {
      return true;
    }
    const outgoingCallerIds = await client.outgoingCallerIds.list({ phoneNumber: to });
    if (outgoingCallerIds.length > 0) {
      return true;
    }
    return false;
  } catch (error) {
    console.error('Erreur lors de la vérification du numéro:', error);
    return false;
  }
}

Fonction pour passer un appel sortant

Créez une fonction pour passer un appel sortant en utilisant Twilio.

async function makeCall(to) {
  try {
    const isAllowed = await isNumberAllowed(to);
    if (!isAllowed) {
      console.warn(`Le numéro ${to} n'est pas reconnu comme un numéro sortant valide.`);
      process.exit(1);
    }
 
    const call = await client.calls.create({
      from: PHONE_NUMBER_FROM,
      to,
      twiml: outboundTwiML,
    });
    console.log(`Appel démarré avec SID: ${call.sid}`);
  } catch (error) {
    console.error('Erreur lors de l\'appel:', error);
  }
}

Initialiser et lancer le serveur

Configurez le serveur pour écouter sur un port spécifié et initiez un appel sortant.

fastify.listen({ port: PORT }, (err) => {
  if (err) {
    console.error(err);
    process.exit(1);
  }
  console.log(`Le serveur écoute sur le port ${PORT}`);
 
  const args = process.argv.slice(2);
  const phoneNumberArg = args.find(arg => arg.startsWith('--call='));
  if (!phoneNumberArg) {
    console.error('Veuillez fournir un numéro de téléphone à appeler, ex: --call=+33123456789');
    process.exit(1);
  }
  const phoneNumberToCall = phoneNumberArg.split('=')[1].trim();
  makeCall(phoneNumberToCall);
});

Exécuter et tester votre code

  1. Lancez ngrok pour exposer votre serveur à Internet.
  2. Définissez la variable DOMAIN dans votre fichier .env avec l'adresse de forwarding ngrok.
  3. Exécutez le Twilio Dev Phone ou utilisez un caller ID vérifié.
  4. Passez un appel sortant en utilisant la commande :
node index.js --call=+33123456789

Conclusion

Félicitations ! Vous avez créé avec succès un assistant vocal IA capable de passer des appels sortants en utilisant Twilio Voice et l'API Realtime d'OpenAI. Pour des fonctionnalités plus avancées, consultez la documentation Twilio et les docs de l'API Realtime d'OpenAI.


Référence : Twilio Blog, Auteur : Paul Kamp


Vous voulez lire plus de tutoriels? Découvrez notre dernier tutoriel sur Maîtriser les statistiques : Des bases descriptives à la régression avancée et aux tests d'hypothèses.

Discutez de votre projet avec nous

Nous sommes ici pour vous aider avec vos besoins en développement Web. Planifiez un appel pour discuter de votre projet et comment nous pouvons vous aider.

Trouvons les meilleures solutions pour vos besoins.

Articles connexes