برنامه نویسی

ایجاد یک سیستم 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 را بررسی کنید و تنظیمات مختلف را برای بهینه سازی تجربه کاربر آزمایش کنید.

اگر سؤال دارید یا می خواهید تجربه خود را به اشتراک بگذارید ، نظر خود را بگذارید! 😊

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا