Lingara Lingara مستندات راهنماها API کتابخانه‌ها برنامه‌ها ساخت نسخهٔ وب
زبان: فارسی

اتصال دوباره به طرح درس

نسخهٔ API 2026-10-affable-towhee

get https://api.getlingara.com/v1/lesson-plans/{id}/stream

دوباره به جریان پیشرفت طرحی که هنوز در حال ساخت است می‌پیوندد. طرح تکمیل‌شده با یک result پاسخ می‌دهد. طرحی که هنوز در حال ساخت است و جریان زنده‌ای برای پیوستن ندارد، با یک pending پاسخ می‌دهد؛ GET /v1/lesson-plans/{id} را به‌طور دوره‌ای فراخوانی کنید تا کامل شود.

دامنه‌های دسترسی lesson_plans:read

پارامترها

Lingara-Versionheaderstringاختیاری
نسخهٔ API‌ای که این درخواست با آن پاسخ داده می‌شود. بدون آن، توکن دسترسی نسخه‌ای را می‌گیرد که کلاینتش به آن متصل است، و درخواستی بدون توکن نسخهٔ فعلی را می‌گیرد. به نسخه‌ای که هنوز در حال توسعه است فقط با نام‌بردن آن در اینجا می‌توان رسید. نسخهٔ ناشناخته با 400 و کد api_version_unknown پاسخ داده می‌شود. GET /v1/versions نسخه‌ها را فهرست می‌کند.
idpathstringالزامی

پاسخ‌ها

200 پیشرفت باقی‌ماندهٔ طرح، سپس خود طرح

رویدادهای جریان text/event-stream

هر 15 ثانیه یک توضیح keepalive می‌فرستد.

started PlanStarted
plan_idstringالزامی
phase PlanPhase
phasestringالزامی
attemptintegerالزامی
result PlanResult جریان را پایان می‌دهد
planLessonPlanالزامی
idstringالزامی
statusPlanStatusالزامی
titlestring | nullاختیاری
source_langstringالزامی
target_langstringالزامی
levelintegerالزامی
created_atstringالزامی
completed_atstring | nullاختیاری
ai_generatedbooleanالزامی
contentLessonPlanContent | nullاختیاری
introductionstring | nullاختیاری
learning_objectivesarray of stringالزامی
vocabularyarray of PlanWordالزامی
wordstringالزامی
pronunciationstring | nullاختیاری
translationstringالزامی
setsarray of PlanSetالزامی
numberintegerالزامی
contextstring | nullاختیاری
questionsarray of PlanQuestionالزامی
typestringالزامی
promptstringالزامی
optionsarray of string | nullاختیاری
answerstringالزامی
explanationstringالزامی
hintstring | nullاختیاری
pending PlanPending جریان را پایان می‌دهد
plan_idstringالزامی
statusPlanStatusالزامی
error StreamError جریان را پایان می‌دهد

درون پاسخ 200 می‌رسد. خط وضعیت پیش‌تر ارسال شده است، پس هر خطایی پس از باز شدن جریان به‌صورت این رویداد گزارش می‌شود.

codestringالزامی
messagestringالزامی
plan_idstring | nullاختیاری

خطاها

410application/json
نسخهٔ API‌ای که این درخواست با آن پاسخ داده می‌شود متوقف شده است. یک نسخهٔ پشتیبانی‌شده را در Lingara-Version بفرستید، یا کلاینت را به نسخهٔ دیگری متصل کنید.
4XXapplication/json
درخواست رد شد. code دلیل آن را مشخص می‌کند و error آن را با کلمات بیان می‌کند.
503application/json · text/plain
سرویس موقتاً در دسترس نیست؛ پس از تعداد ثانیه‌های ذکرشده در Retry-After دوباره تلاش کنید. در زمان نگهداری، بدنهٔ پاسخ به‌جای پوشش خطا، متن ساده است.
5XXapplication/json
درخواست رد شد. code دلیل آن را مشخص می‌کند و error آن را با کلمات بیان می‌کند.
codestringالزامی

دلیل رد شدن درخواست، به‌صورت کدی ثابت که می‌توان بر اساس آن تصمیم گرفت: برای نمونه insufficient_scope (403)، rate_limited (429) و، برای یک کلاینت مصرفی، spend_cap_reached (402) و metered_billing_inactive (402).

errorstringالزامی

نمونه

زبان نمونه‌کد

curl

curl -N "https://api.getlingara.com/v1/lesson-plans/$ID/stream" \
  -H "Authorization: Bearer $LINGARA_TOKEN"

TypeScript

for await (const ev of client.streamLessonPlan({ id: planId })) {
  if (ev.event === "result") console.log("ready:", ev.data.plan.title);
  if (ev.event === "pending") console.log("still", ev.data.status, "- try again later");
}

Rust

use lingara::models::StreamLessonPlanEvent;

let mut stream = client.stream_lesson_plan(&plan_id).await?;
while let Some(event) = stream.next().await {
    match event? {
        StreamLessonPlanEvent::Result(result) => println!("ready: {}", result.plan.title.unwrap_or_default()),
        StreamLessonPlanEvent::Pending(pending) => println!("still {:?} - try again later", pending.status),
        _ => {}
    }
}

Go

// Rejoin a plan still generating, with the plan_id from its started event.
s, err := client.StreamLessonPlan(ctx, "3f1c2a9e-5b7d-4e21-9a0c-6d8e4f2b1a37")
if err != nil {
	return err
}
defer s.Close()
for ev, err := range s.Events() {
	if err != nil {
		return err
	}
	switch e := ev.(type) {
	case lingara.StreamLessonPlanEventResult:
		fmt.Println("ready:", e.Data.Plan.ID)
	case lingara.StreamLessonPlanEventPending:
		fmt.Println("still", e.Data.Status, "- rejoin later")
	}
}

Java

import com.getlingara.client.model.StreamLessonPlanEvent;

try (EventStream<StreamLessonPlanEvent> stream = client.streamLessonPlan(planId)) {
  for (StreamLessonPlanEvent event : stream) {
    if (event instanceof StreamLessonPlanEvent.Result result) {
      System.out.println(result.data().getPlan().getTitle());
    } else if (event instanceof StreamLessonPlanEvent.Pending pending) {
      // Still generating elsewhere: ask again later.
      System.out.println("pending: " + pending.data().getStatus());
    }
  }
}

Kotlin

import com.getlingara.kotlin.LingaraClient
import com.getlingara.kotlin.model.StreamLessonPlanEvent

client.streamLessonPlan(planId).use { stream ->
    stream.collect { event ->
        when (event) {
            is StreamLessonPlanEvent.Result -> println(event.data.plan.title)
            // Still generating elsewhere: ask again later.
            is StreamLessonPlanEvent.Pending -> println("pending: ${event.data.status}")
            else -> Unit
        }
    }
}

Ruby

client.stream_lesson_plan(plan_id) do |event|
  case event
  in Lingara::StreamLessonPlanEventResult => result then puts "ready: #{result.data.plan.title}"
  in Lingara::StreamLessonPlanEventPending => pending then puts "still #{pending.data.status}, try again later"
  else nil
  end
end

PHP

use Lingara\Stream\StreamLessonPlanEvent;

foreach ($client->streamLessonPlan($planId) as $event) {
    if ($event instanceof StreamLessonPlanEvent\Result) {
        echo 'ready: ', $event->data->getPlan()->getTitle(), "\n";
    } elseif ($event instanceof StreamLessonPlanEvent\Pending) {
        echo 'still ', $event->data->getStatus()->value, ", try again later\n";
    }
}

کتابخانه را ترجیح می‌دهید؟ بخش کتابخانه‌ها را ببینید.

نمونهٔ جریان

event: pending
data: {"plan_id":"3f1c2a9e-5b7d-4e21-9a0c-6d8e4f2b1a37","status":"generating"}

اگر ترجمه با مرجع انگلیسی تفاوت داشته باشد، مرجع انگلیسی معتبر است.