Lingara Lingara Dokumentasi Panduan API Pustaka Aplikasi Buat Aplikasi web
Bahasa: Bahasa Indonesia

Sambungkan kembali ke rencana pelajaran

Versi API 2026-10-affable-towhee

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

Bergabung kembali ke stream progres rencana yang masih dibuat. Rencana yang sudah selesai menjawab dengan satu result. Rencana yang masih dibuat tanpa stream aktif untuk diikuti menjawab dengan satu pending; lakukan polling GET /v1/lesson-plans/{id} sampai selesai.

Cakupan lesson_plans:read

Parameter

Lingara-Versionheaderstringopsional
Versi API yang digunakan untuk menjawab permintaan ini. Tanpanya, token akses mendapatkan versi yang disematkan pada kliennya, dan permintaan tanpa token mendapatkan versi saat ini. Versi yang masih dalam pengembangan hanya dapat dicapai dengan menyebutkannya di sini. Versi yang tidak dikenal dijawab 400 dengan kode api_version_unknown. GET /v1/versions mencantumkan versi-versinya.
idpathstringwajib

Respons

200 Sisa progres rencana, lalu rencananya

Peristiwa stream text/event-stream

Mengirim komentar keepalive setiap 15 detik.

started PlanStarted
plan_idstringwajib
phase PlanPhase
phasestringwajib
attemptintegerwajib
result PlanResult Mengakhiri stream
planLessonPlanwajib
idstringwajib
statusPlanStatuswajib
titlestring | nullopsional
source_langstringwajib
target_langstringwajib
levelintegerwajib
created_atstringwajib
completed_atstring | nullopsional
ai_generatedbooleanwajib
contentLessonPlanContent | nullopsional
introductionstring | nullopsional
learning_objectivesarray of stringwajib
vocabularyarray of PlanWordwajib
wordstringwajib
pronunciationstring | nullopsional
translationstringwajib
setsarray of PlanSetwajib
numberintegerwajib
contextstring | nullopsional
questionsarray of PlanQuestionwajib
typestringwajib
promptstringwajib
optionsarray of string | nullopsional
answerstringwajib
explanationstringwajib
hintstring | nullopsional
pending PlanPending Mengakhiri stream
plan_idstringwajib
statusPlanStatuswajib
error StreamError Mengakhiri stream

Tiba di dalam respons 200. Baris status sudah dikirim, sehingga kegagalan setelah stream dibuka dilaporkan sebagai event ini.

codestringwajib
messagestringwajib
plan_idstring | nullopsional

Galat

410application/json
Versi API yang digunakan untuk menjawab permintaan ini telah dihentikan. Kirim versi yang didukung di Lingara-Version, atau sematkan klien ke versi lain.
4XXapplication/json
Permintaan ditolak. code menyebutkan alasannya, dan error menjelaskannya dengan kata-kata.
503application/json · text/plain
Layanan sementara tidak tersedia; coba lagi setelah jumlah detik di Retry-After. Selama pemeliharaan, isi respons berupa teks biasa, bukan amplop galat.
5XXapplication/json
Permintaan ditolak. code menyebutkan alasannya, dan error menjelaskannya dengan kata-kata.
codestringwajib

Alasan permintaan ditolak, sebagai kode tetap untuk percabangan: misalnya insufficient_scope (403), rate_limited (429) dan, untuk klien dengan penagihan per pemakaian, spend_cap_reached (402) dan metered_billing_inactive (402).

errorstringwajib

Contoh

Bahasa contoh kode

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

Lebih suka pustaka? Lihat bagian Pustaka.

Contoh stream

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

Jika terjemahan berbeda dengan referensi berbahasa Inggris, referensi berbahasa Inggris yang berlaku.