Lingara Lingara Documentación Guías API Bibliotecas Apps Crear Aplicación web
Idioma: Español

Reconectarse a un plan de lección

Versión de la API 2026-10-affable-towhee

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

Vuelve a unirse al flujo de progreso de un plan que aún se está generando. Un plan terminado responde con un único result. Un plan que aún se está generando sin un flujo activo al que unirse responde con un único pending; consulta GET /v1/lesson-plans/{id} periódicamente hasta que esté completo.

Ámbitos lesson_plans:read

Parámetros

Lingara-Versionheaderstringopcional
La versión de la API con la que se responde a esta solicitud. Sin ella, un token de acceso recibe la versión a la que está vinculado su cliente, y una solicitud sin token recibe la versión actual. La versión aún en desarrollo solo se alcanza nombrándola aquí. Una versión desconocida responde 400 con el código api_version_unknown. GET /v1/versions enumera las versiones.
idpathstringobligatorio

Respuestas

200 El progreso restante del plan y luego el plan

Eventos del flujo text/event-stream

Envía un comentario keepalive cada 15 segundos.

started PlanStarted
plan_idstringobligatorio
phase PlanPhase
phasestringobligatorio
attemptintegerobligatorio
result PlanResult Termina el flujo
planLessonPlanobligatorio
idstringobligatorio
statusPlanStatusobligatorio
titlestring | nullopcional
source_langstringobligatorio
target_langstringobligatorio
levelintegerobligatorio
created_atstringobligatorio
completed_atstring | nullopcional
ai_generatedbooleanobligatorio
contentLessonPlanContent | nullopcional
introductionstring | nullopcional
learning_objectivesarray of stringobligatorio
vocabularyarray of PlanWordobligatorio
wordstringobligatorio
pronunciationstring | nullopcional
translationstringobligatorio
setsarray of PlanSetobligatorio
numberintegerobligatorio
contextstring | nullopcional
questionsarray of PlanQuestionobligatorio
typestringobligatorio
promptstringobligatorio
optionsarray of string | nullopcional
answerstringobligatorio
explanationstringobligatorio
hintstring | nullopcional
pending PlanPending Termina el flujo
plan_idstringobligatorio
statusPlanStatusobligatorio
error StreamError Termina el flujo

Llega dentro de la respuesta 200. La línea de estado ya se ha enviado, así que un fallo después de abrirse el flujo se notifica como este evento.

codestringobligatorio
messagestringobligatorio
plan_idstring | nullopcional

Errores

410application/json
La versión de la API con la que se responde a esta solicitud se ha retirado. Envía una versión admitida en Lingara-Version o vincula el cliente a otra versión.
4XXapplication/json
La solicitud fue rechazada. code indica el motivo y error lo explica con palabras.
503application/json · text/plain
El servicio no está disponible temporalmente; vuelve a intentarlo tras el número de segundos indicado en Retry-After. Durante el mantenimiento, el cuerpo es texto sin formato en lugar del sobre de error.
5XXapplication/json
La solicitud fue rechazada. code indica el motivo y error lo explica con palabras.
codestringobligatorio

Por qué se rechazó la solicitud, como un código estable con el que ramificar: por ejemplo insufficient_scope (403), rate_limited (429) y, para un cliente con facturación por uso, spend_cap_reached (402) y metered_billing_inactive (402).

errorstringobligatorio

Ejemplo

Lenguaje del ejemplo de código

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

¿Prefieres una biblioteca? Consulta la sección Bibliotecas.

Ejemplo de flujo

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

Si una traducción y la referencia en inglés difieren, prevalece la referencia en inglés.