این بخش مخصوص برنامهنویسان برای استفاده از وب سرویسها و یکپارچهسازی API دیالوگی در محصولات شماست.

جهت استفاده از تمام امکانات سامانه دیالوگی در اپلیکشین خود می توانید اقدام به استفاده از وب سرویس دیالوگی فرمایید . وب سرویس به صورت REST می باشد و تمامی درخواست ها به صورت POST بوده و ورودی ها به صورت JSON می باشد که در ادامه توضیح داده خواهد شد .
همچنین توجه داشته باشید که تمامی درخواست ها با HTTP Status Code 200 بازگردانی خواهند شد.
آدرس تمام درخواست ها به صورت زیر خواهد بود :
https://online.dialogee.ir/api/apiTokenکه کلید سرویس پس از دریافت اکانت در اختیار شما قرار می گیرد.
به طور کلی درخواست POST با دیتای JSON به صورت زیر است.
توجه کنید که :
POST https://online.dialogee.ir/api/603e29064544163adsa08bbd2e/b5746e8-fa7a-843-957c-asda465qwed769a
{
"method": "METHOD_FOR_DO",
"params": {
"PARAM_1": "SOME_DATA_1",
"PARAM_2": "SOME_DATA_2",
...
}
}
پاسخ تمام توابع مورد استفاده شامل عبارت "success" هستند که به صورت Boolean بوده که مشخص کننده نتیجه درخواست می باشد .
همچنین درصورت false بودن "success" فیلد های error"" و "code" خواهند بود که دلیل خطا را مشخص می کنند که در ادامه توضیح داده خواهد شد .
صفحهبندی: در متدهای فهرستی (مثل getRoomUsers و getDetailedRoomAttendance) با page (شمارهٔ صفحه، از ۱) و per_page (تعداد در هر صفحه) صفحه را انتخاب کنید. پیشفرض صفحهٔ ۱ با ۱۰ مورد است؛ برای گرفتن همه، صفحهها را تا رسیدن به totalPages بخوانید (یا hasNextPage=false). هر دو روش زیر پذیرفته است؛ سادهترین روش داخل params است:
POST /api/SERVICE_ID/SERVICE_TOKEN
{
"method": "getRoomUsers",
"params": { "id": ROOM_ID, "page": 2, "per_page": 50 }
}
// یا در آدرس:
POST /api/SERVICE_ID/SERVICE_TOKEN?page=2&per_page=50ID | Name |
4 | مدیر |
3 | استاد |
2 | ارائه دهنده |
1 | دانش پذیر |
فرایند نمونه برای ایجاد وبینار و استفاده از آن :
getServiceبه وسیله این تابع سرویس حال حاضر شما قابل مشاهده می باشد.
{
"method":"getService",
"params":{}
}نتیجه درخواست :
{
"success": true,
"service": {
"id": 1,
"name": "Free Plan",
"display_name": "تست نمایشی",
"max_user": 1000,
"active": true,
"expire_date": 9782946000,
"video_limit": 5,
"createdAt": "2021-03-02T12:01:15.747Z",
"updatedAt": "2021-06-10T08:18:33.673Z"
}
}توضیحات نتیجه :
Filed | Type | Name |
id | Number | شناسه سرویس |
name | String | نام سرویس |
display_name | String | نام نمایشی در اتاق |
max_user | Number | ظرفیت کاربران سرویس |
video_limit | Number | ظرفیت دوربین همزمان |
expire_date | Unix time | تاریخ انقضا |
active | Boolean | وضعیت فعال بودن |
createdAt | Date | زمان ایجاد |
updatedAt | Date | زمان بروزرسانی |
getUsersبه وسیله این تابع کاربران سرویس شما قابل مشاهده می باشد.
{
"method":"getUsers",
"params":{}
}نتیجه درخواست :
{
"success": true,
"users": {
"docs": [
{
"id": 34,
"username": "testimport6",
"name": "test6",
"active": true,
"createdAt": "2021-06-09T11:10:48.415Z",
"updatedAt": "2021-06-09T11:10:48.415Z",
"service_name": "Free Plan",
"service_id": 1
},
{
"id": 33,
"username": "testimport5",
"name": "test5",
"active": true,
"createdAt": "2021-06-09T11:10:48.076Z",
"updatedAt": "2021-06-09T11:10:48.076Z",
"service_name": " Free Plan ",
"service_id": 1
}
],
"totalDocs": 16,
"limit": 10,
"totalPages": 2,
"page": 1,
"pagingCounter": 1,
"hasPrevPage": false,
"hasNextPage": true,
"prevPage": null,
"nextPage": 2
}
}توضیحات نتیجه :
Filed | Type | Name |
id | Number | شناسه |
name | String | نام |
username | String | نام کاربری |
service_name | Number | نام سرویس |
service_id | Number | شناسه سرویس |
active | Boolean | وضعیت فعال بودن |
createdAt | Date | زمان ایجاد |
updatedAt | Date | زمان بروزرسانی |
getUserبه وسیله این تابع یک کاربر سرویس شما قابل مشاهده می باشد.
در این تابع می توانید با استفاده از یکی از پارامتر های اختیاری کاربر مورد نظر را دریافت کنید .
پارامتر "id" برای جستجو بر اساس شناسه و "username" بر اساس نام کاربری است . (یکی از دو مورد باید حتما ارسال شود)
{
"method":"getUser",
"params":{
"id" : "ID",
"username" : "USERNAME"
}
}توضیحات درخواست :
Filed | Type | Name | Require |
id | Number | شناسه | Yes |
username | String | نام کاربری | Yes |
نتیجه درخواست :
{
"success": true,
"user": {
"id": 6,
"username": "bj_5",
"name": "کاربر جدید",
"active": true,
"createdAt": "2021-03-09T10:17:34.703Z",
"updatedAt": "2021-03-09T10:17:34.703Z",
"service_name": " Free Plan ",
"service_id": 1
}
}توضیحات نتیجه :
Filed | Type | Name |
id | Number | شناسه |
name | String | نام |
username | String | نام کاربری |
service_name | Number | نام سرویس |
service_id | Number | شناسه سرویس |
active | Boolean | وضعیت فعال بودن |
createdAt | Date | زمان ایجاد |
updatedAt | Date | زمان بروزرسانی |
createUser{
"method":"createUser",
"params":{
"username":"USERNAEM",
"password":"PASSWORD",
"name":"NAME"
}
}توضیحات درخواست :
Filed | Type | Name | Require |
username | String | نام کاربری | Yes |
password | String | رمز کاربر | Yes |
name | String | نام کاربر | Yes |
نتیجه درخواست :
{
"success": true,
"user": {
"id": 6,
"username": "bj_5",
"name": "نام کاربر جدید",
"active": true,
"createdAt": "2021-03-09T10:17:34.703Z",
"updatedAt": "2021-03-09T10:17:34.703Z",
"service_name": " Free Plan ",
"service_id": 1
}
}
توضیحات نتیجه :
Filed | Type | Name |
id | Number | شناسه |
name | String | نام |
username | String | نام کاربری |
service_name | Number | نام سرویس |
service_id | Number | شناسه سرویس |
active | Boolean | وضعیت فعال بودن |
createdAt | Date | زمان ایجاد |
updatedAt | Date | زمان بروزرسانی |
editUser{
"method":"editUser",
"params":{
"id":"ID",
"username":"USERNAEM",
"password":"PASSWORD",
"name":"NAME"
}
}توضیحات درخواست :
Filed | Type | Name | Require | Default |
id | number | شناسه کاربر | Yes | - |
username | String | نام کاربری | No | previous_data |
password | String | رمز کاربر | No | previous_data |
name | String | نام کاربر | No | previous_data |
نتیجه درخواست :
{
"success": true,
"user": {
"id": 6,
"username": "bj_5",
"name": "کاربر ادیت شده",
"active": true,
"createdAt": "2021-03-09T10:17:34.703Z",
"updatedAt": "2021-03-09T10:17:34.703Z",
"service_name": " Free Plan ",
"service_id": 1
}
}توضیحات نتیجه :
Filed | Type | Name |
id | Number | شناسه |
name | String | نام |
username | String | نام کاربری |
service_name | Number | نام سرویس |
service_id | Number | شناسه سرویس |
active | Boolean | وضعیت فعال بودن |
createdAt | Date | زمان ایجاد |
updatedAt | Date | زمان بروزرسانی |
deleteUser{
"method":"deleteUser",
"params":{
"id":"ID"
}
}توضیحات درخواست :
Filed | Type | Name | Require |
id | number | شناسه کاربر | Yes |
نتیجه درخواست :
{
"success": true,
}getRoomsبه وسیله این تابع اتاق های سرویس شما قابل مشاهده می باشد.
{
"method":"getRooms",
"params":{}
}نتیجه درخواست :
{
"success": true,
"rooms": {
"docs":[
{
"id": 18,
"name": "101042",
"slug": "my-link2",
"duration": 0,
"max_user": 10,
"has_guest": true,
"link": "c2c4165e-c0b4-4e40-be23-eabdaaef9844",
"active": true,
"host_start": false,
"redirect_url": "",
"createdAt": "2021-06-08T10:44:01.035Z",
"updatedAt": "2021-06-10T07:08:24.762Z",
"service_name": "Free Plan",
"service_id": 1
}
],
"totalDocs": 16,
"limit": 10,
"totalPages": 2,
"page": 1,
"pagingCounter": 1,
"hasPrevPage": false,
"hasNextPage": true,
"prevPage": null,
"nextPage": 2
}
}توضیحات نتیجه :
Filed | Type | Name |
id | Number | شناسه |
name | String | نام |
slug | String | آدرس اختصاصی |
duration | Number | زمان اتاق (ثانیه) |
max_user | Number | حداکثر تعداد کاربران |
has_geust | Boolean | دارای مهمان |
link | String | لینک اتاق |
host_start | Boolean | شروع توسط استاد |
redirect_url | String | لینک ریدایرکت پس از خروج |
active | Boolean | وضعیت فعال بودن |
createdAt | Date | زمان ایجاد |
updatedAt | Date | زمان بروزرسانی |
getRoomبه وسیله این تابع یک اتاق سرویس شما قابل مشاهده می باشد.
{
"method":"getRoom",
"params":{
"id" : "ID"
}
}توضیحات درخواست :
Filed | Type | Name | Require |
id | Number | شناسه | Yes |
نتیجه درخواست :
{
"success": true,
"room":
{
"id": 18,
"name": "101042",
"slug": "my-link2",
"duration": 0,
"max_user": 10,
"has_guest": true,
"link": "c2c4165e-c0b4-4e40-be23-eabdaaef9844",
"active": true,
"host_start": false,
"redirect_url": "",
"createdAt": "2021-06-08T10:44:01.035Z",
"updatedAt": "2021-06-10T07:08:24.762Z",
"service_name": "Free Plan",
"service_id": 1
}
}توضیحات نتیجه :
Filed | Type | Name |
id | Number | شناسه |
name | String | نام |
slug | String | آدرس اختصاصی |
duration | Number | زمان اتاق (ثانیه) |
max_user | Number | حداکثر تعداد کاربران |
has_geust | Boolean | دارای مهمان |
link | String | لینک اتاق |
host_start | Boolean | شروع توسط استاد |
redirect_url | String | لینک ریدایرکت پس از خروج |
active | Boolean | وضعیت فعال بودن |
createdAt | Date | زمان ایجاد |
updatedAt | Date | زمان بروزرسانی |
createRoom{
"method":"createRoom",
"params":{
"name":"USERNAEM",
"duration":"PASSWORD",
"max_user":"NAME",
…Optional_Fileds
}
}توضیحات درخواست :
Filed | Type | Name | Require | Default |
name | String | نام اتاق | Yes | - |
duration | Number | زمان اتاق (ثانیه) | Yes | - |
max_user | Number | حداکثر ظرفیت کاربران | Yes | - |
has_guest | Boolean | دارای مهمان | No | false |
host_start | Boolean | شروع با استاد | No | false |
redirect_url | String | لینک ریدایرکت پس از خروج | No | null |
slug | String | آدرس اختصاصی | No | null |
room_type | String | نوع اتاق: class (کلاس درس)، seminar (سمینار/وبینار) یا meeting (جلسه) | No | class |
ai_transcription | Boolean | گفتار به متن زنده (مستقل از ضبط؛ فقط وقتی سرویس و اتاق هوش مصنوعی دارند) | No | true |
نتیجه درخواست :
{
"success": true,
"room":
{
"id": 18,
"name": "101042",
"slug": "my-link2",
"duration": 0,
"max_user": 10,
"has_guest": true,
"link": "c2c4165e-c0b4-4e40-be23-eabdaaef9844",
"active": true,
"host_start": false,
"redirect_url": "",
"createdAt": "2021-06-08T10:44:01.035Z",
"updatedAt": "2021-06-10T07:08:24.762Z",
"service_name": "Free Plan",
"service_id": 1,
"room_type": "class",
"ai_transcription": true
}
}توضیحات نتیجه :
Filed | Type | Name |
id | Number | شناسه |
name | String | نام |
slug | String | آدرس اختصاصی |
duration | Number | زمان اتاق (ثانیه) |
max_user | Number | حداکثر تعداد کاربران |
has_geust | Boolean | دارای مهمان |
link | String | لینک اتاق |
host_start | Boolean | شروع توسط استاد |
redirect_url | String | لینک ریدایرکت پس از خروج |
active | Boolean | وضعیت فعال بودن |
createdAt | Date | زمان ایجاد |
updatedAt | Date | زمان بروزرسانی |
room_type | String | نوع اتاق (class / seminar / meeting) |
ai_transcription | Boolean | گفتار به متن روشن است |
editRoom{
"method":"editRoom",
"params":{
"id":"ID",
"name":"NAME",
…Other_Fileds
}
}توضیحات درخواست :
Filed | Type | Name | Require | Default |
id | Number | شناسه اتاق | Yes | - |
name | String | نام اتاق | Yes | - |
duration | Number | زمان اتاق (ثانیه) | Yes | - |
max_user | Number | حداکثر ظرفیت کاربران | Yes | - |
has_guest | Boolean | دارای مهمان | No | false |
host_start | Boolean | شروع با استاد | No | false |
redirect_url | String | لینک ریدایرکت پس از خروج | No | null |
slug | String | آدرس اختصاصی | No | null |
room_type | String | نوع اتاق: class (کلاس درس)، seminar (سمینار/وبینار) یا meeting (جلسه) | No | - |
ai_transcription | Boolean | گفتار به متن زنده (مستقل از ضبط؛ فقط وقتی سرویس و اتاق هوش مصنوعی دارند) | No | - |
نتیجه درخواست :
{
"success": true,
"room":
{
"id": 18,
"name": "101042-Edited",
"slug": "my-link2",
"duration": 0,
"max_user": 10,
"has_guest": true,
"link": "c2c4165e-c0b4-4e40-be23-eabdaaef9844",
"active": true,
"host_start": false,
"redirect_url": "",
"createdAt": "2021-06-08T10:44:01.035Z",
"updatedAt": "2021-06-10T07:08:24.762Z",
"service_name": "Free Plan",
"service_id": 1
}
}توضیحات نتیجه :
Filed | Type | Name |
id | Number | شناسه |
name | String | نام |
slug | String | آدرس اختصاصی |
duration | Number | زمان اتاق (ثانیه) |
max_user | Number | حداکثر تعداد کاربران |
has_geust | Boolean | دارای مهمان |
link | String | لینک اتاق |
host_start | Boolean | شروع توسط استاد |
redirect_url | String | لینک ریدایرکت پس از خروج |
active | Boolean | وضعیت فعال بودن |
createdAt | Date | زمان ایجاد |
updatedAt | Date | زمان بروزرسانی |
deleteRoom{
"method":"deleteRoom",
"params":{
"id":"ID"
}
}توضیحات درخواست :
Filed | Type | Name | Require |
id | Number | شناسه اتاق | Yes |
نتیجه درخواست :
{
"success": true,
}addUsersToRoom{
"method":"addUsersToRoom",
"params":{
"id":"ID",
"users":[
{
"user":"USER_ID",
"role":"ROLE_ID"
},
{
"user":"USER_ID2",
"role":"ROLE_ID2"
},
…
],
}
}توضیحات درخواست :
Filed | Type | Name | Require |
id | Number | شناسه اتاق | Yes |
users[ ] | Array[object] | کاربران دارای دسترسی | Yes |
users[ ].user | Number | شناسه کاربر | Yes |
users[ ].role | Number | شناسه نقش | Yes |
نتیجه درخواست :
{
"success": true
}removeUsersFromRoom{
"method":"removeUsersFromRoom",
"params":{
"id":"ID",
"users":[
USER_ID1,
USER_ID2,
…
],
}
}Field | Type | توضیح |
success | Boolean | نتیجه درخواست |
attendance.docs | Array | لیست رکوردهای حضور و غیاب |
attendance.roomSession | Object | اطلاعات جلسه |
attendance.totalDocs | Number | تعداد کل رکوردها |
attendance.page | Number | صفحه جاری |
attendance.limit | Number | تعداد در هر صفحه |
attendance.totalPages | Number | تعداد کل صفحات |
attendance.onlineCount | Number | تعداد کاربران آنلاین |
attendance.offlineCount | Number | تعداد کاربران آفلاین |
attendance.attendanceApiVersion | String | نسخه API حضور و غیاب |
attendance.connectionCount | Number | تعداد کل اتصالها |
attendance.openConnectionCount | Number | تعداد اتصالهای باز |
Field | Type | توضیح |
userId | String | شناسه کاربر |
userName | String | نام کاربر |
userRole.name | String | نام نقش کاربر |
userRole.id | Number | null | شناسه نقش |
firstLoginAt | Unix time (sec) | اولین زمان ورود |
lastLogoutTime | Unix time (sec) | null | آخرین زمان خروج |
totalConnections | Number | تعداد کل اتصالها |
loginCount | Number | تعداد ورود |
logoutCount | Number | تعداد خروج |
totalTimeSeconds | Number | زمان حضور (ثانیه) |
totalTimeMinutes | Number | زمان حضور (دقیقه) |
attendancePercent | Number | درصد حضور |
isOnline | Boolean | وضعیت آنلاین |
ip | String | null | IP کاربر |
userAgent | String | null | User Agent |
deviceInfo | Object | اطلاعات دستگاه (browser/os/device) |
connections | Array | لیست اتصالهای کاربر |
Field | Type | توضیح |
id | String | شناسه اتصال |
startTime | Unix time (sec) | شروع اتصال |
endTime | Unix time (sec) | null | پایان اتصال |
durationSeconds | Number | مدت اتصال (ثانیه) |
isOpen | Boolean | اتصال باز است؟ |
ip | String | null | IP اتصال |
userAgent | String | null | User Agent اتصال |
deviceInfo | Object | اطلاعات دستگاه اتصال |
توضیحات درخواست :
Filed | Type | Name | Require |
id | Number | شناسه اتاق | Yes |
users[ ] | Array[Number] | کاربران جهت حذف دسترسی | Yes |
users[item] | Number | شناسه کاربر | Yes |
نتیجه درخواست :
{
"success": true
}getUserRooms{
"method":"getUserRooms",
"params":{
"id":"USER_ID"
}
}توضیحات درخواست :
Filed | Type | Name | Require |
id | Number | شناسه کاربر | Yes |
نتیجه درخواست :
{
"success": true,
"rooms": [
{
"room_name": "new class",
"id": 4,
"role": "admin"
},
{
"room_name": "101042",
"id": 18,
"role": "operator"
},
…
]
}توضیحات نتیجه :
Filed | Type | Name |
rooms[ ] | Array[object] | لیست اتاق های کاربر |
rooms[ ].room_name | String | نام اتاق |
rooms[ ].id | Number | شناسه اتاق |
rooms[ ].role | String | نام نقش کاربر |
getRoomUsers{
"method":"getRoomUsers",
"params":{
"id":"ROOM_ID"
}
}توضیحات درخواست :
Filed | Type | Name | Require |
id | Number | شناسه اتاق | Yes |
نتیجه درخواست :
{
"success": true,
"users": {
"docs": [
{
"id": 5,
"username": "bj_4",
"name": "کاربر",
"active": true,
"createdAt": "2021-03-06T21:00:09.267Z",
"updatedAt": "2021-06-15T06:21:15.586Z",
"service_name": "Free Plan",
"service_id": 1,
"role": {
"name": "operator",
"id": 3
}
}
],
"totalDocs": 1,
"limit": 10,
"totalPages": 1,
"page": 1,
"pagingCounter": 1,
"hasPrevPage": false,
"hasNextPage": false,
"prevPage": null,
"nextPage": null
}
}پس از اضافه کردن دسترسی کاربر حال میتوانید لینک ورود مستقیم کاربر را از طریق این تابع دریافت کنید .
getLink{
"method":"getLink",
"params":{
"room":"ROOM_ID",
"user":"USER_ID",
"ttl":"TIME_TO_LIVE",
}
}توضیحات درخواست :
Filed | Type | Name | Require | Default |
room | Number | شناسه اتاق | Yes | - |
user | Number | شناسه کاربر | Yes | - |
ttl | Number | اعتبار لینک (ثانیه) | No | 3600 |
نتیجه درخواست :
{
"success": true,
"link": "https://online.dialogee.ir/r/18/5-4aeb8c10-cda9-11eb-adf1-29d6896ec3c7-OiQlZt3CZZ6tI4VgpoIpHbfh87YhsTMzi33CwvQR9Q0RRFQOhvMDv3QWN6eBsrQw"
}توضیحات نتیجه :
Filed | Type | Name |
link | String | لینک مستقیم ورود |
شما میتوانید مستقیما مهمانی رو به اتاق با دسترسی مدنظر خود وارد کنید که نیازی به ساخت کاربر نمی باشد.
getGuestLink{
"method":"getGuestLink",
"params":{
"room":"ROOM_ID",
"user":{
"name":"GUEST_NAME",
"role":"GUEST_ROLE_ID"
},
"ttl":"TIME_TO_LIVE",
}
}توضیحات درخواست :
Filed | Type | Name | Require | Default |
room | Number | شناسه اتاق | Yes | - |
user | Object | کاربر | Yes | - |
String | Object | نام مهمان | Yes | - |
role | Number | دسترسی مهمان | No | 1 |
ttl | Number | اعتبار لینک (ثانیه) | No | 3600 |
نتیجه درخواست :
{
"success": true,
"link": "https://online.dialogee.ir/r/18/5-4aeb8c10-cda9-11eb-adf1-29d6896ec3c7-OiQlZt3CZZ6tI4VgpoIpHbfh87YhsTMzi33CwvQR9Q0RRFQOhvMDv3QWN6eBsrQw"
}توضیحات نتیجه :
Filed | Type | Name |
link | String | لینک مستقیم ورود |
ابتدا لیست جلسات هر اتاق را دریافت کنید و سپس با شناسه جلسه، وضعیت حضور و غیاب تفصیلی را دریافت نمایید.
getRoomSessions{
"method":"getRoomSessions",
"params":{
"id":"ROOM_PUBLIC_ID"
}
}نتیجه درخواست :
{
"success": true,
"sessions": {
"docs": [
{
"_id": "ROOM_SESSION_ID",
"start_time": 1700000000,
"end_time": 1700003600,
"end": true,
"transcript_segments": 142
}
],
"totalDocs": 1,
"page": 1,
"limit": 10,
"totalPages": 1
}
}getDetailedRoomAttendance{
"method":"getDetailedRoomAttendance",
"params":{
"id":"ROOM_SESSION_ID",
"page": 1,
"per_page": 25
}
}نتیجه درخواست :
{
"success": true,
"attendance": {
"docs": [
{
"userId": "USER_ID",
"userName": "نام کاربر",
"attendancePercent": 85.5,
"totalTimeMinutes": 42,
"firstLoginAt": 1700000000,
"lastLogoutTime": 1700002600,
"loginCount": 2,
"logoutCount": 2,
"isOnline": false
}
],
"roomSession": {
"start_time": 1700000000,
"end_time": 1700003600,
"sessionDurationMinutes": 60,
"isActive": false
},
"totalDocs": 1,
"page": 1,
"limit": 25,
"totalPages": 1
}
}exportAttendanceToExcel{
"method":"exportAttendanceToExcel",
"params":{
"session_id":"ROOM_SESSION_ID"
}
}خروجی این درخواست یک فایل Excel از جدول حضور و غیاب تفصیلی است.
اگر به حضور و غیاب، ضبطها و فعالیتهای همان جلسه با یک درخواست نیاز دارید از این متد استفاده کنید. برای دریافت فقط یک مورد خاص (مثلاً فقط فایل مرجشده یا فقط صدای استاد) از متدهای تکی زیر استفاده کنید.
getRoomSessionBundle{
"method":"getRoomSessionBundle",
"params":{
"id":"ROOM_SESSION_ID",
"include":["session","attendance","recordings","activities"],
"include_recording_files": true,
"record_mode":"cloud",
"absolute_urls": true
}
}توضیحات پارامترها:
Field | Type | توضیح |
id | String | شناسه جلسه (_id از getRoomSessions) |
include | Array | اختیاری — زیرمجموعه: session, attendance, recordings, activities (پیشفرض همه) |
include_recording_files | Boolean | پیشفرض true — لینک فایلهای ضبط همراه لیست |
recording_include | Array | اختیاری — فیلتر فایلها مثل ["merged_files"] یا ["instructor_audio"] |
record_mode | String | اختیاری — |
absolute_urls | Boolean | اگر true باشد، URL فایلها کامل (با دامنه) برمیگردد |
گفتار به متن هیچ ارتباطی با ضبط ندارد و بدون روشن بودن ضبط هم کار میکند. در اتاق «جلسه» صدای هر کسی که میکروفنش باز است (میزبان اجازهٔ میکروفن را میدهد) و در «کلاس» و «سمینار» صدای ارائهدهنده، مدرس و مدیر بهصورت زنده به متن تبدیل و با نام گوینده، نقش و زمان دقیق برای همان جلسه ذخیره میشود. این کار فقط وقتی انجام میشود که هر سه شرط برقرار باشد: سرویس هوش مصنوعی دارد، اتاق has_room_ai = true است، و ai_transcription اتاق خاموش نشده باشد. اعتبار هوش هم باید کافی باشد؛ هزینه به ازای دقیقهٔ گفتار از کیف هوش کسر میشود. با خاموش کردن ai_transcription یا has_room_ai با editRoom، ثبت گفتار در کمتر از ۳۰ ثانیه در جلسهٔ زنده هم متوقف میشود.
نوع اتاق (room_type) تعیین میکند چه اسنادی ساخته شود:
room_type | کاربرد | kind های قابل ساخت |
class (پیشفرض) | کلاس درس | lesson_summary, qa, questions |
seminar | سمینار / وبینار | lesson_summary, qa, questions |
meeting | جلسه | minutes, resolutions |
minutes صورتجلسه، resolutions مصوبات و اقدامات (مسئول و مهلت)، lesson_summary خلاصهٔ درس، qa پرسش و پاسخهای مطرحشده و questions سؤالها و فعالیت تمرینی است. در کلاس و سمینار، دستیارهای هوشمند اتاق هم در زمان کلاس از همین متن گفتار استفاده میکنند. تعداد گفتههای هر جلسه در فیلد transcript_segments خروجی getRoomSessions آمده است.
getSessionTranscript{
"method":"getSessionTranscript",
"params":{
"session_id":"ROOM_SESSION_ID",
"page": 1,
"per_page": 200,
"speaker": "",
"q": ""
}
}Field | Type | توضیح |
session_id | String | شناسه جلسه (_id از getRoomSessions) — الزامی |
page / per_page | Number | صفحهبندی؛ per_page حداکثر ۵۰۰ |
speaker | String | اختیاری — فقط گفتههای این کاربر (user_id از speakers) |
q | String | اختیاری — جستجو در متن |
نتیجه درخواست :
{
"success": true,
"room": { "id": 18, "name": "جلسه هیئت مدیره", "room_type": "meeting", "has_room_ai": true, "ai_transcription": true },
"session": { "id": "ROOM_SESSION_ID", "start_time": 1700000000, "end_time": 1700003600, "end": true },
"page": 1,
"per_page": 200,
"total": 142,
"total_segments": 142,
"segments": [
{
"id": "SEGMENT_ID",
"speaker_user_id": "USER_ID",
"speaker_name": "علی رضایی",
"speaker_role": 3,
"role_label": "میزبان",
"breakout_group_id": null,
"started_at": "2026-10-12T08:01:12.000Z",
"offset_ms": 72000,
"offset": "01:12",
"duration_ms": 6400,
"text": "دستور جلسه امروز بررسی بودجهٔ سه ماه آینده است."
}
],
"speakers": [
{ "user_id": "USER_ID", "name": "علی رضایی", "role": 3, "role_label": "میزبان", "segments": 60, "duration_ms": 900000, "chars": 12000 }
],
"available_kinds": [ { "kind": "minutes", "title_fa": "صورتجلسه" }, { "kind": "resolutions", "title_fa": "مصوبات و اقدامات" } ],
"insights": [],
"ai": { "can_generate": true, "code": "" }
}ai.can_generate نشان میدهد اکنون میتوان سند ساخت یا نه؛ در غیر این صورت ai.code یکی از AI_DISABLED، AI_NOT_CONFIGURED یا AI_NO_CREDIT است.
exportSessionTranscript{
"method":"exportSessionTranscript",
"params":{ "session_id":"ROOM_SESSION_ID" }
}{
"success": true,
"room": { "id": 18, "name": "جلسه هیئت مدیره", "room_type": "meeting" },
"text": "[01:12] علی رضایی (میزبان): دستور جلسه امروز ..."
}generateSessionInsight{
"method":"generateSessionInsight",
"params":{
"session_id":"ROOM_SESSION_ID",
"kind":"minutes"
}
}ساخت در پسزمینه انجام میشود و پاسخ فوراً با status: "running" برمیگردد. سپس هر چند ثانیه getSessionInsights را صدا بزنید تا status به ready یا failed برسد. اگر بعد از ساخت گفتهٔ جدیدی اضافه شود، outdated برابر true میشود و میتوانید دوباره بسازید؛ بخشهای قبلاً تحلیلشده دوباره هزینه نمیگیرند.
{
"success": true,
"insight": {
"kind": "minutes",
"title_fa": "صورتجلسه",
"status": "running",
"content": "",
"error": "",
"segments_covered": 0,
"outdated": false,
"started_at": "2026-10-12T09:05:00.000Z"
}
}getSessionInsights{
"method":"getSessionInsights",
"params":{ "session_id":"ROOM_SESSION_ID" }
}{
"success": true,
"total_segments": 142,
"insights": [
{
"kind": "minutes",
"title_fa": "صورتجلسه",
"status": "ready",
"content": "موضوع جلسه: ...\nحاضران: ...\n- ...",
"error": "",
"segments_covered": 142,
"outdated": false,
"model": "MODEL",
"amount_irr": 12000,
"started_at": "2026-10-12T09:05:00.000Z",
"finished_at": "2026-10-12T09:05:40.000Z"
}
]
}کد خطا | معنی |
1099 INVALID_ROOM_TYPE | room_type باید class، seminar یا meeting باشد |
1100 SESSION_TRANSCRIPT_EMPTY | برای این جلسه هنوز متن گفتاری ثبت نشده |
1101 INVALID_INSIGHT_KIND | این kind برای نوع این اتاق مجاز نیست |
1102 INSIGHT_IN_PROGRESS | همین سند در حال ساخت است |
1103 AI_UNAVAILABLE | هوش مصنوعی برای سرویس فعال یا تنظیم نشده |
1104 AI_NO_CREDIT | اعتبار هوش مصنوعی تمام شده |
مسیر پیشنهادی: اتاقهای دارای ضبط ← جلسات دارای ضبط ← لیست ضبطهای جلسه ← جزئیات یک ضبط (با فایلهای مرجشده). میتوانید فقط همان چیزی را که نیاز دارید بگیرید (مثلاً فقط صدای استاد یا فقط فایلهای مرج).
دو نوع ضبط وجود دارد: اکتیویتی (ترکهای جدا + مرج پنل) و ابری (یک MP4 آمادهی پخش). برای جدا کردنشان در همهٔ متدهای زیر، پارامتر record_mode (یا mode) را بفرستید:
مقدار | نتیجه |
cloud | فقط ضبطهای ابری ( |
tracks | فقط ضبط ترکها / خروجی مرج پنل ( |
حذف یا all | هر دو نوع با هم |
در هر آیتم پاسخ، فیلدهای record_mode و is_cloud هم برمیگردند.
آدرس فایلها بهصورت نسبی برمیگردد (مثلاً /records/...). برای دانلود کامل، آن را به دامنهٔ سرویس بچسبانید:https://online.dialogee.ir + url — یا در درخواست absolute_urls: true بفرستید. کوئری ?exp=&sig= را حذف نکنید؛ بدون آن سرور 403 خالی برمیگرداند.
هر بار که وبسرویس جزئیات فایل را برمیگرداند، یک لینک تازه ساخته میشود. مدت اعتبار را نمیتوان در درخواست تعیین کرد؛ همیشه ۷ روز از لحظهٔ پاسخ است. لینک را بهعنوان آدرس دائمی در الاماس ذخیره نکنید. هر بار که صفحهٔ پخش باز میشود، متد را دوباره صدا بزنید و url تازه را بگذارید.
Field | Type | توضیح |
url | String | لینک پخش، همراه |
expires_at | Number | لحظهٔ انقضا به ثانیهٔ یونیکس. همان مقدار |
ttl_sec | Number | مدت اعتبار از لحظهٔ صدور، به ثانیه. همیشه |
این سه فیلد روی هر فایل رسانه میآیند:files.instructor_audio، files.instructor_video، files.screen_share،files.merged_playback، merged_files[].file و فایلهای داخل participant_files.file.path مسیر دیسک است و برای پخش استفاده نمیشود.
getRecords{
"method":"getRecords",
"params":{
"record_mode":"cloud",
"include_files": true,
"absolute_urls": true
}
}getRoomsWithRecordings{
"method":"getRoomsWithRecordings",
"params":{
"record_mode":"cloud"
}
}getRoomSessionsWithRecordings{
"method":"getRoomSessionsWithRecordings",
"params":{
"room_id":"ROOM_PUBLIC_ID",
"record_mode":"tracks"
}
}getSessionRecordings{
"method":"getSessionRecordings",
"params":{
"session_id":"ROOM_SESSION_ID",
"record_mode":"cloud",
"include_files": true,
"absolute_urls": true
}
}نتیجه نمونه:
{
"success": true,
"mode": "cloud",
"session": {
"id": "ROOM_SESSION_ID",
"start_time": 1700000000,
"end_time": 1700003600,
"end": true,
"room": { "id": "...", "name": "...", "public_id": "..." }
},
"recordings": [
{
"id": "RECORD_ID",
"name": "ضبط یکجا ابری",
"status": "completed",
"record_mode": "cloud",
"is_cloud": true,
"duration_ms": 3600000,
"has_merged_playback": true,
"has_merged_files": true,
"merged_files_count": 1
}
]
}برای همراه شدن لینک فایلها در همین پاسخ: "include_files": trueو در صورت نیاز فیلتر: "include": ["merged_files"] یا "include": ["instructor_audio"]
getRecord{
"method":"getRecord",
"params":{
"id":"RECORD_ID",
"absolute_urls": true
}
}فقط فایلهای مرجشده:
{
"method":"getRecord",
"params":{
"id":"RECORD_ID",
"include":["merged_files"],
"absolute_urls": true
}
}فقط صدای استاد:
{
"method":"getRecord",
"params":{
"id":"RECORD_ID",
"include":["instructor_audio"],
"absolute_urls": true
}
}نتیجه نمونه (خلاصه فیلدهای مهم):
{
"success": true,
"record": {
"id": "RECORD_ID",
"name": "ضبط جلسه",
"status": "completed",
"record_mode": "tracks",
"is_cloud": false,
"duration_ms": 3600000,
"files": {
"instructor_audio": { "filename": "instructor_audio.webm", "url": "https://online.dialogee.ir/records/.../instructor_audio.webm?exp=1790000000&sig=...", "expires_at": 1790000000, "ttl_sec": 604800 },
"instructor_video": { "filename": "instructor_video.webm", "url": "..." },
"screen_share": { "filename": "screen_share.webm", "url": "..." }
},
"merged_files": [
{
"id": "MERGE_ID",
"name": "مرج شده",
"type": "video",
"source": "merge",
"options": { "include_audio": true, "include_video": true, "include_screen": true, "include_chat": true },
"file": {
"filename": "merged_....mp4",
"url": "https://online.dialogee.ir/records/594/RECORD_ID/merged_....mp4?exp=1790000000&sig=...",
"expires_at": 1790000000,
"ttl_sec": 604800,
"size_bytes": 123456789
}
}
],
"participant_files": []
}
}برای ضبط ابری، record_mode برابر cloud و در merged_files مقدار source: "cloud" است (فایل نهایی همان لحظهٔ توقف آماده است و نیازی به مرج پنل ندارد).
مقدار | توضیح |
instructor_audio | فقط صدای استاد |
instructor_video | فقط تصویر/دوربین استاد |
screen_share | فقط اشتراک صفحه |
merged_playback | پخش مرج قدیمی (legacy) |
files | همهٔ ترکهای اصلی در files |
merged_files | فایلهای مرج ساختهشده در پنل |
participant_files | فایلهای شرکتکنندگان |
metadata | متادیتای ضبط |
ai | فیلدهای مرتبط با پردازش AI |
بدون include، پاسخ کامل (رفتار قبلی) برمیگردد.
برای دریافت لیست فعالیتها، ابتدا اتاقهای دارای فعالیت را دریافت کرده و سپس با شناسه اتاق، لیست فعالیتهای همان اتاق را بگیرید. برای جزئیات هر فعالیت از شناسه فعالیت استفاده کنید.
getRoomsWithActivities{
"method":"getRoomsWithActivities"
}توضیحات نتیجه :
Field | Type | توضیح |
rooms | Array | لیست اتاقهای دارای فعالیت |
rooms[].id | String | شناسه دیتابیس اتاق |
rooms[].name | String | نام اتاق |
rooms[].public_id | String | شناسه عمومی اتاق |
rooms[].slug | String | آدرس اختصاصی اتاق |
rooms[].active | Boolean | وضعیت فعال بودن |
rooms[].activity_count | Number | تعداد کل فعالیتها |
rooms[].closed_activity_count | Number | تعداد فعالیتهای بستهشده |
getRoomActivities{
"method":"getRoomActivities",
"params":{
"room_id":"ROOM_PUBLIC_ID"
}
}getActivityDetails{
"method":"getActivityDetails",
"params":{
"activity_id":"ACTIVITY_PUBLIC_ID"
}
}exportActivityToExcel{
"method":"exportActivityToExcel",
"params":{
"activity_id":"ACTIVITY_PUBLIC_ID"
}
}exportActivity{
"method":"exportActivity",
"params":{
"activity_id":"ACTIVITY_PUBLIC_ID"
}
}توضیحات نتیجه :
Field | Type | توضیح |
room | Object | اطلاعات اتاق (id, name, public_id) |
activities | Array | لیست فعالیتها |
Field | Type | توضیح |
id | String | شناسه دیتابیس |
public_id | String | شناسه عمومی فعالیت |
title | String | عنوان فعالیت |
description | String | توضیحات فعالیت |
type | poll | quiz | نوع فعالیت |
status | draft | live | closed | وضعیت فعالیت |
roomPublicId | String | شناسه عمومی اتاق |
createdAt | Date | تاریخ ایجاد |
launchedAt | Date | null | زمان شروع |
closedAt | Date | null | زمان پایان |
submission_count | Number | تعداد ارسال پاسخ |
items | Array | سوالها/آیتمها |
Field | Type | توضیح |
activity | Object | جزئیات کامل فعالیت |
results | Object | null | نتایج تجمیعی (ساختار بسته به نوع سوال) |
submissions | Array | لیست پاسخها |
Field | Type | توضیح |
id | String | شناسه پاسخ |
public_id | String | شناسه عمومی پاسخ |
userName | String | نام کاربر |
isGuest | Boolean | کاربر مهمان است؟ |
submittedAt | Date | زمان ارسال |
answers | Array | پاسخها |
score | Number | null | امتیاز |
maxScore | Number | null | حداکثر امتیاز |
percentage | Number | null | درصد |