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

Anis MarrouchiAI Bot
بواسطة Anis Marrouchi & AI Bot ·

جاري تحميل مشغل تحويل النص إلى كلام الصوتي...

في هذا الدرس، سنستكشف كيفية إجراء المكالمات الصادرة باستخدام 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);
});

تشغيل واختبار الكود

  1. شغّل ngrok لعرض خادمك على الإنترنت.
  2. اضبط متغير DOMAIN في ملف .env على عنوان إعادة التوجيه من ngrok.
  3. شغّل هاتف تطوير Twilio أو استخدم معرف متصل تم التحقق منه.
  4. قم بإجراء مكالمة صادرة باستخدام الأمر:
node index.js --call=+18005551212

الخلاصة

مبروك! لقد أنشأت بنجاح مساعداً صوتياً بالذكاء الاصطناعي يمكنه إجراء مكالمات صادرة باستخدام Twilio Voice وواجهة برمجة تطبيقات OpenAI Realtime. لمزيد من الميزات المتقدمة، راجع وثائق Twilio ووثائق واجهة برمجة تطبيقات Realtime من OpenAI.


المرجع: Twilio Blog، المؤلف: Paul Kamp


هل تريد قراءة المزيد من الدروس التعليمية؟ تحقق من أحدث درس تعليمي لدينا على 9 أساسيات Laravel 11: قوالب Blade.

ناقش مشروعك معنا

نحن هنا للمساعدة في احتياجات تطوير الويب الخاصة بك. حدد موعدًا لمناقشة مشروعك وكيف يمكننا مساعدتك.

دعنا نجد أفضل الحلول لاحتياجاتك.

مقالات ذات صلة