Toto API překládá text jako úlohy ve frontě, vždy do jednoho cílového jazyka na úlohu. Odešli text, ulož si vrácené ID úlohy a načítej úlohu, dokud zpracování neskončí. Každý požadavek posílej přes HTTPS s přihlašovacími údaji svého účtu: buď pomocí HTTP Basic jako v příkladech, nebo pomocí tokenu API, jak popisuje část Ověřování. Přihlašovací údaje uchovávej na svém serveru.
Koncové body
Dva servery API, https://api.multi.tel a server pro kompatibilitu https://api.multitel.net, sdílejí stejné úlohy, klíče idempotence, limity a účtování v rámci účtu. Liší se vnější strukturou odpovědi, proto důsledně používej jeden server s odpovídajícím parserem.
| Operace | Metoda a cesta |
|---|---|
| Informace o službě | GET /v3/translate |
| Odeslání úlohy | POST /v3/translate |
| Odhad bez vytvoření úlohy | POST /v3/translate/estimate |
| Načtení úlohy | GET /v3/translate/JOB_ID |
| Vypořádání úlohy čekající na platbu | POST /v3/translate/JOB_ID/settle |
| Využití | GET /v3/translate/usage |
Na api.multi.tel je každá cesta dostupná také s prefixem /v1/translate místo /v3/translate. Na api.multitel.net používej cesty /v3/translate.
Odpověď s informacemi o službě uvádí enabled, paidEnabled, mode (batch), realtime (false), maxSourceCharacters (20000), cpuLanguages a ratesNanosPerCharacter. cpuLanguages vypisuje základní jazykové kódy přijímané pro standardní překlad. ratesNanosPerCharacter uvádí pro každý modul nakonfigurovanou cenu za kódový bod zdrojového textu v miliardtinách amerického dolaru: hodnota 5000 znamená $5 za milion kódových bodů. Odpověď neuvádí, zda je právě dostupný rozšířený překlad; jeho odhad vrací 503, když dostupný není. Načtení je zdarma.
Překlad textu
Pošli JSON s hlavičkou Content-Type: application/json na POST https://api.multi.tel/v3/translate. Každá úloha má jeden cílový jazyk, proto pro každý cíl odešli samostatnou úlohu.
| Pole | Význam |
|---|---|
text | Povinné. Zdrojový text o délce 1 až 20,000 kódových bodů Unicode včetně bílých znaků a konců řádků, který se neskládá jen z bílých znaků. Některá emoji a písmena s diakritikou zapsaná pomocí kombinujících znaků obsahují více než jeden kódový bod. Délka v bajtech není měřítkem a text se před počítáním nenormalizuje. Delší text je na tomto serveru odmítnut s 400. |
source_language | Kód jazyka a národního prostředí zdroje. Povinný pro cpu: bez něj požadavek vrací 422 a kód translation_language_pair_unavailable. Volitelný pro enhanced; při vynechání je sourceLocale v úloze i výsledku prázdné a níže uvedená kontrola stejného jazyka se nepoužije. Doporučujeme jej uvést. Pokud jej chceš vynechat, pole vůbec nepřidávej; tento server odmítá prázdný řetězec. |
target_language | Povinný kód cílového jazyka a národního prostředí, například es nebo fr-CA. |
engine | Povinné: cpu pro standardní překlad nebo enhanced pro rozšířený překlad. |
Kódy jazyka a národního prostředí jsou značky BCP 47 o délce 2 až 63 písmen, číslic a spojovníků. Převádějí se do kanonického tvaru, takže en-us se zaznamená jako en-US. Neplatné značky a und, mul nebo zxx vracejí 400 a kód invalid_translation_language. Dostupnost standardního překladu se ověřuje podle základního jazyka a nb a nn se počítají jako no. Regionální cíl, například fr-CA, se přijme a zaznamená, ale standardní výstup se řídí základním jazykem a není zaručeno, že bude odpovídat regionu.
Na tomto serveru udržuj tělo požadavku do 128 KiB. Posílej text jako UTF-8 místo zápisu každého znaku mimo ASCII pomocí sekvence \u, což může požadavek s 20,000 znaky dostat nad limit.
Tělo přijímá pouze tato čtyři pole. Jakákoli jiná vlastnost je odmítnuta s 400 a kódem invalid_translation_request, včetně idempotency_key, ID vlastníků, příznaků bezplatného zpracování a polí segmentů.
Idempotence a opětovné použití
Každé odeslání vyžaduje hlavičku Idempotency-Key o délce 1 až 190 znaků. Používej písmena ASCII, číslice, -, _, . a : bez mezer na začátku a konci; chybějící klíč nebo klíč o délce 191 či více znaků je odmítnut s 400. Klíče platí pro tvůj účet a překlad, napříč oběma servery a všemi přihlašovacími údaji účtu.
- Stejný klíč se stejným textem, kanonickými jazyky a modulem vrátí existující úlohu s HTTP 200 a
duplicate: truebez dalšího poplatku. - Stejný klíč s jiným textem, jazyky nebo modulem vrátí 409 a kód
idempotency_conflict. Stejný klíč vrátí 409 také tehdy, když se verze zpracování od vytvoření jeho úlohy změnila. V takovém případě načti původní úlohu podle ID místo nového odeslání. - Nový klíč se stejným textem, kanonickými jazyky a modulem vrátí existující úlohu s HTTP 200 a
duplicate: truebez nového poplatku za zpracování, pokud úloha se stejným obsahem a aktuální verzí zpracování čeká ve frontě, zpracovává se, je dokončená nebo čeká na platbu. Znovu použitá úloha čekající na platbu stále vyžaduje vypořádání. Neúspěšné úlohy se znovu nepoužívají: vytvoří se nová úloha a po dokončení se zaúčtuje.
API_USER="your-api-username"
API_PASSWORD="your-api-password"
curl --fail-with-body --silent --show-error --user "$API_USER:$API_PASSWORD" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: translation-example-001" \
--data '{"text":"Please move my appointment to Tuesday at 3 PM, not 11 AM.","source_language":"en","target_language":"es","engine":"cpu"}' \
-o translation-job.json \
https://api.multi.tel/v3/translate
node -p 'JSON.parse(require("node:fs").readFileSync("translation-job.json","utf8")).data.id'Nová úloha vrátí HTTP 202. Ukázkový text má 57 kódových bodů, takže při ceně $5 za milion kódových bodů stojí $0.000285. Zkrácená odpověď (identifikátor je příklad):
{
"status": "success",
"data": {
"id": "8b2e4c71-5d3a-4f09-a6e2-1c7f9d3b5a28",
"status": "queued",
"mode": "batch",
"realtime": false,
"engine": "cpu",
"sourceLocale": "en",
"targetLocale": "es",
"sourceCharacters": 57,
"costUsd": "0.000285000",
"costIsEstimate": true,
"pricePerMillionCharactersUsd": "5.000000000",
"progress": null
}
}Odeslání může také vrátit 402 a kód insufficient_balance, když předplacený zůstatek nepokryje úlohu spolu s ostatními nevyřízenými úlohami, a 429 a kód translation_queue_full, když má účet nebo služba příliš mnoho nevyřízených úloh. V těchto případech vrací 503:
paid_translation_not_enabled, když je placený překlad vypnutý.translation_unavailablepro rozšířený požadavek, když rozšířený překlad není dostupný.translation_pricing_unavailable, když vybraný modul nemá nastavenou sazbu.
Po odpovědích 429 a 503 to zkus později se stejným klíčem.
Volba kvality
Dlouhý text se zpracovává po menších částech a znovu spojuje. Konce řádků a mezery se mohou změnit a věta může na hranici zpracovaných částí ztratit kontext. Uchovej původní text a zkontroluj spojený výsledek. Standardní překlad používá základní jazyk regionální značky; přijetí a zaznamenání značky nezaručuje regionální formulace.
Standardní překlad běží v pracovních procesech na CPU. Rozšířený překlad odesílá text do nakonfigurované externí služby AI. I její výstup vyžaduje kontrolu; služba nezaručuje, že jeden modul bude přesnější pro každou jazykovou dvojici nebo typ textu.
Standardní překlad je návrh, jehož kvalita a doba zpracování se liší podle jazykové dvojice. Rozšířený překlad je určen pro text, u kterého záleží na kontextu, ale stále vyžaduje kontrolu důležitých jmen, čísel, záporů a závazků. Ani jedna možnost neopravuje chyby přítomné už v původním přepisu, proto si originál uchovej pro porovnání.
Použij GET /v3/translate na stejném serveru API pro kontrolu aktuální dostupnosti, podporovaných standardních jazyků a nastavených sazeb. Standardní požadavek, jehož základní zdrojový nebo cílový jazyk není v cpuLanguages, vrací 422 a kód translation_language_pair_unavailable. Pokud je uvedeno source_language a má stejný základní jazyk jako cíl, požadavek vrátí 409 a kód translation_same_language místo vytvoření úlohy. Rozšířený překlad se zapíná samostatně: dokud není dostupný, odesílání úloh rozšířeného překladu a jeho odhady vracejí 503.
Nejdříve získej odhad
Na api.multi.tel pošli stejné tělo JSON na POST /v3/translate/estimate. Klíč idempotence není potřeba. Odhad používá stejnou validaci včetně kontrol 422 a 409, ale nevytváří úlohu, nepřekládá text, nerezervuje prostředky, nekontroluje zůstatek ani neúčtuje poplatek. Vrací HTTP 200 s poli estimate: true, charged: false, mode, realtime, engine, sourceCharacters, sourceLocale, targetLocale, pricePerMillionCharactersUsd a costUsd pod data. V příkladu výše má costUsd hodnotu 0.000285000 při standardní sazbě. Když rozšířený překlad není dostupný, jeho odhad vrací 503 a kód service_unavailable. Odhady používají aktuálně nastavenou sazbu. Sazba úlohy se zafixuje při jejím vytvoření a podle ní se účtuje.
Načtení překladu
Nové odeslání vrací HTTP 202 a existující nebo znovu použitá úloha vrací HTTP 200. Uchovej data.id a použij společný postup práce s úlohami. Objekt úlohy obsahuje tato pole:
id,status,engine,sourceLocaleatargetLocale.sourceCharacters,costUsd,costIsEstimateapricePerMillionCharactersUsd.progressacreatedAt.modelVersion, neprůhledný řetězec identifikující verzi zpracování.duplicatev odpovědích využívajících existující úlohu.failureCodepro neúspěšné úlohy:translation_failed,translation_timeout,input_failedneboworker_lease_lost.
Neúspěšná úloha ukazuje costUsd s hodnotou nula.
Dokončená úloha obsahuje data.result. Tento objekt obsahuje sourceLocale (prázdné, pokud nebyl uveden zdrojový jazyk), targetLocale, pole text s přeloženým textem (texty segmentů spojené konci řádků) a segments. Pro text odeslaný přes toto API segments obsahuje jednu položku s polem text obsahujícím překlad a cílovým jazykem v poli language. Výsledky úloh čekajících na platbu se zadržují do vypořádání.
Použití api.multitel.net
Koncový bod pro kompatibilitu POST https://api.multitel.net/v3/translate přijímá stejná pole JSON a stejnou hlavičku Idempotency-Key. Pokud hlavička chybí, přijímá také řetězec idempotency_key v těle JSON. Jakékoli jiné dodatečné pole je odmítnuto s 400 a kódem unsupported_translation_option. Na tomto serveru může mít surové tělo až 256,000 bajtů a text nad 20,000 kódových bodů vrací 413 s kódem translation_too_large místo 400. Prázdné source_language se bere jako vynechané. Odpověď 429 zahrnuje Retry-After: 15. Tento server vrací také tyto chyby:
- 400
json_body_requiredpři chybějícím těle, neplatném JSON nebo skalární hodnotě JSON. Pošli objekt JSON. - 400
invalid_translation_optionskdyžtext,target_languageneboenginechybí, je prázdné nebo není řetězcem, nebo kdyžsource_languagenení řetězcem. - 400
invalid_translation_textu textu obsahujícího jen bílé znaky. - 400
invalid_translation_enginepři neznámém modulu. - 400
idempotency_key_requiredpři chybějícím, prázdném nebo příliš dlouhém klíči nebo pokudidempotency_keynení řetězcem. - 400
invalid_jobpři nesprávném formátu ID úlohy.
Odpovědi služby překladu na tomto serveru používají vnější strukturu {"status":{"code":HTTP_STATUS},"response":{...}}, kde status je objekt. ID úlohy načti z response.id a dokončený výsledek z response.result. Při chybách je kód v response.code bez zprávy nebo ID požadavku. Chyby ověřování (401) vrací obecná kontrola přihlášení serveru a mohou mít jiné tělo, proto před parsováním zkontroluj stav HTTP. Úlohy se sdílejí s hlavním serverem, ale pro pravidelné dotazování, vypořádání a využití používej stejný server, aby parser odpovídal vnější struktuře. Tento server přijímá stejná pole JSON také na /v3/translate/estimate bez klíče idempotence a odhad je pod response.