کلید دسترسی به API
آیروم با این کلید حساب شما را شناسایی میکند. آن را در هدر Authorization بفرستید.
کلید را کامل وارد کنید؛ عدد ابتدای آن و علامت | نیز بخشی از کلید هستند.
با API آیروم میتوانید در برنامهٔ خود اتاق جلسه ایجاد کنید، برای افراد دسترسی مهمان یا مدیر تعریف کنید و فایلها و گزارشهای هر جلسه را دریافت کنید. در این راهنما، مراحل ارسال درخواست، استفاده از پاسخ API و دریافت تغییرات بعدی را توضیح میدهیم.
هر اتاق را میتوان برای چند جلسه استفاده کرد. برای افزودن فرد به فهرست اعضای اتاق، به ایمیل حساب گوگل او نیاز دارید؛ ورود مهمان بدون حساب گوگل در حالت دسترسی آزاد امکانپذیر است. فایلها و گزارشها ممکن است بعد از پایان جلسه تکمیل شوند، بنابراین برنامهٔ شما باید تغییرات آنها را نیز دریافت کند.
در بخش API در تنظیمات حساب، یک کلید ایجاد و مقدار کامل آن را کپی کنید. این مقدار فقط هنگام ایجاد کلید نمایش داده میشود. کلید را در تنظیمات امن سرور، مثلاً در متغیر محیطی، ذخیره کنید و درخواستها را از سرور برنامهٔ خود بفرستید. کلید نباید در کد مرورگر یا اپلیکیشن کاربر قرار بگیرد.
آیروم با این کلید حساب شما را شناسایی میکند. آن را در هدر Authorization بفرستید.
کلید را کامل وارد کنید؛ عدد ابتدای آن و علامت | نیز بخشی از کلید هستند.
لایسنس، اشتراک API شماست. شناسهٔ آن را بهجای {licence} در آدرس درخواست قرار دهید.
اتاقی که ایجاد میکنید به همان لایسنس تعلق دارد و مصرف آن در همان اشتراک محاسبه میشود. همراه
این شناسه، ارسال کلید API نیز الزامی است.
curl 'https://iroom.live/api/v1/licences' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Accept: application/json'
در آرایهٔ data، لایسنس موردنظر را انتخاب کنید. مقدار id آن، همان شناسهای است
که در آدرس درخواستهای بعدی استفاده میکنید. مقدار is_usable باید true باشد تا
بتوانید با اتاقها و اطلاعات آن لایسنس کار کنید.
اگر فهرست لایسنسها خالی است، ابتدا اشتراک API تهیه کنید. ایجاد کلید API بهتنهایی باعث ایجاد یا فعالشدن اشتراک نمیشود.
در مثالها، YOUR_API_KEY را با کلید کامل خود جایگزین کنید. عبارتهایی
مانند {licence} و {room} محل قرار دادن شناسه هستند؛ آنها را همراه با آکولاد
حذف کنید و شناسهٔ دریافتشده از API را بنویسید.
اتاق (Room) فضایی است که لینک ورود، اعضا و تنظیمات دسترسی آن را مدیریت میکنید. میتوانید با همان لینک، در زمانهای مختلف جلسه برگزار کنید. هر بار برگزاری، یک جلسهٔ جداگانه (Conference) محسوب میشود و شناسه، زمان شروع و پایان، فایلها و گزارشهای مربوط به خود را دارد.
برای مثال، یک اتاق برای جلسات هفتگی تیم ایجاد میکنید. جلسهٔ این هفته و جلسهٔ هفتهٔ بعد در همان اتاق برگزار میشوند، اما شناسه و گزارش حضور و غیاب آنها جداست.
curl -X POST 'https://iroom.live/api/v1/licences/{licence}/rooms' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: YOUR_NEW_UUID' \
-d '{
"title": "Product weekly meeting",
"client_reference": "team-product",
"access_type": "restricted",
"admins": ["organizer@gmail.com"],
"artifacts": {
"recording": true,
"attendance_report": true
}
}'
برای ایجاد هر اتاق جدید، یک شناسهٔ یکتا با قالب UUID تولید کنید و آن را بهجای YOUR_NEW_UUID
در هدر Idempotency-Key قرار دهید. این هدر از ایجاد اتاق تکراری هنگام ارسال مجدد همان
درخواست جلوگیری میکند.
اگر بهدلیل قطع ارتباط پاسخی دریافت نکردید، درخواست را با همان مقدار هدر و همان بدنهٔ
JSON دوباره بفرستید. برای ایجاد اتاق دیگری، مقدار جدیدی تولید کنید. فیلد اختیاری client_reference
برای نگهداری شناسهٔ داخلی برنامهٔ شما، مثلاً شناسهٔ یک کلاس، است و جایگزین Idempotency-Key
نمیشود.
data.id شناسهٔ اتاق و data.join_url لینک ورود است. هر
دو را ذخیره کنید. برای درخواستهای بعدی از شناسهٔ اتاق استفاده کنید؛ کد موجود در لینک ورود جایگزین
این شناسه نیست.
admins بفرستید. پس
از دریافت پاسخ، مقدار status هر فرد را در data.members بررسی کنید. فقط
مقدار active به معنی فعالبودن عضویت اوست. اگر عضویت فعال نیست، جزئیات
failure را نیز بخوانید.
GET
/licences/{licence}/rooms/{room}/conferences را ارسال کنید. شناسهٔ هر جلسه را برای دریافت
گزارش همان جلسه نگه دارید. مسیرهایی که در این راهنما بهصورت کوتاه نوشته شدهاند، بعد از /api/v1
قرار میگیرند.
درخواست POST /licences/{licence}/rooms/{room}/end-active-conference فقط جلسهای را
که در حال برگزاری است پایان میدهد. این درخواست، اتاق را حذف یا لینک ورود را غیرفعال نمیکند.
افراد میتوانند در زمان دیگری با همان لینک وارد شوند و جلسهٔ جدیدی برگزار کنند؛ البته لایسنس
باید معتبر باشد و محدودیتهای سرویس رعایت شود.
برای افزودن هر فرد به فهرست اعضای اتاق، چه با نقش مهمان و چه با نقش مدیر، باید ایمیل حساب گوگل او را ارسال کنید. آدرس Gmail قابل استفاده است. ایمیل سازمانی نیز در صورتی قابل استفاده است که به یک حساب گوگل تعلق داشته باشد. فرد باید با همان حساب وارد جلسه شود تا دسترسی تعیینشده برای او اعمال شود.
restrictedافرادی که به فهرست اعضای اتاق اضافه شدهاند، با حساب خود مستقیماً وارد میشوند. ورود سایر افراد به تأیید مدیر جلسه نیاز دارد. اگر هنگام ایجاد اتاق نوع دسترسی را مشخص نکنید، همین حالت انتخاب میشود.
openهر فردی که لینک اتاق را داشته باشد میتواند وارد شود. مهمان برای ورود به حساب گوگل نیاز ندارد و لازم نیست پیش از جلسه از طریق API به فهرست اعضا اضافه شود.
برای فعالکردن دسترسی آزاد، هنگام ایجاد اتاق مقدار access_type را برابر open
قرار دهید. برای تغییر اتاق موجود نیز همین مقدار را در بدنهٔ درخواست PATCH
/licences/{licence}/rooms/{room} بفرستید.
ورود بدون حساب گوگل فقط مربوط به مهمانی است که با لینک وارد اتاق آزاد میشود. اگر میخواهید فردی را از طریق API به فهرست اعضا اضافه کنید یا به او نقش مدیر بدهید، همچنان به ایمیل حساب گوگل او نیاز دارید.
| عملیات | متد و ادامهٔ مسیر اتاق | بدنه |
|---|---|---|
| افزودن مهمان | POST /members |
{"email":"guest@gmail.com"} |
| افزودن مدیر | POST /admins |
{"email":"admin@gmail.com"} |
| تغییر نقش عضو | PATCH /members/{member} |
{"role":"admin"} یا {"role":"guest"} |
مسیر پایهٔ جدول: /api/v1/licences/{licence}/rooms/{room}. هر درخواست
افزودن عضو فقط یک ایمیل میپذیرد. برای تغییر نقش، مقدار role باید admin یا
guest باشد.
اضافهکردن فرد به فهرست members به معنی شرکتکردن او در جلسه نیست. برای بررسی حضور
واقعی، گزارش attendance همان جلسه را با شناسهٔ آن دریافت کنید. ایمیل مهمانی که بدون
حساب گوگل وارد شده است، ممکن است در گزارش موجود نباشد.
ممکن است در اولین درخواست پس از پایان جلسه، فایلها یا گزارش کامل حضور و غیاب هنوز آماده نباشند. آیروم این اطلاعات را بهروزرسانی میکند و برنامهٔ شما باید نسخهٔ جدید آنها را دریافت کند. بنابراین اگر پاسخ API خالی بود، فوراً نتیجه نگیرید که جلسه فایل یا شرکتکنندهای نداشته است.
این بررسی را فقط برای اولین جلسهٔ اتاق انجام ندهید. هر بار که در همان اتاق جلسهٔ دیگری برگزار شود، اطلاعات و گزارشهای جدیدی به آن اضافه میشود. برای دریافت تغییرات میتوانید از روشهای زیر استفاده کنید:
شما میتوانید برای نمایش آخرین تغییرات و بروزرسانی های جلسات خود. اطلاعات را بصورت زنده از api های ما دریافت کنید و نمایش بدهید. با این روند اطلاعاتی در سمت شما ذخیره نخواهد شد.
در سرور خود یک کار زمانبندیشده تعریف کنید تا فهرست جلسات، فایلها و گزارشها را در فاصلههای مشخص دریافت کند. فاصلهٔ درخواستها باید با تعداد اتاقها و سقف مجاز درخواستهای API متناسب باشد.
آیروم تغییرات را با وبهوک به سرور شما اطلاع میدهد. پس از هر اعلان، اطلاعات مربوط را از API بگیرید. با این روند بصورت خودکار تمامی بروزرسانی ها را دریافت خواهید کرد. دقت کنید همیشه بررسی کنید که وب هوک شما فعال باشد.
پاسخ API، اطلاعاتی را نشان میدهد که در زمان درخواست در آیروم موجود است. درخواستهای مکرر باعث نمیشوند فایل یا گزارش زودتر آماده شود. وبهوک نیز پس از ثبت تغییر در آیروم ارسال میشود؛ دریافت آن لزوماً همزمان با پایان جلسه نیست.
| دادهٔ موردنیاز | ادامهٔ مسیر اتاق برای درخواست GET | ملاحظه |
|---|---|---|
| فهرست جلسات اتاق | /conferences |
هر جلسه شناسهٔ جداگانه دارد |
| فایلها و خروجیها | /artifacts |
ارتباط با جلسه از طریق conference_id |
| حضور و غیاب | /conferences/{conference}/attendance |
بررسی attendance_synced_at در اطلاعات جلسه |
| گزارش رویدادهای جلسه | /conferences/{conference}/audit-events |
دریافت همهٔ صفحات گزارش |
meta.next_cursor را در پارامتر
cursor درخواست بعدی بفرستید. این کار را تا زمانی ادامه دهید که مقدار آن
null شود. در نوبت بعدیِ بررسی دورهای، دوباره از صفحهٔ اول شروع کنید؛ cursor فقط برای
ادامهٔ صفحهبندی است.
status مشخص میشود: pending یعنی هنوز آماده نیست،
available یعنی در دسترس است، expired یعنی مهلت نگهداری آن تمام شده و
removed یعنی حذف شده است. زمان انقضا را از expires_at و زمان آخرین
بهروزرسانی اطلاعات فایل را از synced_at بخوانید.
view_url قرار دارد. بازشدن این لینک به مجوز دسترسی کاربر به همان
فایل بستگی دارد؛ دسترسی آزاد اتاق به معنی عمومیبودن فایلها نیست. مقدار download_url
نیز ممکن است null باشد، پس همیشه وجود لینک دانلود را فرض نکنید.
attendance_synced_at برابر null است، گزارش حضور
و غیاب هنوز دریافت نشده است. در این وضعیت، صفر بودن تعداد شرکتکنندگان به معنی خالیبودن جلسه نیست.
با فعالکردن وبهوک، آیروم تغییرات انتخابشده را به سرور شما اطلاع میدهد. این اعلان بهصورت یک درخواست
POST با بدنهٔ JSON به آدرسی ارسال میشود که در تنظیمات ثبت کردهاید.
هر اعلان که در ادامه «رویداد» نامیده میشود، نوع تغییر و شناسهٔ اطلاعات مرتبط را دارد. برای مثال، رویداد
report.updated مشخص میکند گزارش کدام جلسه تغییر کرده است، اما ردیفهای گزارش را ارسال
نمیکند. سرور شما باید پس از دریافت رویداد، گزارش آن جلسه را با یک درخواست جداگانه از API بگیرد.
این مسیر باید درخواست POST با بدنهٔ JSON را بپذیرد و از اینترنت، با HTTPS روی پورت
۴۴۳، در دسترس باشد. نمیتوانید از آدرس شبکهٔ داخلی یا localhost استفاده کنید. آدرس ثبتشده باید
مستقیماً پاسخ بدهد و نباید درخواست را به آدرس دیگری هدایت کند.
در بخش وبهوکها در تنظیمات حساب، روی «افزودن وبهوک» بزنید. آدرس دریافت را وارد کنید، لایسنسها و رویدادهایی را که میخواهید دنبال کنید انتخاب کنید و وبهوک را فعال کنید.
در پنل، از بخش «آزمایش اتصال» یک رویداد آزمایشی ارسال کنید و نتیجه را در «سوابق ارسال» ببینید. در
این رویداد مقدار is_test برابر true است. شناسههای آن نمونه هستند؛
دریافت و پاسخدادن به درخواست را بررسی کنید، اما با این شناسهها برای گرفتن فایل، عضو یا گزارش
به API درخواست نفرستید.
وبهوک فقط تغییرات مرتبط پس از ثبت و فعالسازی را ارسال میکند. برای دریافت اطلاعات قبلی، پس از فعالسازی وبهوک، فهرست جلسات، فایلها و گزارشهای موجود را از API بگیرید. همزمان، دریافت رویدادهای جدید را نیز ادامه دهید.
در حال حاضر آیروم همراه وبهوک، هدر امضا ارسال نمیکند. برای محدودکردن دسترسی به مسیر دریافت، یک
توکن محرمانه، تصادفی و مخصوص وبهوک بسازید. آن را در مسیر آدرس یا پارامتر آدرس، مثلاً ?token=YOUR_WEBHOOK_TOKEN،
قرار دهید. سرور شما باید پیش از پذیرش درخواست، مقدار این توکن را بررسی کند.
این توکن باید با کلید API آیروم متفاوت باشد. آدرس کامل وبهوک در تنظیمات و سوابق ارسال حساب نمایش داده میشود؛ آن را همراه توکن در لاگهای عمومی ثبت نکنید.
| رویداد | معنی | اقدام سرویس شما |
|---|---|---|
artifact.available |
فایل در دسترس قرار گرفته است | دریافت /artifacts/{artifact_id} |
artifact.updated |
اطلاعات یا وضعیت فایل تغییر کرده است | دریافت وضعیت جدید فایل و ثبت تغییر در برنامه |
report.updated |
گزارش جلسه بهروزرسانی شده است | بر اساس report_type، دریافت attendance یا
audit-events |
room.member.updated |
عضو، نقش یا وضعیت عضویت تغییر کرده است | دریافت اطلاعات عضو از /members/{member_id} یا دریافت فهرست اعضا |
در رویداد report.updated، اگر report_type برابر attendance
بود، گزارش حضور و غیاب را از مسیر attendance بگیرید. اگر مقدار آن audit_log
بود، از مسیر audit-events استفاده کنید. هر دو مسیر زیرمجموعهٔ جلسهٔ مشخصشده در conference_id
هستند.
در حال حاضر وبهوک جداگانهای برای ایجاد اتاق یا پایان جلسه وجود ندارد. برای اطلاع از
جلسات جدید، فهرست conferences اتاق را بهصورت دورهای دریافت کنید.
{
"id": "d8e8e646-4caa-408b-8783-eef01eb7a93e",
"type": "report.updated",
"version": 1,
"occurred_at": "2026-09-08T11:00:00+00:00",
"is_test": false,
"data": {
"licence_key": "lic_0123456789abcdef",
"room_id": "7031f075-4f99-43d1-85d4-8bbb8d26df48",
"conference_id": "f9c9e28a-cf51-4600-a5c1-b0b91465c1e0",
"report_type": "attendance"
}
}
id رویدادهای پردازششده را در پایگاه داده نگه دارید تا یک
رویداد دوباره پردازش نشود. در ارسال مجدد، شناسه و بدنه تغییر نمیکنند. این سابقه را دستکم سه ماه
نگه دارید تا ارسال مجدد رویدادهای قدیمی هم باعث پردازش تکراری نشود.
2xx، مثلاً 200 یا 204،
برگردانید. برای فرستادن این پاسخ منتظر تکمیل پردازش و دریافت گزارش نمانید. اگر
نتوانستید رویداد را ذخیره کنید، پاسخ موفق ندهید؛ پس از دریافت پاسخ موفق، آیروم ارسال را انجامشده
در نظر میگیرد.
408، 429، 500،
502، 503 یا 504 برگرداند، آیروم دوباره تلاش میکند. در هر
دورهٔ ارسال، حداکثر ۱۰ تلاش انجام میشود که درخواست اول هم جزو آنهاست. برای سایر پاسخهای ناموفق،
از جمله 3xx و 401، ارسال خودکار تکرار نمیشود.
404 بدهد. نوع رویداد و
آخرین فهرست اعضا یا فایلها را بررسی کنید. اگر مورد حذف شده است، اطلاعات ذخیرهشده در برنامهٔ خود را
اصلاح کنید و درخواست دریافت آن را مرتب تکرار نکنید.
در مستندات API ما، برای هر عملیات، آدرس درخواست، متد HTTP، ورودیهای لازم و ساختار پاسخ نوشته شده است. میتوانید مستندات را بدون ورود به حساب بخوانید. برای ارسال درخواست از داخل مستندات، باید کلید API معتبر وارد کنید.
ابتدا بخش لایسنسها را باز کنید و درخواست دریافت فهرست را ببینید. سپس به بخش اتاقها، اعضا، جلسات
یا فایلها بروید. هر عملیات با ترکیب متد، مانند GET یا POST، و آدرس
درخواست مشخص میشود.
در بخش پارامترهای مسیر (Path parameters)، شناسهٔ لایسنس، اتاق یا جلسه را وارد کنید. پارامترهای صفحهبندی در بخش Query parameters قرار میگیرند. برای ایجاد یا ویرایش، بخش بدنهٔ درخواست (Request body) را ببینید. ساختار داده (Schema) مشخص میکند هر فیلد چه نوعی دارد، چه مقادیری میپذیرد و آیا ارسال آن الزامی است.
در قسمت احراز هویت (Authentication)، مقدار کامل کلید را وارد کنید. در این
قسمت فقط خود کلید لازم است؛ ابزار مستندات کلمهٔ Bearer را به هدر اضافه میکند. اگر
درخواست را در برنامهٔ خود میسازید، هدر را بهصورت Authorization: Bearer
YOUR_API_KEY ارسال کنید.
میتوانید نمونهٔ cURL یا کد زبان موردنظر را کپی و مقادیر نمونه را با اطلاعات خود جایگزین کنید.
پیش از اجرا، هدرهای الزامی را بررسی کنید؛ برای ایجاد اتاق، Idempotency-Key هم لازم
است. سپس کد وضعیت HTTP و بدنهٔ پاسخ را با توضیحات مستندات مقایسه کنید.
درخواستهایی که از داخل مستندات اجرا میکنید واقعی هستند؛ مثلاً درخواست ایجاد اتاق، در حساب شما اتاق ایجاد میکند. برای شروع، درخواست خواندنیِ دریافت فهرست لایسنسها را اجرا کنید.
فایل OpenAPI JSON شامل تعریف مسیرها، ورودیها و پاسخهای API است. میتوانید آن را در ابزاری مانند Postman وارد کنید تا درخواستها بر اساس این تعریف ساخته شوند. کلید API در این فایل قرار ندارد و باید آن را جداگانه در ابزار تنظیم کنید.
| وضعیت HTTP | اقدام پیشنهادی |
|---|---|
401 / 403 |
معتبر بودن کلید API و اجازهٔ دسترسی آن به اطلاعات درخواستی را بررسی کنید. قبل از ارسال مجدد، مشکل احراز هویت یا دسترسی را برطرف کنید. |
404 |
شناسههای آدرس را بررسی کنید. اتاق باید متعلق به لایسنس مشخصشده باشد و فایل، عضو یا جلسه نیز باید به همان اتاق تعلق داشته باشد. ممکن است مورد درخواستی حذف شده باشد. |
409 |
درخواست با وضعیت فعلی اطلاعات سازگار نیست. جزئیات error.code را بخوانید. اگر
خطا مربوط به تکرار درخواست ایجاد اتاق است، مقدار Idempotency-Key و بدنهٔ
درخواست را با درخواست اولیه مقایسه کنید.
|
422 |
یک یا چند ورودی معتبر نیست. در error.details ببینید کدام فیلد رد شده است و
مقدار آن را پیش از ارسال مجدد اصلاح کنید.
|
429 |
تعداد درخواستها از سقف مجاز بیشتر شده است. اگر هدر Retry-After وجود دارد، زمان
اعلامشده را رعایت کنید. تعداد درخواستهای همزمان را کاهش دهید و بین تلاشهای بعدی فاصله
بگذارید.
|
5xx یا قطع ارتباط |
درخواست را با تعداد تلاش محدود تکرار کنید و فاصلهٔ هر تلاش را بیشتر کنید. برای ایجاد اتاق،
همان Idempotency-Key و بدنه را بفرستید. برای سایر عملیات تغییردهنده، ابتدا
وضعیت فعلی را با درخواست دریافت اطلاعات بررسی کنید؛ ممکن است درخواست قبلی انجام شده باشد اما
پاسخ آن به شما نرسیده باشد.
|
در کد برنامه، نوع خطا را با error.code تشخیص دهید. متن message برای
توضیح خطا به انسان است و نباید مبنای شرطهای برنامه باشد. برای پیگیری مشکل، error.request_id
یا هدر X-Request-ID را ذخیره کنید. کلید API را در لاگ ننویسید.
تاریخ و ساعت در API با قالب ISO 8601 برگردانده میشود. اختلاف منطقهٔ زمانی موجود در مقدار را
هنگام تبدیل در نظر بگیرید؛ سپس آن را با ساعت محلی و تاریخ جلالی نمایش دهید. فهرستها بهصورت
پیشفرض ۲۰ نتیجه در هر صفحه دارند. با پارامتر per_page میتوانید این تعداد را تا
۱۰۰ افزایش دهید.
در رابط کاربری، وضعیت اطلاعات را روشن نمایش دهید. برای فایلی که هنوز آماده نشده، پیام «در حال آمادهسازی» مناسب است؛ فایل منقضی یا حذفشده باید وضعیت جداگانه داشته باشد. هنگام دریافت اطلاعات نیز نشان دهید که درخواست در حال انجام است و زمان آخرین دریافت موفق را نمایش دهید.