BIGBLUEBUTTON IRAN · DEVELOPERS

کلاس آنلاین،
متصل به سامانه شما

مستندات API بیگ بلو باتن، راهنمای اتصال و افزونه‌های مودل و وردپرس؛ از اولین درخواست تا ورود به کلاس.

● ● ●YOUR APP → BIGBLUEBUTTON
// One connection. Your classroom.
create({ meetingID })
  → SUCCESS

join({ role: "VIEWER" })
  → Classroom ready
HTTPS · Signed requests · Standard API
API استاندارداتصال از سمت سروردسترسی از حساب شمامدیریت جلسات ← تنظیماتافزونه‌های آمادهمودل و وردپرس
01

شروع اتصال به API

وب‌سایت، نرم‌افزار یا سامانه آموزشی خود را به کلاس آنلاین متصل کنید. API بیگ بلو باتن ایران از ساختار استاندارد BigBlueButton استفاده می‌کند؛ دریافت اطلاعات اتصال از حساب شما انجام می‌شود.

  1. وارد سامانه شویدبا حساب خود وارد app.bigbluebutton.me شوید.
  2. مدیریت جلسات ← تنظیماتدر این بخش، URL و Secret اختصاصی اتصال خود را بردارید.
  3. اتصال را در سرور برنامه تنظیم کنیدURL را با همان مسیر نمایش‌داده‌شده استفاده کنید. Secret فقط در تنظیمات امن سمت سرور ذخیره شود.
قبل از توسعه

نشانی ورود به پنل، آدرس API نیست. مسیر API حساب خود را از تنظیمات بردارید؛ نشانی آن را حدس نزنید و بخش /api را بدون بررسی دوباره اضافه نکنید.

02

احراز هویت و امضای درخواست

درخواست را با نام دقیق متد و پارامترهای URL بسازید. سپس checksum را از اتصال نام متد، رشته پارامترها و Secret محاسبه کنید. Secret خودش نباید در URL ارسال شود.

checksum = HASH(methodName + exactQueryString + sharedSecret)
  • رشته امضا و رشته ارسال‌شده باید از نظر ترتیب، فاصله‌ها و URL encoding یکسان باشند.
  • پارامتر checksum را بعد از محاسبه به URL اضافه کنید؛ خودش جزو رشته امضا نیست.
  • نمونه این صفحه از SHA-1 برای سازگاری با اتصال‌های متداول استفاده می‌کند. الگوریتم‌های SHA-256 / SHA-512 فقط در صورت پشتیبانی تنظیمات سرویس انتخاب شوند.
  • در درخواست POST، محاسبه checksum بر اساس query string آدرس است. بدنه XML یا multipart را به فرمول اضافه نکنید.
  • Secret را در JavaScript مرورگر، مخزن عمومی، ابزار آنلاین ساخت checksum یا فایل دانلودی قرار ندهید.
03

نمونه عملی PHP: ساخت جلسه و ورود

مقادیر BBB_API_URL و BBB_SHARED_SECRET را در محیط امن سرور برنامه تعریف کنید. URL در این نمونه باید آدرس کامل پوشه API باشد. کد زیر نقطه شروع اتصال است؛ ورود کاربر، مجوز دسترسی به دوره و تعیین نقش را در برنامه خود پیاده کنید.

<?php
// Run on your application server. Requires PHP cURL + SimpleXML.
$base = rtrim((string) getenv('BBB_API_URL'), '/') . '/';
$secret = (string) getenv('BBB_SHARED_SECRET');
if (!str_starts_with($base, 'https://') || $secret === '') {
    throw new RuntimeException('Configure API URL and secret first.');
}
function bbbUrl(string $method, array $params): string {
    global $base, $secret;
    $query = http_build_query($params, '', '&', PHP_QUERY_RFC3986);
    $checksum = hash('sha1', $method . $query . $secret);
    return $base . $method . '?' . $query
        . ($query === '' ? '' : '&') . 'checksum=' . $checksum;
}
function bbbRequest(string $method, array $params): SimpleXMLElement {
    $curl = curl_init(bbbUrl($method, $params));
    curl_setopt_array($curl, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CONNECTTIMEOUT => 5,
        CURLOPT_TIMEOUT => 20,
        CURLOPT_FOLLOWLOCATION => false,
        CURLOPT_SSL_VERIFYPEER => true,
        CURLOPT_SSL_VERIFYHOST => 2,
    ]);
    $body = curl_exec($curl);
    $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
    curl_close($curl);
    if ($body === false || $status !== 200) {
        throw new RuntimeException('API transport error');
    }
    libxml_use_internal_errors(true);
    $xml = simplexml_load_string($body, 'SimpleXMLElement', LIBXML_NONET);
    if ($xml === false || (string) $xml->returncode !== 'SUCCESS') {
        // Record a sanitized messageKey internally; never log the URL/secret.
        throw new RuntimeException('API operation failed');
    }
    return $xml;
}
// Obtain meetingID from your authorized server-side application data.
$meetingID = 'course-42-session-1';
$meeting = bbbRequest('create', [
    'name' => 'Online class',
    'meetingID' => $meetingID,
    'record' => 'true',
]);
// Authenticate the user and check course access before generating this URL.
// Only your server decides MODERATOR/VIEWER; do not trust a browser field.
$joinUrl = bbbUrl('join', [
    'meetingID' => $meetingID,
    'fullName' => 'Demo learner',
    'userID' => 'student-1001',
    'role' => 'VIEWER',
]);
// In a web controller, after authorization and before any output:
// header('Location: ' . $joinUrl, true, 303);
// exit;

برای ورود مدیر، فقط پس از احراز هویت و بررسی مجوز، مقدار role را روی MODERATOR بگذارید. لینک امضاشده ورود را مانند یک اطلاعات دسترسی حساس نگهداری کنید؛ آن را عمومی یا در گزارش‌های تحلیلی ثبت نکنید.

04

مرجع متدهای API

همه درخواست‌های زیر به امضای معتبر نیاز دارند. فهرست پارامترهای این صفحه روی کاربردهای اصلی متمرکز است؛ پارامترهای پیشرفته و تفاوت نسخه‌ها از مرجع هر متد در دسترس است.

createساخت جلسه

GET / POST · پاسخ: XML

پارامتر / مقدارتوضیح
nameالزامی؛ نام قابل نمایش جلسه.
meetingIDالزامی؛ شناسه پایدار و یکتای جلسه در برنامه شما.
recordاختیاری؛ true برای فعال کردن امکان ضبط.
durationاختیاری؛ محدودیت زمان بر حسب دقیقه، مطابق سیاست سرویس.
welcomeاختیاری؛ پیام خوش‌آمدگویی.
logoutURLاختیاری؛ مقصد خروج کاربر.
autoStartRecordingاختیاری؛ شروع خودکار ضبط در سرویس پشتیبانی‌کننده.
allowStartStopRecordingاختیاری؛ اجازه کنترل ضبط توسط مدیر.
meta_*اختیاری؛ فراداده دلخواه، بدون اطلاعات محرمانه.

پس از SUCCESS شناسه جلسه را در برنامه ذخیره کنید. تکرار create با همان شناسه لزوما جلسه جدید نمی‌سازد؛ پارامترهای متناقض را بررسی کنید. فعال بودن record به معنی آماده شدن فوری فایل ضبط نیست.

پارامترهای کامل create در مرجع رسمی ↗
joinورود کاربر به کلاس

GET · پاسخ: Redirect / XML

پارامتر / مقدارتوضیح
meetingIDالزامی؛ شناسه جلسه ساخته‌شده.
fullNameالزامی؛ نام نمایشی کاربر.
roleMODERATOR یا VIEWER؛ در نسخه‌های سازگار به جای password استفاده می‌شود.
passwordروش قدیمی تعیین نقش؛ فقط در اتصال‌هایی که به آن نیاز دارند.
userIDاختیاری؛ شناسه کاربر در برنامه شما.
redirectپیش‌فرض true؛ ورود مرورگر به کلاس. حالت false برای بررسی پاسخ اتصال.

در درخواست ورود باید نقش معتبر یا رمز نقش وجود داشته باشد. نشانی join امضاشده را با redirect مرورگر باز کنید، نه با نمایش Secret به کاربر. role بر password معتبر اولویت دارد.

پارامترهای کامل join در مرجع رسمی ↗
insertDocumentافزودن ارائه به جلسه فعال

POST · پاسخ: XML

پارامتر / مقدارتوضیح
meetingIDالزامی؛ شناسه جلسه فعال.
XML bodyبدنه XML با module presentation و document؛ نشانی HTTPS فایل یا محتوای base64.

درخواست POST با Content-Type: application/xml ارسال می‌شود. پاسخ SUCCESS به معنی پذیرش درخواست است؛ دریافت و تبدیل ارائه در پس‌زمینه انجام می‌شود. فرمت‌های مجاز و محدودیت حجم تابع سرور هستند.

پارامترهای کامل insertDocument در مرجع رسمی ↗
isMeetingRunningبررسی وضعیت جلسه

GET / POST · پاسخ: XML

پارامتر / مقدارتوضیح
meetingIDالزامی؛ شناسه جلسه.

پاسخ running نشان می‌دهد جلسه در حال اجرا هست یا نه. polling را با فاصله منطقی انجام دهید و در خطای موقت، فاصله را بیشتر کنید.

پارامترهای کامل isMeetingRunning در مرجع رسمی ↗
getMeetingInfoجزئیات جلسه و حاضران

GET / POST · پاسخ: XML

پارامتر / مقدارتوضیح
meetingIDالزامی؛ شناسه جلسه.

اطلاعات وضعیت و کاربران حاضر برای نظارت بر جلسه است. گزارش حضور قابل استناد را در سامانه خود با توجه به سیاست سرویس نگهداری کنید.

پارامترهای کامل getMeetingInfo در مرجع رسمی ↗
getMeetingsفهرست جلسه‌های قابل مشاهده

GET / POST · پاسخ: XML

پارامتر / مقدارتوضیح
checksumالزامی؛ امضای درخواست با query string خالی.

این متد پارامتر اختصاصی الزامی ندارد، اما checksum لازم است. آن را معادل فهرست همه کلاس‌های حساب پنل فرض نکنید؛ دامنه داده قابل مشاهده به سرویس و نحوه ساخت جلسه بستگی دارد.

پارامترهای کامل getMeetings در مرجع رسمی ↗
endپایان دادن به جلسه

GET / POST · پاسخ: XML

پارامتر / مقدارتوضیح
meetingIDالزامی؛ شناسه جلسه.
passwordدر نسخه‌های قدیمی رمز مدیر؛ در نسخه‌های جدید منسوخ شده است.

این عملیات کاربران را از جلسه خارج می‌کند. موفقیت پاسخ به معنی ارسال درخواست پایان است؛ چند ثانیه بعد با isMeetingRunning وضعیت را بررسی کنید. در برنامه خود تایید مدیر را بگیرید.

پارامترهای کامل end در مرجع رسمی ↗
getRecordingsفهرست ضبط‌ها

GET · پاسخ: XML

پارامتر / مقدارتوضیح
meetingIDاختیاری؛ یک یا چند شناسه جلسه با ویرگول.
recordIDاختیاری؛ شناسه ضبط؛ در صورت استفاده بر meetingID اولویت دارد.
stateاختیاری؛ فیلتر وضعیت مانند published یا unpublished.
offset / limitصفحه‌بندی در نسخه‌های پشتیبانی‌کننده.

ضبط پس از پردازش آماده می‌شود. خالی بودن نتیجه بلافاصله پس از کلاس الزاما خطا نیست. لینک پخش را از پاسخ بگیرید؛ ساختار آن را حدس نزنید.

پارامترهای کامل getRecordings در مرجع رسمی ↗
publishRecordingsانتشار یا مخفی کردن ضبط

GET · پاسخ: XML

پارامتر / مقدارتوضیح
recordIDالزامی؛ شناسه یا شناسه‌های ضبط.
publishالزامی؛ true یا false.

فقط برای مدیر مجاز اجرا کنید. مخفی کردن ضبط با حذف آن متفاوت است؛ سیاست دسترسی به لینک پخش را نیز بررسی کنید.

پارامترهای کامل publishRecordings در مرجع رسمی ↗
deleteRecordingsحذف ضبط

GET · پاسخ: XML

پارامتر / مقدارتوضیح
recordIDالزامی؛ شناسه یا شناسه‌های ضبط.

عملیات حذف را تنها پس از تایید صریح مدیر و بررسی نسخه پشتیبان اجرا کنید. درخواست حذف نباید از لینک عمومی یا بدون احراز هویت برنامه قابل اجرا باشد.

پارامترهای کامل deleteRecordings در مرجع رسمی ↗
updateRecordingsویرایش فراداده ضبط

GET / POST · پاسخ: XML

پارامتر / مقدارتوضیح
recordIDالزامی؛ شناسه ضبط.
meta_*کلیدهای فراداده برای افزودن یا تغییر؛ مقدار خالی برای حذف کلید موجود.

برای عنوان‌ها و برچسب‌های سامانه استفاده کنید. فراداده محل نگهداری Secret، رمز یا داده حساس نیست.

پارامترهای کامل updateRecordings در مرجع رسمی ↗
getRecordingTextTracksدریافت اطلاعات زیرنویس ضبط

GET / POST · پاسخ: JSON

پارامتر / مقدارتوضیح
recordIDالزامی؛ شناسه ضبط.

این متد پاسخ JSON دارد. فقط یک recordID بفرستید. فهرست زبان‌ها و مسیر زیرنویس‌های موجود را از پاسخ بخوانید. وجود زیرنویس به تنظیمات ضبط و سرویس بستگی دارد.

پارامترهای کامل getRecordingTextTracks در مرجع رسمی ↗
putRecordingTextTrackبارگذاری زیرنویس ضبط

POST · پاسخ: JSON

پارامتر / مقدارتوضیح
recordIDالزامی؛ شناسه ضبط.
kindالزامی؛ نوع track مطابق مرجع نسخه سرور.
langالزامی؛ کد زبان مانند fa.
labelالزامی؛ نام نمایشی زبان.
fileفایل زیرنویس در بدنه multipart/form-data.

این متد از POST استفاده می‌کند. پارامترهای query را امضا کنید و فایل را در بدنه بفرستید. حذف پارامتر file می‌تواند زیرنویس موجود همان زبان و نوع را حذف کند. پاسخ این متد JSON است؛ فایل و پاسخ را با مرجع نسخه سرور تطبیق دهید.

پارامترهای کامل putRecordingTextTrack در مرجع رسمی ↗
sendChatMessageارسال پیام به گفت‌وگوی عمومی

GET · پاسخ: XML

پارامتر / مقدارتوضیح
meetingIDالزامی؛ شناسه جلسه فعال.
messageالزامی؛ متن پیام، ۱ تا ۵۰۰ نویسه.
userNameاختیاری؛ نام نمایشی فرستنده.

از نسخه ۳ معرفی شده است. پیام متنی است؛ روی اجرای HTML یا Markdown تکیه نکنید. دسترسی و تعداد پیام‌ها را در برنامه محدود کنید.

پارامترهای کامل sendChatMessage در مرجع رسمی ↗
قابلیت‌های پیشرفته و وابسته به نسخه

برای بارگذاری ارائه از بدنه XML متد create، تنظیمات رابط کاربر و callback آماده شدن ضبط، از مرجع کامل API استفاده کنید. متدهای بخش Internal API مانند getJoinUrl، stuns و signOut برای استفاده داخلی هستند؛ برای ورود کاربر از join استفاده کنید. Webhooks افزونه و تنظیمات جدا دارد و فعال بودن آن صرفا با داشتن URL و Secret تضمین نمی‌شود.

05

پاسخ‌ها و مدیریت خطا

موفق بودن HTTP به تنهایی کافی نیست؛ نتیجه عملیات را از returncode بخوانید. اغلب متدها پاسخ XML دارند؛ join با redirect و برخی متدهای جدید استثنا هستند. نمونه‌های زیر نمایشی‌اند.

<response>
  <returncode>SUCCESS</returncode>
  <running>true</running>
</response>
<response>
  <returncode>FAILED</returncode>
  <messageKey>checksumError</messageKey>
  <message>Request signature is invalid.</message>
</response>
پارامتر / مقدارتوضیح
checksumErrorSecret، نام متد، ترتیب و encoding پارامترها را بررسی کنید. امضا را قبل از تغییر URL بسازید.
notFoundشناسه جلسه یا ضبط، زمان اجرای جلسه و دسترسی حساب را بررسی کنید.
HTTP 401 / 403اطلاعات اتصال و محدودیت دسترسی سرویس را بررسی کنید؛ Secret را در تیکت عمومی نفرستید.
HTTP 429با backoff و فاصله بیشتر دوباره درخواست بفرستید.
Timeout / 5xxارتباط سرور برنامه، DNS و TLS را بررسی کنید. عملیات حذف و پایان را کورکورانه تکرار نکنید.

در لاگ، نام متد، شناسه پیگیری داخلی و نتیجه پاک‌سازی‌شده را ثبت کنید؛ URL امضاشده، Secret و اطلاعات شخصی کاربران را ثبت نکنید.

06

چرخه جلسه و ضبط

ساخت جلسه←ورود کاربران←ضبط و پایان←پردازش و پخش

برای هر جلسه برنامه‌ریزی‌شده، شناسه مشخص نگه دارید. پس از پایان، پردازش ضبط ممکن است زمان ببرد؛ با فاصله مناسب وضعیت را بررسی کنید و به کاربر «در حال پردازش» نمایش دهید. دسترسی به ضبط را در سطح حساب و دوره کنترل کنید.

ضبط، مدت نگهداری و ظرفیت مصرف تابع سرویس شماست. API مجوز عبور از محدودیت اشتراک را ایجاد نمی‌کند. برای مشاهده تعرفه‌ها به تعرفه خدمات بروید.

07

دانلود افزونه‌های مودل و وردپرس

برای اتصال سامانه آموزشی یا وب‌سایت، افزونه سازگار با نسخه نصب‌شده خود را انتخاب کنید. اطلاعات URL و Secret را از حساب بیگ بلو باتن ایران بردارید.

MOODLE

BigBlueButton برای مودل

از مودل ۴ به بعد در هسته قرار دارد. پیش از نصب جداگانه، وجود فعالیت و سازگاری با نسخه مودل را بررسی کنید.

نسخه سازگار را از مرجع افزونه انتخاب کنید.

دریافت از منبع افزونه لینک خارجی؛ پیش از نصب، سازگاری نسخه را بررسی کنید.
WORDPRESS

BBB Administration Panel

افزونه اتصال وردپرس؛ مخزن رسمی هشدار سازگاری با نسخه‌های جدید دارد. پیش از استفاده روی سایت اصلی تست شود.

سازگاری وردپرس و PHP نیازمند بررسی است.

دریافت از منبع افزونه لینک خارجی؛ پیش از نصب، سازگاری نسخه را بررسی کنید.
08

راهنمای اتصال Moodle

  1. از سایت مودل و دیتابیس آن پشتیبان بگیرید؛ نسخه مودل را بررسی کنید.
  2. BigBlueButton از مودل ۴ در هسته قرار دارد. اگر فعالیت موجود است، افزونه قدیمی را دوباره روی آن نصب نکنید.
  3. در مدیریت سایت، بخش افزونه‌ها و تنظیمات BigBlueButton را باز کنید؛ جای دقیق آن ممکن است با نسخه مودل فرق کند.
  4. Server URL و Shared Secret حساب خود را وارد کنید. قالب URL مورد انتظار افزونه را بررسی کنید؛ بعضی اتصال‌ها مسیر /api را خودشان اضافه می‌کنند.
  5. در یک دوره آزمایشی، فعالیت BigBlueButton بسازید و ورود با نقش مدرس و دانشجو را جدا تست کنید.
  6. ضبط و دسترسی به بازپخش را با یک جلسه کوتاه آزمایش کنید.

برای نسخه‌هایی که نصب جدا لازم دارند، فقط بسته سازگار با همان نسخه را از منبع افزونه بگیرید. راهنمای رسمی مودل ↗

09

راهنمای اتصال WordPress

  1. از فایل‌ها و دیتابیس وردپرس پشتیبان بگیرید و ابتدا روی محیط آزمایشی تست کنید.
  2. نسخه PHP، وردپرس و سابقه به‌روزرسانی افزونه را با توضیحات کارت دانلود تطبیق دهید.
  3. در «افزونه‌ها ← افزودن ← بارگذاری افزونه»، فایل ZIP مورد اعتماد را نصب کنید یا افزونه را از مخزن بیابید.
  4. در تنظیمات افزونه، URL و Secret حساب خود را وارد و ذخیره کنید. این مقادیر نباید به سورس عمومی صفحه منتقل شوند.
  5. اتاق آزمایشی بسازید؛ روش درج اتاق یا shortcode را از راهنمای همان افزونه بردارید.
  6. مجوز مدیر و شرکت‌کننده، ورود مهمان و دسترسی به ضبط را جدا بررسی کنید.
سازگاری مهم است

افزونه معرفی‌شده BBB Administration Panel در مخزن وردپرس هشدار تست‌نشدن با نسخه‌های جدید دارد. معرفی لینک به معنی تایید امنیت یا سازگاری همه نسخه‌ها نیست؛ نسخه بررسی‌شده را از پشتیبانی دریافت کنید.

10

چک‌لیست توسعه و امنیت

  • تعیین نقش و مجوز شرکت در جلسه فقط سمت سرور انجام شود.
  • Secret خارج از پوشه عمومی و مخزن کد ذخیره شود.
  • HTTPS و اعتبارسنجی گواهی TLS روشن بماند.
  • برای ساخت، پایان و حذف جلسه یا ضبط، احراز هویت و محدودیت درخواست اعمال شود.
  • درخواست‌های عمومی سایت خود را با CSRF و کنترل مجوز محافظت کنید.
  • برای خطای شبکه timeout و backoff تعیین کنید.
  • در صورت افشای Secret، از پشتیبانی برای تعویض آن کمک بگیرید.
  • پیش از انتشار، سناریوهای ورود مدرس، ورود دانشجو، ضبط و پایان جلسه را تست کنید.
11

پرسش‌های متداول

URL و Secret را از کجا بردارم؟

وارد app.bigbluebutton.me شوید؛ در «مدیریت جلسات ← تنظیمات» اطلاعات اتصال حساب در دسترس است.

API با استاندارد BigBlueButton سازگار است؟

ساختار اتصال استاندارد است. دسترسی به قابلیت‌ها، ظرفیت و رفتار متدهای وابسته به نسخه را با سرویس فعال خود بررسی کنید.

آیا getMeetings همه جلسه‌های پنل را نشان می‌دهد؟

آن را جایگزین فهرست مدیریت جلسات پنل در نظر نگیرید. جلسه‌های قابل مشاهده به مسیر ساخت جلسه و محدوده دسترسی اتصال بستگی دارند. برای یکپارچه‌سازی، شناسه جلسه‌هایی که خود برنامه ایجاد کرده است را نگه دارید.

چرا ضبط بلافاصله در دسترس نیست؟

فایل ضبط باید پردازش شود. فعال بودن ضبط، پایان صحیح جلسه و وضعیت پردازش را بررسی کنید.

می‌توانم Secret را در کد مرورگر بگذارم؟

خیر. امضای درخواست باید در سرور انجام شود و فقط لینک ورود مجاز به کاربر همان جلسه ارائه شود.

12

منابع و ادامه مسیر

این راهنما برای اتصال به خدمات بیگ بلو باتن ایران نوشته شده است. فهرست کامل پارامترهای کم‌کاربرد در مرجع استاندارد در دسترس است. برای درخواست پشتیبانی، نام متد، زمان خطا و messageKey را ارسال کنید؛ Secret را ارسال نکنید.

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

آموزش‌ها و خبرهای تازه را در کانال بیگ بلو باتن ایران دنبال کنید.

مشاهده کانال بله