راهنمای توسعه‌دهندگان

مستندات وب سرویس دیالوگی

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

تمام درخواست‌ها به صورت POST و با بدنه JSON ارسال می‌شوند.
مستندات وب سرویس

مستندات وب سرویس

جهت استفاده از تمام امکانات سامانه دیالوگی در اپلیکشین خود می توانید اقدام به استفاده از وب سرویس دیالوگی فرمایید . وب سرویس به صورت REST می باشد و تمامی درخواست ها به صورت POST بوده و ورودی ها به صورت JSON می باشد که در ادامه توضیح داده خواهد شد .


همچنین توجه داشته باشید که تمامی درخواست ها با HTTP Status Code 200 بازگردانی خواهند شد.

آدرس تمام درخواست ها به صورت زیر خواهد بود :

https://online.dialogee.ir/api/apiToken

که کلید سرویس پس از دریافت اکانت در اختیار شما قرار می گیرد.

نمونه ارسال درخواست :

به طور کلی درخواست POST با دیتای JSON به صورت زیر است.

توجه کنید که :

  • • حروف کوچک و بزرگ در تمام قسمت ها متفاوت هستند.
  • • مقدار "method" همواره String بوده و نام درخواست می باشد - مثلا getUsers که برای دریافت کاربران می باشد.
  • • در قسمت "params" هر کدام از "PARAM_*" ها نام پارامتر می باشد و مقدار هر کدام میتواند بر اساس نوع درخواست String - Array - Object باشد.
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=50

لیست شناسه نقش ها :

ID

Name

4

مدیر

3

استاد

2

ارائه دهنده

1

دانش پذیر

فرایند نمونه برای ایجاد وبینار و استفاده از آن :

  • 1- ساخت اتاق
  • 2- ساخت کاربر (ها)
  • 3- دسترسی دادن به کاربران برای استفاده از اتاق ساخته شده
  • 4- دریافت لینک ورود به اتاق

لیست توابع قابل استفاده :


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

زمان بروزرسانی

2- دریافت اطلاعات همه کاربران:

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

زمان بروزرسانی


3- دریافت اطلاعات یک کاربر:

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

زمان بروزرسانی


4- ساخت کاربر :

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

زمان بروزرسانی


5- ویرایش کاربر :

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

زمان بروزرسانی

6- حذف کاربر :

deleteUser
{
	"method":"deleteUser",
	"params":{
                             "id":"ID"
	}
 }

توضیحات درخواست :

Filed

Type

Name

Require

id

number

شناسه کاربر

Yes


نتیجه درخواست :

{
    "success": true,
 }

7- دریافت اطلاعات همه اتاق ها:

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

زمان بروزرسانی


8- دریافت اطلاعات یک اتاق:

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

زمان بروزرسانی


9- ساخت اتاق :

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

گفتار به متن روشن است


10- ویرایش اتاق :

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

زمان بروزرسانی

11- حذف اتاق :

deleteRoom
{
	"method":"deleteRoom",
	"params":{
		"id":"ID"
		}
 }

توضیحات درخواست :

Filed

Type

Name

Require

id

Number

شناسه اتاق

Yes


نتیجه درخواست :

{
    "success": true,
 }

توابع دسترسی ها :


1- افزودن دسترسی کاربر (ها) به اتاق :

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
 }

2- حذف دسترسی کاربر (ها) از اتاق :

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

تعداد اتصال‌های باز

دیکشنری ستون‌های حضور و غیاب تفصیلی (attendance.docs):

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

لیست اتصال‌های کاربر

دیکشنری ستون‌های connections:

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
 }

3- لیست اتاق های یک کاربر :

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

نام نقش کاربر


4- لیست کاربر های یک اتاق :

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
            } 
 }

5- دریافت لینک ورود به اتاق :

پس از اضافه کردن دسترسی کاربر حال میتوانید لینک ورود مستقیم کاربر را از طریق این تابع دریافت کنید .

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

لینک مستقیم ورود

6- دریافت لینک مستقیم ورود به اتاق برای مهمان :

شما میتوانید مستقیما مهمانی رو به اتاق با دسترسی مدنظر خود وارد کنید که نیازی به ساخت کاربر نمی باشد.

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

اختیاری — cloud فقط ضبط ابری، tracks فقط ضبط/مرج اکتیویتی؛ بدون آن هر دو

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

اعتبار هوش مصنوعی تمام شده

ضبط جلسات (Recordings)

مسیر پیشنهادی: اتاق‌های دارای ضبط ← جلسات دارای ضبط ← لیست ضبط‌های جلسه ← جزئیات یک ضبط (با فایل‌های مرج‌شده). می‌توانید فقط همان چیزی را که نیاز دارید بگیرید (مثلاً فقط صدای استاد یا فقط فایل‌های مرج).

دو نوع ضبط وجود دارد: اکتیویتی (ترک‌های جدا + مرج پنل) و ابری (یک MP4 آماده‌ی پخش). برای جدا کردنشان در همهٔ متدهای زیر، پارامتر record_mode (یا mode) را بفرستید:

مقدار

نتیجه

cloud

فقط ضبط‌های ابری (record_mode: "cloud"؛ فایل با merged_files[].source = "cloud")

tracks

فقط ضبط ترک‌ها / خروجی مرج پنل (source: "merge")

حذف یا all

هر دو نوع با هم

در هر آیتم پاسخ، فیلدهای record_mode و is_cloud هم برمی‌گردند.

آدرس فایل‌ها به‌صورت نسبی برمی‌گردد (مثلاً /records/...). برای دانلود کامل، آن را به دامنهٔ سرویس بچسبانید:https://online.dialogee.ir + url — یا در درخواست absolute_urls: true بفرستید. کوئری ?exp=&sig= را حذف نکنید؛ بدون آن سرور 403 خالی برمی‌گرداند.

اعتبار لینک فایل ضبط:

هر بار که وب‌سرویس جزئیات فایل را برمی‌گرداند، یک لینک تازه ساخته می‌شود. مدت اعتبار را نمی‌توان در درخواست تعیین کرد؛ همیشه ۷ روز از لحظهٔ پاسخ است. لینک را به‌عنوان آدرس دائمی در ال‌ام‌اس ذخیره نکنید. هر بار که صفحهٔ پخش باز می‌شود، متد را دوباره صدا بزنید و url تازه را بگذارید.

Field

Type

توضیح

url

String

لینک پخش، همراه exp و sig. همین رشته را بدون تغییر استفاده کنید.

expires_at

Number

لحظهٔ انقضا به ثانیهٔ یونیکس. همان مقدار exp داخل لینک است. بعد از این لحظه پاسخ 403 است.

ttl_sec

Number

مدت اعتبار از لحظهٔ صدور، به ثانیه. همیشه 604800 (۷ روز).

این سه فیلد روی هر فایل رسانه می‌آیند: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" است (فایل نهایی همان لحظهٔ توقف آماده است و نیازی به مرج پنل ندارد).

مقادیر مجاز include در getRecord:

مقدار

توضیح

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"
  }
}

خروجی اکسل/CSV فعالیت:

exportActivityToExcel
{
  "method":"exportActivityToExcel",
  "params":{
    "activity_id":"ACTIVITY_PUBLIC_ID"
  }
}

خروجی JSON فعالیت:

exportActivity
{
  "method":"exportActivity",
  "params":{
    "activity_id":"ACTIVITY_PUBLIC_ID"
  }
}

توضیحات نتیجه :

توضیحات نتیجه getRoomActivities:

Field

Type

توضیح

room

Object

اطلاعات اتاق (id, name, public_id)

activities

Array

لیست فعالیت‌ها

دیکشنری فیلدهای activity:

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

سوال‌ها/آیتم‌ها

توضیحات نتیجه getActivityDetails:

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

درصد