Bliv en del af mit community / gratis nyhedsbrev — tilmeld dig her
AI-stemmeagenter kræver mere end et telefonnummer og en Realtime-model
At koble en stemmemodel til et rigtigt telefonnummer er ikke længere primært en AI-demoøvelse. OpenAI dokumenterer nu live-lydsessioner med lav latenstid, indgående SIP-opkald og server-side sideband-kontrol i sin Realtime-stack. Twilio dokumenterer WebSocket-broen, velkomsthilsner, sprogindstillinger, afbrydelser og session callbacks via Conversation Relay. Når denne stack først kører på et offentligt tilgængeligt nummer, ændrer det centrale spørgsmål sig. Det handler ikke kun om, hvorvidt modellen kan tale. Det handler om, hvorvidt opkaldet kan besvares, dirigeres, viderestilles og registreres, uden at den, der ringer, tabes undervejs.
Hvad har ændret sig teknisk?
OpenAIs guides til Realtime og voice agents skelner på en nyttig måde mellem live speech-to-speech-sessioner og kædede voice pipelines. Hvis samtalen skal opleves som umiddelbar med afbrydelser, naturlig turtagning og brug af tools i realtime, er speech-to-speech den bedste løsning. Hvis virksomheden har brug for strammere kontrol over transskription, tekstbaseret ræsonnering og taleoutput, er en kædet pipeline ofte det sikrere valg. Det er vigtigt, fordi de fleste virksomheder ikke har brug for en universel talende assistent på telefonlinjen. De har brug for et system, der kan byde opkald velkommen, forstå hensigten, stille nogle få kvalificerende spørgsmål og route opkaldet korrekt.
Den vigtigste ændring er, at OpenAI nu dokumenterer telefonens indgang til systemet direkte. SIP-guiden viser, hvordan man forbinder et rigtigt nummer via en SIP-udbyder som Twilio, peger forbindelsen mod OpenAIs SIP-endpoint, modtager en realtime.call.incoming-webhook og bruger det returnerede call_id til at acceptere, afvise, overvåge, viderestille eller afslutte opkaldet. Det flytter opsætningen ud af browserdemoernes verden. Der findes nu en officiel løsning til rigtige indgående opkald samt de kontrolpunkter, der er nødvendige for at beslutte, hvad der skal ske, før modellen overhovedet svarer.
Twilios rolle i denne stack er lige så vigtig. Conversation Relay under <Connect> sender et live-opkald ind i et WebSocket-baseret applikationsflow, håndterer speech-to-text og text-to-speech og sender struktureret taleinput til applikationen, mens applikationens tekstsvar omdannes til tale. Twilios dokumentation viser også, at action-callbacken udløses, når Conversation Relay-sessionen slutter, og kan returnere sessionsstatus og andre oplysninger om opkaldet. I praksis betyder det, at opkaldet kan observeres. Det kan logges og undersøges, og dets slutstatus kan bruges i efterfølgende workflows.
Hvorfor bliver det et projekt inden for telefonidrift?
I det øjeblik en AI-agent placeres bag et offentligt virksomhedsnummer, bliver opkalderens oplevelse et driftsmæssigt ansvar. Hver gren i opkaldsflowet kræver en afklaring. Hvem kommer igennem? Hvilken velkomsthilsen afspilles først? Kan den, der ringer, afbryde? Hvor længe accepteres stilhed? Hvad sker der, når modellen ikke kan løse opgaven? Hvornår skal opkaldet gå videre til et menneske? OpenAIs SIP-dokumentation beskriver flows til at acceptere, afvise og viderestille opkald. Twilio giver kontrol over velkomsthilsner, afbrydelser, timeouts, DTMF og session callbacks. Det er ikke promptjusteringer. Det er regler for håndtering af opkald.
Twilios <ConversationRelay>-attributter gør det konkret. Man kan udtrykkeligt indstille welcomeGreetingInterruptible, interruptible, interruptSensitivity, speechTimeout, dtmfDetection og reportInputDuringAgentSpeech. Twilio bemærker endda, at standardværdien for reportInputDuringAgentSpeech er blevet ændret. Det er en god påmindelse om, at opkaldsadfærd i produktion bør specificeres og ikke overlades til standardindstillinger. Hvis man vil registrere tale fra opkalderen, mens agenten taler, uden at afbryde afspilningen, er det et bevidst valg. Hvis tastetryk skal sendes til applikationen, er det et andet. Begge valg har direkte forretningsmæssige konsekvenser.
Flersproget funktionalitet er et andet område, hvor teams ofte undervurderer arbejdsbyrden. Twilio gør det muligt at angive ét fælles language til speech-to-text og text-to-speech, tilsidesætte dem separat med transcriptionLanguage og ttsLanguage samt definere udbyder- og stemmeindstillinger for hvert sprog med indlejrede <Language>-elementer. Dokumentationen advarer også om, at automatisk sprogregistrering i multi-tilstand kræver en bestemt kombination af udbydere: Deepgram til transskription og ElevenLabs til text-to-speech. Bruges den forkerte kombination, ender sessionen med en fejl. Det er netop den slags detalje, der kan få en flersproget demo til at se god ud under test, men fejle alvorligt på et rigtigt telefonnummer.
Behold tools og regler på serveren
Et af de mest nyttige råd i OpenAIs dokumentation har ikke meget med stemmekvalitet at gøre. Det handler om kontrol. Guiden til Realtime-serverkontrol anbefaler, at brugen af tools og forretningslogik placeres på applikationsserveren via en sideband-forbindelse, så livesessionen har én forbindelse til opkalderens del af opkaldet og en anden til serveren. Forbindelsen på serversiden kan overvåge sessionen, opdatere instruktioner dynamisk og besvare tool calls. Ved SIP-opkald opretter applikationsserveren forbindelse til den samme session via WebSocket ved hjælp af det call_id, der kommer fra webhooken for det indgående opkald, og holder forbindelsen i live under hele opkaldet.
Det er denne arkitektur, der gør en telefonagent anvendelig i en rigtig virksomhed. Lead-routing, kalendertjek, CRM-opslag, forgreningsregler og eskaleringslogik hører hjemme i kode på serversiden – ikke gemt i en skrøbelig prompt og ikke eksponeret på en klientvendt grænseflade. SIP-flowet giver også mulighed for at beslutte, om opkaldet overhovedet skal accepteres, om ikke-understøttede tilfælde skal afvises med en SIP-statuskode, eller om et aktivt opkald skal viderestilles til et andet telefonnummer eller en SIP-URI. En nyttig voice agent bør ikke forsøge at improvisere sig gennem alle edge cases. Den skal vide, hvornår opkaldet skal gives videre.
Twilios session callbacks understøtter det samme designvalg. Eksemplerne på action callbacks omfatter normale afslutninger, fejl og sessioner, der afsluttes af applikationen, herunder data om viderestilling. Driftsmæssigt giver det et sted at registrere, hvorfor AI-sessionen sluttede, om der blev anmodet om eskalering til et menneske, og om transportforbindelsen svigtede, før samtalen var færdig. Hvis WebSocket-forbindelsen falder ud, er det ikke et problem med modellens kvalitet. Det er en driftsfejl, som kræver fallback-adfærd, alarmering og retry-logik.
Omkostningsstyring er en del af opkaldsdesignet
OpenAIs guide til Realtime-omkostninger er en nyttig korrektion af forestillingen om, at udgifterne til tale kan håndteres senere. Realtime-stemmesessioner akkumulerer tekst- og lydtokens på tværs af samtalens ture, og transskription af input kan også faktureres separat, når funktionen er aktiveret. Dokumentationen viser, hvor forbrugsdata kan aflæses i response.done-events og i events for afsluttet transskription af lydinput. Overvågning af omkostninger behøver derfor ikke være en eftertanke. Den kan være en del af implementeringen fra begyndelsen.
Den samme guide forklarer også, hvorfor sessionsdesignet påvirker omkostningerne. Prompt caching kan reducere prisen på inputtokens i sessioner med flere samtaleture, men ændringer af instruktioner eller tool-definitioner midt i en session kan mindske cacheeffektiviteten. Truncation har også betydning. Når samtalen vokser ud over inputvinduet, fjernes ældre elementer, og gentagen truncation kan forringe cachingen yderligere. OpenAI dokumenterer praktiske håndtag såsom et mindre tokenvindue efter instruktionerne og en retention ratio for truncation på under 1.0, så der bliver mere luft mellem hver truncation. Forretningsmæssigt er den billigste telefonagent som regel den, der har et snævert formål, begrænset hukommelse og en hurtig vej til menneskelig overtagelse, så snart opkaldet ikke længere kan automatiseres.
Sådan ser en fornuftig implementering ud
- Definér først formålet med opkaldet: leadregistrering, triage, håndtering af opkald uden for åbningstid, kvalificering af aftaler eller simpel routing.
- Fastlæg regler for adgang og eskalering, før I skriver prompts: Hvilke opkald accepteres, hvilke afvises, hvilke viderestilles, og hvilke oplysninger skal indsamles inden overdragelsen?
- Behold tools, routinglogik og interne forretningsregler i kontrolkanalen på serversiden, så telefonoplevelsen kan ændres, uden at privat logik eksponeres i systemets yderste lag.
- Konfigurér Twilios sprog-, afbrydelses-, timeout- og rapporteringsadfærd eksplicit i stedet for at stole på platformens standardindstillinger.
- Følg sessionsstatus, årsager til viderestilling, transskriptionskvalitet, tokenforbrug og fejltyper fra første dag, så nummeret kan drives og ikke blot demonstreres.
Det er den slags arbejde, hvor Greg er nyttig som freelanceoperatør. Opgaven handler ikke kun om at vælge en model eller få stemmen til at lyde professionel. Den handler om at definere opkaldsflowet, forbinde Twilio og OpenAI via SIP, webhooks og WebSockets, holde følsom forretningslogik på serveren, fastlægge regler for viderestilling, finjustere flersproget adfærd og bygge kontrol med transskription, retries og omkostninger omkring systemet. Succeskriteriet er enkelt: kvalificér eller route opkald uden at skade leadregistreringen. Når det er målet, er en AI-telefonagent på et rigtigt nummer tydeligvis et projekt inden for telefonidrift.
Brug for hjælp til denne type opgave?
Hvis du har brug for at få opgaven afgrænset og systemet forbundet uden at gøre leadregistrering til et teleeksperiment, kan Greg designe opkaldsflowet, serverkontrollen og reglerne for viderestilling. Kontakt Greg.