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

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