Passer des appels sortants avec Twilio Voice et OpenAI

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.jsAjoutez 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
- Lancez ngrok pour exposer votre serveur à Internet.
- Définissez la variable DOMAIN dans votre fichier
.envavec l'adresse de forwarding ngrok. - Exécutez le Twilio Dev Phone ou utilisez un caller ID vérifié.
- Passez un appel sortant en utilisant la commande :
node index.js --call=+33123456789Conclusion
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
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
Améliorer l'efficacité du service client : Exploiter les appels d'outils obligatoires dans ChatCompletion
Découvrez comment les appels d'outils obligatoires dans ChatCompletion peuvent améliorer l'efficacité du service client en fournissant des réponses cohérentes et des workflows rationalisés.

Explorer la nouvelle API Responses : Un guide complet
Plongez dans la nouvelle API Responses, conçue pour simplifier les interactions complexes et multimodales avec des conversations stateful et des outils hébergés.

Comment surveiller l'utilisation et les coûts OpenAI avec l'API Usage et l'API Cost
Apprenez à utiliser l'API Usage et l'API Cost d'OpenAI pour surveiller votre utilisation et vos coûts OpenAI. Ce guide fournit des instructions étape par étape pour récupérer, analyser et visualiser les données d'utilisation et de coûts.