وبسرویس اسکایروم با هدف یکپارچهسازی و بکارگیری سرویسهای اسکایروم در سایر سامانهها و برنامههای نرمافزاری طراحی و پیادهسازی شده است. با بهرهگیری از وبسرویس اسکایروم میتوانید سرویسها، اتاقهای مجازی، کاربران و سایر امکانات فراهم شده را از درون سامانه یا اپلیکیشن خود و با فراخوانی دستورات وبسرویس (API) مدیریت نمایید.
وبسرویس اسکایروم بر پایه REST طراحی و پیادهسازی گردیده و در آن تلاش شده است تا ضمن الگوبرداری از استانداردهای رایج دنیا، سادگی در اولویت نخست باشد. از اینرو در وبسرویس اسکایروم تمامی درخواستها (request) به شکل POST ارسال میگردند.
- فرمت دادههای ارسالی (Content-Type) میتواند یکی از انواع JSON یا URL-Encoded باشد.
- پاسخ همواره JSON خواهد بود.
- به منظور تفکیک خطاهای شبکه و سرور از خطاهای برنامه، تمامی پاسخها از سوی وبسرویس (چه موفق چه ناموفق) با کد وضعیت 200 برگردانده میشود.
(200 = HTTP Status Code)
- بهتر است اتاقها و کاربران یکبار ایجاد و به دفعات استفاده شوند. پس از ایجاد هر اتاق یا کاربر، شناسه آن را در دیتابیس ذخیره کرده و در نشستهای بعدی استفاده کنید. ساخت اتاق و کاربر برای هر بار برگزاری کلاس و حذف آنها در پایان کلاس (خصوصاً زمانی که تعداد کلاسها زیاد باشد) توصیه نمیشود؛ چون علاوه بر ایجاد سربار، ممکن است باعث عبور از محدودیتهای سرویسدهنده و دریافت خطا شود.
- اگر تعداد کلاسهای همزمان زیادی دارید (مثل مدارس و دانشگاهها)، ایجاد لینک ورود با تابع
createLoginUrlهزینه زیادی خواهد داشت و ممکن است با محدودیت نرخ ارسال درخواست در دقیقه مواجه شوید. توصیه میشود لینکهای ورود را از پیش ایجاد و در دیتابیس نگهداری کنید تا با هر بار ورود و خروج کاربر نیاز به ساخت دوباره آن نباشد. با پارامترttlمیتوانید زمان منقضی شدن لینکها را مدیریت نمایید. - در بروزرسانیهای اخیر روی توابع
getRoomوgetUser، امکان جستجوی اتاق/کاربر با نام فراهم شده است؛ بنابراین برای پیدا کردن یک کاربر یا اتاق نیازی به دریافت کل لیست نیست. این بهبود میتواند در راندمان و کاهش خطاها بسیار مؤثر باشد. - نرخ ارسال درخواستها در حال حاضر محدود به ۵۰۰ درخواست در دقیقه است. درخواستهای بیشتر با خطای 503 روبرو میشوند.
- به علت اجتنابناپذیر بودن اختلالات شبکه، علاوه بر مدیریت خطاهای وبسرویس، خطاهای زیرساختی مثل ریسالو نشدن دامنه، تایمآوت و خطای SSL را نیز مدیریت کرده و لاگ کنید.
ساختار آدرس (URL) وبسرویس:
https://www.skyroom.online/skyroom/api/{your-api-key}
در اینجا {your-api-key} یک رشته به طول ۵۰ حرف و کلید اختصاصی شما برای استفاده از وبسرویس است و در تمامی درخواستها جزء ثابت آدرس خواهد بود.
شکل کلی درخواست:
POST https://www.skyroom.online/skyroom/api/apikey-71-819540-0f178abb0c712c4cfd5ae13e4c54687a{
"action": "actionName",
"params": {
"param_1": "value1",
"param_2": "value2",
"param_3": "value3"
}
}action: تابعی که قصد فراخوانی آن را داریم.params: پارامترهای تابع.
توجه: نام تابع و پارامترهای ارسالی به کوچکی و بزرگی حروف حساس هستند.
فرم کلی پاسخها:
{
"ok": true,
"result": "action-result"
}ok: مقدارtrueیاfalse(موفق/ناموفق)result: نتیجه عملیات در صورت موفق بودن (میتواندnumber،string،[]یا{}باشد)
نمونهها:
{ "ok": true, "result": 12 }{ "ok": true, "result": "https://www.skyroom.online/ch/web-conference" }{
"ok": true,
"result": ["item1", "item2", "item3"]
}{
"ok": true,
"result": {
"key1": 32,
"key2": "value2",
"key3": ["item1", "item2", "item3"]
}
}تمامی پاسخها (موفق/ناموفق) با کد وضعیت HTTP برابر 200 برمیگردند. بنابراین:
- اگر HTTP Status Code چیزی غیر از
200باشد: خطای شبکه/سرور رخ داده و باید مدیریت شود. - اگر خطای برنامهای رخ دهد، بدنه پاسخ این شکل را دارد:
HTTP/1.1 200 OK{
"ok": false,
"error_code": 14,
"error_message": "درخواست شما با خطا روبرو شد."
}| کد خطا | توضیح |
|---|---|
| 10 | وبسرویس غیرفعال است. |
| 11 | کلید وبسرویس نامعتبر است. |
| 12 | درخواست شما غیرمجاز است. |
| 13 | درخواست شما معتبر نیست. |
| 14 | درخواست شما با خطا روبرو شد. |
| 15 | داده مورد نظر پیدا نشد. |
امکانات مدیریتی وبسرویس اسکایروم شامل سه بخش است:
- مدیریت سرویسها
- مدیریت اتاقها
- مدیریت کاربران
شما در اسکایروم سرویس خود را بر اساس مولفههایی مانند تعداد کاربر همزمان، تعداد ویدیوی همزمان در هر اتاق، حجم نفرساعت مصرفی و بازه زمانی بهرهبرداری خریداری میکنید. برای ساخت اتاقهای مجازی، وجود حداقل یک سرویس فعال الزامی است.
- اگر بیش از یک سرویس فعال دارید، هنگام ایجاد اتاق باید
service_idرا مشخص کنید. - اگر تنها یک سرویس فعال دارید، نیازی به ارسال
service_idنیست و اتاقها به طور پیشفرض روی سرویس فعال ساخته میشوند. - میتوانید با تابع
updateRoomسرویس مربوط به اتاق را تغییر دهید.
| ویژگی | نوع | مقدار |
|---|---|---|
| id | number | شناسه سرویس |
| title | string | عنوان سرویس (حداکثر ۱۲۸ حرف) |
| status | number | وضعیت سرویس (0: غیرفعال - 1: فعال) |
| user_limit | number | سقف تعداد کاربر آنلاین |
| video_limit | number | سقف تعداد ویدیوی همزمان (در هر اتاق) |
| time_limit | number | محدودیت نفرثانیه |
| time_usage | number | نفرثانیه مصرف شده |
| start_time | Unix time | زمان شروع سرویس |
| stop_time | Unix time | زمان پایان سرویس |
| create_time | Unix time | زمان ایجاد سرویس |
| update_time | Unix time | زمان آخرین بروزرسانی |
| نام تابع | شرح | مقدار بازگشتی | نوع مقدار بازگشتی |
|---|---|---|---|
| getServices | دریافت لیست سرویسهای موجود | لیست سرویسها | [] |
درخواست:
{
"action": "getServices"
}پاسخ (نمونه):
[
{
"id": 1,
"title": "سرویس وب کنفرانس",
"status": 1,
"user_limit": 10,
"video_limit": 8,
"time_limit": null,
"time_usage": 2213762,
"start_time": 1582851460,
"stop_time": 1580259460,
"create_time": 1582851460,
"update_time": 1580259460
},
{
"id": 2,
"title": "سرویس آموزش آنلاین",
"status": 0,
"user_limit": 100,
"video_limit": 3,
"time_limit": null,
"time_usage": 21124,
"start_time": 1580259460,
"stop_time": 1582851460,
"create_time": 1479021195,
"update_time": 1582851460
}
]با استفاده از اتاقهای مجازی میتوان رویدادهای مختلف را به صورت همزمان و کاملاً مجزا برگزار نمود. هر اتاق دارای یک نام واحد است که آدرس (URL) اتاق نیز با همان نام ساخته میشود؛ بنابراین بهتر است نام را به صورت لاتین وارد کنید.
میتوان محدودیتهایی مثل سقف کاربر آنلاین، میزان نفرساعت مصرفی و جلوگیری از ورود کاربران پیش از ورود اپراتور را اعمال کرد.
| ویژگی | نوع | مقدار |
|---|---|---|
| id | number | شناسه اتاق |
| service_id | number | شناسه سرویس |
| name | string | نام اتاق به لاتین (حداکثر ۱۲۸ حرف) |
| title | string | عنوان اتاق (حداکثر ۱۲۸ حرف) |
| description | string | شرح اتاق (حداکثر ۵۱۲ حرف) |
| status | number | وضعیت اتاق |
| guest_login | bool | ورود به صورت میهمان |
| guest_limit | number | محدودیت تعداد میهمان (0 = نامحدود) |
| op_login_first | bool | ابتدا اپراتور وارد شود |
| max_users | number | سقف تعداد کاربر آنلاین |
| session_duration | number | محدودیت طول نشست |
| time_limit | number | محدودیت نفرثانیه |
| time_usage | number | نفرثانیه مصرف شده |
| time_total | number | مجموع نفرثانیه مصرف شده |
| create_time | Unix time | زمان ایجاد |
| update_time | Unix time | آخرین بروزرسانی |
| نام تابع | شرح | مقدار بازگشتی | نوع مقدار بازگشتی |
|---|---|---|---|
| getRooms | دریافت لیست اتاقهای موجود | لیست اتاقها | [] |
| countRooms | دریافت تعداد اتاقهای موجود | تعداد اتاقها | number |
| getRoom | دریافت مشخصات یک اتاق | مشخصات اتاق | {} |
| getRoomUrl | دریافت آدرس یک اتاق | آدرس اتاق | string |
| createRoom | ایجاد اتاق جدید | شناسه اتاق ایجاد شده | number |
| updateRoom | بروزرسانی اتاق | 1 | number |
| deleteRoom | حذف اتاق | 1 | number |
| getRoomUsers | دریافت لیست کاربران دارای دسترسی به اتاق | لیست کاربران | [] |
| addRoomUsers | افزودن دسترسی کاربران به اتاق | تعداد کاربران افزوده شده | number |
| removeRoomUsers | حذف دسترسی کاربران از اتاق | تعداد کاربران حذف شده | number |
| updateRoomUser | تغییر دسترسی کاربر به اتاق | 1 | number |
درخواست:
{
"action": "getRooms"
}پاسخ:
{
"ok": true,
"result": [
{
"id": 1,
"service_id": 8230,
"name": "meeting",
"title": "اتاق جلسات",
"status": 1
},
{
"id": 2,
"service_id": 8230,
"name": "learning-php",
"title": "کلاس آموزش PHP",
"status": 0
}
]
}درخواست:
{
"action": "countRooms"
}پاسخ:
{
"ok": true,
"result": 2
}درخواست:
{
"action": "getRoom",
"params": {
"room_id": 1
}
}درخواست:
{
"action": "getRoom",
"params": {
"name": "meeting"
}
}پاسخ:
{
"ok": true,
"result": {
"id": 1,
"service_id": 8230,
"name": "meeting",
"title": "اتاق جلسات",
"description": null,
"status": 1,
"guest_login": false,
"guest_limit": 0,
"op_login_first": true,
"max_users": 8,
"session_duration": null,
"time_limit": null,
"time_usage": 184486,
"time_total": 3144460,
"create_time": 1479021434,
"update_time": 1501559112
}
}درخواست:
{
"action": "getRoomUrl",
"params": {
"room_id": 1,
"language": "fa"
}
}پاسخ:
{
"ok": true,
"result": "https://www.skyroom.online/ch/faramooz/meeting"
}درخواست:
{
"action": "createRoom",
"params": {
"name": "math-exercise",
"title": "کلاس حل تمرین ریاضی",
"guest_login": false,
"op_login_first": true,
"max_users": 10
}
}پاسخ:
{
"ok": true,
"result": 3
}درخواست:
{
"action": "updateRoom",
"params": {
"room_id": 3,
"max_users": 20
}
}پاسخ:
{
"ok": true,
"result": 1
}درخواست:
{
"action": "deleteRoom",
"params": {
"room_id": 3
}
}پاسخ:
{
"ok": true,
"result": 1
}درخواست:
{
"action": "getRoomUsers",
"params": {
"room_id": 2
}
}پاسخ:
{
"ok": true,
"result": [
{
"user_id": 6344,
"username": "operator",
"nickname": "اپراتور",
"access": 3
},
{
"user_id": 6345,
"username": "presenter",
"nickname": "ارایه کننده",
"access": 2
},
{
"user_id": 6347,
"username": "user-150",
"nickname": "کاربر عادی",
"access": 1
}
]
}انواع دسترسیها: «کاربر عادی»، «ارایه کننده»، «اپراتور» و «مدیر». جدول انواع دسترسی در انتهای همین صفحه آمده است.
درخواست:
{
"action": "addRoomUsers",
"params": {
"room_id": 1,
"users": [
{ "user_id": 6344 },
{ "user_id": 6345, "access": 2 }
]
}
}پاسخ:
{
"ok": true,
"result": 2
}درخواست:
{
"action": "removeRoomUsers",
"params": {
"room_id": 1,
"users": [6344, 6345]
}
}پاسخ:
{
"ok": true,
"result": 2
}درخواست:
{
"action": "updateRoomUser",
"params": {
"room_id": 1,
"user_id": 6344,
"access": 3
}
}پاسخ:
{
"ok": true,
"result": 1
}برای ورود به اتاقهای مجازی و شرکت در رویدادها نیاز به ساخت حساب کاربری است. برای ساخت حساب کاربری، وارد کردن نام کاربری، گذرواژه و نام نمایشی الزامی است.
- با هر حساب کاربری تنها یک بار میتوان وارد اتاق شد.
- اگر قرار است چند نفر به صورت همزمان از یک حساب استفاده کنند، باید یک حساب عمومی (Public) ایجاد کنید.
- پس از ساخت حساب کاربری باید دسترسی کاربر به اتاق/اتاقها اعطا شود.
| ویژگی | نوع | مقدار |
|---|---|---|
| id | number | شناسه کاربر |
| username | string | نام کاربری به لاتین (حداکثر ۳۲ حرف) |
| nickname | string | نام نمایشی (حداکثر ۱۲۸ حرف) |
| password | string | گذرواژه (حداکثر ۲۴ حرف) |
| string | ایمیل (حداکثر ۱۲۸ حرف) | |
| fname | string | نام (حداکثر ۱۲۸ حرف) |
| lname | string | نام خانوادگی (حداکثر ۱۲۸ حرف) |
| gender | number | جنسیت |
| status | number | وضعیت کاربر |
| is_public | bool | کاربر عمومی |
| concurrent | number | محدودیت استفاده همزمان (0 = نامحدود) |
| time_limit | number | محدودیت زمانی (ثانیه) |
| time_usage | number | زمان مصرف شده (ثانیه) |
| time_total | number | مجموع زمان مصرف شده (ثانیه) |
| expiry_date | Unix time | تاریخ انقضا |
| create_time | Unix time | زمان ایجاد |
| update_time | Unix time | آخرین بروزرسانی |
| نام تابع | شرح | مقدار بازگشتی | نوع مقدار بازگشتی |
|---|---|---|---|
| getUsers | دریافت لیست کاربران موجود | لیست کاربران | [] |
| countUsers | دریافت تعداد کاربران موجود | تعداد کاربران | number |
| getUser | دریافت مشخصات یک کاربر | مشخصات کاربر | {} |
| createUser | ایجاد کاربر جدید | شناسه کاربر ایجاد شده | number |
| updateUser | بروزرسانی کاربر | 1 | number |
| deleteUser | حذف کاربر | 1 | number |
| deleteUsers | حذف چند کاربر | 1 | number |
| getUserRooms | دریافت لیست اتاقهای کاربر | لیست اتاقها | [] |
| addUserRooms | افزودن به اتاقهای کاربر | 1 | number |
| removeUserRooms | حذف از اتاقهای کاربر | 1 | number |
| createLoginUrl | دریافت آدرس ورود مستقیم به اتاق بدون نیاز به لاگین و ساخت کاربر | آدرس (URL) | string |
درخواست:
{
"action": "getUsers"
}پاسخ:
{
"ok": true,
"result": [
{ "id": 1, "username": "parham", "nickname": "پرهام", "status": 1 },
{ "id": 2, "username": "sara", "nickname": "سارا", "status": 1 }
]
}درخواست:
{
"action": "getUser",
"params": {
"user_id": 1
}
}درخواست:
{
"action": "getUser",
"params": {
"username": "parham"
}
}پاسخ:
{
"ok": true,
"result": {
"id": 1,
"username": "parham",
"nickname": "پرهام",
"email": "example@gmail.com",
"fname": "پرهام",
"lname": "عابدینی",
"gender": 1,
"status": 1,
"is_public": false,
"concurrent": 0,
"time_limit": null,
"time_usage": 426466,
"time_total": 8464516,
"expiry_date": null,
"create_time": 1489021434,
"update_time": 1489021434
}
}درخواست:
{
"action": "createUser",
"params": {
"username": "test-user",
"password": "12345",
"nickname": "کاربر عمومی",
"status": 1,
"is_public": true
}
}پاسخ:
{
"ok": true,
"result": 3
}درخواست:
{
"action": "updateUser",
"params": {
"user_id": 3,
"password": "tu2017!"
}
}پاسخ:
{
"ok": true,
"result": 1
}درخواست:
{
"action": "deleteUser",
"params": {
"user_id": 3
}
}پاسخ:
{
"ok": true,
"result": 1
}درخواست:
{
"action": "deleteUsers",
"params": {
"users": [3, 4, 5]
}
}پاسخ:
{
"ok": true,
"result": {
"success": 2,
"failure": 1
}
}درخواست:
{
"action": "getUserRooms",
"params": {
"user_id": 1
}
}پاسخ:
{
"ok": true,
"result": [
{ "room_id": 1, "name": "meeting", "title": "اتاق جلسات", "access": 1 },
{ "room_id": 2, "name": "learning-php", "title": "کلاس آموزش PHP", "access": 2 }
]
}درخواست:
{
"action": "addUserRooms",
"params": {
"user_id": 2,
"rooms": [
{ "room_id": 1 },
{ "room_id": 2, "access": 2 }
]
}
}پاسخ:
{
"ok": true,
"result": 2
}درخواست:
{
"action": "removeUserRooms",
"params": {
"user_id": 2,
"rooms": [1, 2]
}
}پاسخ:
{
"ok": true,
"result": 2
}با این تابع میتوان برای یک اتاق لینک ورود مستقیم ایجاد کرد تا کاربر بدون نیاز به درج نام کاربری و گذرواژه وارد اتاق شود. در این روش نیازی به ساخت کاربر و اعطای دسترسی نیست و کافی است شناسه اتاق و مشخصات لازم ارسال شود.
درخواست:
{
"action": "createLoginUrl",
"params": {
"room_id": 1,
"user_id": "sina",
"nickname": "Sina",
"access": 3,
"concurrent": 1,
"language": "en",
"ttl": 3600
}
}room_id: شناسه اتاقی که میخواهید برای آن لینک ورود بسازید.user_id(ضروری): عدد یا رشته (بدون فاصله). برای جلوگیری از ورود همزمان چند کاربر با لینک تولید شده.concurrent: تعداد کاربرانی که میتوانند همزمان با این لینک وارد اتاق شوند. اگرuser_idخالی باشد، این پارامتر بیتأثیر است. مقدار پیشفرض1.ttl(Time To Live): مدت اعتبار لینک به ثانیه. پس از آن لینک نامعتبر میشود. مقدار پیشفرض3600(یک ساعت).
پاسخ:
{
"ok": true,
"result": "https://www.skyroom.online/ch/faramooz/meeting/t/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0eXBlIjoiYXBpX2xvZ2luIiwiZXhwIjoxNjA1MDg2NTY2LCJyb29tX2lkIjoxLCJ1aWQiOiJAYXBpXC9ta2giLCJuaWNrbmFtZSI6Ik1vaHNlbiIsInJvbGUiOjMsImNvbmN1cnJlbnQiOjUsImdlbmRlciI6MH0.hGJyJvnDFSDMEXCt_q1zUru8INLcyH3UGH7kh4D2SAc/l/en"
}| کد | شرح |
|---|---|
| 0 | غیرفعال |
| 1 | فعال |
| کد | شرح |
|---|---|
| 0 | غیرفعال |
| 1 | فعال |
| کد | شرح |
|---|---|
| 0 | غیرفعال |
| 1 | فعال |
| کد | شرح |
|---|---|
| 0 | نامعلوم |
| 1 | مرد |
| 2 | زن |
| کد | شرح |
|---|---|
| 1 | کاربر عادی |
| 2 | ارایه کننده |
| 3 | اپراتور |