ایجاد یک سیستم telemarketing با Twilio Video و React

چندی پیش من در اجرای یک سیستم Teletermination با استفاده از Twilio Video کار کردم تا پزشکان و بیماران بتوانند با خیال راحت و کارآمد ارتباط برقرار کنند. علاوه بر این ، من مکانیسمی را اجرا کردم تا افراد دیگر بتوانند از طریق پیوندهایی با نشانه های مجوز وارد اتاق شوند.
در این مقاله ، من تجربه خود را ، چالش های پیش روی و چگونگی ادغام ویدیوی Twilio را با React در Frontend به اشتراک می گذارم.
📌 چرا فیلم Twilio را انتخاب کردم؟
Twilio Video یک راه حل قوی برای تماس های ویدیویی ، ارائه ایمنی ، مقیاس پذیری و ادغام آسان با سایر ابزارها است. برخی از دلایلی که باعث شد من آن را انتخاب کنم عبارتند از:
- پشتیبانی از چندین شرکت کننده
- تأخیر کم و کیفیت فیلم قابل تنظیم
- کنترل مجوزها با نشانه های JWT
- API های مستند خوب
🔧 پیکربندی پس زمینه با Twilio
در این شرکت ، Backend در جاوا توسعه یافته است ، اما در اینجا من اجرای را با استفاده از Node.js نشان خواهم داد ، زیرا این فناوری است که هنگام بازگشت به پشت ، بیشترین تسلط دارد.
برای تولید نشانه های JWT و تأیید هویت کاربران در Twilio ، می توانیم یک سرور کوچک در Node.js با Express ایجاد کنیم:
const express = require("express");
const twilio = require("twilio");
require("dotenv").config();
const app = express();
const port = 3001;
const { TWILIO_ACCOUNT_SID, TWILIO_API_KEY, TWILIO_API_SECRET } = process.env;
app.use(express.json());
app.post("/token", (req, res) => {
const { identity, room } = req.body;
const AccessToken = twilio.jwt.AccessToken;
const VideoGrant = AccessToken.VideoGrant;
const token = new AccessToken(
TWILIO_ACCOUNT_SID,
TWILIO_API_KEY,
TWILIO_API_SECRET,
{ identity }
);
token.addGrant(new VideoGrant({ room }));
res.json({ token: token.toJwt() });
});
app.listen(port, () => {
console.log(`Servidor rodando em http://localhost:${port}`);
});
این سرور ساده یک توکن JWT ایجاد می کند تا کاربران بتوانند با خیال راحت وارد اتاق ویدیویی شوند.
🎨 ایجاد رابط با React
با استفاده از Backend Ready ، مرحله بعدی ادغام در قسمت جلویی با استفاده از React بود.
1⃣ نصب Twilio SDK
در قسمت جلویی ، بسته لازم را نصب کردم:
npm install @twilio/video
2 ⃣ ایجاد اتصال به اتاق
در React ، من یک قلاب ایجاد کردم تا کاربر را به یک اتاق ویدیویی متصل کنم:
import { useState, useEffect } from "react";
import Video from "twilio-video";
export const useVideoChat = (token, roomName) => {
const [room, setRoom] = useState(null);
const [participants, setParticipants] = useState([]);
const [isMuted, setIsMuted] = useState(false);
const [isCameraOn, setIsCameraOn] = useState(true);
useEffect(() => {
if (token) {
Video.connect(token, { name: roomName }).then(room => {
setRoom(room);
setParticipants([...room.participants.values()]);
room.on("participantConnected", participant => {
setParticipants(prev => [...prev, participant]);
});
room.on("participantDisconnected", participant => {
setParticipants(prev => prev.filter(p => p !== participant));
});
});
}
}, [token]);
const toggleMute = () => {
setIsMuted(!isMuted);
};
const toggleCamera = () => {
setIsCameraOn(!isCameraOn);
};
const leaveRoom = () => {
room?.disconnect();
setRoom(null);
};
return { room, participants, isMuted, isCameraOn, toggleMute, toggleCamera, leaveRoom };
};
3⃣ نشان دادن فیلم و کنترل
سرانجام ، من یک جزء Videroom برای نمایش فیلم های شرکت کنندگان متصل و اضافه کردن دکمه های کنترل ایجاد کردم:
import React, { useRef, useEffect, useState } from "react";
const Participant = ({ participant }) => {
const videoRef = useRef();
useEffect(() => {
participant.tracks.forEach(trackPub => {
if (trackPub.track) {
videoRef.current.appendChild(trackPub.track.attach());
}
});
}, [participant]);
return (
<div>
<h3>{participant.identity}</h3>
<div ref={videoRef}></div>
</div>
);
};
export const VideoRoom = ({ participants, toggleMute, toggleCamera, leaveRoom }) => {
const [showModal, setShowModal] = useState(false);
const shareLink = "https://meusite.com/sala?token=xyz";
return (
<div>
{participants.map(participant => (
<Participant key={participant.sid} participant={participant} />
))}
<button onClick={toggleMute}>Mutar</button>
<button onClick={toggleCamera}>Ligar/Desligar Câmera</button>
<button onClick={() => setShowModal(true)}>Compartilhar</button>
<button onClick={leaveRoom}>Finalizar Chamada</button>
{showModal && (
<div className="modal">
<p>Compartilhe este link:</p>
<input type="text" value={shareLink} readOnly />
<button onClick={() => setShowModal(false)}>Fechar</button>
</div>
)}
</div>
);
};
🚀 نتیجه گیری
ادغام ویدیوی Twilio با React یک تجربه چالش برانگیز اما با ارزش بود. این سیستم اکنون به پزشکان و بیماران اجازه می دهد تا با خیال راحت از طریق فیلم ارتباط برقرار کنند و اشخاص ثالث می توانند با پیوند مجاز به اتاق بپیوندند. علاوه بر این ، من دکمه هایی را برای جهش میکروفون ، روشن یا خاموش کردن دوربین ، به اشتراک گذاشتن لینک اتاق و پایان تماس (حذف کاربر از جلسه) اجرا کردم.
اگر به فکر اجرای چیزی مشابه هستید ، من اکیداً توصیه می کنم اسناد رسمی Twilio را بررسی کنید و تنظیمات مختلف را برای بهینه سازی تجربه کاربر آزمایش کنید.
اگر سؤال دارید یا می خواهید تجربه خود را به اشتراک بگذارید ، نظر خود را بگذارید! 😊