- Insikter
Speech to Text API-integration: Guide för utvecklare
- Skriven av
- Jack Limebear
LyssnaLyssna på den här artikeln
En Speech to Text API låter utvecklare lägga till taligenkänning och transkribering direkt i sina appar. Men innan du kopplar in STT API behöver du fatta några arkitekturbeslut.
Vilket transkriberingsläge ska du använda? Hur hanterar du långa ljudfiler? Hur ser du till att produktnamn eller egennamn stavas rätt? Lite planering här gör stor skillnad för att skapa en skalbar Speech to Text API-integration i dina utvecklarappar.
Den här guiden täcker allt du behöver för en ElevenLabs Speech to Text API-integration, med tydliga kodexempel du kan klistra in direkt i produktion. Ha gärna ElevenLabs Snabbstart för Speech to Text och API-guide öppna i ett annat fönster som referens.
Sammanfattning
- Det finns två lägen för ElevenLabs Speech to Text: batch (för förinspelat ljud) och realtime (för live-ljud via WebSocket).
- Scribe v2 hanterar batch-transkribering på över 90 språk med talaridentifiering, nyckelord, entity detection, tidsstämplar på ordnivå och stöd för flera kanaler.
- Scribe v2 Realtime hanterar live-streaming med cirka 150 ms fördröjning och levererar delvisa transkript medan du pratar samt färdiga transkript när ett talavsnitt är klart.
- För filer över 8 minuter delar Scribe v2 automatiskt upp och transkriberar parallellt. För långa jobb, använd webhooks istället för att vänta på ett synkront svar.
- Nyckelord styr modellen mot specifika termer med hjälp av kontext – mer tillförlitligt än listor för produktnamn, tekniska termer eller ovanliga egennamn.
Speech to Text API-integration: Batch vs. realtime
Varje ElevenLabs STT API-integration börjar med ett arkitekturbeslut: batch eller realtime. Båda ger dig en kraftfull STT-modell, men valet påverkar allt från vilka funktioner du kan använda till fördröjningen från start till slut.
Så här skiljer sig de två lägena:
- Batch (Scribe v2): Tar en hel ljud- eller videofil, transkriberar den och returnerar hela transkriptet i ett enda svar. Stöder flest funktioner: upp till 1 000 nyckelord, upp till 32 talare, entity detection, multikanal och webhooks för asynkron leverans. Filer upp till 3 GB och 10 timmar stöds i standardläge.
- Realtid (Scribe v2 Realtime): Tar emot en live-ljudström via WebSocket och returnerar delvisa och färdiga transkript medan ljudet kommer in, med cirka 150 ms fördröjning. Stöder upp till 50 nyckelord och tidsstämplar på ordnivå. Passar för röstassistenter, live-textning eller appar där användaren pratar och väntar på svar.
Vi går igenom skillnaderna mer i detalj.
En enkel tumregel: använd batch när ljudet är klart innan transkriberingen startar och realtime när du transkriberar ljud i realtid.
När ska du välja Scribe v2 vs. Scribe v2 Realtime
Batch och realtime passar olika behov, så om du väljer fel från början kan det leda till merjobb senare.
Här ser du hur du matchar modell till användningsområde:
- Scribe v2 är rätt val när ljudet är klart innan bearbetningen börjar, till exempel mötesinspelningar, poddar, mediefiler eller allt du kör offline. Stöder hela funktionsuppsättningen inklusive diarization, entity detection och upp till 1 000 nyckelord.
- Scribe v2 Realtime är byggd för live-ljud. Den tar emot en WebSocket-ström och returnerar transkript medan ljudet kommer in, vilket passar för röstassistenter eller när appen behöver svara innan användaren pratat klart.
En sak att tänka på är att noggrannheten varierar mellan språk. Det är värt att kolla transkriberingsfelprocenten innan du bestämmer språkblandning. Scribe v2 publicerar Word Error Rate (WER) för alla 90+ språk.
Utmärkt noggrannhet (≤5% WER) gäller för stora europeiska språk, japanska, indonesiska, vietnamesiska med flera. Hög noggrannhet (5-10% WER) gäller hindi, bengali, mandarin, koreanska, georgiska med flera. Se kategorierna i dokumentationen om språkstöd för fullständig översikt.
Så sätter du upp ElevenLabs Speech to Text API
Det krävs bara två enkla steg för att komma igång. Först installerar du SDK:n. Sedan sparar du dina inloggningsuppgifter på ett säkert sätt.
Så här gör du båda innan du skickar din första transkriberingsförfrågan.
Installera SDK:n och spara din API-nyckel som en hanterad hemlighet med en .env-fil eller din plattforms secrets manager. Hårdkoda aldrig din API-nyckel i appen.
Python
TypeScript
Skapa en .env-fil:
Initiera klienten:
Python
TypeScript
Din första batch-transkribering med ElevenLabs STT API
Nu när du har initierat klienten är du redo att skicka din första fil.
Batch-API:t tar en fil, transkriberar den och returnerar hela resultatet direkt. Exemplet nedan transkriberar en fjärr-ljudfil med talaridentifiering och ljudhändelser aktiverade.
Python
Kör så här:
Svaret innehåller hela transkriptet, ordposter med tidsstämplar och talar-ID samt upptäckta ljudhändelser.
Varje ordpost har ett type-fält med ett av tre värden:
- ord: För transkriberade ord i ljudet.
- mellanrum: Mellanrum mellan ord i språk som använder mellanslag. Gäller inte för vissa språk, som japanska, kantonesiska och burmesiska.
- audio_event: En tagg för icke-tal-ljud, som skratt eller hosta.
Så här ser svarstrukturen ut:
Fältet language_probability visar hur säker modellen är på språkigenkänningen, på en skala från 0,00 till 1,00.
STT API Realtime-integration
Realtids-STT API-integration fungerar lite annorlunda. Istället för en förfrågan och ett svar öppnar du en WebSocket-anslutning och läser transkript medan de kommer in.
Realtime-API:t använder WebSocket för att ta emot en live-ljudström och returnera transkript medan ljudet kommer in. Det levererar två typer av transkript:
- Delvisa transkript: Mellanresultat som uppdateras medan modellen bearbetar inkommande ljud. Dessa kan ändras.
- Färdiga transkript: Slutgiltiga resultat för ett avslutat talavsnitt. Dessa ändras inte. De kan också innehålla tidsstämplar på ordnivå om du sätter "include timestamps" till true.
Klientimplementeringen använder en engångstoken istället för din API-nyckel direkt. Det är en tillfällig inloggning som går ut efter 15 minuter och genereras på serversidan så att din API-nyckel aldrig exponeras i webbläsaren.
Steg 1: Skapa en engångstoken (serversidan)
Steg 2: Anslut och transkribera (klientsidan, React)
Hooken useScribe hanterar WebSocket-anslutningen, mikrofonåtkomst och transkriptstatus. partialTranscript innehåller aktuell text; committedTranscripts är en växande lista med färdiga segment.
För streaming på serversidan (transkribera ljud från URL eller filström istället för mikrofon), se guiden för server-side streaming.
Parallellisering och skalning av långa filer
Långa filer kräver en annan skalningsmodell än de flesta API:er. Det är bra att förstå innan du bygger kring det.
Parallellisering för batch-transkribering fungerar annorlunda än i de flesta API:er. Istället för att begränsa antalet samtidiga förfrågningar hanterar Scribe v2 långa filer genom att automatiskt dela upp och köra parallellt.
Filer över 8 minuter delas upp i segment och transkriberas samtidigt. Antalet samtidiga segment beräknas så här:
Konkret:
- En 15-minutersfil använder parallellisering på 2
- En 120-minutersfil använder parallellisering på 4 (max)
Filer upp till 10 timmar och 3 GB stöds i standardläge. Obs: multikanal har lägre tidsgräns – se avsnittet om multikanaltranskribering nedan.
När det gäller format stöder STT API de vanligaste ljud- och videoformaten:
- Ljud: AAC, AIFF, OGG, MP3, OPUS, WAV, FLAC, M4A, WebM.
- Video: MP4, AVI, MKV, MOV, WMV, FLV, WebM, MPEG, 3GPP.
Du kan skicka in en videofil direkt och få ett transkript av ljudspåret utan förbehandling.
Nyckelord (keyterm prompting)
Generella modeller missar ofta varumärken och tekniska termer. Nyckelord löser det.
Nyckelord styr modellen mot specifika ord eller fraser vid transkribering. Det är rätt verktyg när ditt ljud innehåller produktnamn, tekniska termer eller egennamn med ovanlig stavning.
En fördel med nyckelord är att de använder kontext, vilket gör dem mer tillförlitliga än en enkel lista. Om du anger "ElevenLabs" som nyckelord transkriberar modellen det rätt när talaren säger företagsnamnet. Utan detta kan modellen ändå skriva "Jag har jobbat på eleven labs i ett år" fel.
Utan nyckelord:
Med keyterms=["ElevenLabs"]:
Batch stöder upp till 1 000 nyckelord (50 tecken vardera). Realtime stöder upp till 50 nyckelord (20 tecken vardera).
Batch-transkribering med nyckelord
Python
Realtime-streaming med nyckelord
Skicka med nyckelord när du ansluter till realtime-WebSocket:
Python
Eller skicka dem som query-parametrar direkt i WebSocket-URL:en:
Nyckelord innebär en extra kostnad. Se API-prissidan för detaljer.
Avancerade funktioner
Stegen ovan tar dig genom grunden i STT API, men det finns flera funktioner som förbättrar slutresultatet. Här är några avancerade funktioner du kan använda i din Speech to Text API:
- Talaridentifiering för att se vem som pratar
- No-verbatim-läge för renare transkript
- Entity detection för att flagga känslig data
- Multikanaltranskribering för separata ljudkanaler
Vi går igenom dessa mer i detalj.
Talaridentifiering (diarization)
Sätt diarize=True i din batch-förfrågan för att markera vem som pratar. Scribe v2 stöder upp till 32 talare. Varje ord i svaret har ett speaker_id-fält (t.ex. speaker_0, speaker_1) som du kan använda för att dela upp transkriptet per talare.
Diarization är användbart för mötestranskribering, intervjuer eller alla inspelningar med flera talare där det är viktigt att veta vem som säger vad.
No-verbatim-läge
När no_verbatim=True tar modellen bort utfyllnadsord, felsägningar och tvekanden från transkriptet. "Eh, M-mja vi borde, öh, ta alternativ A" blir "Vi borde ta alternativ A."
Det ger renare resultat för undertexter, sammanfattningar eller när läsbarhet är viktigare än att få med varje ljud. Finns för både batch (scribe_v2) och realtime (scribe_v2_realtime).
Entity detection och maskering
Scribe v2 kan upptäcka och märka entiteter i transkriptet, med exakta tidsstämplar för varje upptäckt. Kategorier inkluderar PII (namn, kortnummer, personnummer), PHI (medicinska tillstånd) och PCI (betalningsinformation) med flera. För hela listan, se dokumentationen om entity detection.
Detta är särskilt användbart för regelefterlevnad, så att du kan identifiera och automatiskt maskera känslig information innan du sparar eller visar transkriptet.
Entity detection innebär en extra kostnad på $0.070 (per timme) utöver grundpriset. Se API-prissidan för detaljer.
Multikanaltranskribering
När use_multi_channel=True transkriberas varje ljudkanal separat och får ett talar-ID baserat på kanalnummer. Upp till 5 kanaler stöds. Maximal filtid i multikanal är 1 timme.
Multikanal är användbart när du har separata ljudspår per talare – till exempel en telefoninspelning där varje deltagare har sin egen kanal. Det ger mer exakt talaridentifiering än diarization på en mixad fil.
Asynkron leverans med webhooks
Att poll:a efter resultat funkar i liten skala men skalar dåligt för långa filer eller hög belastning. Webhooks löser det genom att skicka resultatet till dig istället.
För långa filer eller högvolymstranskribering är det inte alltid praktiskt att vänta på ett synkront svar. Med webhooks kan du skicka en transkriberingsförfrågan och få resultatet till din endpoint när det är klart, utan att poll:a.
Så sätter du upp en webhook
I ElevenLabs dashboard, gå till Utvecklare > Webhooks, klicka på Skapa webhook och konfigurera:
- Namn: Skriv ett beskrivande och minnesvärt namn för din webhook.
- Callback-URL: Lägg till en publikt tillgänglig HTTPS-endpoint till webbhooken.
- Webhook-autentisering: Välj HMAC eller OAuth (valfritt men starkt rekommenderat för säkerhet).
- Händelser: Välj Transcription completed i listan.
Skicka in en transkribering med webhook-leverans
Python
När webhook=True returnerar förfrågan direkt utan transkriptet. Det färdiga transkriptet skickas till din endpoint som en POST när bearbetningen är klar.
Så implementerar du din webhook-endpoint
Struktur på webhook-payload
Din endpoint tar emot en POST med följande struktur:
Bästa praxis för webhook-säkerhet
När du bygger med webhooks finns det några säkerhetsåtgärder du kan ta för att säkerställa att händelser levereras och hanteras korrekt.
- Verifiera webhook-signaturer: Verifiera alltid webhook-signaturer med elevenlabs.webhooks.constructEvent() för att bekräfta att de kommer från ElevenLabs.
- Använd HTTPS-endpoints: Webhook-URL:er måste använda HTTPS för att skydda data under överföring.
- Returnera rätt HTTP-statuskod: Returnera 200-299 för lyckad hantering, 400-499 för klientfel (dessa försöks inte igen) och 500-599 för serverfel (dessa försöks igen).
- Använd tunneling-verktyg för lokal utveckling: För lokal utveckling, använd ett tunneling-verktyg som ngrok för att exponera din lokala server med en publik HTTPS-URL.
Med dessa strategier kan du använda webhooks tryggt.
Viktiga saker att ta med för din Speech to Text API-integration
En produktionsklar Speech to Text API-integration handlar om några viktiga val.
Får du till dessa så löser sig resten:
- Välj läge efter användning: Använd batch (scribe_v2) när ljudet är klart innan bearbetningen börjar. Använd realtime (scribe_v2_realtime) när du behöver transkribera medan ljudet skapas, till exempel för agenter, röstassistenter eller live-textning.
- Använd nyckelord för bättre träffsäkerhet på specifika ord: Skicka in produktnamn, tekniska termer eller ovanliga egennamn som nyckelord. Modellen använder kontext för att tolka dem rätt utan att överanvända dem.
- Låt API:t hantera långa filer: Filer över 8 minuter delas automatiskt upp och körs parallellt, så du behöver inte dela upp dem själv. Filer upp till 10 timmar och 3 GB stöds i standardläge.
- Använd webhooks för asynkrona flöden: För långa jobb eller hög belastning, webhook=True låter dig skicka och gå vidare. Verifiera alltid signaturen på inkommande webhook-payload.
- Aktivera no-verbatim-läge för renare resultat: Om du gör undertexter, sammanfattningar eller NLP-bearbetning, tar no_verbatim=True bort utfyllnadsord och tvekanden automatiskt.
- Använd multikanal för separata ljudspår: Om din inspelning har en kanal per talare (callcenter-inspelningar, intervjuer) ger multikanaltranskribering mer exakt talaridentifiering än diarization på en mixad fil. Observera tidsgränsen på 1 timme i detta läge.
Vill du veta mer? Utforska hela API-referensen som startpunkt.
Bygg din Speech to Text-integration med ElevenAPI
Efter den här guiden har du allt du behöver för en produktionsklar Speech to Text API-integration. Med batch och realtime-transkribering, samt avancerade funktioner som nyckelord och asynkron leverans, är du redo att lansera din app med STT.
Kom igång genom att läsa mer om Speech to Text API eller skapa ett konto för att göra ditt första anrop med ElevenAPI redan idag.
