جلسهها
همهٔ مسیرها نسبت به https://app.lobbe.ai/api/v1 هستند و هر درخواست Authorization: Bearer $LOBBE_TOKEN را میفرستد. مرجع API همهٔ مسیرها را فهرست میکند و فیلدهای x-lobbe-* را توضیح میدهد.
GET /recordings/ready
Section titled “GET /recordings/ready”فهرست جلسههای آماده، از تازهترین.
| ویژگی | مقدار |
|---|---|
| دسترسیها | recordings:read |
| دقیقه مصرف میکند | خیر |
| سقف درخواستها | read: ۶۰۰ درخواست در هر ۱۰ دقیقه برای هر توکن |
| پاسخ موفق | 200 |
پارامترها
Section titled “پارامترها”| نام | محل | نوع | الزامی | توضیح |
|---|---|---|---|---|
limit |
query |
integer |
خیر | تعداد جلسههایی که برمیگردد، از ۱ تا ۱۰۰ (پیشفرض ۲۰) |
cursor |
query |
string |
خیر | مقدار nextCursor صفحهٔ قبل، بیتغییر؛ اگر نباشد تازهترین صفحه برمیگردد، و هر مقدار دیگری پاسخ 400 میگیرد |
seriesId |
query |
string |
خیر | فقط جلسههای این سری، سری خودتان یا سریای که عضوش هستید (سریای که به آن دسترسی ندارید پاسخ 404 میگیرد)؛ اگر نباشد، جلسههای خودتان |
پاسخ 200
Section titled “پاسخ 200”یک صفحه از جلسههای آماده، از تازهترین.
| فیلد | نوع | همیشه میآید | توضیح |
|---|---|---|---|
schemaVersion |
1 |
بله | در نسخهٔ ۱ API همیشه 1 |
items[] |
object[] |
بله | جلسههای این صفحه: فقط جلسههای READY، همانهایی که جلسهٔ کاملشان را میتوان خواند |
items[].id |
string |
بله | شناسهٔ جلسه |
items[].title |
string | null |
بله | عنوان جلسه: همانکه صاحب جلسه یا توکنِ فرستنده داده است، وگرنه عنوان لُب آن؛ اگر عنوانی نداشته باشد null است |
items[].kind |
"MEETING" | "LECTURE" | "INTERVIEW" | "VOICE_MEMO" | "CALL" |
بله | نوع ضبط، که قالب لُب را تعیین میکند: MEETING، LECTURE، INTERVIEW، VOICE_MEMO یا CALL |
items[].createdAt |
string |
بله | زمانی که لُب جلسه را دریافت کرد (ISO 8601، به وقت UTC)؛ ترتیب listReadyRecordings بر اساس آن است |
items[].recordedAt |
string |
بله | زمان برگزاری جلسه (ISO 8601، به وقت UTC): همان recordedAt که با جلسه فرستاده شد، وگرنه زمانی که لُب آن را دریافت کرد |
items[].durationSeconds |
integer | null |
بله | طول صدا به ثانیه، همانطور که لُب اندازه گرفت؛ اگر معلوم نباشد null است |
items[].url |
string (uri) |
بله | صفحهٔ جلسه در برنامهٔ وب |
items[].bundleUrl |
string (uri) |
بله | با درخواست GET و توکنی که دسترسی recordings:read دارد، جلسهٔ کامل را بگیرید (getRecordingBundle) |
items[].series |
object | null |
بله | سریای که جلسه در آن است؛ اگر در هیچ سریای نباشد یا سریها خاموش باشند null است |
items[].series.id |
string |
بله | شناسهٔ سری، همانکه seriesId میگیرد |
items[].series.name |
string |
بله | نام سری |
items[].displayTitle |
string | null |
بله | عنوان همانطور که برنامه نشان میدهد: در سریای که عنوان جلسههایش «نام سری + تاریخ» است، نام سری و تاریخ جلسه به زبان لُب؛ وگرنه عنوان جلسه و اگر نباشد عنوان لُب آن؛ اگر هیچکدام نباشد null است |
nextCursor |
string | null |
بله | برای صفحهٔ بعد (قدیمیتر) آن را بهعنوان cursor بفرستید؛ در صفحهٔ آخر null است |
خطاها با { error: { code, message, details? } } پاسخ داده میشوند و code قرارداد است: خطاها را ببینید.
GET /recordings/search
Section titled “GET /recordings/search”جستوجو در جلسههای آمادهٔ صاحب حساب با واژههایشان، از تازهترین جلسه.
| ویژگی | مقدار |
|---|---|
| دسترسیها | recordings:query |
| دقیقه مصرف میکند | خیر |
| سقف درخواستها | search: ۱۲۰ درخواست در هر ۱۰ دقیقه برای هر توکن |
| پاسخ موفق | 200 |
پارامترها
Section titled “پارامترها”| نام | محل | نوع | الزامی | توضیح |
|---|---|---|---|---|
q |
query |
string |
بله | واژههایی که جستوجو میشوند، ۱ تا ۲۰۰ نویسه. جلسهای پیدا میشود که همهٔ واژهها در عنوان، رونوشت یا لُب آن آمده باشند، حتی درون واژهای بلندتر؛ بزرگی و کوچکی حروف، اعراب، نیمفاصله و شکل عربی حروف نادیده گرفته میشوند و رقمهای فارسی با رقمهای لاتین یکی حساب میشوند. qی که هیچ واژهای نداشته باشد پاسخ 400 میگیرد |
seriesId |
query |
string |
خیر | فقط جلسههای این سری، سری خودتان یا سریای که عضوش هستید (سریای که به آن دسترسی ندارید پاسخ 404 میگیرد)؛ اگر نباشد، جلسههای خودتان |
kind |
query |
"MEETING" | "LECTURE" | "INTERVIEW" | "VOICE_MEMO" | "CALL" |
خیر | فقط جلسههایی از این نوع: MEETING، LECTURE، INTERVIEW، VOICE_MEMO یا CALL |
from |
query |
string (date-time) |
خیر | فقط جلسههایی که در این زمان یا پس از آن برگزار شدهاند (recordedAt)، به ISO 8601 با اختلاف ساعت |
to |
query |
string (date-time) |
خیر | فقط جلسههایی که در این زمان یا پیش از آن برگزار شدهاند (recordedAt)، به ISO 8601 با اختلاف ساعت |
limit |
query |
integer |
خیر | تعداد جلسههایی که برمیگردد، از ۱ تا ۵۰ (پیشفرض ۲۰) |
cursor |
query |
string |
خیر | مقدار nextCursor صفحهٔ قبل، بیتغییر؛ اگر نباشد صفحهٔ نخست برمیگردد، و مقدار نادرست پاسخ 400 میگیرد |
پاسخ 200
Section titled “پاسخ 200”جلسههای آمادهای که واژهها در آنها پیدا شد، از تازهترین جلسه (بر اساس recordedAt)؛ جستوجو رایگان است.
| فیلد | نوع | همیشه میآید | توضیح |
|---|---|---|---|
schemaVersion |
1 |
بله | در نسخهٔ ۱ API همیشه 1 |
items[] |
object[] |
بله | جلسههای این صفحه: فقط جلسههای READY، هر کدام همان ردیف listReadyRecordings بهاضافهٔ snippet |
items[].id |
string |
بله | شناسهٔ جلسه |
items[].title |
string | null |
بله | عنوان جلسه: همانکه صاحب جلسه یا توکنِ فرستنده داده است، وگرنه عنوان لُب آن؛ اگر عنوانی نداشته باشد null است |
items[].kind |
"MEETING" | "LECTURE" | "INTERVIEW" | "VOICE_MEMO" | "CALL" |
بله | نوع ضبط، که قالب لُب را تعیین میکند: MEETING، LECTURE، INTERVIEW، VOICE_MEMO یا CALL |
items[].createdAt |
string |
بله | زمانی که لُب جلسه را دریافت کرد (ISO 8601، به وقت UTC)؛ ترتیب listReadyRecordings بر اساس آن است |
items[].recordedAt |
string |
بله | زمان برگزاری جلسه (ISO 8601، به وقت UTC): همان recordedAt که با جلسه فرستاده شد، وگرنه زمانی که لُب آن را دریافت کرد |
items[].durationSeconds |
integer | null |
بله | طول صدا به ثانیه، همانطور که لُب اندازه گرفت؛ اگر معلوم نباشد null است |
items[].url |
string (uri) |
بله | صفحهٔ جلسه در برنامهٔ وب |
items[].bundleUrl |
string (uri) |
بله | با درخواست GET و توکنی که دسترسی recordings:read دارد، جلسهٔ کامل را بگیرید (getRecordingBundle) |
items[].series |
object | null |
بله | سریای که جلسه در آن است؛ اگر در هیچ سریای نباشد یا سریها خاموش باشند null است |
items[].series.id |
string |
بله | شناسهٔ سری، همانکه seriesId میگیرد |
items[].series.name |
string |
بله | نام سری |
items[].displayTitle |
string | null |
بله | عنوان همانطور که برنامه نشان میدهد: در سریای که عنوان جلسههایش «نام سری + تاریخ» است، نام سری و تاریخ جلسه به زبان لُب؛ وگرنه عنوان جلسه و اگر نباشد عنوان لُب آن؛ اگر هیچکدام نباشد null است |
items[].snippet |
string | null |
بله | حداکثر ۲۰۰ نویسه پیرامون نخستین جای پیداشده، از رونوشت، و اگر واژهها فقط در لُب پیدا شده باشند از لُب؛ اگر واژهها فقط در عنوان پیدا شده باشند null است |
nextCursor |
string | null |
بله | برای صفحهٔ بعد (قدیمیتر) آن را بهعنوان cursor بفرستید؛ در صفحهٔ آخر null است |
خطاها با { error: { code, message, details? } } پاسخ داده میشوند و code قرارداد است: خطاها را ببینید.
GET /recordings/{id}/ask/quote
Section titled “GET /recordings/{id}/ask/quote”هزینهٔ پرسیدن یک سؤال از این جلسه، به دقیقه.
| ویژگی | مقدار |
|---|---|
| دسترسیها | recordings:query |
| دقیقه مصرف میکند | خیر |
| سقف درخواستها | search: ۱۲۰ درخواست در هر ۱۰ دقیقه برای هر توکن |
| پاسخ موفق | 200 |
پارامترها
Section titled “پارامترها”| نام | محل | نوع | الزامی | توضیح |
|---|---|---|---|---|
id |
path |
string |
بله | شناسهٔ جلسه |
پاسخ 200
Section titled “پاسخ 200”هزینهٔ یک پرسش از این جلسه؛ خواندن این برآورد رایگان است.
| فیلد | نوع | همیشه میآید | توضیح |
|---|---|---|---|
schemaVersion |
1 |
بله | در نسخهٔ ۱ API همیشه 1 |
minutes |
integer |
بله | قیمت به دقیقه: همان هزینهای که askRecording میگیرد و به همان شیوه از رونوشت جلسه حساب میشود، پس تا وقتی رونوشت تغییر نکند این دو یکیاند |
خطاها با { error: { code, message, details? } } پاسخ داده میشوند و code قرارداد است: خطاها را ببینید.
POST /recordings/{id}/ask
Section titled “POST /recordings/{id}/ask”پرسیدن یک سؤال از یک جلسه، با پاسخ از رونوشت و لُب آن؛ هر پاسخ هزینه دارد.
| ویژگی | مقدار |
|---|---|
| دسترسیها | recordings:query |
| دقیقه مصرف میکند | بله |
| سقف درخواستها | ask: ۳۰ درخواست در هر ۱۰ دقیقه برای هر توکن |
| پاسخ موفق | 200 |
این مسیر میتواند دقیقه مصرف کند: هدر Idempotency-Key را بفرستید تا تکرار درخواست با همان کلید، بهجای هزینهٔ دوباره، همان نتیجهٔ اول را برگرداند. تکرارپذیری و تلاش دوباره را ببینید.
پارامترها
Section titled “پارامترها”| نام | محل | نوع | الزامی | توضیح |
|---|---|---|---|---|
id |
path |
string |
بله | شناسهٔ جلسه |
Idempotency-Key |
header |
string |
خیر | پیشنهاد میشود. برای هر جلسه یا سؤال تازه یک بار کلیدی بسازید (۸ تا ۶۴ نویسه، مثلاً یک UUID تصادفی) و همان کلید را بیتغییر در هر تلاش دوبارهٔ همان درخواست بفرستید؛ هرگز آن را برای درخواست دیگری به کار نبرید. تکرار یک درخواست همان نتیجهٔ اول را برمیگرداند و هرگز دو بار هزینه نمیگیرد. کلید برای همیشه از آنِ صاحب حساب میماند و هرگز منقضی نمیشود. |
بدنهٔ درخواست (application/json)
Section titled “بدنهٔ درخواست (application/json)”سؤال، و در صورت نیاز سقفی برای قیمت آن. فیلدی که اینجا نیامده پاسخ 400 میگیرد.
| فیلد | نوع | الزامی | توضیح |
|---|---|---|---|
question |
string |
بله | سؤال، پس از پیراستن دو سر آن، ۱ تا ۵۰۰ نویسه |
maxMinutes |
integer |
خیر | بیشترین هزینهای که میپذیرید، به دقیقه (دستکم ۱): اگر قیمت بیشتر باشد، سؤال با 409 PRICE_ABOVE_MAX رد میشود (details آن minutes و maxMinutes را دارد) و هزینهای گرفته نمیشود؛ اگر نباشد، سقفی در کار نیست |
idempotencyKey |
string |
خیر | کلید تکرار درخواست در بدنه، بهجای هدر Idempotency-Key (۸ تا ۶۴ نویسه)؛ اگر هر دو فرستاده شوند هدر ملاک است |
پاسخ 200
Section titled “پاسخ 200”پاسخ، که هزینهاش گرفته شده است؛ تکرار درخواست با همان کلید همین پاسخ را برمیگرداند و هرگز دو بار هزینه نمیگیرد.
| فیلد | نوع | همیشه میآید | توضیح |
|---|---|---|---|
schemaVersion |
1 |
بله | در نسخهٔ ۱ API همیشه 1 |
answer |
string |
بله | پاسخ. [n] ادعایی را نشان میدهد که citations[n - 1] پشتیبان آن است، و این نشانهها به ترتیب خواندن ۱، ۲، … شماره میخورند |
citations[] |
object[] |
بله | جایی از جلسه که این را میگوید: حداکثر ۳ نوبت، به ترتیبی که پاسخ نخستین بار به آنها ارجاع میدهد |
citations[].startMs |
number |
بله | زمان شروع نوبتِ ارجاعشده، به میلیثانیه از ابتدای صدای جلسه |
citations[].speaker |
string | null |
بله | گویندهٔ آن: برچسب گویندهٔ نوبت همانطور که در رونوشت آمد (مثلاً speaker_0)، هرگز نامی که به صدا داده شده؛ اگر نوبت گویندهای نداشته باشد null است |
minutes |
integer |
بله | هزینهای که این پاسخ گرفت، به دقیقه؛ پاسخ ردشده هم هزینه دارد |
refused |
boolean |
بله | اگر لُب از روی آنچه گفته شده پاسخی ندهد true است: answer دلیلش را میگوید و هزینه همچنان گرفته میشود |
خطاها با { error: { code, message, details? } } پاسخ داده میشوند و code قرارداد است: خطاها را ببینید.
GET /recordings/{id}/bundle
Section titled “GET /recordings/{id}/bundle”یک جلسهٔ آماده: رونوشت، لُب و آمار آن؛ با format=markdown یک سند Markdown برمیگرداند.
| ویژگی | مقدار |
|---|---|
| دسترسیها | recordings:read |
| دقیقه مصرف میکند | خیر |
| سقف درخواستها | read: ۶۰۰ درخواست در هر ۱۰ دقیقه برای هر توکن |
| پاسخ موفق | 200 |
با ?format=markdown پاسخ text/markdown است: همین محتوا در قالب یک سند Markdown.
پارامترها
Section titled “پارامترها”| نام | محل | نوع | الزامی | توضیح |
|---|---|---|---|---|
id |
path |
string |
بله | شناسهٔ جلسه |
format |
query |
"json" | "markdown" |
خیر | json (پیشفرض) یا markdown که کل جلسه را در یک سند text/markdown برمیگرداند؛ هر مقدار دیگری پاسخ 400 میگیرد |
پاسخ 200
Section titled “پاسخ 200”یک جلسهٔ آماده: رونوشت، لُب و آمار آن.
| فیلد | نوع | همیشه میآید | توضیح |
|---|---|---|---|
schemaVersion |
1 |
بله | در نسخهٔ ۱ API همیشه 1 |
recording |
object |
بله | خود جلسه |
recording.id |
string |
بله | شناسهٔ جلسه |
recording.title |
string | null |
بله | عنوان جلسه: همانکه صاحب جلسه یا توکنِ فرستنده داده است، وگرنه عنوان لُب آن؛ اگر عنوانی نداشته باشد null است |
recording.kind |
"MEETING" | "LECTURE" | "INTERVIEW" | "VOICE_MEMO" | "CALL" |
بله | نوع ضبط، که قالب لُب را تعیین میکند: MEETING، LECTURE، INTERVIEW، VOICE_MEMO یا CALL |
recording.source |
"IN_APP" | "UPLOAD" |
بله | از چه راهی به لُب رسید: IN_APP (در برنامه ضبط شد) یا UPLOAD (یک فایل، از جمله ارسال با توکن) |
recording.createdAt |
string |
بله | زمانی که لُب جلسه را دریافت کرد (ISO 8601، به وقت UTC) |
recording.recordedAt |
string |
بله | زمان برگزاری جلسه (ISO 8601، به وقت UTC): همان recordedAt که با جلسه فرستاده شد، وگرنه زمانی که لُب آن را دریافت کرد |
recording.durationSeconds |
integer | null |
بله | طول صدا به ثانیه، همانطور که لُب اندازه گرفت؛ اگر معلوم نباشد null است |
recording.url |
string (uri) |
بله | صفحهٔ جلسه در برنامهٔ وب |
recording.series |
object | null |
بله | سریای که جلسه در آن است؛ اگر در هیچ سریای نباشد یا سریها خاموش باشند null است |
recording.series.id |
string |
بله | شناسهٔ سری، همانکه seriesId میگیرد |
recording.series.name |
string |
بله | نام سری |
recording.access |
"owner" | "member" |
بله | اگر جلسه مال خودتان باشد owner؛ اگر از سریای باشد که عضوش هستید member |
recording.displayTitle |
string | null |
بله | عنوان همانطور که برنامه نشان میدهد: در سریای که عنوان جلسههایش «نام سری + تاریخ» است، نام سری و تاریخ جلسه به زبان لُب؛ وگرنه عنوان جلسه و اگر نباشد عنوان لُب آن؛ اگر هیچکدام نباشد null است |
recording.subtitle |
string | null |
بله | در سریای که عنوان جلسههایش «نام سری + تاریخ» است، عنوان خود جلسه و اگر نباشد عنوان لُب آن؛ در غیر این صورت null است |
transcript |
object |
بله | آنچه گفته شد، نوبت به نوبت |
transcript.language |
string |
بله | زبانی که در صدا تشخیص داده شد، با کد ISO 639-1 (fa، en، …) |
transcript.revision |
integer |
بله | با هر ویرایش صاحب جلسه و هر «بررسی دوبارهٔ جلسه» برای صداهای جاافتاده یکی بالا میرود؛ 0 یعنی هیچکدام رخ نداده است |
transcript.edited |
boolean |
بله | اینکه رونوشت از نخستین ساختهشدنش تا به حال تغییر کرده است یا نه، با ویرایش صاحب جلسه یا با «بررسی دوبارهٔ جلسه» (revision بیشتر از 0) |
transcript.speakers[] |
object[] |
بله | برای هر کسی که صحبت کرد یک سطر؛ صداهایی که یک نام گرفتهاند یک نفر حساب میشوند |
transcript.speakers[].label |
string |
بله | برچسب این فرد (مثلاً speaker_0)، همانکه در segments[].speaker و stats میآید |
transcript.speakers[].name |
string | null |
بله | نامی که به این صدا داده شد؛ اگر کسی نامگذاریاش نکرده باشد null است |
transcript.segments[] |
object[] |
بله | نوبتها، به ترتیب |
transcript.segments[].speaker |
string |
بله | چه کسی صحبت کرد: یکی از speakers[].label |
transcript.segments[].startMs |
integer |
بله | زمان شروع نوبت، به میلیثانیه از ابتدای صدا |
transcript.segments[].endMs |
integer |
بله | زمان پایان نوبت، به میلیثانیه از ابتدای صدا |
transcript.segments[].text |
string |
بله | آنچه گفته شد، با اصلاحهای صاحب جلسه |
transcript.segments[].edited |
boolean |
بله | اینکه صاحب جلسه این نوبت را اصلاح کرده است یا نه |
transcript.segments[].lowConfidence |
boolean |
بله | اینکه شاید این نوبت درست شنیده نشده باشد؛ روی نوبتی که صاحب جلسه اصلاح کرده همیشه false است |
transcript.text |
string |
بله | کل رونوشت بهصورت متن ساده، بدون گوینده و زمان |
transcript.markdown |
string |
بله | رونوشت بهصورت Markdown، برای هر نوبت یک خط **name** [mm:ss]: text (از یک ساعت به بعد [h:mm:ss]) و بدون عنوان؛ صدایی که کسی نامگذاریاش نکرده با برچسبش میآید |
lobbe |
object |
بله | لُب جلسه: نوشتهٔ هوش مصنوعی، در تازهترین نسخهاش |
lobbe.id |
string |
بله | شناسهٔ لُب |
lobbe.type |
"MEETING_MOM" | "LECTURE_NOTES" | "INTERVIEW_QA" | "VOICE_MEMO" | "CALL_NOTES" |
بله | قالب آن که kind جلسه تعیینش میکند: MEETING_MOM، LECTURE_NOTES، INTERVIEW_QA، VOICE_MEMO یا CALL_NOTES |
lobbe.language |
"en" | "fa" |
بله | زبانی که لُب به آن نوشته شده است: fa یا en |
lobbe.promptVersion |
string |
بله | کدام پرامپت آن را ساخت: برچسبی که با نسخهٔ پرامپت شروع میشود (مثلاً v8)، برای مقایسهٔ لُبها، نه برای تجزیه |
lobbe.transcriptRevision |
integer | null |
بله | revision رونوشتی که لُب از آن ساخته شد، پس اگر از transcript.revision کمتر باشد رونوشت پس از آن ویرایش شده است؛ در لُبهای پیش از امکان ویرایش رونوشت null است (آن را 0 بخوانید) |
lobbe.content |
object |
بله | محتوای ساختاریافتهٔ لُب |
lobbe.content.version |
2 |
بله | نسخهٔ قالب محتوا: همیشه 2 |
lobbe.content.title |
string |
بله | عنوان خود لُب، ۱ تا ۲۰۰ نویسه |
lobbe.content.sections[] |
object[] |
بله | بخشهایی که لُب از آنها ساخته شده، دستکم یکی، به ترتیب خواندن؛ اینکه کدام نوعها بیایند به جلسه بستگی دارد |
lobbe.content.sections[] (kind: "summary") |
object |
وقتی kind برابر "summary" باشد، فیلدهای زیر |
|
lobbe.content.sections[].kind |
"summary" |
بله | نوع بخش، که فیلدهای دیگرش را تعیین میکند: summary، decision_list، action_item_list، key_point_list، qa_list، topic_notes، follow_up_list یا free_text |
lobbe.content.sections[].text |
string |
بله | متن بخش (summary و free_text) |
lobbe.content.sections[] (kind: "decision_list") |
object |
وقتی kind برابر "decision_list" باشد، فیلدهای زیر |
|
lobbe.content.sections[].kind |
"decision_list" |
بله | نوع بخش، که فیلدهای دیگرش را تعیین میکند: summary، decision_list، action_item_list، key_point_list، qa_list، topic_notes، follow_up_list یا free_text |
lobbe.content.sections[].items[] |
object[] |
بله | مدخلهای بخش (decision_list، action_item_list، key_point_list، qa_list و follow_up_list) |
lobbe.content.sections[].items[].text |
string |
بله | خود مدخل: یک تصمیم، یک اقدام، یک نکتهٔ کلیدی یا یک پیگیری |
lobbe.content.sections[].items[].sourceMs |
number | null |
خیر | جایی از جلسه که این مدخل را پشتیبانی میکند: startMs همان نوبت رونوشت، به میلیثانیه؛ اگر هیچ نوبت واحدی پشتیبانش نباشد null است، در لُبهای ساختهشده پیش از ارجاعها نمیآید، و در لُبهای پیش از ۶ سپتامبر ۲۰۲۶ ممکن است بهجای شروع دقیق نوبت، ثانیهای باشد که به مدل نشان داده شد |
lobbe.content.sections[] (kind: "action_item_list") |
object |
وقتی kind برابر "action_item_list" باشد، فیلدهای زیر |
|
lobbe.content.sections[].kind |
"action_item_list" |
بله | نوع بخش، که فیلدهای دیگرش را تعیین میکند: summary، decision_list، action_item_list، key_point_list، qa_list، topic_notes، follow_up_list یا free_text |
lobbe.content.sections[].items[] |
object[] |
بله | مدخلهای بخش (decision_list، action_item_list، key_point_list، qa_list و follow_up_list) |
lobbe.content.sections[].items[].text |
string |
بله | خود مدخل: یک تصمیم، یک اقدام، یک نکتهٔ کلیدی یا یک پیگیری |
lobbe.content.sections[].items[].owner |
string | null |
بله | چه کسی اقدام را انجام میدهد، با نامی که در جلسه گفته شد یا برچسب گوینده؛ اگر جلسه روشن نکرده باشد null است |
lobbe.content.sections[].items[].due |
string | null |
بله | موعد اقدام، همانطور که گفته شد (هرگز تاریخی ساختگی)؛ اگر زمانی گفته نشده باشد null است |
lobbe.content.sections[].items[].sourceMs |
number | null |
خیر | جایی از جلسه که این مدخل را پشتیبانی میکند: startMs همان نوبت رونوشت، به میلیثانیه؛ اگر هیچ نوبت واحدی پشتیبانش نباشد null است، در لُبهای ساختهشده پیش از ارجاعها نمیآید، و در لُبهای پیش از ۶ سپتامبر ۲۰۲۶ ممکن است بهجای شروع دقیق نوبت، ثانیهای باشد که به مدل نشان داده شد |
lobbe.content.sections[] (kind: "key_point_list") |
object |
وقتی kind برابر "key_point_list" باشد، فیلدهای زیر |
|
lobbe.content.sections[].kind |
"key_point_list" |
بله | نوع بخش، که فیلدهای دیگرش را تعیین میکند: summary، decision_list، action_item_list، key_point_list، qa_list، topic_notes، follow_up_list یا free_text |
lobbe.content.sections[].items[] |
object[] |
بله | مدخلهای بخش (decision_list، action_item_list، key_point_list، qa_list و follow_up_list) |
lobbe.content.sections[].items[].text |
string |
بله | خود مدخل: یک تصمیم، یک اقدام، یک نکتهٔ کلیدی یا یک پیگیری |
lobbe.content.sections[] (kind: "qa_list") |
object |
وقتی kind برابر "qa_list" باشد، فیلدهای زیر |
|
lobbe.content.sections[].kind |
"qa_list" |
بله | نوع بخش، که فیلدهای دیگرش را تعیین میکند: summary، decision_list، action_item_list، key_point_list، qa_list، topic_notes، follow_up_list یا free_text |
lobbe.content.sections[].items[] |
object[] |
بله | مدخلهای بخش (decision_list، action_item_list، key_point_list، qa_list و follow_up_list) |
lobbe.content.sections[].items[].question |
string |
بله | پرسشی که در جلسه مطرح شد (qa_list) |
lobbe.content.sections[].items[].answer |
string |
بله | پاسخی که در جلسه به آن داده شد |
lobbe.content.sections[] (kind: "topic_notes") |
object |
وقتی kind برابر "topic_notes" باشد، فیلدهای زیر |
|
lobbe.content.sections[].kind |
"topic_notes" |
بله | نوع بخش، که فیلدهای دیگرش را تعیین میکند: summary، decision_list، action_item_list، key_point_list، qa_list، topic_notes، follow_up_list یا free_text |
lobbe.content.sections[].topics[] |
object[] |
بله | موضوعهای بخش topic_notes |
lobbe.content.sections[].topics[].topic |
string |
بله | موضوع |
lobbe.content.sections[].topics[].notes |
string |
بله | آنچه دربارهٔ آن گفته شد |
lobbe.content.sections[] (kind: "follow_up_list") |
object |
وقتی kind برابر "follow_up_list" باشد، فیلدهای زیر |
|
lobbe.content.sections[].kind |
"follow_up_list" |
بله | نوع بخش، که فیلدهای دیگرش را تعیین میکند: summary، decision_list، action_item_list، key_point_list، qa_list، topic_notes، follow_up_list یا free_text |
lobbe.content.sections[].items[] |
object[] |
بله | مدخلهای بخش (decision_list، action_item_list، key_point_list، qa_list و follow_up_list) |
lobbe.content.sections[].items[].text |
string |
بله | خود مدخل: یک تصمیم، یک اقدام، یک نکتهٔ کلیدی یا یک پیگیری |
lobbe.content.sections[].items[].sourceMs |
number | null |
خیر | جایی از جلسه که این مدخل را پشتیبانی میکند: startMs همان نوبت رونوشت، به میلیثانیه؛ اگر هیچ نوبت واحدی پشتیبانش نباشد null است، در لُبهای ساختهشده پیش از ارجاعها نمیآید، و در لُبهای پیش از ۶ سپتامبر ۲۰۲۶ ممکن است بهجای شروع دقیق نوبت، ثانیهای باشد که به مدل نشان داده شد |
lobbe.content.sections[] (kind: "free_text") |
object |
وقتی kind برابر "free_text" باشد، فیلدهای زیر |
|
lobbe.content.sections[].kind |
"free_text" |
بله | نوع بخش، که فیلدهای دیگرش را تعیین میکند: summary، decision_list، action_item_list، key_point_list، qa_list، topic_notes، follow_up_list یا free_text |
lobbe.content.sections[].title |
string | null |
بله | عنوان خود بخش free_text؛ null یعنی عنوان پیشفرض |
lobbe.content.sections[].text |
string |
بله | متن بخش (summary و free_text) |
lobbe.markdown |
string |
بله | لُب بهصورت یک سند Markdown مستقل، با عنوان جلسه بهصورت H1 در بالای آن |
stats |
object | null |
بله | آمار جلسه که از روی رونوشت شمرده میشود (بدون هوش مصنوعی)، با همان برچسبهای transcript.speakers؛ این مسیر همیشه آن را پر میکند |
stats.version |
2 |
بله | نسخهٔ قالب آمار: همیشه 2 |
stats.meetingDurationSeconds |
number |
بله | طول جلسه به ثانیه |
stats.spokenSeconds |
number |
بله | جمع زمان صحبت همه، به ثانیه با یک رقم اعشار |
stats.speakerCount |
integer |
بله | شمار کسانی که صحبت کردند |
stats.wordCount |
integer |
بله | شمار کلمههای گفتهشده در جلسه |
stats.turnCount |
integer |
بله | شمار نوبتهای جلسه: هر بار که یک نفر بیآنکه دیگری میانش صحبت کند حرف میزند |
stats.questionCount |
integer |
بله | شمار علامتهای سؤال (؟ یا ?) در همهٔ نوبتها |
stats.longestSilence |
object | null |
بله | طولانیترین فاصلهٔ میان دو نوبت، اگر دستکم ۳ ثانیه باشد؛ در غیر این صورت null است |
stats.longestSilence.seconds |
number |
بله | طول فاصله به ثانیه، با یک رقم اعشار |
stats.longestSilence.afterSpeaker |
string |
بله | آخرین کسی که پیش از آن صحبت کرد: یکی از transcript.speakers[].label |
stats.longestSilence.afterQuote |
string |
بله | پایان جملهٔ همان فرد پیش از فاصله، حداکثر ۸۰ نویسه، بریدهشده در مرز کلمه |
stats.speakers[] |
object[] |
بله | برای هر نفر یک سطر، از بیشترین زمان صحبت |
stats.speakers[].speaker |
string |
بله | این فرد: یکی از transcript.speakers[].label |
stats.speakers[].talkSeconds |
number |
بله | زمان صحبت این فرد به ثانیه، با یک رقم اعشار |
stats.speakers[].sharePct |
number |
بله | سهم این فرد از کل زمان صحبت، از ۰ تا ۱۰۰، با یک رقم اعشار |
stats.speakers[].wordCount |
integer |
بله | شمار کلمههایی که این فرد گفت |
stats.speakers[].wordsPerMinute |
number | null |
بله | سرعت صحبت این فرد به کلمه در دقیقه؛ اگر کمتر از ۵ ثانیه صحبت کرده باشد null است |
stats.speakers[].longestMonologueSeconds |
number |
بله | طولانیترین نوبت این فرد به ثانیه، با یک رقم اعشار |
stats.speakers[].turnCount |
integer |
بله | شمار نوبتهای این فرد |
stats.speakers[].avgTurnSeconds |
number |
بله | میانگین نوبت این فرد به ثانیه، با یک رقم اعشار؛ اگر نوبتی با زمان مشخص نداشته باشد 0 است |
stats.speakers[].questionCount |
integer |
بله | شمار علامتهای سؤال (؟ یا ?) در نوبتهای این فرد |
خطاها با { error: { code, message, details? } } پاسخ داده میشوند و code قرارداد است: خطاها را ببینید.
GET /recordings/{id}/status
Section titled “GET /recordings/{id}/status”پیشرفت یک جلسه؛ در مرحلهٔ نامگذاری، لینکی که از صاحب جلسه میخواهد گویندهها را نامگذاری کند.
| ویژگی | مقدار |
|---|---|
| دسترسیها | recordings:read یا recordings:write |
| دقیقه مصرف میکند | خیر |
| سقف درخواستها | read: ۶۰۰ درخواست در هر ۱۰ دقیقه برای هر توکن |
| پاسخ موفق | 200 |
پارامترها
Section titled “پارامترها”| نام | محل | نوع | الزامی | توضیح |
|---|---|---|---|---|
id |
path |
string |
بله | شناسهٔ جلسه |
پاسخ 200
Section titled “پاسخ 200”پیشرفت یک جلسه.
| فیلد | نوع | همیشه میآید | توضیح |
|---|---|---|---|
schemaVersion |
1 |
بله | در نسخهٔ ۱ API همیشه 1 |
id |
string |
بله | شناسهٔ جلسه |
status |
"QUEUED" | "TRANSCRIBING" | "NAMING" | "GENERATING" | "READY" | "FAILED" |
بله | جلسه کجاست: QUEUED، TRANSCRIBING، NAMING (در انتظار نام گویندهها)، GENERATING (لُب در حال ساخت است)، سپس READY؛ یا FAILED |
title |
string | null |
بله | عنوان جلسه: همانکه با جلسه فرستاده شد یا صاحب جلسه داد، وگرنه عنوان لُب آن پس از ساختهشدن؛ تا آن زمان null است |
error |
object | null |
بله | چرا جلسه ناموفق شد؛ اگر status برابر FAILED نباشد null است |
error.code |
string |
بله | کد شکست، مثلاً NO_SPEECH یا AUDIO_CORRUPT؛ اگر کد دقیقتری نباشد FAILED |
error.retryable |
boolean |
بله | اینکه retryRecording کمکی میکند یا نه: برای جلسهٔ بدون گفتار یا با صدای آسیبدیده false است |
naming |
object | null |
بله | نامگذاری گویندهها؛ اگر status برابر NAMING نباشد null است |
naming.url |
string |
بله | آن را برای صاحب جلسه بفرستید: صفحهٔ نامگذاری جلسه را باز میکند، فقط برای خود او و وقتی وارد حساب شده باشد |
naming.deadline |
string | null |
بله | زودترین زمانی که لُب بدون نامها ادامه میدهد (ISO 8601، به وقت UTC)؛ null یعنی تا وقتی صاحب جلسه گویندهها را نامگذاری کند یا رد شود منتظر میماند |
bundleUrl |
string | null |
بله | جلسهٔ کامل پس از READY شدن، برای توکنی که دسترسی recordings:read دارد؛ در غیر این صورت null است |
url |
string |
بله | صفحهٔ جلسه در برنامهٔ وب |
خطاها با { error: { code, message, details? } } پاسخ داده میشوند و code قرارداد است: خطاها را ببینید.
POST /recordings
Section titled “POST /recordings”ارسال صدای یک جلسه (multipart)؛ پاسخ ۲۰۲ همراه با لینک وضعیت آن.
| ویژگی | مقدار |
|---|---|
| دسترسیها | recordings:write |
| دقیقه مصرف میکند | بله |
| سقف درخواستها | submit: ۳۰ درخواست در هر ۱۰ دقیقه برای هر توکن |
| پاسخ موفق | 202 |
این مسیر میتواند دقیقه مصرف کند: هدر Idempotency-Key را بفرستید تا تکرار درخواست با همان کلید، بهجای هزینهٔ دوباره، همان نتیجهٔ اول را برگرداند. تکرارپذیری و تلاش دوباره را ببینید.
پارامترها
Section titled “پارامترها”| نام | محل | نوع | الزامی | توضیح |
|---|---|---|---|---|
Idempotency-Key |
header |
string |
خیر | پیشنهاد میشود. برای هر جلسه یا سؤال تازه یک بار کلیدی بسازید (۸ تا ۶۴ نویسه، مثلاً یک UUID تصادفی) و همان کلید را بیتغییر در هر تلاش دوبارهٔ همان درخواست بفرستید؛ هرگز آن را برای درخواست دیگری به کار نبرید. تکرار یک درخواست همان نتیجهٔ اول را برمیگرداند و هرگز دو بار هزینه نمیگیرد. کلید برای همیشه از آنِ صاحب حساب میماند و هرگز منقضی نمیشود. |
بدنهٔ درخواست (multipart/form-data)
Section titled “بدنهٔ درخواست (multipart/form-data)”فیلدی که اینجا نیامده پاسخ 400 میگیرد.
| فیلد | نوع | الزامی | توضیح |
|---|---|---|---|
recordedAt |
string (date-time) |
خیر | زمان برگزاری جلسه، به ISO 8601 با اختلاف ساعت، حداکثر ۵ دقیقه جلوتر از اکنون و نه پیش از سال ۲۰۰۰؛ اگر نباشد، همین حالا |
title |
string |
خیر | یک خط: هر رشته از فاصلهها به یک فاصله تبدیل و دو سر آن پیراسته میشود، سپس ۱ تا ۱۲۰ نویسه |
seriesId |
string |
خیر | سریای که خودتان ساختهاید تا جلسه در آن قرار بگیرد؛ هر شناسهٔ دیگری جلسه را در «آرشیو شخصی» میگذارد و هرگز خطا نمیدهد |
kind |
"MEETING" | "LECTURE" | "INTERVIEW" | "VOICE_MEMO" | "CALL" |
خیر | چه چیزی ضبط شده است، که قالب لُب را تعیین میکند: MEETING، LECTURE، INTERVIEW، VOICE_MEMO یا CALL (پیشفرض MEETING) |
outputLanguage |
"MATCH" | "FA" | "EN" |
خیر | زبان لُب: MATCH (مطابق جلسه)، FA یا EN (پیشفرض MATCH) |
useKeyterms |
"on" | "off" |
خیر | با on (پیشفرض) رونوشت با واژگان شما ساخته میشود، و اگر جلسه در سریای باشد با واژگان آن سری هم، و هرگاه واژهای در کار باشد ۲۰٪ به هزینه افزوده میشود؛ با off هیچ واژگانی به کار نمیرود |
naming |
"default" | "skip" |
خیر | با default (پیشفرض) تنظیم نامگذاری گویندههای شما به کار میرود؛ با skip لُب بیآنکه منتظر نامها بماند ساخته میشود و صداهای بینام پیشنهادهای لُب را میگیرند |
audio |
file |
بله | فایل صوتی جلسه |
attachment |
file |
خیر | یک فایل PDF، PPTX یا DOCX که لُب همراه جلسه میخواند |
پاسخ 202
Section titled “پاسخ 202”جلسهٔ ذخیرهشده؛ تکرار درخواست با همان Idempotency-Key همین جلسه را برمیگرداند.
| فیلد | نوع | همیشه میآید | توضیح |
|---|---|---|---|
schemaVersion |
1 |
بله | در نسخهٔ ۱ API همیشه 1 |
recording |
object |
بله | جلسهای که فرستادید |
recording.id |
string |
بله | شناسهٔ جلسه |
recording.status |
"QUEUED" | "TRANSCRIBING" | "NAMING" | "GENERATING" | "READY" | "FAILED" |
بله | جلسه کجاست: QUEUED، TRANSCRIBING، NAMING (در انتظار نام گویندهها)، GENERATING (لُب در حال ساخت است)، سپس READY؛ یا FAILED |
recording.minutes |
integer |
بله | هزینهٔ جلسه به دقیقه: طول اندازهگیریشدهٔ آن با هزینهٔ افزودهٔ واژگان، بهاضافهٔ پیوست |
recording.recordedAt |
string |
بله | زمان برگزاری جلسه (ISO 8601، به وقت UTC): همان recordedAt که با جلسه فرستاده شد، وگرنه زمانی که لُب آن را دریافت کرد |
recording.statusUrl |
string |
بله | با درخواست GET و همین توکن، پیشرفت جلسه را دنبال کنید (getRecordingStatus) |
recording.bundleUrl |
string | null |
بله | جلسهٔ کامل، اگر جلسه از قبل READY باشد (در تکرار درخواست) و توکن دسترسی recordings:read داشته باشد؛ در غیر این صورت null است |
recording.url |
string |
بله | صفحهٔ جلسه در برنامهٔ وب |
خطاها با { error: { code, message, details? } } پاسخ داده میشوند و code قرارداد است: خطاها را ببینید.
POST /recordings/{id}/naming
Section titled “POST /recordings/{id}/naming”رد شدن از نامگذاری گویندهها: صداهای بینام پیشنهادهای لُب را میگیرند و لُب ساخته میشود.
| ویژگی | مقدار |
|---|---|
| دسترسیها | recordings:write |
| دقیقه مصرف میکند | خیر |
| سقف درخواستها | submit: ۳۰ درخواست در هر ۱۰ دقیقه برای هر توکن |
| پاسخ موفق | 200 |
پارامترها
Section titled “پارامترها”| نام | محل | نوع | الزامی | توضیح |
|---|---|---|---|---|
id |
path |
string |
بله | شناسهٔ جلسه |
بدنهٔ درخواست (application/json)
Section titled “بدنهٔ درخواست (application/json)”تنها کار نامگذاری که توکن میتواند بکند. فیلدی که اینجا نیامده پاسخ 400 میگیرد.
| فیلد | نوع | الزامی | توضیح |
|---|---|---|---|
action |
"skip" |
بله | همیشه skip: لُب همین حالا ساخته شود و صداهای بینام پیشنهادهای لُب را بگیرند |
پاسخ 200
Section titled “پاسخ 200”پیشرفت یک جلسه.
| فیلد | نوع | همیشه میآید | توضیح |
|---|---|---|---|
schemaVersion |
1 |
بله | در نسخهٔ ۱ API همیشه 1 |
id |
string |
بله | شناسهٔ جلسه |
status |
"QUEUED" | "TRANSCRIBING" | "NAMING" | "GENERATING" | "READY" | "FAILED" |
بله | جلسه کجاست: QUEUED، TRANSCRIBING، NAMING (در انتظار نام گویندهها)، GENERATING (لُب در حال ساخت است)، سپس READY؛ یا FAILED |
title |
string | null |
بله | عنوان جلسه: همانکه با جلسه فرستاده شد یا صاحب جلسه داد، وگرنه عنوان لُب آن پس از ساختهشدن؛ تا آن زمان null است |
error |
object | null |
بله | چرا جلسه ناموفق شد؛ اگر status برابر FAILED نباشد null است |
error.code |
string |
بله | کد شکست، مثلاً NO_SPEECH یا AUDIO_CORRUPT؛ اگر کد دقیقتری نباشد FAILED |
error.retryable |
boolean |
بله | اینکه retryRecording کمکی میکند یا نه: برای جلسهٔ بدون گفتار یا با صدای آسیبدیده false است |
naming |
object | null |
بله | نامگذاری گویندهها؛ اگر status برابر NAMING نباشد null است |
naming.url |
string |
بله | آن را برای صاحب جلسه بفرستید: صفحهٔ نامگذاری جلسه را باز میکند، فقط برای خود او و وقتی وارد حساب شده باشد |
naming.deadline |
string | null |
بله | زودترین زمانی که لُب بدون نامها ادامه میدهد (ISO 8601، به وقت UTC)؛ null یعنی تا وقتی صاحب جلسه گویندهها را نامگذاری کند یا رد شود منتظر میماند |
bundleUrl |
string | null |
بله | جلسهٔ کامل پس از READY شدن، برای توکنی که دسترسی recordings:read دارد؛ در غیر این صورت null است |
url |
string |
بله | صفحهٔ جلسه در برنامهٔ وب |
خطاها با { error: { code, message, details? } } پاسخ داده میشوند و code قرارداد است: خطاها را ببینید.
POST /recordings/{id}/retry
Section titled “POST /recordings/{id}/retry”تلاش دوباره برای جلسهٔ ناموفق: مرحلهای که شکست خورد دوباره اجرا میشود، بدون هزینهٔ تازه.
| ویژگی | مقدار |
|---|---|
| دسترسیها | recordings:write |
| دقیقه مصرف میکند | خیر |
| سقف درخواستها | submit: ۳۰ درخواست در هر ۱۰ دقیقه برای هر توکن |
| پاسخ موفق | 200 |
پارامترها
Section titled “پارامترها”| نام | محل | نوع | الزامی | توضیح |
|---|---|---|---|---|
id |
path |
string |
بله | شناسهٔ جلسه |
پاسخ 200
Section titled “پاسخ 200”پیشرفت یک جلسه.
| فیلد | نوع | همیشه میآید | توضیح |
|---|---|---|---|
schemaVersion |
1 |
بله | در نسخهٔ ۱ API همیشه 1 |
id |
string |
بله | شناسهٔ جلسه |
status |
"QUEUED" | "TRANSCRIBING" | "NAMING" | "GENERATING" | "READY" | "FAILED" |
بله | جلسه کجاست: QUEUED، TRANSCRIBING، NAMING (در انتظار نام گویندهها)، GENERATING (لُب در حال ساخت است)، سپس READY؛ یا FAILED |
title |
string | null |
بله | عنوان جلسه: همانکه با جلسه فرستاده شد یا صاحب جلسه داد، وگرنه عنوان لُب آن پس از ساختهشدن؛ تا آن زمان null است |
error |
object | null |
بله | چرا جلسه ناموفق شد؛ اگر status برابر FAILED نباشد null است |
error.code |
string |
بله | کد شکست، مثلاً NO_SPEECH یا AUDIO_CORRUPT؛ اگر کد دقیقتری نباشد FAILED |
error.retryable |
boolean |
بله | اینکه retryRecording کمکی میکند یا نه: برای جلسهٔ بدون گفتار یا با صدای آسیبدیده false است |
naming |
object | null |
بله | نامگذاری گویندهها؛ اگر status برابر NAMING نباشد null است |
naming.url |
string |
بله | آن را برای صاحب جلسه بفرستید: صفحهٔ نامگذاری جلسه را باز میکند، فقط برای خود او و وقتی وارد حساب شده باشد |
naming.deadline |
string | null |
بله | زودترین زمانی که لُب بدون نامها ادامه میدهد (ISO 8601، به وقت UTC)؛ null یعنی تا وقتی صاحب جلسه گویندهها را نامگذاری کند یا رد شود منتظر میماند |
bundleUrl |
string | null |
بله | جلسهٔ کامل پس از READY شدن، برای توکنی که دسترسی recordings:read دارد؛ در غیر این صورت null است |
url |
string |
بله | صفحهٔ جلسه در برنامهٔ وب |
خطاها با { error: { code, message, details? } } پاسخ داده میشوند و code قرارداد است: خطاها را ببینید.