Lingara Lingara Documentazione Guide API Librerie App Crea App web
Lingua: Italiano

Invia un turno al tutor

Versione API 2026-10-affable-towhee

post https://api.getlingara.com/v1/tutor/message

Invia un messaggio al tutor e trasmette la risposta come eventi delta, terminando con done. Non viene salvato nulla: invia la conversazione recente in history, fino a 20 voci. character e situation definiscono la scena. Richiede un piano a pagamento.

Scope tutor:converse

Parametri

Lingara-Versionheaderstringfacoltativo
La versione dell'API con cui rispondere a questa richiesta. Senza di essa, un token di accesso riceve la versione a cui è associato il suo client e una richiesta senza token riceve la versione corrente. La versione ancora in sviluppo si raggiunge solo indicandola qui. Una versione sconosciuta risponde 400 con il codice api_version_unknown. GET /v1/versions elenca le versioni.

Corpo della richiesta application/json

messagestringobbligatorio
historyarray of TurnEntryfacoltativo
roleTurnRoleobbligatorio
contentstringobbligatorio
source_langstringobbligatorio
target_langstringobbligatorio
levelinteger | nullfacoltativo
characterstring | nullfacoltativo
situationstring | nullfacoltativo

Risposte

200 La risposta del tutor, pezzo per pezzo

Eventi dello stream text/event-stream

Non invia commenti keepalive.

delta TurnDelta
textstringobbligatorio
notice Notice
codestringobbligatorio
messagestringobbligatorio
done Done Termina lo stream
error StreamError Termina lo stream

Arriva all'interno della risposta 200. La riga di stato è già stata inviata, quindi un errore dopo l'apertura dello stream viene segnalato come questo evento.

codestringobbligatorio
messagestringobbligatorio
plan_idstring | nullfacoltativo

Errori

402application/json
La chiamata di un client con fatturazione a consumo è stata rifiutata prima che spendesse qualcosa. spend_cap_reached: il client o il suo account ha raggiunto il limite di spesa mensile; alza il limite nella pagina Integrazioni. metered_billing_inactive: la fatturazione a consumo non è attiva per questo account; configurala o aggiorna il metodo di pagamento nella pagina Integrazioni.
410application/json
La versione dell'API con cui si risponde a questa richiesta è stata dismessa. Invia una versione supportata in Lingara-Version, oppure associa il client a un'altra versione.
4XXapplication/json
La richiesta è stata rifiutata. code dice il motivo, e error lo spiega a parole.
503application/json · text/plain
Il servizio è temporaneamente non disponibile; riprova dopo il numero di secondi indicato in Retry-After. Durante la manutenzione il corpo è testo semplice anziché l'envelope di errore.
5XXapplication/json
La richiesta è stata rifiutata. code dice il motivo, e error lo spiega a parole.
codestringobbligatorio

Perché la richiesta è stata rifiutata, come codice stabile su cui diramare la logica: per esempio insufficient_scope (403), rate_limited (429) e, per un client con fatturazione a consumo, spend_cap_reached (402) e metered_billing_inactive (402).

errorstringobbligatorio

Esempio

Linguaggio dell'esempio di codice

curl

curl -N -X POST "https://api.getlingara.com/v1/tutor/message" \
  -H "Authorization: Bearer $LINGARA_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"message":"我要两斤荔枝。","history":[{"role":"assistant","content":"欢迎!今天的荔枝很新鲜。"}],"source_lang":"en","target_lang":"zh","level":2,"character":"a fruit seller in a night market","situation":"buying lychees, haggling"}'

TypeScript

const reply = client.sendTutorMessage({
  message: "你好!我想点一杯茶。",
  history: [],
  source_lang: "en",
  target_lang: "zh",
});
for await (const ev of reply) {
  if (ev.event === "delta") process.stdout.write(ev.data.text);
}

Rust

use lingara::models::{SendTutorMessageEvent, TutorTurnRequest};

let request = TutorTurnRequest {
    message: "你好!我想点一杯茶。".into(),
    history: Vec::new(),
    source_lang: "en".into(),
    target_lang: "zh".into(),
    level: None,
    character: None,
    situation: None,
};
let mut reply = client.send_tutor_message(&request).await?;
while let Some(event) = reply.next().await {
    if let SendTutorMessageEvent::Delta(delta) = event? {
        print!("{}", delta.text);
    }
}

Go

s, err := client.SendTutorMessage(ctx, lingara.TutorTurnRequest{
	Message:    "你好!我想点一杯茶。",
	SourceLang: "en",
	TargetLang: "zh",
})
if err != nil {
	return err
}
defer s.Close()
for ev, err := range s.Events() {
	if err != nil {
		return err
	}
	if delta, ok := ev.(lingara.SendTutorMessageEventDelta); ok {
		fmt.Print(delta.Data.Text)
	}
}

Java

import com.getlingara.client.model.SendTutorMessageEvent;
import com.getlingara.client.model.TutorTurnRequest;

TutorTurnRequest turn =
    new TutorTurnRequest().message("荔枝多少钱?").sourceLang("en").targetLang("zh").level(2);
try (EventStream<SendTutorMessageEvent> stream = client.sendTutorMessage(turn)) {
  for (SendTutorMessageEvent event : stream) {
    if (event instanceof SendTutorMessageEvent.Delta delta) {
      System.out.print(delta.data().getText());
    } else if (event instanceof SendTutorMessageEvent.Notice notice) {
      System.out.println("\n(" + notice.data().getMessage() + ")");
    }
  }
}

Kotlin

import com.getlingara.kotlin.LingaraClient
import com.getlingara.kotlin.model.SendTutorMessageEvent
import com.getlingara.kotlin.model.TutorTurnRequest

val turn = TutorTurnRequest(message = "荔枝多少钱?", sourceLang = "en", targetLang = "zh", level = 2)
client.sendTutorMessage(turn).use { stream ->
    stream.collect { event ->
        when (event) {
            is SendTutorMessageEvent.Delta -> print(event.data.text)
            is SendTutorMessageEvent.Notice -> println("\n(${event.data.message})")
        }
    }
}

Ruby

history = [{role: "user", content: "你好"}, {role: "assistant", content: "你好!你想练习什么?"}]
client.send_tutor_message(message: "我想点菜", history: history, source_lang: "en", target_lang: "zh") do |event|
  case event
  in Lingara::SendTutorMessageEventDelta => delta then print delta.data.text
  in Lingara::SendTutorMessageEventNotice => notice then warn notice.data.message
  else nil
  end
end
puts

PHP

use Lingara\Model\TutorTurnRequest;
use Lingara\Stream\SendTutorMessageEvent;

$turn = new TutorTurnRequest(['message' => '荔枝多少钱?', 'source_lang' => 'en', 'target_lang' => 'zh', 'level' => 2]);
foreach ($client->sendTutorMessage($turn) as $event) {
    if ($event instanceof SendTutorMessageEvent\Delta) {
        echo $event->data->getText();
    } elseif ($event instanceof SendTutorMessageEvent\Notice) {
        echo "\n(", $event->data->getMessage(), ')';
    }
}
echo "\n";

Preferisci una libreria? Vedi la sezione Librerie.

Esempio di stream

event: delta
data: {"text":"两斤荔枝,"}

event: delta
data: {"text":"一共三十块。"}

event: done
data: {}

In caso di discrepanza tra una traduzione e il riferimento in inglese, fa fede il riferimento in inglese.