Izstrādātājiem

Runas pārvēršanas tekstā API

Transkribējiet pabeigtus audio failus ar rindā ievietotiem darbiem, bezmaksas tāmēm, idempotentu iesniegšanu un lietojuma uzskaiti abos API serveros.

Šajā lapā
  1. Galapunkti
  2. Sagatavojiet audio failu
  3. Iesniedziet transkripcijas darbu
  4. Idempotences atslēga
  5. Aprēķiniet tāmi, neveidojot darbu
  6. Lasiet transkripciju
  7. api.multitel.net izmantošana

Šis API transkribē pabeigtus audio failus kā rindā ievietotus darbus. Iesniedziet failu, saglabājiet atgriezto darba ID un izgūstiet darbu, līdz apstrāde ir pabeigta. Sūtiet visus pieprasījumus, izmantojot HTTPS un sava konta autentifikācijas datus: piemēros parādītos HTTP Basic datus vai API pilnvaru, kā aprakstīts sadaļā Autentifikācija. Glabājiet autentifikācijas datus savā serverī.

Galapunkti

Abi API serveri — https://api.multi.tel un saderības serveris https://api.multitel.net — koplieto vienus un tos pašus konta darbus, idempotences atslēgas, ierobežojumus un norēķinus. Augšupielādes kodējums un atbildes ietvars atšķiras, tāpēc konsekventi izmantojiet vienu serveri ar atbilstošu parsētāju.

DarbībaMetode un ceļš
Pakalpojuma informācijaGET /v3/speech_to_text
Iesniegt darbuPOST /v3/speech_to_text
Aprēķināt tāmi, neveidojot darbuPOST /v3/speech_to_text/estimate
Izgūt darbuGET /v3/speech_to_text/JOB_ID
Apmaksāt darbu, kas gaida maksājumuPOST /v3/speech_to_text/JOB_ID/settle
LietojumsGET /v3/speech_to_text/usage

Serverī api.multi.tel visi ceļi ir pieejami arī ar prefiksu /v1/speech-to-text šī prefiksa vietā: /v3/speech_to_text, piemēram, POST /v1/speech-to-text/estimate. Serverī api.multitel.net izmantojiet /v3/speech_to_text ceļus.

Pakalpojuma informācijas atbildē ir norādīti mode (batch), realtime (false), paidEnabled (vai pašlaik tiek pieņemti jauni maksas darbi), pricePerMinuteUsd (0.005), billingUnit (audio_second), maxAudioSeconds (7200) un maxUploadBytes (26214400), kā arī īss apraksts laukā description. Informācijas izgūšana ir bez maksas un darbojas arī tad, kad maksas darbu iesniegšana ir atspējota; tā atgriež 503 transcription_unavailable tikai tad, ja viss pakalpojums nav pieejams.

Sagatavojiet audio failu

Izmantojiet pabeigtu audio failu, kura lielums nepārsniedz 25 MiB (26,214,400 baitus) un ilgums nepārsniedz 2 stundas (7,200 sekundes). Iesniegšanas brīdī failam jābūt atpazīstamam kā MP3, WAV, Ogg, FLAC, MOV vai Matroska multividei ar audio plūsmu, un tā metadatos norādītajam ilgumam jābūt lielākam par nulli un ne lielākam par 7,200 sekundēm. Atpazīts fails, kas neiztur šīs pārbaudes, tiek noraidīts ar 422 unsupported_audio. Fails, ko nevar nolasīt nevienā no šiem formātiem, pašlaik var tikt noraidīts ar servera kļūdu (500); neiesniedziet šādu failu atkārtoti bez izmaiņām. Faila paplašinājums vien nenosaka saderību.

Šo pārbaužu izturēšana negarantē, ka audio varēs dekodēt. Audio tiek apstrādāts vienā vai divos kanālos. Fails ar vairāk nekā diviem audio kanāliem, fails, kura dekodētais audio ir ilgāks par 2 stundām, vai jebkurš cits fails, kura dekodēšana apstrādes laikā neizdodas, beidzas kā darbs ar statusu failed, parasti ar kodu decode_failed, un par to netiek iekasēta maksa. Pirms iesniegšanas pārveidojiet daudzkanālu audio par mono vai stereo.

Neobligātā valodas norāde ir runātās valodas divu vai trīs mazo burtu kods, piemēram, en. Ja nevēlaties sniegt norādi, izlaidiet lauku; api.multi.tel noraida tukšu virkni. Norāde vada apstrādi, taču netiek pārbaudīta atbalstīto valodu sarakstā, tāpēc izmantojiet derīgu runātās valodas kodu.

Iesniedziet transkripcijas darbu

Sūtiet JSON ar galveni Content-Type: application/json uz POST https://api.multi.tel/v3/speech_to_text. Pieprasījuma pamatdaļa var būt līdz 35 MiB, lai tajā ietilptu maksimālā izmēra fails pēc base64 kodēšanas; lielāka pamatdaļa tiek noraidīta ar 413.

LauksNozīme
audioBase64Obligāts. Viss fails standarta base64 kodējumā (A–Z, a–z, 0–9, +, /) ar = aizpildījumu, kad tas vajadzīgs. Nepievienojiet data-URL prefiksu, rindu pārtraukumus vai atstarpes un neizmantojiet URL drošo alfabētu. Vērtībai jādekodējas par failu no 1 baita līdz 25 MiB un atkārtoti jākodējas precīzi tādā pašā tekstā.
languageNeobligāta valodas norāde, kā aprakstīts iepriekš.

Jebkurš cits JSON rekvizīts, tostarp idempotency_key, tiek noraidīts ar 400 invalid_transcription_request. Sūtiet atslēgu galvenē.

Idempotences atslēga

Katram iesniegumam nepieciešama Idempotency-Key galvene ar 1 līdz 190 rakstzīmēm. Izmantojiet ASCII burtus, ciparus, -, _, . un : bez atstarpēm sākumā vai beigās: saderības serveris apgriež apkārtējās atstarpju rakstzīmes un mēra atslēgu baitos, tāpēc citu rakstzīmju skaits abos serveros var atšķirties. Trūkstoša atslēga vai atslēga ar 191 vai vairāk rakstzīmēm tiek noraidīta ar 400.

Atslēgas ir piesaistītas jūsu kontam un runas pārvēršanai tekstā abos serveros un ar visiem jūsu konta autentifikācijas datiem. Atkārtoti nosūtot to pašu atslēgu ar to pašu failu un valodu, tiek atgriezts esošais darbs ar HTTP 200 un duplicate: true neatkarīgi no darba statusa un pat tad, ja apstrāde kopš darba izveides ir atjaunināta, bez atkārtotas maksas. Atkārtoti izmantojot atslēgu ar citu failu vai valodu, tiek atgriezts 409 idempotency_conflict. Jauna atslēga izveido jaunu darbu pat identiskam failam, un par to tiek iekasēta atsevišķa maksa, ja apstrāde tiek veiksmīgi pabeigta.

API_USER="your-api-username"
API_PASSWORD="your-api-password"

node -e 'process.stdout.write(JSON.stringify({audioBase64:require("node:fs").readFileSync("completed-call.mp3").toString("base64"),language:"en"}))' > completed-call.json

curl --fail-with-body --silent --show-error --user "$API_USER:$API_PASSWORD" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: speech-call-001" \
  --data-binary @completed-call.json \
  -o speech-job.json \
  https://api.multi.tel/v3/speech_to_text

node -p 'JSON.parse(require("node:fs").readFileSync("speech-job.json","utf8")).data.id'

Jauns darbs atgriež HTTP 202 ar tālāk parādītajiem laukiem, bet atkārtota nosūtīšana atgriež HTTP 200 ar pilnu darba objektu, kas aprakstīts sadaļā Lasiet transkripciju. Nolasiet darba ID — UUID — no data.id. Jauna darba atbilde izskatās šādi (identifikators un vērtības ir piemēri):

{
  "status": "success",
  "data": {
    "id": "3f6c1b2e-8a4d-4e7f-9c21-5b0d7e4a9f13",
    "status": "queued",
    "mode": "batch",
    "realtime": false,
    "source": "api",
    "durationSeconds": 90.5,
    "billedSeconds": 91,
    "costUsd": "0.007583334",
    "pricePerMinuteUsd": "0.005"
  }
}

Kamēr darbs ir rindā vai tiek apstrādāts, durationSeconds, billedSeconds un costUsd ir aplēses no faila metadatiem. Galīgā maksa tiek aprēķināta pēc dekodētā ilguma.

Iesniegums var atgriezt arī 402 insufficient_balance, ja priekšapmaksas atlikums nevar segt šo darbu kopā ar citiem jūsu nepabeigtajiem darbiem, 429 transcription_queue_full, ja jūsu kontā vai pakalpojumā ir pārāk daudz nepabeigtu darbu, 429 audio_validation_busy, ja failu pārbaudes jauda ir pilnībā noslogota, un 503 paid_transcription_not_enabled, kamēr maksas transkripcija ir atspējota. Pēc atbildēm 429 un 503 mēģiniet vēlāk vēlreiz ar to pašu atslēgu.

Aprēķiniet tāmi, neveidojot darbu

Sūtiet to pašu JSON pamatdaļu uz POST https://api.multi.tel/v3/speech_to_text/estimate. Idempotences atslēga nav nepieciešama. Tāme pārbauda un izmēra failu, bet to netranskribē, neizveido darbu, nerezervē līdzekļus, nepārbauda atlikumu un neiekasē maksu no jūsu konta. Norāde language tiek pieņemta, bet neietekmē tāmi.

Veiksmīga tāme atgriež HTTP 200 ar laukiem estimate: true, charged: false, mode, realtime, durationSeconds, billedSeconds, pricePerMinuteUsd un costUsd objektā data. Tā izmanto faila metadatos norādīto ilgumu, bet par pabeigtu darbu maksa tiek aprēķināta pēc dekodētā ilguma, kas var atšķirties. Tāmēm tiek piemērotas tādas pašas failu pārbaudes kā iesniegumiem. Tās ir pieejamas tikai tad, kad maksas transkripcija ir iespējota (pretējā gadījumā 503 paid_transcription_not_enabled). Tās var atgriezt 429 audio_validation_busy, ja failu pārbaudes jauda ir pilnībā noslogota; pēc īsas pauzes mēģiniet vēlreiz.

Lasiet transkripciju

Periodiski izgūstiet GET /v3/speech_to_text/JOB_ID, kā aprakstīts darbu plūsmas ceļvedī. Darba objekts satur šādus laukus:

LauksNozīme
idDarba UUID.
statusqueued, running, completed, failed vai awaiting_payment.
progressProcentuālā vērtība no 0 līdz 99 apstrādes laikā, ja pieejama; 100 pēc pabeigšanas; citos gadījumos null.
durationSeconds, billedSecondsAudio ilgums un apmaksājamās pilnās sekundes. Kamēr darbs ir rindā vai tiek apstrādāts, tās ir metadatu aplēses; pēc darba pabeigšanas vai kamēr tas gaida maksājumu tiek izmantots dekodētais ilgums.
costUsd, costIsEstimateMaksa ASV dolāros kā decimālskaitļa virkne ar deviņām zīmēm aiz komata. costIsEstimate ir true, kamēr darbs ir rindā vai tiek apstrādāts. Par neveiksmīgu darbu maksa netiek iekasēta, lai gan tā costUsd joprojām rāda aplēsi.
pricePerMinuteUsd0.005 API darbiem un 0.000 bezmaksas Hosted PBX ierakstu darbiem.
failureCodeNeveiksmīgam darbam: decode_failed (audio neizdevās dekodēt, piemēram, jo tam ir vairāk nekā divi kanāli vai pēc dekodēšanas tas ir ilgāks par 2 stundām), inference_timeout (apstrāde aizņēma pārāk ilgu laiku), service_error vai worker_lease_lost (apstrāde tika pārtraukta). Ir definēti arī kodi unsupported_audio un quality_check_failed. Darbam, kas gaida maksājumu, ir norādīts insufficient_balance, kas var saglabāties pēc darba apmaksas.
source, modelVersion, createdAtsource ir api API iesniegumiem vai hpbx jūsu konta Hosted PBX ieraksta darbam. modelVersion ir necaurspīdīga apstrādes versijas virkne. createdAt ir iesniegšanas laiks.
duplicatetrue atbildēs, kas atgriež esošu darbu.
resultIr pieejams tikai tad, ja status ir completed.
Rezultāta lauksNozīme
textPilna transkripcija: visu segmentu teksti segmentu secībā, savienoti ar rindu pārtraukumiem.
segmentsSegmentu masīvs, kas sakārtots pēc sākuma laika. Katrs segments aptver līdz aptuveni 29 sekundēm garu audio posmu. Tā start un end (sekundēs no audio sākuma) apzīmē šo posmu, nevis atsevišķus vārdus vai teikumus, un secīgi posmi var pārklāties līdz 1 sekundei. Katram segmentam ir arī text un language (valodas kods, kas var būt tukšs), kā arī channel divkanālu rezultātos.
channelCount1 vai 2. Ir pieejams pašreizējos rezultātos; vecākos rezultātos var nebūt.
audioDurationMsDekodētais ilgums milisekundēs. Norēķinos tas tiek noapaļots uz augšu līdz pilnām sekundēm.
qualityFlagsTukšs vai review_recommended kopā ar kodu repetition_detected (frāze vienā posmā atkārtojas neparasti bieži), no_speech (runa netika transkribēta) vai abi.
pipelineVersionVar būt pieejams. Necaurspīdīgs apstrādes identifikators.

Transkripcijas un to laika zīmogi, valodu un kanālu apzīmējumi tiek veidoti automātiski, un to precizitāte netiek garantēta. Uztveriet katru kvalitātes karodziņu kā iemeslu pārskatīt rezultātu un salīdziniet svarīgus vārdus, skaitļus un saistības ar sākotnējo audio. Ilgstoši klusuma un ļoti klusi posmi tiek izlaisti un neveido segmentus. Rezultāti neidentificē atsevišķus runātājus. Ja rezultātā channelCount ir 2, katram segmentam channel ir A (pirmais jeb kreisais kanāls) vai B (otrais jeb labais kanāls). Tas nošķir runātājus tikai tad, ja katrs runātājs ir ierakstīts atsevišķā kanālā. Divkanālu audio tiek apmaksāts vienreiz pēc tā kopējā ilguma, nevis par katru kanālu. Mono rezultātos nav kanālu apzīmējumu.

api.multitel.net izmantošana

Saderības galapunkts POST https://api.multitel.net/v3/speech_to_text pieņem multipart/form-data ar audio faila daļu un neobligātu language lauku JSON lauka audioBase64 vietā. Tukša language vērtība tiek uzskatīta par norādes neesamību. Sūtiet to pašu Idempotency-Key galveni. Ja galvenes nav, šis serveris pieņem arī idempotency_key veidlapas lauku. Lauki ar nosaukumiem source, free, billing_source, realtime vai stream tiek noraidīti ar 400 unsupported_transcription_option; citi veidlapas lauki tiek ignorēti. Šis serveris atgriež arī šādas kļūdas:

  • 400 idempotency_key_required, ja atslēgas nav vai tā ir pārāk gara.
  • 400 audio_upload_required, ja augšupielādes nav vai tā nav saņemta pilnībā.
  • 400 invalid_language nederīgai valodai.
  • 413 invalid_audio_size tukšam vai pārāk lielam failam.
  • 400 invalid_job nepareizi formatētam darba ID.

Šī servera runas pārvēršanas tekstā pakalpojuma atbildēs tiek izmantots ietvars {"status":{"code":HTTP_STATUS},"response":{...}}. Ņemiet vērā, ka status ir objekts, nevis virkne. Veiksmes gadījumā response satur tādu pašu objektu kā data primārajā serverī, tāpēc darba ID ir response.id. Kļūdas gadījumā response.code satur kļūdas kodu; ziņojums vai pieprasījuma ID netiek iekļauts. Autentifikācijas kļūdas (401) atgriež servera vispārējā pierakstīšanās pārbaude, un to pamatdaļa var atšķirties, tāpēc pirms parsēšanas pārbaudiet HTTP statusu. Nemainiet augšupielādes kodējumu vai atbildes parsētāju starp serveriem.

Lai šajā serverī iegūtu tāmi, ar POST nosūtiet tos pašus multipart laukus uz /v3/speech_to_text/estimate. Idempotences atslēga nav nepieciešama, un tāme atrodas objektā response.

API_USER="your-api-username"
API_PASSWORD="your-api-password"

curl --fail-with-body --silent --show-error --user "$API_USER:$API_PASSWORD" \
  -H "Idempotency-Key: speech-call-001" \
  -F "audio=@completed-call.mp3" -F "language=en" \
  -o speech-job.json \
  https://api.multitel.net/v3/speech_to_text

node -p 'JSON.parse(require("node:fs").readFileSync("speech-job.json","utf8")).response.id'