إجراء المكالمات الصادرة باستخدام Twilio Voice و OpenAI

في هذا الدرس، سنستكشف كيفية إجراء المكالمات الصادرة باستخدام Twilio Voice وواجهة برمجة تطبيقات OpenAI Realtime مع Node.js. سيرشدك هذا الدليل خلال الخطوات اللازمة، بما في ذلك إعداد مشروعك، وتثبيت التبعيات، وكتابة كود الخادم.
المتطلبات الأساسية
قبل البدء، تأكد من توفر ما يلي:
- Node.js 18+ مثبت على جهازك.
- حساب Twilio ورقم Twilio مع قدرات صوتية.
- حساب OpenAI مع مفتاح API ووصول إلى واجهة برمجة تطبيقات Realtime.
- Ngrok أو حل نفق آخر لعرض خادمك المحلي على الإنترنت.
الخطوة 1: إعداد مشروعك
ابدأ بإنشاء مجلد جديد لمشروعك وتهيئة مشروع 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"الخطوة 2: تثبيت التبعيات
ثبّت الحزم المطلوبة لمشروعك.
npm install fastify ws dotenv @fastify/formbody @fastify/websocket twilioالخطوة 3: إنشاء ملفات المشروع
أنشئ الملفات اللازمة لمشروعك، بما في ذلك index.js لكود الخادم و .env لمتغيرات البيئة.
touch .env index.jsأضف بيانات اعتماد API إلى ملف .env:
TWILIO_ACCOUNT_SID="your_twilio_account_sid"
TWILIO_AUTH_TOKEN="your_twilio_auth_token"
PHONE_NUMBER_FROM="your_twilio_phone_number"
DOMAIN="your_ngrok_domain"
OPENAI_API_KEY="your_openai_api_key"الخطوة 4: كتابة كود الخادم
افتح index.js في محرر النصوص المفضل لديك وابدأ باستيراد الوحدات اللازمة وإعداد متغيرات البيئة.
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);تعريف فلتر الأرقام
أنشئ دالة للتحقق مما إذا كان الرقم مسموحاً بالاتصال به.
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('خطأ في التحقق من رقم الهاتف:', error);
return false;
}
}دالة إجراء مكالمة صادرة
أنشئ دالة لإجراء مكالمة صادرة باستخدام Twilio.
async function makeCall(to) {
try {
const isAllowed = await isNumberAllowed(to);
if (!isAllowed) {
console.warn(`الرقم ${to} غير معروف كرقم صادر صالح أو معرف متصل.`);
process.exit(1);
}
const call = await client.calls.create({
from: PHONE_NUMBER_FROM,
to,
twiml: outboundTwiML,
});
console.log(`بدأت المكالمة بمعرف SID: ${call.sid}`);
} catch (error) {
console.error('خطأ في إجراء المكالمة:', error);
}
}تهيئة وإطلاق الخادم
إعداد الخادم للاستماع على منفذ محدد وبدء مكالمة صادرة.
fastify.listen({ port: PORT }, (err) => {
if (err) {
console.error(err);
process.exit(1);
}
console.log(`الخادم يستمع على المنفذ ${PORT}`);
const args = process.argv.slice(2);
const phoneNumberArg = args.find(arg => arg.startsWith('--call='));
if (!phoneNumberArg) {
console.error('يرجى توفير رقم هاتف للاتصال، مثال: --call=+18885551212');
process.exit(1);
}
const phoneNumberToCall = phoneNumberArg.split('=')[1].trim();
makeCall(phoneNumberToCall);
});تشغيل واختبار الكود
- شغّل ngrok لعرض خادمك على الإنترنت.
- اضبط متغير DOMAIN في ملف
.envعلى عنوان إعادة التوجيه من ngrok. - شغّل هاتف تطوير Twilio أو استخدم معرف متصل تم التحقق منه.
- قم بإجراء مكالمة صادرة باستخدام الأمر:
node index.js --call=+18005551212الخلاصة
مبروك! لقد أنشأت بنجاح مساعداً صوتياً بالذكاء الاصطناعي يمكنه إجراء مكالمات صادرة باستخدام Twilio Voice وواجهة برمجة تطبيقات OpenAI Realtime. لمزيد من الميزات المتقدمة، راجع وثائق Twilio ووثائق واجهة برمجة تطبيقات Realtime من OpenAI.
المرجع: Twilio Blog، المؤلف: Paul Kamp
ناقش مشروعك معنا
نحن هنا للمساعدة في احتياجات تطوير الويب الخاصة بك. حدد موعدًا لمناقشة مشروعك وكيف يمكننا مساعدتك.
دعنا نجد أفضل الحلول لاحتياجاتك.
مقالات ذات صلة
تعزيز كفاءة خدمة العملاء: الاستفادة من استدعاءات الأدوات الإلزامية في ChatCompletion
اكتشف كيف يمكن لاستدعاءات الأدوات الإلزامية في ChatCompletion تعزيز كفاءة خدمة العملاء من خلال توفير ردود متسقة وسير عمل مبسط.

استكشاف واجهة برمجة تطبيقات Responses الجديدة: دليل شامل
تعمق في واجهة برمجة تطبيقات Responses الجديدة، المصممة لتبسيط التفاعلات المعقدة ومتعددة الوسائط مع المحادثات ذات الحالة والأدوات المستضافة.

كيفية مراقبة استخدام وتكاليف OpenAI باستخدام Usage API و Cost API
تعلم كيفية استخدام واجهة برمجة تطبيقات Usage API و Cost API من OpenAI لمراقبة استخدامك وتكاليفك. يوفر هذا الدليل تعليمات خطوة بخطوة لاسترجاع وتحليل وتصور بيانات الاستخدام والتكلفة.